From aebab92e614cbe95b3315ae9f99d8f576ead224b Mon Sep 17 00:00:00 2001 From: J3fftw <44972470+J3fftw1@users.noreply.github.com> Date: Sun, 9 Jul 2023 18:16:10 +0200 Subject: [PATCH] Fix some of the reported blocks not working (#3848) --- .../slimefun4/api/items/SlimefunItem.java | 10 +++++++++- .../implementation/listeners/AutoCrafterListener.java | 3 ++- .../implementation/listeners/DispenserListener.java | 3 ++- .../listeners/EnhancedFurnaceListener.java | 8 ++++++-- .../me/mrCookieSlime/Slimefun/api/BlockStorage.java | 7 ++++++- 5 files changed, 25 insertions(+), 6 deletions(-) diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/api/items/SlimefunItem.java b/src/main/java/io/github/thebusybiscuit/slimefun4/api/items/SlimefunItem.java index 436b348ab..215c8270d 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/api/items/SlimefunItem.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/api/items/SlimefunItem.java @@ -475,6 +475,14 @@ public class SlimefunItem implements Placeable { // Now we can be certain this item should be enabled if (state == ItemState.ENABLED) { onEnable(); + } else { + // Clear item handlers if we are disabled so that calling them isn't possible later on + for (ItemHandler handler : this.itemhandlers.values()) { + if (handler instanceof BlockTicker) { + Slimefun.getRegistry().getTickerBlocks().remove(getId()); + } + } + this.itemhandlers.clear(); } // Lock the SlimefunItemStack from any accidental manipulations @@ -1173,4 +1181,4 @@ public class SlimefunItem implements Placeable { } -} \ No newline at end of file +} diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/AutoCrafterListener.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/AutoCrafterListener.java index 0c15115e2..9dddeb628 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/AutoCrafterListener.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/AutoCrafterListener.java @@ -57,7 +57,8 @@ public class AutoCrafterListener implements Listener { SlimefunItem block = slimefunBlock.get(); - if (block instanceof AbstractAutoCrafter crafter) { + // Fixes #2957 + if (block instanceof AbstractAutoCrafter crafter && crafter.canUse(e.getPlayer(), true)) { Optional slimefunItem = e.getSlimefunItem(); if (!e.getPlayer().isSneaking() && slimefunItem.isPresent() && slimefunItem.get() instanceof Multimeter) { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/DispenserListener.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/DispenserListener.java index 34851c679..998950834 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/DispenserListener.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/DispenserListener.java @@ -42,7 +42,8 @@ public class DispenserListener implements Listener { if (b.getType() == Material.DISPENSER && b.getRelative(BlockFace.DOWN).getType() != Material.HOPPER) { SlimefunItem machine = BlockStorage.check(b); - if (machine != null) { + // Fixes #2959 + if (machine != null && !machine.isDisabledIn(e.getBlock().getWorld())) { machine.callItemHandler(BlockDispenseHandler.class, handler -> { BlockState state = PaperLib.getBlockState(b, false).getState(); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/EnhancedFurnaceListener.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/EnhancedFurnaceListener.java index e779bdb34..c03e238c4 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/EnhancedFurnaceListener.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/EnhancedFurnaceListener.java @@ -47,7 +47,11 @@ public class EnhancedFurnaceListener implements Listener { SlimefunItem furnace = BlockStorage.check(e.getBlock()); - if (furnace instanceof EnhancedFurnace enhancedFurnace && enhancedFurnace.getFuelEfficiency() > 0) { + // Fixes #2958 + if (furnace instanceof EnhancedFurnace enhancedFurnace + && !enhancedFurnace.isDisabledIn(e.getBlock().getWorld()) + && enhancedFurnace.getFuelEfficiency() > 0 + ) { int burnTime = e.getBurnTime(); int newBurnTime = enhancedFurnace.getFuelEfficiency() * burnTime; @@ -64,7 +68,7 @@ public class EnhancedFurnaceListener implements Listener { SlimefunItem sfItem = BlockStorage.check(e.getBlock()); - if (sfItem instanceof EnhancedFurnace enhancedFurnace) { + if (sfItem instanceof EnhancedFurnace enhancedFurnace && !enhancedFurnace.isDisabledIn(e.getBlock().getWorld())) { BlockState state = PaperLib.getBlockState(e.getBlock(), false).getState(); if (state instanceof Furnace furnace) { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/api/BlockStorage.java b/src/main/java/me/mrCookieSlime/Slimefun/api/BlockStorage.java index cf0955bcd..911725df4 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/api/BlockStorage.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/api/BlockStorage.java @@ -719,7 +719,12 @@ public class BlockStorage { if (updateTicker) { SlimefunItem item = SlimefunItem.getById(key); - if (item != null && item.isTicking() && value != null) { + if (item != null + && value != null + && l.getWorld() != null + && item.isTicking() + && !item.isDisabledIn(l.getWorld()) + ) { Slimefun.getTickerTask().enableTicker(l); } }