From b2640cb096d9698c5c2525e4e16a38ed03f15076 Mon Sep 17 00:00:00 2001 From: unurled Date: Mon, 18 Mar 2024 21:13:49 +0100 Subject: [PATCH] code refactoring --- .../sr/commands/admin/AttributeCommand.java | 295 ++++++++++-------- .../sr/commands/admin/ClientBuildCommand.java | 245 +++++++++------ 2 files changed, 317 insertions(+), 223 deletions(-) diff --git a/src/main/java/me/unurled/sacredrealms/sr/commands/admin/AttributeCommand.java b/src/main/java/me/unurled/sacredrealms/sr/commands/admin/AttributeCommand.java index e5bde24..5950e90 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/commands/admin/AttributeCommand.java +++ b/src/main/java/me/unurled/sacredrealms/sr/commands/admin/AttributeCommand.java @@ -21,6 +21,9 @@ import xyz.xenondevs.invui.window.Window; public class AttributeCommand implements TabExecutor { + public static final String FOR = " for "; + public static final String REMOVE = "remove"; + @Nullable private static SRPlayer getSrPlayer(@NotNull CommandSender sender, Player target) { PlayerManager pm = PlayerManager.getInstance(PlayerManager.class); @@ -36,6 +39,160 @@ public class AttributeCommand implements TabExecutor { return player; } + private static boolean remove(@NotNull CommandSender sender, Player target, Attribute attribute) { + SRPlayer player = getSrPlayer(sender, target); + if (player == null) return true; + player.removeAttribute(attribute); + player.removeItemAttributes(attribute, target.getInventory().getItemInMainHand()); + syncSRToPlayer(player, target); + sender.sendMessage("Removed " + attribute.getName() + FOR + target.getName()); + PlayerManager pm = PlayerManager.getInstance(PlayerManager.class); + pm.savePlayer(player); + return false; + } + + private static boolean get(@NotNull CommandSender sender, Player target, Attribute attribute) { + SRPlayer player = getSrPlayer(sender, target); + if (player == null) return true; + sender.sendMessage( + "Get " + + attribute.getName() + + FOR + + target.getName() + + ": " + + player.getAttribute(attribute)); + return false; + } + + private static boolean set( + @NotNull CommandSender sender, + @NotNull String @NotNull [] args, + Attribute attribute, + Player target) { + try { + double value = Double.parseDouble(args[3]); + if (value < attribute.getMinValue() || value > attribute.getMaxValue()) { + sender.sendMessage( + "Value out of bounds. Min: " + + attribute.getMinValue() + + ", Max: " + + attribute.getMaxValue()); + return true; + } + SRPlayer player = getSrPlayer(sender, target); + if (player == null) return true; + player.setAttribute(attribute, value); + sender.sendMessage("Set " + attribute.getName() + " to " + value + FOR + target.getName()); + player.setItemAttributes(attribute, target.getInventory().getItemInMainHand(), value); + syncSRToPlayer(player, target); + PlayerManager pm = PlayerManager.getInstance(PlayerManager.class); + pm.savePlayer(player); + } catch (NumberFormatException e) { + sender.sendMessage("Invalid value."); + } + return false; + } + + private static boolean itemInHand( + @NotNull CommandSender sender, @NotNull String @NotNull [] args) { + if (!(sender instanceof Player target)) { + sender.sendMessage("You must be a player to use this command."); + return true; + } + Attribute attribute; + try { + attribute = Attribute.valueOf(args[2].toUpperCase()); + } catch (IllegalArgumentException e) { + sender.sendMessage("Attribute not found."); + return true; + } + + if (args[0].equalsIgnoreCase("set")) { + try { + Result result = getResult(sender, args, target, attribute); + if (result == null) return true; + result.player().setHandItemAttribute(attribute, result.value()); + sender.sendMessage( + "Set " + attribute.getName() + " to " + result.value() + FOR + target.getName()); + // update player + result + .player() + .setItemAttributes( + attribute, target.getInventory().getItemInMainHand(), result.value()); + syncSRToPlayer(result.player(), target); + } catch (NumberFormatException e) { + sender.sendMessage("Invalid value."); + } + } else if (args[0].equalsIgnoreCase("get")) { + SRPlayer player = getSrPlayer(sender, target); + if (player == null) return true; + sender.sendMessage( + "Get " + + attribute.getName() + + FOR + + target.getName() + + ":" + + " " + + player.getHandItemAttribute(attribute)); + } else if (args[0].equalsIgnoreCase(REMOVE)) { + SRPlayer player = getSrPlayer(sender, target); + if (player == null) return true; + player.removeHandItemAttribute(attribute); + player.removeItemAttributes(attribute, target.getInventory().getItemInMainHand()); + + sender.sendMessage("Removed " + attribute.getName() + FOR + target.getName()); + } else { + sender.sendMessage("Usage: /attribute [value]"); + } + return true; + } + + private static boolean gui(@NotNull CommandSender sender, @NotNull String @NotNull [] args) { + // open gui + if (args.length != 2) { + sender.sendMessage("Usage: /attribute gui "); + return true; + } + if (!(sender instanceof Player p)) { + sender.sendMessage("You must be a player to use this command."); + return true; + } + Player target = Bukkit.getPlayer(args[1]); + if (target == null) { + sender.sendMessage("Player not found."); + return true; + } + Window window = + Window.single() + .setViewer(p) + .setTitle("Attributes") + .setGui(AttributesGUI.createGui(target)) + .build(); + window.open(); + + return true; + } + + @Nullable + private static Result getResult( + @NotNull CommandSender sender, + @NotNull String @NotNull [] args, + Player target, + Attribute attribute) { + double value = Double.parseDouble(args[3]); + if (value < attribute.getMinValue() || value > attribute.getMaxValue()) { + sender.sendMessage( + "Value out of bounds. Min: " + + attribute.getMinValue() + + ", Max: " + + attribute.getMaxValue()); + return null; + } + SRPlayer player = getSrPlayer(sender, target); + if (player == null) return null; + return new Result(value, player); + } + /** * Executes the given command, returning its success.
* If false is returned, then the "usage" plugin.yml entry for this command (if defined) will be @@ -68,87 +225,10 @@ public class AttributeCommand implements TabExecutor { return true; } if (args[0].equals("gui")) { - // open gui - if (args.length != 2) { - sender.sendMessage("Usage: /attribute gui "); - return true; - } - if (!(sender instanceof Player p)) { - sender.sendMessage("You must be a player to use this command."); - return true; - } - Player target = Bukkit.getPlayer(args[1]); - if (target == null) { - sender.sendMessage("Player not found."); - return true; - } - Window window = - Window.single() - .setViewer(p) - .setTitle("Attributes") - .setGui(AttributesGUI.createGui(target)) - .build(); - window.open(); - - return true; + return gui(sender, args); } if (args[1].equals("item-in-hand")) { - if (!(sender instanceof Player target)) { - sender.sendMessage("You must be a player to use this command."); - return true; - } - Attribute attribute; - try { - attribute = Attribute.valueOf(args[2].toUpperCase()); - } catch (IllegalArgumentException e) { - sender.sendMessage("Attribute not found."); - return true; - } - - if (args[0].equalsIgnoreCase("set")) { - try { - double value = Double.parseDouble(args[3]); - if (value < attribute.getMinValue() || value > attribute.getMaxValue()) { - sender.sendMessage( - "Value out of bounds. Min: " - + attribute.getMinValue() - + ", Max: " - + attribute.getMaxValue()); - return true; - } - SRPlayer player = getSrPlayer(sender, target); - if (player == null) return true; - player.setHandItemAttribute(attribute, value); - sender.sendMessage( - "Set " + attribute.getName() + " to " + value + " for " + target.getName()); - // update player - player.setItemAttributes(attribute, target.getInventory().getItemInMainHand(), value); - syncSRToPlayer(player, target); - } catch (NumberFormatException e) { - sender.sendMessage("Invalid value."); - } - } else if (args[0].equalsIgnoreCase("get")) { - SRPlayer player = getSrPlayer(sender, target); - if (player == null) return true; - sender.sendMessage( - "Get " - + attribute.getName() - + " for " - + target.getName() - + ":" - + " " - + player.getHandItemAttribute(attribute)); - } else if (args[0].equalsIgnoreCase("remove")) { - SRPlayer player = getSrPlayer(sender, target); - if (player == null) return true; - player.removeHandItemAttribute(attribute); - player.removeItemAttributes(attribute, target.getInventory().getItemInMainHand()); - - sender.sendMessage("Removed " + attribute.getName() + " for " + target.getName()); - } else { - sender.sendMessage("Usage: /attribute [value]"); - } - return true; + return itemInHand(sender, args); } Player target = Bukkit.getPlayer(args[1]); if (target == null) { @@ -164,52 +244,17 @@ public class AttributeCommand implements TabExecutor { return true; } - if (args[0].equalsIgnoreCase("set")) { - try { - double value = Double.parseDouble(args[3]); - if (value < attribute.getMinValue() || value > attribute.getMaxValue()) { - sender.sendMessage( - "Value out of bounds. Min: " - + attribute.getMinValue() - + ", Max: " - + attribute.getMaxValue()); - return true; - } - SRPlayer player = getSrPlayer(sender, target); - if (player == null) return true; - player.setAttribute(attribute, value); - sender.sendMessage( - "Set " + attribute.getName() + " to " + value + " for " + target.getName()); - player.setItemAttributes(attribute, target.getInventory().getItemInMainHand(), value); - syncSRToPlayer(player, target); - PlayerManager pm = PlayerManager.getInstance(PlayerManager.class); - pm.savePlayer(player); - } catch (NumberFormatException e) { - sender.sendMessage("Invalid value."); - } - } else if (args[0].equalsIgnoreCase("get")) { - SRPlayer player = getSrPlayer(sender, target); - if (player == null) return true; - sender.sendMessage( - "Get " - + attribute.getName() - + " for " - + target.getName() - + ": " - + player.getAttribute(attribute)); - } else if (args[0].equalsIgnoreCase("remove")) { - SRPlayer player = getSrPlayer(sender, target); - if (player == null) return true; - player.removeAttribute(attribute); - player.removeItemAttributes(attribute, target.getInventory().getItemInMainHand()); - syncSRToPlayer(player, target); - sender.sendMessage("Removed " + attribute.getName() + " for " + target.getName()); - PlayerManager pm = PlayerManager.getInstance(PlayerManager.class); - pm.savePlayer(player); - } else { - sender.sendMessage("Usage: /attribute [value]"); + if (args[0].equalsIgnoreCase("set") && (set(sender, args, attribute, target))) { + return true; + } + if (args[0].equalsIgnoreCase("get") && (get(sender, target, attribute))) { + return true; + } + if (args[0].equalsIgnoreCase(REMOVE) && (remove(sender, target, attribute))) { + return true; } + sender.sendMessage("Usage: /attribute [value]"); return true; } @@ -235,7 +280,7 @@ public class AttributeCommand implements TabExecutor { return null; } if (args.length == 1) { - return List.of("set", "get", "gui", "remove"); + return List.of("set", "get", "gui", REMOVE); } if (args.length == 2) { List players = @@ -252,4 +297,6 @@ public class AttributeCommand implements TabExecutor { } return null; } + + private record Result(double value, SRPlayer player) {} } diff --git a/src/main/java/me/unurled/sacredrealms/sr/commands/admin/ClientBuildCommand.java b/src/main/java/me/unurled/sacredrealms/sr/commands/admin/ClientBuildCommand.java index 00324df..6e36418 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/commands/admin/ClientBuildCommand.java +++ b/src/main/java/me/unurled/sacredrealms/sr/commands/admin/ClientBuildCommand.java @@ -25,9 +25,129 @@ import org.jetbrains.annotations.Nullable; public class ClientBuildCommand implements TabExecutor, Listener { + public static final String USAGE = + "Usage: /clientbuild "; + public static final String DOES_NOT_EXIST = "A client build with that name does not exist."; + public static final String MODIFY = "modify"; + public static final String DISPLAY = "display"; + public static final String DELETE = "delete"; private List nameCompletions = new ArrayList<>(); private ClientBuildManager manager = null; + private static void display( + @NotNull CommandSender sender, + @NotNull String @NotNull [] args, + Player p, + @NotNull ClientBuildManager clientBuildManager) { + String name = args[1].toLowerCase(); + if (!clientBuildManager.getBuildNames().contains(name)) { + sender.sendMessage(DOES_NOT_EXIST); + return; + } + ClientBuild build = clientBuildManager.getBuild(name); + if (build == null) { + sender.sendMessage("An error occurred while displaying the client build."); + return; + } + if (clientBuildManager.getPlayerBuilds(p).contains(name)) { + clientBuildManager.removeDisplayFromPlayer(p, build); + sender.sendMessage("Removed the client build display."); + } else { + clientBuildManager.displayToPlayer(p, build); + sender.sendMessage("Displayed the client build."); + } + } + + private static void save( + @NotNull CommandSender sender, + @NotNull String @NotNull [] args, + Player p, + @NotNull ClientBuildManager clientBuildManager) { + // save the client build to the list of builds so stopping the listener. + ClientBuild build = new ClientBuild(args[1].toLowerCase()); + if (!clientBuildManager.hasTemporaryBlocks(p)) { + sender.sendMessage("You do not have any temporary blocks to save."); + return; + } + HashMap blocks = clientBuildManager.getTemporaryBlocks(p); + log("blocks: " + blocks.size()); + for (Entry block : blocks.entrySet()) { + build.addBlock(block.getKey(), block.getValue()); + } + + clientBuildManager.addBuild(build); + + // remove blocks from the world + for (Entry block : + clientBuildManager.getTemporaryPreviousBlocks(p).entrySet()) { + block.getKey().getWorld().setBlockData(block.getKey(), block.getValue()); + } + + clientBuildManager.removeTemporaryBlocks(p); + clientBuildManager.removeTemporaryPreviousBlocks(p); + + sender.sendMessage("Client builds saved."); + } + + private static void modify( + @NotNull CommandSender sender, + @NotNull String @NotNull [] args, + Player p, + @NotNull ClientBuildManager clientBuildManager) { + String name = args[1].toLowerCase(); + if (!clientBuildManager.getBuildNames().contains(name)) { + sender.sendMessage(DOES_NOT_EXIST); + return; + } + sender.sendMessage("Modify the client build and save after you are finished."); + clientBuildManager.setTemporaryBlocks(p, new HashMap<>()); + clientBuildManager.setTemporaryPreviousBlocks(p, new HashMap<>()); + } + + private static void delete( + @NotNull CommandSender sender, + @NotNull String @NotNull [] args, + @NotNull ClientBuildManager clientBuildManager) { + String name = args[1].toLowerCase(); + if (!clientBuildManager.getBuildNames().contains(name)) { + sender.sendMessage(DOES_NOT_EXIST); + return; + } + clientBuildManager.removeBuild(name); + sender.sendMessage("Client build deleted."); + } + + private static void create( + @NotNull CommandSender sender, + @NotNull String @NotNull [] args, + Player p, + @NotNull ClientBuildManager clientBuildManager) { + String name = args[1].toLowerCase(); + if (clientBuildManager.getBuildNames().contains(name)) { + sender.sendMessage("A client build with that name already exists."); + return; + } + sender.sendMessage( + "Client build created, place blocks that you want to add to the Client" + + " Build and save after you are finished."); + clientBuildManager.setTemporaryBlocks(p, new HashMap<>()); + clientBuildManager.setTemporaryPreviousBlocks(p, new HashMap<>()); + } + + private static void list( + @NotNull CommandSender sender, @NotNull ClientBuildManager clientBuildManager) { + List builds = clientBuildManager.getBuilds(); + if (builds.isEmpty()) { + sender.sendMessage("There are no client builds."); + return; + } + + sender.sendMessage("Client Builds:"); + for (ClientBuild build : builds) { + if (build != null) sender.sendMessage(build.getName()); + } + } + /** * Executes the given command, returning its success.
* If false is returned, then the "usage" plugin.yml entry for this command (if defined) will be @@ -60,112 +180,38 @@ public class ClientBuildCommand implements TabExecutor, Listener { return true; } - ClientBuildManager manager = ClientBuildManager.getInstance(ClientBuildManager.class); - if (args.length == 1) { // list + ClientBuildManager clientBuildManager = + ClientBuildManager.getInstance(ClientBuildManager.class); + if (args.length == 1) { if (args[0].equalsIgnoreCase("list")) { - - List builds = manager.getBuilds(); - if (builds.isEmpty()) { - sender.sendMessage("There are no client builds."); - return true; - } - - sender.sendMessage("Client Builds:"); - for (ClientBuild build : builds) { - if (build != null) sender.sendMessage(build.getName()); - } - return true; - - } else { - sender.sendMessage("Usage: /clientbuild "); + list(sender, clientBuildManager); return true; } + sender.sendMessage(USAGE); + return true; } else if (args.length == 2) { // create, delete, modify, save, display if (args[0].equalsIgnoreCase("create")) { - String name = args[1].toLowerCase(); - if (manager.getBuildNames().contains(name)) { - sender.sendMessage("A client build with that name already exists."); - return true; - } - sender.sendMessage( - "Client build created, place blocks that you want to add to the Client" - + " Build and save after you are finished."); - manager.setTemporaryBlocks(p, new HashMap<>()); - manager.setTemporaryPreviousBlocks(p, new HashMap<>()); + create(sender, args, p, clientBuildManager); return true; - } else if (args[0].equalsIgnoreCase("delete")) { - String name = args[1].toLowerCase(); - if (!manager.getBuildNames().contains(name)) { - sender.sendMessage("A client build with that name does not exist."); - return true; - } - manager.removeBuild(name); - sender.sendMessage("Client build deleted."); + } else if (args[0].equalsIgnoreCase(DELETE)) { + delete(sender, args, clientBuildManager); return true; - } else if (args[0].equalsIgnoreCase("modify")) { - String name = args[1].toLowerCase(); - if (!manager.getBuildNames().contains(name)) { - sender.sendMessage("A client build with that name does not exist."); - return true; - } - sender.sendMessage("Modify the client build and save after you are finished."); - manager.setTemporaryBlocks(p, new HashMap<>()); - manager.setTemporaryPreviousBlocks(p, new HashMap<>()); + } else if (args[0].equalsIgnoreCase(MODIFY)) { + modify(sender, args, p, clientBuildManager); return true; } else if (args[0].equalsIgnoreCase("save")) { - // save the client build to the list of builds so stopping the listener. - ClientBuild build = new ClientBuild(args[1].toLowerCase()); - if (!manager.hasTemporaryBlocks(p)) { - sender.sendMessage("You do not have any temporary blocks to save."); - return true; - } - HashMap blocks = manager.getTemporaryBlocks(p); - log("blocks: " + blocks.size()); - for (Entry block : blocks.entrySet()) { - build.addBlock(block.getKey(), block.getValue()); - } - - manager.addBuild(build); - - // remove blocks from the world - for (Entry block : manager.getTemporaryPreviousBlocks(p).entrySet()) { - block.getKey().getWorld().setBlockData(block.getKey(), block.getValue()); - // p.sendBlockChange(block.getLocation(), block.getBlockData()); - } - - manager.removeTemporaryBlocks(p); - manager.removeTemporaryPreviousBlocks(p); - - sender.sendMessage("Client builds saved."); + save(sender, args, p, clientBuildManager); return true; - } else if (args[0].equalsIgnoreCase("display")) { - String name = args[1].toLowerCase(); - if (!manager.getBuildNames().contains(name)) { - sender.sendMessage("A client build with that name does not exist."); - return true; - } - ClientBuild build = manager.getBuild(name); - if (build == null) { - sender.sendMessage("An error occurred while displaying the client build."); - return true; - } - if (manager.getPlayerBuilds(p).contains(name)) { - manager.removeDisplayFromPlayer(p, build); - sender.sendMessage("Removed the client build display."); - } else { - manager.displayToPlayer(p, build); - sender.sendMessage("Displayed the client build."); - } - return true; - } else { - sender.sendMessage("Usage: /clientbuild "); + } else if (args[0].equalsIgnoreCase(DISPLAY)) { + display(sender, args, p, clientBuildManager); return true; } - } else { - sender.sendMessage("Usage: /clientbuild "); + sender.sendMessage(USAGE); return true; } + sender.sendMessage(USAGE); + return true; } @EventHandler @@ -222,18 +268,19 @@ public class ClientBuildCommand implements TabExecutor, Listener { @NotNull String label, @NotNull String[] args) { if (args.length == 1) { - return List.of("create", "delete", "list", "modify", "save", "display"); - } else if (args.length == 2) { - if (args[0].equalsIgnoreCase("delete") - || args[0].equalsIgnoreCase("modify") - || args[0].equalsIgnoreCase("display")) { - ClientBuildManager manager = ClientBuildManager.getInstance(ClientBuildManager.class); - List buildNames = manager.getBuildNames(); + return List.of("create", DELETE, "list", MODIFY, "save", DISPLAY); + } else if (args.length == 2 + && (args[0].equalsIgnoreCase(DELETE) + || args[0].equalsIgnoreCase(MODIFY) + || args[0].equalsIgnoreCase(DISPLAY))) { + ClientBuildManager clientBuildManager = + ClientBuildManager.getInstance(ClientBuildManager.class); + List buildNames = clientBuildManager.getBuildNames(); if (nameCompletions.isEmpty() || !new HashSet<>(nameCompletions).containsAll(buildNames)) { nameCompletions = buildNames; } return nameCompletions; - } + } return null; }