1
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:
LinoxGH 2020-06-28 23:46:09 +03:00
parent 27ba744fe5
commit 5c7accbbe8
2 changed files with 14 additions and 19 deletions

View File

@ -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;

View File

@ -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;
} }