code refactoring

This commit is contained in:
unurled 2024-03-18 20:53:18 +01:00
parent cff22c8f18
commit abd733fd09
Signed by: unurled
GPG key ID: FDBC9CBE1F82423F
2 changed files with 121 additions and 88 deletions

View file

@ -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 <ID>");
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 <ID> <type|behavior|loot|item|stats|name|level>");
return true;
}
if (args[2].equalsIgnoreCase("type")) {
if (args.length < 5) {
sender.sendMessage("Usage: /entitytype edit <ID> type <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 <ID>");
return true;
}
return false;
}
private static boolean create(@NotNull CommandSender sender, @NotNull String @NotNull [] args) {
if (args.length < 2) {
sender.sendMessage("Usage: /entitytype create <ID>");
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. <br>
* 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 <ID>");
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 <ID>");
return true;
}
break;
case "edit":
if (args.length < 2) {
sender.sendMessage("Usage: /entitytype edit <ID>");
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 <ID> <type|behavior|loot|item|stats|name|level>");
return true;
}
if (args[2].equalsIgnoreCase("type")) {
if (args.length < 5) {
sender.sendMessage("Usage: /entitytype edit <ID> type <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 <create|delete|edit|list>");
}
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;