code refactoring

This commit is contained in:
unurled 2024-03-18 21:13:49 +01:00
parent 57ddb6ca01
commit b2640cb096
Signed by: unurled
GPG key ID: FDBC9CBE1F82423F
2 changed files with 317 additions and 223 deletions

View file

@ -21,6 +21,9 @@ import xyz.xenondevs.invui.window.Window;
public class AttributeCommand implements TabExecutor { public class AttributeCommand implements TabExecutor {
public static final String FOR = " for ";
public static final String REMOVE = "remove";
@Nullable @Nullable
private static SRPlayer getSrPlayer(@NotNull CommandSender sender, Player target) { private static SRPlayer getSrPlayer(@NotNull CommandSender sender, Player target) {
PlayerManager pm = PlayerManager.getInstance(PlayerManager.class); PlayerManager pm = PlayerManager.getInstance(PlayerManager.class);
@ -36,6 +39,160 @@ public class AttributeCommand implements TabExecutor {
return player; 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 <set|get|remove> <player> <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 <player>");
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. <br> * 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 * 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; return true;
} }
if (args[0].equals("gui")) { if (args[0].equals("gui")) {
// open gui return gui(sender, args);
if (args.length != 2) {
sender.sendMessage("Usage: /attribute gui <player>");
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;
} }
if (args[1].equals("item-in-hand")) { if (args[1].equals("item-in-hand")) {
if (!(sender instanceof Player target)) { return itemInHand(sender, args);
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 <set|get|remove> <player> <attribute> [value]");
}
return true;
} }
Player target = Bukkit.getPlayer(args[1]); Player target = Bukkit.getPlayer(args[1]);
if (target == null) { if (target == null) {
@ -164,52 +244,17 @@ public class AttributeCommand implements TabExecutor {
return true; return true;
} }
if (args[0].equalsIgnoreCase("set")) { if (args[0].equalsIgnoreCase("set") && (set(sender, args, attribute, target))) {
try { return true;
double value = Double.parseDouble(args[3]); }
if (value < attribute.getMinValue() || value > attribute.getMaxValue()) { if (args[0].equalsIgnoreCase("get") && (get(sender, target, attribute))) {
sender.sendMessage( return true;
"Value out of bounds. Min: " }
+ attribute.getMinValue() if (args[0].equalsIgnoreCase(REMOVE) && (remove(sender, target, attribute))) {
+ ", Max: " return true;
+ 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 <set|get|remove> <player> <attribute> [value]");
} }
sender.sendMessage("Usage: /attribute <set|get|remove> <player> <attribute> [value]");
return true; return true;
} }
@ -235,7 +280,7 @@ public class AttributeCommand implements TabExecutor {
return null; return null;
} }
if (args.length == 1) { if (args.length == 1) {
return List.of("set", "get", "gui", "remove"); return List.of("set", "get", "gui", REMOVE);
} }
if (args.length == 2) { if (args.length == 2) {
List<String> players = List<String> players =
@ -252,4 +297,6 @@ public class AttributeCommand implements TabExecutor {
} }
return null; return null;
} }
private record Result(double value, SRPlayer player) {}
} }

View file

@ -25,9 +25,129 @@ import org.jetbrains.annotations.Nullable;
public class ClientBuildCommand implements TabExecutor, Listener { public class ClientBuildCommand implements TabExecutor, Listener {
public static final String USAGE =
"Usage: /clientbuild <create|delete|modify|save|display> <name>";
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<String> nameCompletions = new ArrayList<>(); private List<String> nameCompletions = new ArrayList<>();
private ClientBuildManager manager = null; 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<Location, BlockData> blocks = clientBuildManager.getTemporaryBlocks(p);
log("blocks: " + blocks.size());
for (Entry<Location, BlockData> block : blocks.entrySet()) {
build.addBlock(block.getKey(), block.getValue());
}
clientBuildManager.addBuild(build);
// remove blocks from the world
for (Entry<Location, BlockData> 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<ClientBuild> 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. <br> * 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 * 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; return true;
} }
ClientBuildManager manager = ClientBuildManager.getInstance(ClientBuildManager.class); ClientBuildManager clientBuildManager =
if (args.length == 1) { // list ClientBuildManager.getInstance(ClientBuildManager.class);
if (args.length == 1) {
if (args[0].equalsIgnoreCase("list")) { if (args[0].equalsIgnoreCase("list")) {
list(sender, clientBuildManager);
List<ClientBuild> 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 <create|delete|modify|save|display> <name>");
return true; return true;
} }
sender.sendMessage(USAGE);
return true;
} else if (args.length == 2) { } else if (args.length == 2) {
// create, delete, modify, save, display // create, delete, modify, save, display
if (args[0].equalsIgnoreCase("create")) { if (args[0].equalsIgnoreCase("create")) {
String name = args[1].toLowerCase(); create(sender, args, p, clientBuildManager);
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<>());
return true; return true;
} else if (args[0].equalsIgnoreCase("delete")) { } else if (args[0].equalsIgnoreCase(DELETE)) {
String name = args[1].toLowerCase(); delete(sender, args, clientBuildManager);
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.");
return true; return true;
} else if (args[0].equalsIgnoreCase("modify")) { } else if (args[0].equalsIgnoreCase(MODIFY)) {
String name = args[1].toLowerCase(); modify(sender, args, p, clientBuildManager);
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<>());
return true; return true;
} else if (args[0].equalsIgnoreCase("save")) { } else if (args[0].equalsIgnoreCase("save")) {
// save the client build to the list of builds so stopping the listener. save(sender, args, p, clientBuildManager);
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<Location, BlockData> blocks = manager.getTemporaryBlocks(p);
log("blocks: " + blocks.size());
for (Entry<Location, BlockData> block : blocks.entrySet()) {
build.addBlock(block.getKey(), block.getValue());
}
manager.addBuild(build);
// remove blocks from the world
for (Entry<Location, BlockData> 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.");
return true; return true;
} else if (args[0].equalsIgnoreCase("display")) { } else if (args[0].equalsIgnoreCase(DISPLAY)) {
String name = args[1].toLowerCase(); display(sender, args, p, clientBuildManager);
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 <create|delete|modify|save|display> <name>");
return true; return true;
} }
} else { sender.sendMessage(USAGE);
sender.sendMessage("Usage: /clientbuild <create|delete|modify|save|display> <name>");
return true; return true;
} }
sender.sendMessage(USAGE);
return true;
} }
@EventHandler @EventHandler
@ -222,18 +268,19 @@ public class ClientBuildCommand implements TabExecutor, Listener {
@NotNull String label, @NotNull String label,
@NotNull String[] args) { @NotNull String[] args) {
if (args.length == 1) { if (args.length == 1) {
return List.of("create", "delete", "list", "modify", "save", "display"); return List.of("create", DELETE, "list", MODIFY, "save", DISPLAY);
} else if (args.length == 2) { } else if (args.length == 2
if (args[0].equalsIgnoreCase("delete") && (args[0].equalsIgnoreCase(DELETE)
|| args[0].equalsIgnoreCase("modify") || args[0].equalsIgnoreCase(MODIFY)
|| args[0].equalsIgnoreCase("display")) { || args[0].equalsIgnoreCase(DISPLAY))) {
ClientBuildManager manager = ClientBuildManager.getInstance(ClientBuildManager.class); ClientBuildManager clientBuildManager =
List<String> buildNames = manager.getBuildNames(); ClientBuildManager.getInstance(ClientBuildManager.class);
List<String> buildNames = clientBuildManager.getBuildNames();
if (nameCompletions.isEmpty() || !new HashSet<>(nameCompletions).containsAll(buildNames)) { if (nameCompletions.isEmpty() || !new HashSet<>(nameCompletions).containsAll(buildNames)) {
nameCompletions = buildNames; nameCompletions = buildNames;
} }
return nameCompletions; return nameCompletions;
}
} }
return null; return null;
} }