From eba6fb041f38de9529d9f7b78b3e80a0d0b734b3 Mon Sep 17 00:00:00 2001 From: Bas Verhoeven Date: Thu, 13 Jun 2019 21:18:43 +0200 Subject: [PATCH] Drop Slimefun items when broken by another Slimefun tool When a Slimefun item that doesn't have a BlockHandler is broken by a tool that does have a BlockHandler and that tool's BlockHandler returns true, Slimefun would stop handling the "onBlockBreak" event and would not drop the Slimefun item that was broken but some vanilla block instead. This commit attempts to fix the way those events are handled, ensuring that if a Slimefun item is broken one is dropped for the player. --- src/me/mrCookieSlime/Slimefun/listeners/ToolListener.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/me/mrCookieSlime/Slimefun/listeners/ToolListener.java b/src/me/mrCookieSlime/Slimefun/listeners/ToolListener.java index 49ccca580..8a34433f3 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/ToolListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/ToolListener.java @@ -202,8 +202,9 @@ public class ToolListener implements Listener { if (SlimefunItem.blockhandler.containsKey(sfItem.getID())) { allow = SlimefunItem.blockhandler.get(sfItem.getID()).onBreak(e.getPlayer(), e.getBlock(), sfItem, UnregisterReason.PLAYER_BREAK); } else { + // Walk over all registered block break handlers until one says that it'll handle it. for (ItemHandler handler : SlimefunItem.getHandlers("BlockBreakHandler")) { - if (((BlockBreakHandler) handler).onBlockBreak(e, item, fortune, drops)) return; + if (((BlockBreakHandler) handler).onBlockBreak(e, item, fortune, drops)) break; } } if (allow) {