mirror of
https://github.com/StarWishsama/Slimefun4.git
synced 2024-09-20 03:35:51 +00:00
Did the requested changes + a fix.
This commit is contained in:
parent
27ba744fe5
commit
5c7accbbe8
@ -1,13 +1,11 @@
|
|||||||
package io.github.thebusybiscuit.slimefun4.implementation.items.magical;
|
package io.github.thebusybiscuit.slimefun4.implementation.items.magical;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.EnumMap;
|
import java.util.EnumMap;
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.Set;
|
|
||||||
import java.util.concurrent.ThreadLocalRandom;
|
import java.util.concurrent.ThreadLocalRandom;
|
||||||
|
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
@ -21,7 +19,6 @@ import org.bukkit.entity.Player;
|
|||||||
import org.bukkit.event.player.PlayerDropItemEvent;
|
import org.bukkit.event.player.PlayerDropItemEvent;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems;
|
|
||||||
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.Category;
|
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
|
||||||
@ -44,17 +41,18 @@ import me.mrCookieSlime.Slimefun.api.SlimefunItemStack;
|
|||||||
public class EnchantmentRune extends SimpleSlimefunItem<ItemDropHandler> {
|
public class EnchantmentRune extends SimpleSlimefunItem<ItemDropHandler> {
|
||||||
|
|
||||||
private static final double RANGE = 1.5;
|
private static final double RANGE = 1.5;
|
||||||
private final Map<Material, Enchantment[]> applicableEnchantments = new EnumMap<>(Material.class);
|
private final Map<Material, List<Enchantment>> applicableEnchantments = new EnumMap<>(Material.class);
|
||||||
|
|
||||||
public EnchantmentRune(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) {
|
public EnchantmentRune(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) {
|
||||||
super(category, item, recipeType, recipe);
|
super(category, item, recipeType, recipe);
|
||||||
|
|
||||||
for (Material mat : Material.values()) {
|
for (Material mat : Material.values()) {
|
||||||
Set<Enchantment> enchSet = new HashSet<>();
|
List<Enchantment> enchantments = new ArrayList<>();
|
||||||
for (Enchantment ench : Enchantment.values()) {
|
for (Enchantment enchantment : Enchantment.values()) {
|
||||||
if (ench.canEnchantItem(new ItemStack(mat))) enchSet.add(ench);
|
if (enchantment == Enchantment.BINDING_CURSE || enchantment == Enchantment.VANISHING_CURSE) continue;
|
||||||
|
if (enchantment.canEnchantItem(new ItemStack(mat))) enchantments.add(enchantment);
|
||||||
}
|
}
|
||||||
applicableEnchantments.put(mat, enchSet.toArray(new Enchantment[0]));
|
applicableEnchantments.put(mat, enchantments);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -63,7 +61,7 @@ public class EnchantmentRune extends SimpleSlimefunItem<ItemDropHandler> {
|
|||||||
return (e, p, item) -> {
|
return (e, p, item) -> {
|
||||||
if (isItem(item.getItemStack())) {
|
if (isItem(item.getItemStack())) {
|
||||||
|
|
||||||
if (!Slimefun.hasUnlocked(p, SlimefunItems.ENCHANTMENT_RUNE, true)) {
|
if (!Slimefun.hasUnlocked(p, this, true)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -89,17 +87,14 @@ public class EnchantmentRune extends SimpleSlimefunItem<ItemDropHandler> {
|
|||||||
Item entity = (Item) optional.get();
|
Item entity = (Item) optional.get();
|
||||||
ItemStack target = entity.getItemStack();
|
ItemStack target = entity.getItemStack();
|
||||||
|
|
||||||
List<Enchantment> enchantmentSet = Arrays.asList(applicableEnchantments.getOrDefault(target.getType(), new Enchantment[0]));
|
List<Enchantment> enchantmentList = applicableEnchantments.getOrDefault(target.getType(), new ArrayList<>());
|
||||||
if (enchantmentSet.size() == 0) return;
|
if (enchantmentList.isEmpty()) return;
|
||||||
|
|
||||||
//Removing the enchantments that the item already has from enchantmentSet
|
//Removing the enchantments that the item already has from enchantmentSet
|
||||||
for (Enchantment enchantment : enchantmentSet) {
|
enchantmentList.removeIf(enchantment -> target.getEnchantments().containsKey(enchantment));
|
||||||
for (Enchantment itemEnchantment : target.getEnchantments().keySet()) {
|
if (enchantmentList.isEmpty()) return;
|
||||||
if (enchantment == itemEnchantment) enchantmentSet.remove(enchantment);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Enchantment enchantment = enchantmentSet.get(ThreadLocalRandom.current().nextInt(enchantmentSet.size()));
|
Enchantment enchantment = enchantmentList.get(ThreadLocalRandom.current().nextInt(enchantmentList.size()));
|
||||||
int level = 1;
|
int level = 1;
|
||||||
if (enchantment.getMaxLevel() != 1) {
|
if (enchantment.getMaxLevel() != 1) {
|
||||||
level = ThreadLocalRandom.current().nextInt(enchantment.getMaxLevel()) + 1;
|
level = ThreadLocalRandom.current().nextInt(enchantment.getMaxLevel()) + 1;
|
||||||
|
@ -48,7 +48,7 @@ public class SoulboundRune extends SimpleSlimefunItem<ItemDropHandler> {
|
|||||||
return (e, p, item) -> {
|
return (e, p, item) -> {
|
||||||
if (isItem(item.getItemStack())) {
|
if (isItem(item.getItemStack())) {
|
||||||
|
|
||||||
if (!Slimefun.hasUnlocked(p, SlimefunItems.SOULBOUND_RUNE, true)) {
|
if (!Slimefun.hasUnlocked(p, this, true)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user