diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/multiblocks/MultiBlockMachine.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/multiblocks/MultiBlockMachine.java index 96bfd0963..37cc3f0a9 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/multiblocks/MultiBlockMachine.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/multiblocks/MultiBlockMachine.java @@ -14,7 +14,7 @@ import org.bukkit.Material; import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; -import org.bukkit.block.data.type.Dispenser; +import org.bukkit.block.Dispenser; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; @@ -165,6 +165,29 @@ public abstract class MultiBlockMachine extends SlimefunItem implements NotPlace } } + /** + * This method handles a output {@link ItemStack} from the {@link MultiBlockMachine} which has a crafting delay + * + * @param outputItem + * A crafted {@link ItemStack} from {@link MultiBlockMachine} + * @param dispenser + * Our {@link Dispenser} from {@link MultiBlockMachine} + * + */ + protected void handleCraftedItem(ItemStack outputItem, Dispenser dispenser) { + Inventory dispInv = dispenser.getInventory(); + Inventory outputInv = findOutputInventory(outputItem, dispenser.getBlock(), dispInv); + + if (outputInv != null) { + outputInv.addItem(outputItem); + } else if (InvUtils.fits(dispInv, outputItem)) { + dispInv.addItem(outputItem); + } else { + // fallback + dispenser.getWorld().dropItemNaturally(dispenser.getLocation(), outputItem); + } + } + private static @Nonnull Material[] convertItemStacksToMaterial(@Nonnull ItemStack[] items) { List materials = new ArrayList<>(); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/ArmorForge.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/ArmorForge.java index 01225f1de..8d0174bd1 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/ArmorForge.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/ArmorForge.java @@ -91,17 +91,8 @@ public class ArmorForge extends AbstractCraftingTable { if (current < 3) { p.getWorld().playSound(p.getLocation(), Sound.BLOCK_ANVIL_USE, 1F, 2F); } else { - Inventory dispInv = dispenser.getInventory(); - Inventory outputInv2 = findOutputInventory(output, dispenser.getBlock(), dispInv); p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1F, 1F); - if (outputInv2 != null) { - outputInv2.addItem(output); - } else if (InvUtils.fits(dispInv, output)) { - dispInv.addItem(output); - } else { - // fallback - dispenser.getWorld().dropItemNaturally(dispenser.getLocation(), output); - } + handleCraftedItem(output, dispenser); } }, j * 20L); } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/Compressor.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/Compressor.java index c45afacb3..0803bcbec 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/Compressor.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/Compressor.java @@ -96,17 +96,8 @@ public class Compressor extends MultiBlockMachine { if (j < 3) { p.getWorld().playSound(p.getLocation(), j == 1 ? Sound.BLOCK_PISTON_CONTRACT : Sound.BLOCK_PISTON_EXTEND, 1F, j == 0 ? 1F : 2F); } else { - Inventory dispInv = dispenser.getInventory(); - Inventory outputInv = findOutputInventory(output, dispenser.getBlock(), dispInv); p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1F, 1F); - if (outputInv != null) { - outputInv.addItem(output); - } else if (InvUtils.fits(dispInv, output)) { - dispInv.addItem(output); - } else { - // fallback - dispenser.getWorld().dropItemNaturally(dispenser.getLocation(), output); - } + handleCraftedItem(output, dispenser); } }, i * 20L); } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/MagicWorkbench.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/MagicWorkbench.java index 0d78d587a..09e23ff1e 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/MagicWorkbench.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/MagicWorkbench.java @@ -106,17 +106,8 @@ public class MagicWorkbench extends AbstractCraftingTable { if (current < 3) { p.getWorld().playSound(b.getLocation(), Sound.BLOCK_WOODEN_BUTTON_CLICK_ON, 1F, 1F); } else { - Inventory dispInv = dispenser.getInventory(); - Inventory outputInv = findOutputInventory(output, dispenser.getBlock(), dispInv); p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1F, 1F); - if (outputInv != null) { - outputInv.addItem(output); - } else if (InvUtils.fits(dispInv, output)) { - dispInv.addItem(output); - } else { - // fallback - dispenser.getWorld().dropItemNaturally(dispenser.getLocation(), output); - } + handleCraftedItem(output, dispenser); } }, j * 20L); } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/PressureChamber.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/PressureChamber.java index 2c7fbc27f..c7224d03d 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/PressureChamber.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/PressureChamber.java @@ -85,17 +85,8 @@ public class PressureChamber extends MultiBlockMachine { if (j < 3) { p.getWorld().playSound(b.getLocation(), Sound.ENTITY_TNT_PRIMED, 1F, 1F); } else { - Inventory dispInv = dispenser.getInventory(); - Inventory outputInv = findOutputInventory(output, dispenser.getBlock(), dispInv); p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1F, 1F); - if (outputInv != null) { - outputInv.addItem(output); - } else if (InvUtils.fits(dispInv, output)) { - dispInv.addItem(output); - } else { - // fallback - dispenser.getWorld().dropItemNaturally(dispenser.getLocation(), output); - } + handleCraftedItem(output, dispenser); } }, i * 20L); }