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
This commit is contained in:
Brokkonaut
2018-08-03 16:59:44 +02:00
parent e6310e6174
commit 8b71a8a62b
3 changed files with 30 additions and 6 deletions

View File

@ -16,8 +16,9 @@ public class Tool {
public final ToolMode mode; public final ToolMode mode;
public final PermissionDefault permissionDefault; public final PermissionDefault permissionDefault;
public final boolean removeOnDisable; public final boolean removeOnDisable;
public final boolean dropToDisable;
public Tool(String name, List<String> aliases, ToolBehavior leftClickBehavior, ToolBehavior rightClickBehavior, boolean defaultEnabled, Material item, boolean canDrop, QueryParams params, ToolMode mode, PermissionDefault permissionDefault, boolean removeOnDisable) { public Tool(String name, List<String> 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.name = name;
this.aliases = aliases; this.aliases = aliases;
this.leftClickBehavior = leftClickBehavior; this.leftClickBehavior = leftClickBehavior;
@ -29,5 +30,6 @@ public class Tool {
this.mode = mode; this.mode = mode;
this.permissionDefault = permissionDefault; this.permissionDefault = permissionDefault;
this.removeOnDisable = removeOnDisable; this.removeOnDisable = removeOnDisable;
this.dropToDisable = dropToDisable;
} }
} }

View File

@ -127,6 +127,7 @@ public class Config {
def.put("tools.tool.item", Material.WOODEN_PICKAXE.name()); def.put("tools.tool.item", Material.WOODEN_PICKAXE.name());
def.put("tools.tool.canDrop", true); def.put("tools.tool.canDrop", true);
def.put("tools.tool.removeOnDisable", 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.params", "area 0 all sum none limit 15 desc since 60d silent");
def.put("tools.tool.mode", "LOOKUP"); def.put("tools.tool.mode", "LOOKUP");
def.put("tools.tool.permissionDefault", "OP"); 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.item", Material.BEDROCK.name());
def.put("tools.toolblock.canDrop", false); def.put("tools.toolblock.canDrop", false);
def.put("tools.toolblock.removeOnDisable", true); 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.params", "area 0 all sum none limit 15 desc since 60d silent");
def.put("tools.toolblock.mode", "LOOKUP"); def.put("tools.toolblock.mode", "LOOKUP");
def.put("tools.toolblock.permissionDefault", "OP"); def.put("tools.toolblock.permissionDefault", "OP");
@ -236,12 +238,13 @@ public class Config {
final Material item = Material.matchMaterial(tSec.getString("item","OAK_LOG")); final Material item = Material.matchMaterial(tSec.getString("item","OAK_LOG"));
final boolean canDrop = tSec.getBoolean("canDrop", false); final boolean canDrop = tSec.getBoolean("canDrop", false);
final boolean removeOnDisable = tSec.getBoolean("removeOnDisable", true); final boolean removeOnDisable = tSec.getBoolean("removeOnDisable", true);
final boolean dropToDisable = tSec.getBoolean("dropToDisable", false);
final QueryParams params = new QueryParams(logblock); final QueryParams params = new QueryParams(logblock);
params.prepareToolQuery = true; params.prepareToolQuery = true;
params.parseArgs(getConsoleSender(), Arrays.asList(tSec.getString("params").split(" ")), false); params.parseArgs(getConsoleSender(), Arrays.asList(tSec.getString("params").split(" ")), false);
final ToolMode mode = ToolMode.valueOf(tSec.getString("mode").toUpperCase()); final ToolMode mode = ToolMode.valueOf(tSec.getString("mode").toUpperCase());
final PermissionDefault pdef = PermissionDefault.valueOf(tSec.getString("permissionDefault").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) { } catch (final Exception ex) {
getLogger().log(Level.WARNING, "Error at parsing tool '" + toolName + "': ", ex); getLogger().log(Level.WARNING, "Error at parsing tool '" + toolName + "': ", ex);
} }

View File

@ -100,7 +100,9 @@ public class ToolListener implements Listener {
final ToolData toolData = entry.getValue(); final ToolData toolData = entry.getValue();
if (toolData.enabled && !logblock.hasPermission(player, "logblock.tools." + tool.name)) { if (toolData.enabled && !logblock.hasPermission(player, "logblock.tools." + tool.name)) {
toolData.enabled = false; 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."); player.sendMessage(ChatColor.GREEN + "Tool disabled.");
} }
} }
@ -116,9 +118,26 @@ public class ToolListener implements Listener {
final Tool tool = entry.getKey(); final Tool tool = entry.getKey();
final ToolData toolData = entry.getValue(); final ToolData toolData = entry.getValue();
final Material item = event.getItemDrop().getItemStack().getType(); final Material item = event.getItemDrop().getItemStack().getType();
if (item == tool.item && toolData.enabled && !tool.canDrop) { if (item == tool.item && toolData.enabled) {
player.sendMessage(ChatColor.RED + "You cannot drop this tool."); if (tool.dropToDisable) {
event.setCancelled(true); 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);
}
} }
} }
} }