From 8b71a8a62b1cae73aea05289e5def6b9c78b6422 Mon Sep 17 00:00:00 2001 From: Brokkonaut Date: Fri, 3 Aug 2018 16:59:44 +0200 Subject: [PATCH] Tool config option dropToDisable If set to true, the tool will be disabled (and if removeOnDisable is true removed) when you try to drop it. Adds #548 --- src/main/java/de/diddiz/LogBlock/Tool.java | 4 ++- .../de/diddiz/LogBlock/config/Config.java | 5 +++- .../LogBlock/listeners/ToolListener.java | 27 ++++++++++++++++--- 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/src/main/java/de/diddiz/LogBlock/Tool.java b/src/main/java/de/diddiz/LogBlock/Tool.java index db198c2..7a9c828 100644 --- a/src/main/java/de/diddiz/LogBlock/Tool.java +++ b/src/main/java/de/diddiz/LogBlock/Tool.java @@ -16,8 +16,9 @@ public class Tool { public final ToolMode mode; public final PermissionDefault permissionDefault; public final boolean removeOnDisable; + public final boolean dropToDisable; - public Tool(String name, List aliases, ToolBehavior leftClickBehavior, ToolBehavior rightClickBehavior, boolean defaultEnabled, Material item, boolean canDrop, QueryParams params, ToolMode mode, PermissionDefault permissionDefault, boolean removeOnDisable) { + public Tool(String name, List aliases, ToolBehavior leftClickBehavior, ToolBehavior rightClickBehavior, boolean defaultEnabled, Material item, boolean canDrop, QueryParams params, ToolMode mode, PermissionDefault permissionDefault, boolean removeOnDisable, boolean dropToDisable) { this.name = name; this.aliases = aliases; this.leftClickBehavior = leftClickBehavior; @@ -29,5 +30,6 @@ public class Tool { this.mode = mode; this.permissionDefault = permissionDefault; this.removeOnDisable = removeOnDisable; + this.dropToDisable = dropToDisable; } } diff --git a/src/main/java/de/diddiz/LogBlock/config/Config.java b/src/main/java/de/diddiz/LogBlock/config/Config.java index c9e857a..723d9be 100644 --- a/src/main/java/de/diddiz/LogBlock/config/Config.java +++ b/src/main/java/de/diddiz/LogBlock/config/Config.java @@ -127,6 +127,7 @@ public class Config { def.put("tools.tool.item", Material.WOODEN_PICKAXE.name()); def.put("tools.tool.canDrop", true); def.put("tools.tool.removeOnDisable", true); + def.put("tools.tool.dropToDisable", false); def.put("tools.tool.params", "area 0 all sum none limit 15 desc since 60d silent"); def.put("tools.tool.mode", "LOOKUP"); def.put("tools.tool.permissionDefault", "OP"); @@ -137,6 +138,7 @@ public class Config { def.put("tools.toolblock.item", Material.BEDROCK.name()); def.put("tools.toolblock.canDrop", false); def.put("tools.toolblock.removeOnDisable", true); + def.put("tools.toolblock.dropToDisable", false); def.put("tools.toolblock.params", "area 0 all sum none limit 15 desc since 60d silent"); def.put("tools.toolblock.mode", "LOOKUP"); def.put("tools.toolblock.permissionDefault", "OP"); @@ -236,12 +238,13 @@ public class Config { final Material item = Material.matchMaterial(tSec.getString("item","OAK_LOG")); final boolean canDrop = tSec.getBoolean("canDrop", false); final boolean removeOnDisable = tSec.getBoolean("removeOnDisable", true); + final boolean dropToDisable = tSec.getBoolean("dropToDisable", false); final QueryParams params = new QueryParams(logblock); params.prepareToolQuery = true; params.parseArgs(getConsoleSender(), Arrays.asList(tSec.getString("params").split(" ")), false); final ToolMode mode = ToolMode.valueOf(tSec.getString("mode").toUpperCase()); final PermissionDefault pdef = PermissionDefault.valueOf(tSec.getString("permissionDefault").toUpperCase()); - tools.add(new Tool(toolName, aliases, leftClickBehavior, rightClickBehavior, defaultEnabled, item, canDrop, params, mode, pdef, removeOnDisable)); + tools.add(new Tool(toolName, aliases, leftClickBehavior, rightClickBehavior, defaultEnabled, item, canDrop, params, mode, pdef, removeOnDisable, dropToDisable)); } catch (final Exception ex) { getLogger().log(Level.WARNING, "Error at parsing tool '" + toolName + "': ", ex); } diff --git a/src/main/java/de/diddiz/LogBlock/listeners/ToolListener.java b/src/main/java/de/diddiz/LogBlock/listeners/ToolListener.java index 0ed9a41..1d15a7f 100644 --- a/src/main/java/de/diddiz/LogBlock/listeners/ToolListener.java +++ b/src/main/java/de/diddiz/LogBlock/listeners/ToolListener.java @@ -100,7 +100,9 @@ public class ToolListener implements Listener { final ToolData toolData = entry.getValue(); if (toolData.enabled && !logblock.hasPermission(player, "logblock.tools." + tool.name)) { toolData.enabled = false; - player.getInventory().removeItem(new ItemStack(tool.item, 1)); + if (tool.removeOnDisable && logblock.hasPermission(player, "logblock.spawnTools")) { + player.getInventory().removeItem(new ItemStack(tool.item, 1)); + } player.sendMessage(ChatColor.GREEN + "Tool disabled."); } } @@ -116,9 +118,26 @@ public class ToolListener implements Listener { final Tool tool = entry.getKey(); final ToolData toolData = entry.getValue(); final Material item = event.getItemDrop().getItemStack().getType(); - if (item == tool.item && toolData.enabled && !tool.canDrop) { - player.sendMessage(ChatColor.RED + "You cannot drop this tool."); - event.setCancelled(true); + if (item == tool.item && toolData.enabled) { + if (tool.dropToDisable) { + toolData.enabled = false; + if (tool.removeOnDisable && logblock.hasPermission(player, "logblock.spawnTools")) { + ItemStack stack = event.getItemDrop().getItemStack(); + if (stack.isSimilar(new ItemStack(item))) { + if (stack.getAmount() > 1) { + stack.setAmount(stack.getAmount() - 1); + event.getItemDrop().setItemStack(stack); + } else { + event.getItemDrop().remove(); + } + } + } + event.setCancelled(true); + player.sendMessage(ChatColor.GREEN + "Tool disabled."); + } else if (!tool.canDrop) { + player.sendMessage(ChatColor.RED + "You cannot drop this tool."); + event.setCancelled(true); + } } } }