diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Lists/RecipeType.java b/src/main/java/me/mrCookieSlime/Slimefun/Lists/RecipeType.java index 43aa1485d..30752b4be 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Lists/RecipeType.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Lists/RecipeType.java @@ -8,7 +8,6 @@ import org.bukkit.inventory.ItemStack; import io.github.thebusybiscuit.cscorelib2.item.CustomItem; import io.github.thebusybiscuit.cscorelib2.recipes.MinecraftRecipe; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunGadget; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunMachine; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; @@ -76,33 +75,37 @@ public class RecipeType { return SlimefunItem.getByID(machine); } - public static List getRecipeInputs(SlimefunItem machine) { + public static List getRecipeInputs(SlimefunMachine machine) { if (machine == null) return new ArrayList<>(); - List recipes = (machine instanceof SlimefunMachine ? ((SlimefunMachine) machine).getRecipes(): ((SlimefunGadget) machine).getRecipes()); + List recipes = machine.getRecipes(); List convertible = new ArrayList<>(); + for (int i = 0; i < recipes.size(); i++) { if (i % 2 == 0) convertible.add(recipes.get(i)[0]); } + return convertible; } - public static List getRecipeInputList(SlimefunItem machine) { + public static List getRecipeInputList(SlimefunMachine machine) { if (machine == null) return new ArrayList<>(); - List recipes = (machine instanceof SlimefunMachine ? ((SlimefunMachine) machine).getRecipes(): ((SlimefunGadget) machine).getRecipes()); + List recipes = machine.getRecipes(); List convertible = new ArrayList<>(); + for (int i = 0; i < recipes.size(); i++) { if (i % 2 == 0) convertible.add(recipes.get(i)); } + return convertible; } - public static ItemStack getRecipeOutput(SlimefunItem machine, ItemStack input) { - List recipes = (machine instanceof SlimefunMachine ? ((SlimefunMachine) machine).getRecipes(): ((SlimefunGadget) machine).getRecipes()); + public static ItemStack getRecipeOutput(SlimefunMachine machine, ItemStack input) { + List recipes = machine.getRecipes(); return recipes.get(((getRecipeInputs(machine).indexOf(input) * 2) + 1))[0].clone(); } - public static ItemStack getRecipeOutputList(SlimefunItem machine, ItemStack[] input) { - List recipes = (machine instanceof SlimefunMachine ? ((SlimefunMachine) machine).getRecipes(): ((SlimefunGadget) machine).getRecipes()); + public static ItemStack getRecipeOutputList(SlimefunMachine machine, ItemStack[] input) { + List recipes = machine.getRecipes(); return recipes.get(((getRecipeInputList(machine).indexOf(input) * 2) + 1))[0]; } } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunGadget.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunGadget.java deleted file mode 100644 index 94647fa4a..000000000 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunGadget.java +++ /dev/null @@ -1,53 +0,0 @@ -package me.mrCookieSlime.Slimefun.Objects.SlimefunItem; - -import java.util.ArrayList; -import java.util.List; - -import org.bukkit.inventory.ItemStack; - -import me.mrCookieSlime.Slimefun.Lists.RecipeType; -import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem; -import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; - -@Deprecated -public class SlimefunGadget extends SlimefunItem implements RecipeDisplayItem { - - private List recipes; - private List displayRecipes; - - public SlimefunGadget(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, ItemStack[] machineRecipes) { - this(category, item, id, recipeType, recipe, machineRecipes, null, null); - } - - public SlimefunGadget(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe, ItemStack[] machineRecipes) { - this(category, item, item.getItemID(), recipeType, recipe, machineRecipes, null, null); - } - - public SlimefunGadget(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, ItemStack[] machineRecipes, String[] keys, Object[] values) { - super(category, item, id, recipeType, recipe, keys, values); - this.recipes = new ArrayList<>(); - this.displayRecipes = new ArrayList<>(); - - for (ItemStack i: machineRecipes) { - this.recipes.add(new ItemStack[] {i}); - this.displayRecipes.add(i); - } - } - - public List getRecipes() { - return this.recipes; - } - - @Override - public List getDisplayRecipes() { - return this.displayRecipes; - } - - public void addRecipe(ItemStack input, ItemStack output) { - this.recipes.add(new ItemStack[] {input}); - this.recipes.add(new ItemStack[] {output}); - this.displayRecipes.add(input); - this.displayRecipes.add(output); - } -} diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java index a70e57961..ba7dee1e9 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java @@ -592,7 +592,14 @@ public class SlimefunItem implements Placeable { Optional handler = itemhandlers.get(c); if (handler.isPresent()) { - callable.accept(c.cast(handler.get())); + try { + callable.accept(c.cast(handler.get())); + } + catch (Throwable x) { + // Catch any throwables and give more precise info on where to start debugging + String file = x.getStackTrace()[0].getClassName(); + Bukkit.getLogger().log(Level.SEVERE, "Could not pass \"" + c.getSimpleName() + "\" for the following Item: \"" + getID() + "\" (" + file + ")", x); + } return true; } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/Composter.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/Composter.java index 60eaa717a..82d33b94e 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/Composter.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/Composter.java @@ -17,19 +17,29 @@ import io.github.thebusybiscuit.cscorelib2.protection.ProtectableAction; import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunGadget; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem; import me.mrCookieSlime.Slimefun.Objects.handlers.BlockUseHandler; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.api.Slimefun; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; -public class Composter extends SlimefunGadget { - +public class Composter extends SimpleSlimefunItem implements RecipeDisplayItem { + + private final List recipes; + public Composter(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { - super(category, item, recipeType, recipe, getMachineRecipes()); + super(category, item, recipeType, recipe); + + recipes = getMachineRecipes(); } - private static ItemStack[] getMachineRecipes() { + @Override + public List getDisplayRecipes() { + return recipes; + } + + private static List getMachineRecipes() { List items = new LinkedList<>(); for (Material leave : MaterialCollections.getAllLeaves()) { @@ -51,48 +61,54 @@ public class Composter extends SlimefunGadget { items.add(new ItemStack(Material.WHEAT, 4)); items.add(new ItemStack(Material.NETHER_WART)); - return items.toArray(new ItemStack[0]); + return items; } @Override - public void preRegister() { - addItemHandler((BlockUseHandler) e -> { + public BlockUseHandler getItemHandler() { + return e -> { Optional block = e.getClickedBlock(); if (block.isPresent()) { + e.cancel(); + Player p = e.getPlayer(); Block b = block.get(); if (p.hasPermission("slimefun.inventory.bypass") || SlimefunPlugin.getProtectionManager().hasPermission(p, b.getLocation(), ProtectableAction.ACCESS_INVENTORIES)) { ItemStack input = e.getItem(); - for (ItemStack convert : RecipeType.getRecipeInputs(Composter.this)) { + for (int i = 0; i < recipes.size(); i += 2) { + ItemStack convert = recipes.get(i); + if (convert != null && SlimefunManager.isItemSimilar(input, convert, true)) { ItemStack removing = input.clone(); removing.setAmount(convert.getAmount()); p.getInventory().removeItem(removing); - ItemStack adding = RecipeType.getRecipeOutput(Composter.this, convert); + ItemStack adding = recipes.get(i + 1); - for (int i = 1; i < 12; i++) { - int j = i; + for (int j = 1; j < 12; j++) { + int index = j; Slimefun.runSync(() -> { - if (j < 11) { + if (index < 11) { b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType().isBlock() ? input.getType() : Material.HAY_BLOCK); } else { p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1F, 1F); b.getWorld().dropItemNaturally(b.getRelative(BlockFace.UP).getLocation(), adding); } - }, i * 30L); + }, j * 30L); } + + break; } } SlimefunPlugin.getLocal().sendMessage(p, "machines.wrong-item", true); } } - }); + }; } } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/Crucible.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/Crucible.java index 44f265e2a..3f563f6d3 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/Crucible.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/Crucible.java @@ -19,20 +19,30 @@ import io.github.thebusybiscuit.cscorelib2.protection.ProtectableAction; import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunGadget; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem; import me.mrCookieSlime.Slimefun.Objects.handlers.BlockUseHandler; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.Slimefun; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; -public class Crucible extends SlimefunGadget { +public class Crucible extends SimpleSlimefunItem implements RecipeDisplayItem { + private final List recipes; + public Crucible(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { - super(category, item, recipeType, recipe, getMachineRecipes()); + super(category, item, recipeType, recipe); + + recipes = getMachineRecipes(); } - private static ItemStack[] getMachineRecipes() { + @Override + public List getDisplayRecipes() { + return recipes; + } + + private static List getMachineRecipes() { List items = new LinkedList<>(); items.add(new ItemStack(Material.COBBLESTONE, 16)); @@ -57,15 +67,17 @@ public class Crucible extends SlimefunGadget { items.add(new ItemStack(Material.LAVA_BUCKET)); } - return items.toArray(new ItemStack[0]); + return items; } @Override - public void preRegister() { - addItemHandler((BlockUseHandler) e -> { + public BlockUseHandler getItemHandler() { + return e -> { Optional optional = e.getClickedBlock(); if (optional.isPresent()) { + e.cancel(); + Player p = e.getPlayer(); Block b = optional.get(); @@ -73,10 +85,10 @@ public class Crucible extends SlimefunGadget { ItemStack input = e.getItem(); Block block = b.getRelative(BlockFace.UP); - for (ItemStack convert : RecipeType.getRecipeInputs(Crucible.this)) { + for (int i = 0; i < recipes.size(); i += 2) { + ItemStack convert = recipes.get(i); + if (SlimefunManager.isItemSimilar(input, convert, true)) { - e.cancel(); - ItemStack removing = input.clone(); removing.setAmount(convert.getAmount()); p.getInventory().removeItem(removing); @@ -133,13 +145,15 @@ public class Crucible extends SlimefunGadget { runPostTask(block, water ? Sound.ENTITY_PLAYER_SPLASH : Sound.BLOCK_LAVA_POP, 1); }, 50L); + + break; } } SlimefunPlugin.getLocal().sendMessage(p, "machines.wrong-item", true); } } - }); + }; } private void runPostTask(Block block, Sound sound, int times) {