diff --git a/src/main/java/me/unurled/sacredrealms/sr/commands/admin/EntityTypeCommand.java b/src/main/java/me/unurled/sacredrealms/sr/commands/admin/EntityTypeCommand.java index 02e8450..2f5ed1d 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/commands/admin/EntityTypeCommand.java +++ b/src/main/java/me/unurled/sacredrealms/sr/commands/admin/EntityTypeCommand.java @@ -1,5 +1,8 @@ package me.unurled.sacredrealms.sr.commands.admin; +import static me.unurled.sacredrealms.sr.utils.Component.NOT_PLAYER; +import static me.unurled.sacredrealms.sr.utils.Component.comp; + import java.util.Arrays; import java.util.List; import me.unurled.sacredrealms.sr.components.entity.EntityManager; @@ -16,6 +19,97 @@ import xyz.xenondevs.invui.window.Window; public class EntityTypeCommand implements TabExecutor { + private static boolean list(@NotNull CommandSender sender, @NotNull String @NotNull [] args) { + if (!(sender instanceof Player p)) { + sender.sendMessage(comp(NOT_PLAYER)); + return true; + } + Window window = + Window.single().setViewer(p).setTitle(args[1]).setGui(EntityTypeGUI.listGui()).build(); + window.open(); + return false; + } + + private static boolean edit(@NotNull CommandSender sender, @NotNull String @NotNull [] args) { + if (args.length < 2) { + sender.sendMessage("Usage: /entitytype edit "); + return true; + } + if (!(sender instanceof Player p)) { + sender.sendMessage(comp(NOT_PLAYER)); + return true; + } + if (args.length < 3) { + EntityManager em = EntityManager.getInstance(EntityManager.class); + if (!em.getTypes().stream().map(SREntityType::getID).toList().contains(args[1])) { + sender.sendMessage("Invalid entity type."); + return true; + } + SREntityType type = em.getType(args[1]); + Window window = + Window.single() + .setViewer(p) + .setTitle(args[1]) + .setGui(EntityTypeGUI.createGui(type)) + .build(); + window.open(); + return true; + } + if (args.length < 4) { + sender.sendMessage("Usage: /entitytype edit "); + return true; + } + if (args[2].equalsIgnoreCase("type")) { + if (args.length < 5) { + sender.sendMessage("Usage: /entitytype edit type "); + return true; + } + try { + EntityType type = EntityType.valueOf(args[4]); + EntityManager em = EntityManager.getInstance(EntityManager.class); + if (setType(sender, args, em, type)) return true; + } catch (IllegalArgumentException e) { + sender.sendMessage("Invalid entity type."); + return true; + } + } + return false; + } + + private static boolean delete(@NotNull CommandSender sender, @NotNull String @NotNull [] args) { + if (args.length < 2) { + sender.sendMessage("Usage: /entitytype delete "); + return true; + } + return false; + } + + private static boolean create(@NotNull CommandSender sender, @NotNull String @NotNull [] args) { + if (args.length < 2) { + sender.sendMessage("Usage: /entitytype create "); + return true; + } + if (!(sender instanceof Player)) { + sender.sendMessage(comp(NOT_PLAYER)); + return true; + } + return false; + } + + private static boolean setType( + @NotNull CommandSender sender, + @NotNull String @NotNull [] args, + EntityManager em, + EntityType type) { + try { + em.getType(args[1]).setType(type); + } catch (Exception e) { + sender.sendMessage("An error occurred while setting the entity type."); + return true; + } + return false; + } + /** * Executes the given command, returning its success.
* If false is returned, then the "usage" plugin.yml entry for this command (if defined) will be @@ -44,80 +138,20 @@ public class EntityTypeCommand implements TabExecutor { } switch (args[0].toLowerCase()) { - case "create": - if (args.length < 2) { - sender.sendMessage("Usage: /entitytype create "); - return true; - } - if (!(sender instanceof Player p)) { - sender.sendMessage("You must be a player to use this command."); - return true; - } - break; - case "delete": - if (args.length < 2) { - sender.sendMessage("Usage: /entitytype delete "); - return true; - } - break; - case "edit": - if (args.length < 2) { - sender.sendMessage("Usage: /entitytype edit "); - return true; - } - if (!(sender instanceof Player p)) { - sender.sendMessage("You must be a player to use this command."); - return true; - } - if (args.length < 3) { - EntityManager em = EntityManager.getInstance(EntityManager.class); - if (!em.getTypes().stream().map(SREntityType::getID).toList().contains(args[1])) { - sender.sendMessage("Invalid entity type."); - return true; - } - SREntityType type = em.getType(args[1]); - Window window = - Window.single() - .setViewer(p) - .setTitle(args[1]) - .setGui(EntityTypeGUI.createGui(type)) - .build(); - return true; - } - if (args.length < 4) { - sender.sendMessage( - "Usage: /entitytype edit "); - return true; - } - if (args[2].equalsIgnoreCase("type")) { - if (args.length < 5) { - sender.sendMessage("Usage: /entitytype edit type "); - return true; - } - try { - EntityType type = EntityType.valueOf(args[4]); - EntityManager em = EntityManager.getInstance(EntityManager.class); - try { - em.getType(args[1]).setType(type); - } catch (Exception e) { - sender.sendMessage("An error occurred while setting the entity type."); - return true; - } - } catch (IllegalArgumentException e) { - sender.sendMessage("Invalid entity type."); - return true; - } - } - break; - case "list": - if (!(sender instanceof Player p)) { - sender.sendMessage("You must be a player to use this command."); - return true; - } - Window window = - Window.single().setViewer(p).setTitle(args[1]).setGui(EntityTypeGUI.listGui()).build(); - window.open(); - break; + case "create" -> { + if (create(sender, args)) return true; + } + case "delete" -> { + if (delete(sender, args)) return true; + } + + case "edit" -> { + if (edit(sender, args)) return true; + } + case "list" -> { + if (list(sender, args)) return true; + } + default -> sender.sendMessage("Usage: /entitytype "); } return true; } @@ -149,21 +183,15 @@ public class EntityTypeCommand implements TabExecutor { .map(SREntityType::getID) .toList(); } - if (args.length == 3) { - if (args[0].equalsIgnoreCase("edit")) { + if (args.length == 3 && (args[0].equalsIgnoreCase("edit"))) { return List.of("type", "behavior", "loot", "item", "stats", "name", "level"); - } } - if (args.length == 4) { - if (args[0].equalsIgnoreCase("edit")) { - if (args[2].equalsIgnoreCase("type")) { - return List.of( - Arrays.stream(EntityType.values()) - .filter(EntityType::isAlive) - .map(EntityType::name) - .toString()); - } - } + if (args.length == 4 + && (args[0].equalsIgnoreCase("edit") && (args[2].equalsIgnoreCase("type")))) { + return Arrays.stream(EntityType.values()) + .filter(EntityType::isAlive) + .map(EntityType::name) + .toList(); } } return null; diff --git a/src/main/java/me/unurled/sacredrealms/sr/utils/Component.java b/src/main/java/me/unurled/sacredrealms/sr/utils/Component.java index e5503c0..a4832e4 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/utils/Component.java +++ b/src/main/java/me/unurled/sacredrealms/sr/utils/Component.java @@ -1,10 +1,15 @@ package me.unurled.sacredrealms.sr.utils; import net.kyori.adventure.text.minimessage.MiniMessage; +import org.jetbrains.annotations.NotNull; public class Component { - public static net.kyori.adventure.text.Component comp(String msg) { + public static final String NOT_PLAYER = "You must be a player to use this command."; + + private Component() {} + + public static net.kyori.adventure.text.@NotNull Component comp(String msg) { MiniMessage mm = MiniMessage.miniMessage(); return mm.deserialize(msg); }