code refactoring
This commit is contained in:
parent
57ddb6ca01
commit
b2640cb096
2 changed files with 317 additions and 223 deletions
|
@ -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) {}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue