1
mirror of https://github.com/StarWishsama/Slimefun4.git synced 2024-09-20 03:35:51 +00:00

Did the requested changes.

This commit is contained in:
LinoxGH 2020-06-28 22:06:35 +03:00
parent eb2bbae0c9
commit e55e2690e7
3 changed files with 25 additions and 22 deletions

View File

@ -1,14 +1,18 @@
package io.github.thebusybiscuit.slimefun4.implementation.items.magical; package io.github.thebusybiscuit.slimefun4.implementation.items.magical;
import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.HashMap; import java.util.EnumMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional; import java.util.Optional;
import java.util.Set; import java.util.Set;
import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.ThreadLocalRandom;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.Particle;
import org.bukkit.Sound; import org.bukkit.Sound;
import org.bukkit.enchantments.Enchantment; import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
@ -40,7 +44,7 @@ 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 HashMap<Material, Enchantment[]> applicableEnchs = new HashMap<>(); private final Map<Material, 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);
@ -50,7 +54,7 @@ public class EnchantmentRune extends SimpleSlimefunItem<ItemDropHandler> {
for (Enchantment ench : Enchantment.values()) { for (Enchantment ench : Enchantment.values()) {
if (ench.canEnchantItem(new ItemStack(mat))) enchSet.add(ench); if (ench.canEnchantItem(new ItemStack(mat))) enchSet.add(ench);
} }
applicableEnchs.put(mat, enchSet.toArray(new Enchantment[0])); applicableEnchantments.put(mat, enchSet.toArray(new Enchantment[0]));
} }
} }
@ -85,15 +89,22 @@ public class EnchantmentRune extends SimpleSlimefunItem<ItemDropHandler> {
Item entity = (Item) optional.get(); Item entity = (Item) optional.get();
ItemStack target = entity.getItemStack(); ItemStack target = entity.getItemStack();
Enchantment[] enchArr = findEnchArr(target.getType()); List<Enchantment> enchantmentSet = Arrays.asList(applicableEnchantments.getOrDefault(target.getType(), new Enchantment[0]));
if (enchArr.length == 0) return; if (enchantmentSet.size() == 0) return;
int enchIndex = ThreadLocalRandom.current().nextInt(enchArr.length);
Enchantment ench = enchArr[enchIndex];
//Removing the enchantments that the item already has from enchantmentSet
for (Enchantment enchantment : enchantmentSet) {
for (Enchantment itemEnchantment : target.getEnchantments().keySet()) {
if (enchantment == itemEnchantment) enchantmentSet.remove(enchantment);
}
}
Enchantment enchantment = enchantmentSet.get(ThreadLocalRandom.current().nextInt(enchantmentSet.size()));
int level = 1; int level = 1;
if (ench.getMaxLevel() != 1) level = ThreadLocalRandom.current().nextInt(ench.getMaxLevel() + 1); if (enchantment.getMaxLevel() != 1) {
level = ThreadLocalRandom.current().nextInt(enchantment.getMaxLevel() + 1);
target.addEnchantment(ench, level); }
target.addEnchantment(enchantment, level);
if (target.getAmount() == 1) { if (target.getAmount() == 1) {
e.setCancelled(true); e.setCancelled(true);
@ -105,8 +116,8 @@ public class EnchantmentRune extends SimpleSlimefunItem<ItemDropHandler> {
// Being sure entities are still valid and not picked up or whatsoever. // Being sure entities are still valid and not picked up or whatsoever.
if (item.isValid() && entity.isValid() && target.getAmount() == 1) { if (item.isValid() && entity.isValid() && target.getAmount() == 1) {
l.getWorld().createExplosion(l, 0); l.getWorld().spawnParticle(Particle.CRIT_MAGIC, l, 1);
l.getWorld().playSound(l, Sound.ENTITY_GENERIC_EXPLODE, 0.3F, 1); l.getWorld().playSound(l, Sound.ENTITY_ZOMBIE_VILLAGER_CURE, 1F, 1F);
entity.remove(); entity.remove();
item.remove(); item.remove();
@ -122,12 +133,6 @@ public class EnchantmentRune extends SimpleSlimefunItem<ItemDropHandler> {
} }
} }
private Enchantment[] findEnchArr(Material type) {
Enchantment[] enchArr = applicableEnchs.get(type);
if (enchArr == null) enchArr = new Enchantment[0];
return enchArr;
}
private boolean findCompatibleItem(Entity n) { private boolean findCompatibleItem(Entity n) {
if (n instanceof Item) { if (n instanceof Item) {
Item item = (Item) n; Item item = (Item) n;

View File

@ -267,8 +267,7 @@ public final class ResearchSetup {
register("advanced_industrial_miner", 98, "Better Mining", 36, SlimefunItems.ADVANCED_INDUSTRIAL_MINER); register("advanced_industrial_miner", 98, "Better Mining", 36, SlimefunItems.ADVANCED_INDUSTRIAL_MINER);
register("magical_zombie_pills", 257, "De-Zombification", 22, SlimefunItems.MAGICAL_ZOMBIE_PILLS); register("magical_zombie_pills", 257, "De-Zombification", 22, SlimefunItems.MAGICAL_ZOMBIE_PILLS);
register("auto_brewer", 258, "Industrial Brewery", 30, SlimefunItems.AUTO_BREWER); register("auto_brewer", 258, "Industrial Brewery", 30, SlimefunItems.AUTO_BREWER);
register("enchantment_rune", 259, "Ancient Enchanting", 24, SlimefunItems.ENCHANTMENT_RUNE); register("enchantment_rune", 259, "Ancient Enchanting", 24, SlimefunItems.MAGICAL_GLASS, SlimefunItems.ENCHANTMENT_RUNE);
register("magical_glass", 260, "Magical See-Through", 5, SlimefunItems.MAGICAL_GLASS);
} }
private static void register(String key, int id, String name, int defaultCost, ItemStack... items) { private static void register(String key, int id, String name, int defaultCost, ItemStack... items) {

View File

@ -236,4 +236,3 @@ slimefun:
magical_zombie_pills: De-Zombification magical_zombie_pills: De-Zombification
auto_brewer: Industrial Brewery auto_brewer: Industrial Brewery
enchantment_rune: Ancient Enchanting enchantment_rune: Ancient Enchanting
magical_glass: Magical See-Through