From 7c54df0f330a4a736342223255a3717298329250 Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 13:01:48 +0100 Subject: [PATCH 01/74] add dimension to getPlayer --- src/main/java/org/sk/skMinecraft/SkMinecraft.java | 9 +++++++++ src/main/java/org/sk/skMinecraft/commands/GetPlayer.java | 2 ++ 2 files changed, 11 insertions(+) diff --git a/src/main/java/org/sk/skMinecraft/SkMinecraft.java b/src/main/java/org/sk/skMinecraft/SkMinecraft.java index 31956ac..3caf30e 100644 --- a/src/main/java/org/sk/skMinecraft/SkMinecraft.java +++ b/src/main/java/org/sk/skMinecraft/SkMinecraft.java @@ -40,6 +40,15 @@ public static String joinWithSeperator(Object... args) { return result; } + public static String convertWorldName(String worldName) { + switch (worldName) { + case "world": return "OVERWORLD"; + case "world_nether": return "NETHER"; + case "world_the_end": return "END"; + default: return "UNKOWN"; + } + } + @Override public void onEnable() { CentralResourceHandler.init(); diff --git a/src/main/java/org/sk/skMinecraft/commands/GetPlayer.java b/src/main/java/org/sk/skMinecraft/commands/GetPlayer.java index 685ee37..4530be6 100644 --- a/src/main/java/org/sk/skMinecraft/commands/GetPlayer.java +++ b/src/main/java/org/sk/skMinecraft/commands/GetPlayer.java @@ -45,6 +45,7 @@ public void apply() { int x = loc.getBlockX(); int y = loc.getBlockY(); int z = loc.getBlockZ(); + String world_name = SkMinecraft.convertWorldName(loc.getWorld().getName()); int rotation = (int)loc.getYaw(); boolean sneak = target.isSneaking(); double maxhealth = target.getAttribute(Attribute.MAX_HEALTH).getBaseValue(); @@ -60,6 +61,7 @@ public void apply() { x, y, z, + world_name, rotation, looking_at, sneak, From f11a134d7c0e264843076fddd6770dff1b7e0513 Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 13:45:56 +0100 Subject: [PATCH 02/74] add positional arguments to ArgumentParser --- .../skMinecraft/commands/ArgumentParser.java | 96 ++++++++++++++----- 1 file changed, 71 insertions(+), 25 deletions(-) diff --git a/src/main/java/org/sk/skMinecraft/commands/ArgumentParser.java b/src/main/java/org/sk/skMinecraft/commands/ArgumentParser.java index 7ec4ed9..a8cda04 100644 --- a/src/main/java/org/sk/skMinecraft/commands/ArgumentParser.java +++ b/src/main/java/org/sk/skMinecraft/commands/ArgumentParser.java @@ -1,5 +1,7 @@ package org.sk.skMinecraft.commands; +import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.function.Function; @@ -8,7 +10,7 @@ public class ArgumentParser { public static Function StringParser = (arg) -> arg; - + public static Function IntParser = Integer::parseInt; public static class ArgumentResult { Object value; @@ -40,64 +42,108 @@ public float asFloat() { public Object get() {return this.value;} } - private record argument(Function parser, Object defaultValue) {} - private final HashMap arguments; - private final HashSet flags; + private record Argument(Function parser, Object defaultValue) {} + public record ParseResult(ArrayList positional, HashMap optionals, boolean valid) { + public ArgumentResult getPositional(int index) { + return positional.get(index); + } + + public ArgumentResult getOptional(String name) { + return optionals.get(name); + } + + public boolean isValid() { + return valid; + } + } + + private final ArrayList> positionalArguments; + private final HashMap optionalArguments; + private final HashSet flags; + public ArgumentParser(){ - this.arguments = new HashMap<>(); + this.positionalArguments = new ArrayList<>(); + this.optionalArguments = new HashMap<>(); this.flags = new HashSet<>(); } - public void addArgument(String name, Function parser, Object defaultValue) { - this.arguments.put(name, new argument(parser, defaultValue)); + public void addPositionalArgument(Function parser) { + positionalArguments.add(parser); + } + + public void addOptionalArgument(String name, Function parser, Object defaultValue) { + this.optionalArguments.put(name, new Argument(parser, defaultValue)); } - public void addArgument(String name, Function parser) { - this.addArgument(name, parser, null); + public void addOptionalArgument(String name, Function parser) { + this.addOptionalArgument(name, parser, null); } public void addFlag(String name){ this.flags.add(name); } - public HashMap parse(String[] parts) { - HashMap result = new HashMap<>(); - - for (String part : parts) { + public ParseResult parse(String[] parts) { + + if(parts.length < positionalArguments.size()) { + return new ParseResult(null, null, false); + } + + ArrayList postionals = new ArrayList<>(); + for(int i = 0;i < positionalArguments.size();i++) { + try { + String part = parts[i]; + Function parser = positionalArguments.get(i); + Object parsedResult = parser.apply(part); + + postionals.add(new ArgumentResult(parsedResult)); + } catch(Exception e) { + return new ParseResult(null, null, false); + } + } + + String[] optionalParts = Arrays + .stream(parts, positionalArguments.size(), parts.length) + .toArray(String[]::new); + + HashMap optionals = new HashMap<>(); + for (String part : optionalParts) { System.out.println(part); String[] arg = part.split(":"); String arg_name = arg[0]; if(this.flags.contains(arg_name)) { - result.put(arg_name, new ArgumentResult(true)); + optionals.put(arg_name, new ArgumentResult(true)); continue; } - if (arg.length != 2 || !arguments.containsKey(arg_name)) { + if (arg.length != 2 || !optionalArguments.containsKey(arg_name)) { continue; } - Object value = arguments.get(arg_name).defaultValue; + Object value = optionalArguments.get(arg_name).defaultValue; try { - value = arguments.get(arg_name).parser.apply(arg[1]); - } catch (Exception ignored) {} + value = optionalArguments.get(arg_name).parser.apply(arg[1]); + } catch (Exception ignored) { + return new ParseResult(null, null, false); + } - result.put(arg_name, new ArgumentResult(value)); + optionals.put(arg_name, new ArgumentResult(value)); } - for(String key: this.arguments.keySet()) { - if(result.containsKey(key)) continue; + for(String key: this.optionalArguments.keySet()) { + if(optionals.containsKey(key)) continue; - result.put(key, new ArgumentResult(this.arguments.get(key).defaultValue)); + optionals.put(key, new ArgumentResult(this.optionalArguments.get(key).defaultValue)); } for(String key : this.flags) { - if(result.containsKey(key)) continue; + if(optionals.containsKey(key)) continue; - result.put(key, new ArgumentResult(false)); + optionals.put(key, new ArgumentResult(false)); } - return result; + return new ParseResult(postionals, optionals, true); } } From e88ef3382de592d8b2c63823f0e3977491a2eca9 Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 13:46:11 +0100 Subject: [PATCH 03/74] update getPlayer with new positional arguments --- .../org/sk/skMinecraft/commands/GetPlayer.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/sk/skMinecraft/commands/GetPlayer.java b/src/main/java/org/sk/skMinecraft/commands/GetPlayer.java index 685ee37..c8e6852 100644 --- a/src/main/java/org/sk/skMinecraft/commands/GetPlayer.java +++ b/src/main/java/org/sk/skMinecraft/commands/GetPlayer.java @@ -5,6 +5,7 @@ import org.bukkit.attribute.Attribute; import org.bukkit.entity.Player; import org.sk.skMinecraft.SkMinecraft; +import org.sk.skMinecraft.commands.ArgumentParser.ParseResult; public class GetPlayer extends Command { @@ -13,16 +14,18 @@ public class GetPlayer extends Command { public GetPlayer(String command) { String[] parts = command.split(SkMinecraft.seperator); - if(parts.length != 2) { + ArgumentParser parser = new ArgumentParser(); + + parser.addPositionalArgument(ArgumentParser.IntParser); + + ParseResult arguments = parser.parse(parts); + + if(!arguments.isValid()) { this.valid = false; return; } - try { - this.playerIndex = Integer.parseInt(parts[1]); - } catch (NumberFormatException e) { - this.valid = false; - } + this.playerIndex = arguments.getPositional(0).asInt(); } @Override From 68d10bf42c712b20611ca56823a3532e099ee40b Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 14:48:50 +0100 Subject: [PATCH 04/74] improve the retrival of results --- .../skMinecraft/commands/ArgumentParser.java | 33 ++++++++++++++----- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/sk/skMinecraft/commands/ArgumentParser.java b/src/main/java/org/sk/skMinecraft/commands/ArgumentParser.java index a8cda04..a3227a3 100644 --- a/src/main/java/org/sk/skMinecraft/commands/ArgumentParser.java +++ b/src/main/java/org/sk/skMinecraft/commands/ArgumentParser.java @@ -11,6 +11,7 @@ public class ArgumentParser { public static Function StringParser = (arg) -> arg; public static Function IntParser = Integer::parseInt; + public static Function DoubleParser = Double::parseDouble; public static class ArgumentResult { Object value; @@ -19,6 +20,11 @@ public ArgumentResult(Object value) { this.value = value; } + @SuppressWarnings("unchecked") + public T get() { + return (T)this.value; + } + public int asInt() { return (int)value; } @@ -39,24 +45,32 @@ public float asFloat() { return (Float)value; } - public Object get() {return this.value;} + // public Object get() {return this.value;} } private record Argument(Function parser, Object defaultValue) {} public record ParseResult(ArrayList positional, HashMap optionals, boolean valid) { - public ArgumentResult getPositional(int index) { - return positional.get(index); + public T getPositional(int index) { + return positional.get(index).get(); } - public ArgumentResult getOptional(String name) { - return optionals.get(name); + public T getOptional(String name) { + return optionals.get(name).get(); } public boolean isValid() { return valid; } - } + + public boolean getFlag(String name) { + return !optionals.get(name).asBool(); + } + + public boolean isSet(String name) { + return !optionals.get(name).isNull(); + } + } private final ArrayList> positionalArguments; private final HashMap optionalArguments; @@ -68,8 +82,11 @@ public ArgumentParser(){ this.flags = new HashSet<>(); } - public void addPositionalArgument(Function parser) { - positionalArguments.add(parser); + @SafeVarargs + public final void addPositionalArguments(Function ...parsers) { + for(Function parser : parsers) { + this.positionalArguments.add(parser); + } } public void addOptionalArgument(String name, Function parser, Object defaultValue) { From 5d821dac0bf4faa72db18c3f1c47d8ff0b0955ce Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 14:49:19 +0100 Subject: [PATCH 05/74] refactor command to StringCommand --- .../java/org/sk/skMinecraft/CommandFactory.java | 13 ++++++------- src/main/java/org/sk/skMinecraft/SkMinecraft.java | 10 +++++++++- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/sk/skMinecraft/CommandFactory.java b/src/main/java/org/sk/skMinecraft/CommandFactory.java index 090a8e0..266cd13 100644 --- a/src/main/java/org/sk/skMinecraft/CommandFactory.java +++ b/src/main/java/org/sk/skMinecraft/CommandFactory.java @@ -1,5 +1,6 @@ package org.sk.skMinecraft; +import org.sk.skMinecraft.SkMinecraft.StringCommand; import org.sk.skMinecraft.commands.*; import java.util.HashMap; @@ -7,7 +8,7 @@ public class CommandFactory { - private final HashMap> commands; + private final HashMap> commands; public CommandFactory() { this.commands = new HashMap<>(); @@ -29,7 +30,7 @@ public CommandFactory() { this.commands.put("addInv", AddInventory::new); this.commands.put("getInv", GetInventory::new); - this.commands.put("batch", Batching::new); + // this.commands.put("batch", Batching::new); this.commands.put("spawnBossBar", SpawnBossBar::new); this.commands.put("editBossBar", EditBossBar::new); @@ -39,14 +40,12 @@ public CommandFactory() { this.commands.put("setPlayerPos", SetPlayerPos::new); - this.commands.put("validate", Validator::new); + // this.commands.put("validate", Validator::new); this.commands.put("showTitle", ShowTitle::new); } - public Command build(String command) { - int firstSpace = command.indexOf(SkMinecraft.seperator); - String commandName = firstSpace == -1 ? command : command.substring(0, firstSpace); - return this.commands.get(commandName).apply(command); + public Command build(StringCommand command) { + return this.commands.get(command.name()).apply(command); } } diff --git a/src/main/java/org/sk/skMinecraft/SkMinecraft.java b/src/main/java/org/sk/skMinecraft/SkMinecraft.java index 31956ac..417e866 100644 --- a/src/main/java/org/sk/skMinecraft/SkMinecraft.java +++ b/src/main/java/org/sk/skMinecraft/SkMinecraft.java @@ -13,6 +13,7 @@ import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; +import java.util.Arrays; public final class SkMinecraft extends JavaPlugin implements Listener { @@ -20,6 +21,7 @@ public final class SkMinecraft extends JavaPlugin implements Listener { private ServerSocket serverSocket; public static String seperator = "𝇉"; + public record StringCommand(String name, String[] arguments) {}; public static String joinWithSeperator(Object... args) { String result = ""; @@ -40,6 +42,11 @@ public static String joinWithSeperator(Object... args) { return result; } + public static StringCommand splitCommand(String command) { + String[] parts = command.split(SkMinecraft.seperator); + return new StringCommand(parts[0], Arrays.copyOfRange(parts, 1, parts.length)); + } + @Override public void onEnable() { CentralResourceHandler.init(); @@ -108,7 +115,8 @@ private void handleClient(Socket client) { getLogger().info("Received: " + command); - Command commandObject = commandFactory.build(command); + StringCommand stringCommand = splitCommand(command); + Command commandObject = commandFactory.build(stringCommand); if(commandObject == null) continue; From 5b64c31dee7a20db83fd4327b80822645c97dda4 Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 14:49:41 +0100 Subject: [PATCH 06/74] refactor Add Inventory to new ArgumentParser --- .../sk/skMinecraft/commands/AddInventory.java | 53 ++++++++----------- 1 file changed, 21 insertions(+), 32 deletions(-) diff --git a/src/main/java/org/sk/skMinecraft/commands/AddInventory.java b/src/main/java/org/sk/skMinecraft/commands/AddInventory.java index ae74894..21619ac 100644 --- a/src/main/java/org/sk/skMinecraft/commands/AddInventory.java +++ b/src/main/java/org/sk/skMinecraft/commands/AddInventory.java @@ -6,10 +6,9 @@ import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; -import org.sk.skMinecraft.SkMinecraft; +import org.sk.skMinecraft.SkMinecraft.StringCommand; +import org.sk.skMinecraft.commands.ArgumentParser.ParseResult; -import java.util.Arrays; -import java.util.HashMap; public class AddInventory extends Command{ @@ -21,47 +20,37 @@ public class AddInventory extends Command{ private int slot; private boolean unbreakable; - public AddInventory(String command) { - String[] parts = command.split(SkMinecraft.seperator); + public AddInventory(StringCommand command) { + ArgumentParser parser = new ArgumentParser(); - if(parts.length < 4) { - this.valid = false; - return; - } + parser.addPositionalArguments( + ArgumentParser.IntParser, + ArgumentParser.StringParser, + ArgumentParser.IntParser + ); - try { - this.playerIndex = Integer.parseInt(parts[1]); - this.amount = Integer.parseInt(parts[3]); - } catch(NumberFormatException e){ - this.valid = false; - return; - } + parser.addOptionalArgument("name", ArgumentParser.StringParser, ""); + parser.addOptionalArgument("slot", Integer::parseInt, -1); - if(playerIndex < 0 || playerIndex >= Bukkit.getOnlinePlayers().toArray(new Player[0]).length) { - this.valid = false; - return; - } + parser.addFlag("unbreakable"); - String blockId = parts[2].toUpperCase(); - this.material = Material.matchMaterial(blockId); + ParseResult result = parser.parse(command.arguments()); - if(this.material == null) { + if(!this.isValid()) { this.valid = false; return; } - ArgumentParser parser = new ArgumentParser(); - - parser.addArgument("name", ArgumentParser.StringParser, ""); - parser.addArgument("slot", Integer::parseInt, -1); + this.playerIndex = result.getPositional(0); - parser.addFlag("unbreakable"); + String blockId = result.getPositional(1); + this.material = Material.matchMaterial(blockId.toUpperCase()); - HashMap result = parser.parse(Arrays.copyOfRange(parts,4, parts.length)); + this.amount = result.getPositional(2); - this.name = result.get("name").asString(); - this.slot = result.get("slot").asInt(); - this.unbreakable = result.get("unbreakable").asBool(); + this.name = result.getOptional("name"); + this.slot = result.getOptional("slot"); + this.unbreakable = result.getOptional("unbreakable"); } @Override From a9102cca5c5b2a1880b516747f584989d6dfa741 Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 14:50:10 +0100 Subject: [PATCH 07/74] refactor batching to new ArgumentParser --- .../java/org/sk/skMinecraft/commands/Batching.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/sk/skMinecraft/commands/Batching.java b/src/main/java/org/sk/skMinecraft/commands/Batching.java index ec65cc5..26b3229 100644 --- a/src/main/java/org/sk/skMinecraft/commands/Batching.java +++ b/src/main/java/org/sk/skMinecraft/commands/Batching.java @@ -1,6 +1,8 @@ package org.sk.skMinecraft.commands; import org.sk.skMinecraft.CommandFactory; +import org.sk.skMinecraft.SkMinecraft; +import org.sk.skMinecraft.SkMinecraft.StringCommand; import java.util.Arrays; import java.util.regex.Pattern; @@ -9,8 +11,8 @@ public class Batching extends Command { private final String[] commands; - public Batching(String command) { - String[] parts = command.split(Pattern.quote(";|;")); + public Batching(StringCommand command) { + String[] parts = command.arguments()[0].split(Pattern.quote(";|;")); this.commands = Arrays.copyOfRange(parts, 1, parts.length); } @@ -19,8 +21,9 @@ public Batching(String command) { public void apply() { CommandFactory factory = new CommandFactory(); - for(String command_str : commands) { - Command command = factory.build(command_str); + for(String commandStr : commands) { + StringCommand commandObj = SkMinecraft.splitCommand(commandStr); + Command command = factory.build(commandObj); if(!command.isValid()) continue; From ac6a09c6bf72a45d0acb86d6597eb51c6e5ecc17 Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 14:50:25 +0100 Subject: [PATCH 08/74] refactor ChatCommand to new Argument Parser --- src/main/java/org/sk/skMinecraft/commands/ChatCommand.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/sk/skMinecraft/commands/ChatCommand.java b/src/main/java/org/sk/skMinecraft/commands/ChatCommand.java index dd21dcd..7d0337c 100644 --- a/src/main/java/org/sk/skMinecraft/commands/ChatCommand.java +++ b/src/main/java/org/sk/skMinecraft/commands/ChatCommand.java @@ -1,13 +1,16 @@ package org.sk.skMinecraft.commands; +import java.util.Arrays; + import org.bukkit.Bukkit; +import org.sk.skMinecraft.SkMinecraft.StringCommand; public class ChatCommand extends Command { private String command; - public ChatCommand(String command) { - this.command = command.replace("chatCommand ", ""); + public ChatCommand(StringCommand command) { + this.command = Arrays.stream(command.arguments()).toString(); } @Override From 1cbd3d4e5677641573f672234b880981f8a025fb Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 14:50:38 +0100 Subject: [PATCH 09/74] refactor DeleteBossBar to new ArgumentParser --- .../sk/skMinecraft/commands/DeleteBossBar.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/sk/skMinecraft/commands/DeleteBossBar.java b/src/main/java/org/sk/skMinecraft/commands/DeleteBossBar.java index 832e725..ea8733c 100644 --- a/src/main/java/org/sk/skMinecraft/commands/DeleteBossBar.java +++ b/src/main/java/org/sk/skMinecraft/commands/DeleteBossBar.java @@ -3,21 +3,28 @@ import org.bukkit.Bukkit; import org.bukkit.NamespacedKey; import org.bukkit.boss.KeyedBossBar; -import org.sk.skMinecraft.SkMinecraft; +import org.sk.skMinecraft.SkMinecraft.StringCommand; +import org.sk.skMinecraft.commands.ArgumentParser.ParseResult; public class DeleteBossBar extends Command { private String name; - public DeleteBossBar(String command) { - String[] parts = command.split(SkMinecraft.seperator); + public DeleteBossBar(StringCommand command) { + ArgumentParser parser = new ArgumentParser(); - if(parts.length != 2) { + parser.addPositionalArguments( + ArgumentParser.StringParser + ); + + ParseResult result = parser.parse(command.arguments()); + + if(!result.isValid()) { this.valid = false; return; } - this.name = parts[1]; + this.name = result.getPositional(0); } @Override From 39f59af16f087bb53c03340a62b78463c13d2e1a Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 14:50:52 +0100 Subject: [PATCH 10/74] refactor EditBossBar to new ArgumentParser --- .../sk/skMinecraft/commands/EditBossBar.java | 43 +++++++++++-------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/src/main/java/org/sk/skMinecraft/commands/EditBossBar.java b/src/main/java/org/sk/skMinecraft/commands/EditBossBar.java index f70b82b..6b01593 100644 --- a/src/main/java/org/sk/skMinecraft/commands/EditBossBar.java +++ b/src/main/java/org/sk/skMinecraft/commands/EditBossBar.java @@ -6,6 +6,8 @@ import org.bukkit.boss.BarStyle; import org.bukkit.boss.KeyedBossBar; import org.sk.skMinecraft.SkMinecraft; +import org.sk.skMinecraft.SkMinecraft.StringCommand; +import org.sk.skMinecraft.commands.ArgumentParser.ParseResult; import java.util.Arrays; import java.util.HashMap; @@ -44,31 +46,34 @@ private EditType typeFromText(String command) { float value; BarStyle style; - public EditBossBar(String command) { - String[] parts = command.split(SkMinecraft.seperator); + public EditBossBar(StringCommand command) { + ArgumentParser parser = new ArgumentParser(); - if(parts.length < 3) { - this.valid = false; - return; - } + parser.addPositionalArguments( + ArgumentParser.StringParser, + ArgumentParser.StringParser + ); + + parser.addOptionalArgument("text", ArgumentParser.StringParser, ""); + parser.addOptionalArgument("color", ArgumentParser.StringParser, "PURPLE"); + parser.addOptionalArgument("value", Float::parseFloat, 0.0f); + parser.addOptionalArgument("style", ArgumentParser.StringParser, "SOLID"); - type = typeFromText(parts[1]); - this.typeName = parts[1]; - this.name = parts[2]; + ParseResult result = parser.parse(command.arguments()); - ArgumentParser parser = new ArgumentParser(); + this.typeName = result.getPositional(0); + this.type = typeFromText(this.typeName); + this.name = result.getPositional(01); + + this.text = result.getOptional("text"); - parser.addArgument("text", ArgumentParser.StringParser, ""); - parser.addArgument("color", ArgumentParser.StringParser, "PURPLE"); - parser.addArgument("value", Float::parseFloat, 0.0f); - parser.addArgument("style", ArgumentParser.StringParser, "SOLID"); + String colorName = result.getOptional("color"); + this.color = BarColor.valueOf(colorName.toUpperCase()); - HashMap result = parser.parse(Arrays.copyOfRange(parts,3, parts.length)); + this.value = result.getOptional("value"); - this.text = result.get("text").asString(); - this.color = BarColor.valueOf(result.get("color").asString().toUpperCase()); - this.value = result.get("value").asFloat(); - this.style = BarStyle.valueOf(result.get("style").asString().toUpperCase()); + String styleName = result.getOptional("style"); + this.style = BarStyle.valueOf(styleName.toUpperCase()); } @Override From 4ac99c03191b9033687de75871c36e2fba63c5be Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 14:51:03 +0100 Subject: [PATCH 11/74] refactor EditEntty to new ArgumentParser --- .../sk/skMinecraft/commands/EditEntity.java | 46 ++++++++++--------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/src/main/java/org/sk/skMinecraft/commands/EditEntity.java b/src/main/java/org/sk/skMinecraft/commands/EditEntity.java index f2752cb..ae7e1fe 100644 --- a/src/main/java/org/sk/skMinecraft/commands/EditEntity.java +++ b/src/main/java/org/sk/skMinecraft/commands/EditEntity.java @@ -6,6 +6,8 @@ import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; import org.sk.skMinecraft.SkMinecraft; +import org.sk.skMinecraft.SkMinecraft.StringCommand; +import org.sk.skMinecraft.commands.ArgumentParser.ParseResult; import java.util.Arrays; import java.util.HashMap; @@ -27,46 +29,46 @@ public class EditEntity extends Command { private boolean setHealth; private double health; - public EditEntity(String command) { - String[] parts = command.split(SkMinecraft.seperator); + public EditEntity(StringCommand command) { + ArgumentParser parser = new ArgumentParser(); - if(parts.length < 2) { - this.valid = false; - return; - } + parser.addPositionalArguments( + ArgumentParser.StringParser + ); - this.target = parts[1]; + parser.addOptionalArgument("ai", Boolean::parseBoolean); + parser.addOptionalArgument("position", arg-> Arrays.stream(arg.split(";")).map(Integer::parseInt).collect(Collectors.toList())); + parser.addOptionalArgument("name", ArgumentParser.StringParser); + parser.addOptionalArgument("health", Double::parseDouble); - ArgumentParser parser = new ArgumentParser(); + ParseResult result = parser.parse(command.arguments()); - parser.addArgument("ai", Boolean::parseBoolean); - parser.addArgument("position", arg-> Arrays.stream(arg.split(";")).map(Integer::parseInt).collect(Collectors.toList())); - parser.addArgument("name", ArgumentParser.StringParser); - parser.addArgument("health", Double::parseDouble); + if(!result.isValid()) { + this.valid = false; + return; + } - HashMap result = parser.parse(Arrays.copyOfRange(parts,2, parts.length)); + this.target = result.getPositional(0); - this.setAi = !result.get("ai").isNull(); + this.setAi = result.isSet("ai"); if(this.setAi) { - this.ai = result.get("ai").asBool(); + this.ai = result.getFlag("ai"); } - this.setPosition = !result.get("position").isNull(); + this.setPosition = result.isSet("position"); if(this.setPosition) { - @SuppressWarnings("unchecked") - List positions = (List)result.get("position").get();; + List positions = result.getOptional("position"); this.x = positions.get(0); this.y = positions.get(1); this.z = positions.get(2); } - this.name = result.get("name").asString(); + this.name = result.getOptional("name"); - this.setHealth = !result.get("health").isNull(); + this.setHealth = result.isSet("health"); if(this.setHealth) { - this.health = result.get("health").asInt(); + this.health = result.getOptional("health"); } - } @Override From 0d37bd687f0c815d064289ec620a6564bf71ce18 Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 14:51:12 +0100 Subject: [PATCH 12/74] refactor GetBlock to new ArgumentParser --- .../org/sk/skMinecraft/commands/GetBlock.java | 29 ++++++++++++++----- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/sk/skMinecraft/commands/GetBlock.java b/src/main/java/org/sk/skMinecraft/commands/GetBlock.java index cc215a2..8a2c496 100644 --- a/src/main/java/org/sk/skMinecraft/commands/GetBlock.java +++ b/src/main/java/org/sk/skMinecraft/commands/GetBlock.java @@ -3,19 +3,32 @@ import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.block.Block; -import org.sk.skMinecraft.SkMinecraft; +import org.sk.skMinecraft.SkMinecraft.StringCommand; +import org.sk.skMinecraft.commands.ArgumentParser.ParseResult; public class GetBlock extends Command{ private int x,y,z; - public GetBlock(String command) { - String[] parts = command.split(SkMinecraft.seperator); - try { - this.x = Integer.parseInt(parts[1]); - this.y = Integer.parseInt(parts[2]); - this.z = Integer.parseInt(parts[3]); - } catch(Exception ignored){} + public GetBlock(StringCommand command) { + ArgumentParser parser = new ArgumentParser(); + + parser.addPositionalArguments( + ArgumentParser.IntParser, + ArgumentParser.IntParser, + ArgumentParser.IntParser + ); + + ParseResult result = parser.parse(command.arguments()); + + if(!result.isValid()) { + this.valid = false; + return; + } + + this.x = result.getPositional(0); + this.y = result.getPositional(1); + this.z = result.getPositional(2); } @Override From 85ab2df23d3313ac95e175d859335df1977dfbe2 Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 14:51:22 +0100 Subject: [PATCH 13/74] refactor GetEntity to new ArgumentParser --- .../org/sk/skMinecraft/commands/GetEntity.java | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/sk/skMinecraft/commands/GetEntity.java b/src/main/java/org/sk/skMinecraft/commands/GetEntity.java index 9dfb3ee..85b8234 100644 --- a/src/main/java/org/sk/skMinecraft/commands/GetEntity.java +++ b/src/main/java/org/sk/skMinecraft/commands/GetEntity.java @@ -6,20 +6,28 @@ import org.bukkit.entity.LivingEntity; import org.sk.skMinecraft.CentralResourceHandler; import org.sk.skMinecraft.SkMinecraft; +import org.sk.skMinecraft.SkMinecraft.StringCommand; +import org.sk.skMinecraft.commands.ArgumentParser.ParseResult; public class GetEntity extends Command { private String target; - public GetEntity(String command) { - String[] parts = command.split(SkMinecraft.seperator); + public GetEntity(StringCommand command) { + ArgumentParser parser = new ArgumentParser(); - if(parts.length < 2) { + parser.addPositionalArguments( + ArgumentParser.StringParser + ); + + ParseResult result = parser.parse(command.arguments()); + + if(!result.isValid()) { this.valid = false; return; } - - this.target = parts[1]; + + this.target = result.getPositional(0); } public static String informationString(String uuid, Entity ent) { From a03db39ed5681271e6bbc08f3c7a4c044e74c202 Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 14:51:37 +0100 Subject: [PATCH 14/74] refactor GetInventory to new ArgumentParser --- .../sk/skMinecraft/commands/GetInventory.java | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/sk/skMinecraft/commands/GetInventory.java b/src/main/java/org/sk/skMinecraft/commands/GetInventory.java index f0cd5ef..e94c211 100644 --- a/src/main/java/org/sk/skMinecraft/commands/GetInventory.java +++ b/src/main/java/org/sk/skMinecraft/commands/GetInventory.java @@ -6,22 +6,28 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.sk.skMinecraft.SkMinecraft; +import org.sk.skMinecraft.SkMinecraft.StringCommand; +import org.sk.skMinecraft.commands.ArgumentParser.ParseResult; public class GetInventory extends Command { private int playerIndex; - public GetInventory(String command) { - String[] parts = command.split(SkMinecraft.seperator); + public GetInventory(StringCommand command) { + ArgumentParser parser = new ArgumentParser(); - if(parts.length < 2) { + parser.addPositionalArguments( + ArgumentParser.IntParser + ); + + ParseResult result = parser.parse(command.arguments()); + + if(!result.isValid()) { this.valid = false; return; } - try { - this.playerIndex = Integer.parseInt(parts[1]); - } catch (Exception ignored) {} + this.playerIndex = result.getPositional(0); } @Override From c489b1ac39b039a6b4eee703608b81b5dd7edafb Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 14:51:45 +0100 Subject: [PATCH 15/74] refactor GetPlayer to new ArgumentPArser --- .../java/org/sk/skMinecraft/commands/GetPlayer.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/sk/skMinecraft/commands/GetPlayer.java b/src/main/java/org/sk/skMinecraft/commands/GetPlayer.java index c8e6852..ce62456 100644 --- a/src/main/java/org/sk/skMinecraft/commands/GetPlayer.java +++ b/src/main/java/org/sk/skMinecraft/commands/GetPlayer.java @@ -5,27 +5,28 @@ import org.bukkit.attribute.Attribute; import org.bukkit.entity.Player; import org.sk.skMinecraft.SkMinecraft; +import org.sk.skMinecraft.SkMinecraft.StringCommand; import org.sk.skMinecraft.commands.ArgumentParser.ParseResult; public class GetPlayer extends Command { private int playerIndex; - public GetPlayer(String command) { - String[] parts = command.split(SkMinecraft.seperator); - + public GetPlayer(StringCommand command) { ArgumentParser parser = new ArgumentParser(); - parser.addPositionalArgument(ArgumentParser.IntParser); + parser.addPositionalArguments( + ArgumentParser.IntParser + ); - ParseResult arguments = parser.parse(parts); + ParseResult arguments = parser.parse(command.arguments()); if(!arguments.isValid()) { this.valid = false; return; } - this.playerIndex = arguments.getPositional(0).asInt(); + this.playerIndex = arguments.getPositional(0); } @Override From fe05844007a23a62c3f79019ab4f010bb18d24f9 Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 14:51:55 +0100 Subject: [PATCH 16/74] refactor PollChat to new ArgumentParser --- src/main/java/org/sk/skMinecraft/commands/PollChat.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/sk/skMinecraft/commands/PollChat.java b/src/main/java/org/sk/skMinecraft/commands/PollChat.java index 0019961..84d1e13 100644 --- a/src/main/java/org/sk/skMinecraft/commands/PollChat.java +++ b/src/main/java/org/sk/skMinecraft/commands/PollChat.java @@ -3,14 +3,14 @@ import org.bukkit.Bukkit; import org.sk.skMinecraft.CentralResourceHandler; import org.sk.skMinecraft.SkMinecraft; +import org.sk.skMinecraft.SkMinecraft.StringCommand; import org.sk.skMinecraft.data.ChatMessage; import java.util.ArrayList; public class PollChat extends Command { - public PollChat(String s) { - } + public PollChat(StringCommand s) {} @Override public void apply() { From 3520e83c2d871e7464500b59ab723f94170edc82 Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 14:52:06 +0100 Subject: [PATCH 17/74] refactor PostChat to new ArgumentParser --- src/main/java/org/sk/skMinecraft/commands/PostChat.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/sk/skMinecraft/commands/PostChat.java b/src/main/java/org/sk/skMinecraft/commands/PostChat.java index e1ee801..d563c0e 100644 --- a/src/main/java/org/sk/skMinecraft/commands/PostChat.java +++ b/src/main/java/org/sk/skMinecraft/commands/PostChat.java @@ -1,14 +1,17 @@ package org.sk.skMinecraft.commands; +import java.util.Arrays; + import org.bukkit.Bukkit; import org.sk.skMinecraft.SkMinecraft; +import org.sk.skMinecraft.SkMinecraft.StringCommand; public class PostChat extends Command { private final String message; - public PostChat(String command) { - this.message = command.replaceFirst("postChat" + SkMinecraft.seperator, ""); + public PostChat(StringCommand command) { + this.message = Arrays.stream(command.arguments()).toString(); } @Override From e77894cb451afb92607387dcaa9564ab23080126 Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 14:52:15 +0100 Subject: [PATCH 18/74] refactor SetBlock to new ArgumentPArser --- .../org/sk/skMinecraft/commands/SetBlock.java | 30 +++++++++++++------ 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/src/main/java/org/sk/skMinecraft/commands/SetBlock.java b/src/main/java/org/sk/skMinecraft/commands/SetBlock.java index b3a186f..76541d2 100644 --- a/src/main/java/org/sk/skMinecraft/commands/SetBlock.java +++ b/src/main/java/org/sk/skMinecraft/commands/SetBlock.java @@ -5,28 +5,40 @@ import org.bukkit.Material; import org.bukkit.World; import org.sk.skMinecraft.SkMinecraft; +import org.sk.skMinecraft.SkMinecraft.StringCommand; +import org.sk.skMinecraft.commands.ArgumentParser.ParseResult; public class SetBlock extends Command { private int x,y,z; private Material material; - public SetBlock(String command) { - String[] parts = command.split(SkMinecraft.seperator); + public SetBlock(StringCommand command) { + ArgumentParser parser = new ArgumentParser(); - this.valid = true; - try { - this.x = Integer.parseInt(parts[1]); - this.y = Integer.parseInt(parts[2]); - this.z = Integer.parseInt(parts[3]); - } catch (NumberFormatException e) { + parser.addPositionalArguments( + ArgumentParser.IntParser, + ArgumentParser.IntParser, + ArgumentParser.IntParser, + ArgumentParser.StringParser + ); + + ParseResult result = parser.parse(command.arguments()); + + if(!result.isValid()) { this.valid = false; + return; } - String blockId = parts[4].toUpperCase(); + this.x = result.getPositional(0); + this.y = result.getPositional(1); + this.z = result.getPositional(2); + + String blockId = result.getPositional(3); this.material = Material.matchMaterial(blockId); if (this.material == null || !this.material.isBlock()) { this.valid = false; + return; } } From 6cf4126f03ba47ae02c2db78a93aba077cfb3cd0 Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 14:52:26 +0100 Subject: [PATCH 19/74] refactor SetPlayerPos to new ArgumentParser --- .../sk/skMinecraft/commands/SetPlayerPos.java | 41 ++++++++++--------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java b/src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java index bcff359..a0577d9 100644 --- a/src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java +++ b/src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java @@ -4,6 +4,8 @@ import org.bukkit.Location; import org.bukkit.entity.Player; import org.sk.skMinecraft.SkMinecraft; +import org.sk.skMinecraft.SkMinecraft.StringCommand; +import org.sk.skMinecraft.commands.ArgumentParser.ParseResult; import java.util.Arrays; import java.util.HashMap; @@ -17,32 +19,33 @@ public class SetPlayerPos extends Command { private boolean setRot; private int playerIndex; - public SetPlayerPos(String command ){ - String[] parts = command.split(SkMinecraft.seperator); + public SetPlayerPos(StringCommand command ){ + ArgumentParser parser = new ArgumentParser(); - if(parts.length < 5) { - this.valid = false; - return; - } + parser.addPositionalArguments( + ArgumentParser.IntParser, + ArgumentParser.IntParser, + ArgumentParser.IntParser, + ArgumentParser.IntParser + ); - try { - this.playerIndex = Integer.parseInt(parts[1]); - this.x = Integer.parseInt(parts[2]); - this.y = Integer.parseInt(parts[3]); - this.z = Integer.parseInt(parts[4]); - } catch (Exception e) { - this.valid = false; - } + parser.addOptionalArgument("rot", Integer::parseInt); - ArgumentParser parser = new ArgumentParser(); + ParseResult result = parser.parse(command.arguments()); - parser.addArgument("rot", Integer::parseInt); + if(!result.isValid()) { + this.valid = false; + return; + } - HashMap result = parser.parse(Arrays.copyOfRange(parts,5, parts.length)); + this.playerIndex = result.getPositional(0); + this.x = result.getPositional(1); + this.y = result.getPositional(2); + this.z = result.getPositional(3); - this.setRot = !result.get("rot").isNull(); + this.setRot = !result.isSet("rot"); if(this.setRot) { - this.rot = result.get("rot").asInt(); + this.rot = result.getOptional("rot"); } } From 523d7d69591bd88caad89d82e2398d28db2af02c Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 14:52:41 +0100 Subject: [PATCH 20/74] refactor setPlayerStat to new ArgumentParser --- .../skMinecraft/commands/SetPlayerStat.java | 30 ++++++++++++------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/sk/skMinecraft/commands/SetPlayerStat.java b/src/main/java/org/sk/skMinecraft/commands/SetPlayerStat.java index c3524c4..d371e27 100644 --- a/src/main/java/org/sk/skMinecraft/commands/SetPlayerStat.java +++ b/src/main/java/org/sk/skMinecraft/commands/SetPlayerStat.java @@ -1,10 +1,14 @@ package org.sk.skMinecraft.commands; +import java.text.ParseException; + import org.bukkit.Bukkit; import org.bukkit.attribute.Attribute; import org.bukkit.attribute.AttributeInstance; import org.bukkit.entity.Player; import org.sk.skMinecraft.SkMinecraft; +import org.sk.skMinecraft.SkMinecraft.StringCommand; +import org.sk.skMinecraft.commands.ArgumentParser.ParseResult; public class SetPlayerStat extends Command { @@ -21,21 +25,27 @@ private enum Type { private int playerIndex; private double value; - public SetPlayerStat(String command){ - String[] parts = command.split(SkMinecraft.seperator); + public SetPlayerStat(StringCommand command){ + ArgumentParser parser = new ArgumentParser(); + + parser.addPositionalArguments( + ArgumentParser.StringParser, + ArgumentParser.IntParser, + ArgumentParser.IntParser + ); + + ParseResult result = parser.parse(command.arguments()); - if(parts.length < 4) { + if(!result.isValid()) { this.valid = false; return; } - this.type = Type.valueOf(parts[1].toUpperCase()); - try { - this.playerIndex = Integer.parseInt(parts[2]); - this.value = Double.parseDouble(parts[3]); - }catch (Exception ignored) { - this.valid = false; - } + String typeName = result.getPositional(0); + this.type = Type.valueOf(typeName.toUpperCase()); + + this.playerIndex = result.getPositional(1); + this.value = result.getPositional(2); } @Override From c6da52e4c17caf1c36bc08524e16b3838403a5bc Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 14:52:54 +0100 Subject: [PATCH 21/74] refactor SetPlayerVelocity to new ArgumentParse --- .../commands/SetPlayerVelocity.java | 29 ++++++++++++------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/src/main/java/org/sk/skMinecraft/commands/SetPlayerVelocity.java b/src/main/java/org/sk/skMinecraft/commands/SetPlayerVelocity.java index 8d9cdae..c6ba64a 100644 --- a/src/main/java/org/sk/skMinecraft/commands/SetPlayerVelocity.java +++ b/src/main/java/org/sk/skMinecraft/commands/SetPlayerVelocity.java @@ -3,7 +3,8 @@ import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.util.Vector; -import org.sk.skMinecraft.SkMinecraft; +import org.sk.skMinecraft.SkMinecraft.StringCommand; +import org.sk.skMinecraft.commands.ArgumentParser.ParseResult; public class SetPlayerVelocity extends Command { @@ -18,20 +19,26 @@ private enum Type { private int playerIndex; private double strength; - public SetPlayerVelocity(String command) { - String[] parts = command.split(SkMinecraft.seperator); + public SetPlayerVelocity(StringCommand command) { + ArgumentParser parser = new ArgumentParser(); - if(parts.length < 4) { + parser.addPositionalArguments( + ArgumentParser.StringParser, + ArgumentParser.IntParser, + ArgumentParser.IntParser, + ArgumentParser.DoubleParser + ); + + ParseResult result = parser.parse(command.arguments()); + + if(!result.isValid()) { this.valid = false; return; } - try { - this.type = Type.valueOf(parts[1]); - this.playerIndex = Integer.parseInt(parts[2]); - this.strength = Double.parseDouble(parts[3]); - }catch (Exception e) { - this.valid = false; - } + + this.type = Type.valueOf(result.getPositional(0)); + this.playerIndex = result.getPositional(1); + this.strength = result.getPositional(2); } @Override From 3d21677a0b3b2afe63f12d5818cc56774a52b7e5 Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 14:53:03 +0100 Subject: [PATCH 22/74] refactor ShowTitle to new ArgumentParser --- .../sk/skMinecraft/commands/ShowTitle.java | 36 +++++++++++-------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/src/main/java/org/sk/skMinecraft/commands/ShowTitle.java b/src/main/java/org/sk/skMinecraft/commands/ShowTitle.java index 2822b72..71ec77a 100644 --- a/src/main/java/org/sk/skMinecraft/commands/ShowTitle.java +++ b/src/main/java/org/sk/skMinecraft/commands/ShowTitle.java @@ -8,6 +8,8 @@ import org.bukkit.boss.BarStyle; import org.bukkit.entity.Player; import org.sk.skMinecraft.SkMinecraft; +import org.sk.skMinecraft.SkMinecraft.StringCommand; +import org.sk.skMinecraft.commands.ArgumentParser.ParseResult; public class ShowTitle extends Command { @@ -18,25 +20,31 @@ public class ShowTitle extends Command { private int stay; private int fadeOut; - public ShowTitle(String command) { - String[] parts = command.split(SkMinecraft.seperator); + public ShowTitle(StringCommand command) { + ArgumentParser parser = new ArgumentParser(); - if(parts.length != 7) { - this.valid = false; - return; - } + parser.addPositionalArguments( + ArgumentParser.IntParser, + ArgumentParser.StringParser, + ArgumentParser.StringParser, + ArgumentParser.IntParser, + ArgumentParser.IntParser, + ArgumentParser.IntParser + ); - this.title = parts[2]; - this.subtitle = parts[3]; + ParseResult result = parser.parse(command.arguments()); - try { - this.player = Integer.parseInt(parts[1]); - this.fadeIn = Integer.parseInt(parts[4]); - this.stay = Integer.parseInt(parts[5]); - this.fadeOut = Integer.parseInt(parts[6]); - } catch(NumberFormatException e) { + if(!result.isValid()) { this.valid = false; + return; } + + this.player = result.getPositional(0); + this.title = result.getPositional(1); + this.subtitle = result.getPositional(2); + this.fadeIn = result.getPositional(3); + this.stay = result.getPositional(4); + this.fadeOut = result.getPositional(5); } @Override From 5ea268fc0f7d1aa9de470a6beb05c95d5ce0216d Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 14:53:12 +0100 Subject: [PATCH 23/74] refactor SpawnBossBar to new ArgumentParser --- .../sk/skMinecraft/commands/SpawnBossBar.java | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/sk/skMinecraft/commands/SpawnBossBar.java b/src/main/java/org/sk/skMinecraft/commands/SpawnBossBar.java index ad7284d..a1dd93c 100644 --- a/src/main/java/org/sk/skMinecraft/commands/SpawnBossBar.java +++ b/src/main/java/org/sk/skMinecraft/commands/SpawnBossBar.java @@ -6,26 +6,31 @@ import org.bukkit.boss.BarStyle; import org.bukkit.boss.KeyedBossBar; import org.bukkit.entity.Player; -import org.sk.skMinecraft.SkMinecraft; +import org.sk.skMinecraft.SkMinecraft.StringCommand; +import org.sk.skMinecraft.commands.ArgumentParser.ParseResult; public class SpawnBossBar extends Command { private String name; private String text; - public SpawnBossBar(String command) { - String[] parts = command.split(SkMinecraft.seperator); + public SpawnBossBar(StringCommand command) { + ArgumentParser parser = new ArgumentParser(); - this.name = ""; - this.text = ""; - if (parts.length < 2) { + parser.addPositionalArguments( + ArgumentParser.StringParser, + ArgumentParser.StringParser + ); + ParseResult result = parser.parse(command.arguments()); + + if(!result.isValid()) { this.valid = false; return; } - name = parts[1]; - text = parts[2]; + this.name = result.getPositional(0); + this.text = result.getPositional(1); } @Override From fc5ea4338d6e399679ccaa434edbd260cd2d7665 Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 14:53:23 +0100 Subject: [PATCH 24/74] refactor SpawnEntitiy to new ArgumentParser --- .../sk/skMinecraft/commands/SpawnEntity.java | 29 ++++++++++++------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/src/main/java/org/sk/skMinecraft/commands/SpawnEntity.java b/src/main/java/org/sk/skMinecraft/commands/SpawnEntity.java index 1feb611..db334dd 100644 --- a/src/main/java/org/sk/skMinecraft/commands/SpawnEntity.java +++ b/src/main/java/org/sk/skMinecraft/commands/SpawnEntity.java @@ -7,29 +7,36 @@ import org.bukkit.entity.EntityType; import org.sk.skMinecraft.CentralResourceHandler; import org.sk.skMinecraft.SkMinecraft; +import org.sk.skMinecraft.SkMinecraft.StringCommand; +import org.sk.skMinecraft.commands.ArgumentParser.ParseResult; public class SpawnEntity extends Command{ private int x,y,z; private EntityType type; - public SpawnEntity(String command) { - String[] parts = command.split(SkMinecraft.seperator); + public SpawnEntity(StringCommand command) { + ArgumentParser parser = new ArgumentParser(); - if(parts.length != 5) { + parser.addPositionalArguments( + ArgumentParser.IntParser, + ArgumentParser.IntParser, + ArgumentParser.IntParser + ); + + ParseResult result = parser.parse(command.arguments()); + + if(!result.isValid()) { this.valid = false; return; } - try { - this.x = Integer.parseInt(parts[1]); - this.y = Integer.parseInt(parts[2]); - this.z = Integer.parseInt(parts[3]); - } catch (NumberFormatException e) { - this.valid = false; - } + this.x = result.getPositional(0); + this.y = result.getPositional(2); + this.z = result.getPositional(2); - this.type = EntityType.valueOf(parts[4].toUpperCase()); + String typeName = result.getPositional(3); + this.type = EntityType.valueOf(typeName.toUpperCase()); } @Override From 4435751d356020ebd4641b6c898979efef148eef Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 14:53:58 +0100 Subject: [PATCH 25/74] add batching warning --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 121e4df..3958f69 100644 --- a/README.md +++ b/README.md @@ -426,6 +426,8 @@ deleteBossBar myuniquename ### Command: batch +!!This command is currently not supported!! + - `batch ;|;;|;` Runs all commands in a batch, the `;|;` acts as the seperator. Please make sure there are no spaces around the seperator except before the first one. #### Args From 8d5b0575c139542a4886f3a3cd5823fefac515d8 Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 14:55:05 +0100 Subject: [PATCH 26/74] cleanup --- src/main/java/org/sk/skMinecraft/commands/EditBossBar.java | 4 ---- src/main/java/org/sk/skMinecraft/commands/EditEntity.java | 2 -- src/main/java/org/sk/skMinecraft/commands/PostChat.java | 1 - src/main/java/org/sk/skMinecraft/commands/SetBlock.java | 1 - src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java | 4 ---- .../java/org/sk/skMinecraft/commands/SetPlayerStat.java | 3 --- src/main/java/org/sk/skMinecraft/commands/ShowTitle.java | 6 ------ src/main/java/org/sk/skMinecraft/commands/SpawnEntity.java | 1 - 8 files changed, 22 deletions(-) diff --git a/src/main/java/org/sk/skMinecraft/commands/EditBossBar.java b/src/main/java/org/sk/skMinecraft/commands/EditBossBar.java index 6b01593..1ff87ad 100644 --- a/src/main/java/org/sk/skMinecraft/commands/EditBossBar.java +++ b/src/main/java/org/sk/skMinecraft/commands/EditBossBar.java @@ -5,13 +5,9 @@ import org.bukkit.boss.BarColor; import org.bukkit.boss.BarStyle; import org.bukkit.boss.KeyedBossBar; -import org.sk.skMinecraft.SkMinecraft; import org.sk.skMinecraft.SkMinecraft.StringCommand; import org.sk.skMinecraft.commands.ArgumentParser.ParseResult; -import java.util.Arrays; -import java.util.HashMap; - public class EditBossBar extends Command { private enum EditType { diff --git a/src/main/java/org/sk/skMinecraft/commands/EditEntity.java b/src/main/java/org/sk/skMinecraft/commands/EditEntity.java index ae7e1fe..883759e 100644 --- a/src/main/java/org/sk/skMinecraft/commands/EditEntity.java +++ b/src/main/java/org/sk/skMinecraft/commands/EditEntity.java @@ -5,12 +5,10 @@ import org.bukkit.World; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; -import org.sk.skMinecraft.SkMinecraft; import org.sk.skMinecraft.SkMinecraft.StringCommand; import org.sk.skMinecraft.commands.ArgumentParser.ParseResult; import java.util.Arrays; -import java.util.HashMap; import java.util.List; import java.util.stream.Collectors; diff --git a/src/main/java/org/sk/skMinecraft/commands/PostChat.java b/src/main/java/org/sk/skMinecraft/commands/PostChat.java index d563c0e..a067deb 100644 --- a/src/main/java/org/sk/skMinecraft/commands/PostChat.java +++ b/src/main/java/org/sk/skMinecraft/commands/PostChat.java @@ -3,7 +3,6 @@ import java.util.Arrays; import org.bukkit.Bukkit; -import org.sk.skMinecraft.SkMinecraft; import org.sk.skMinecraft.SkMinecraft.StringCommand; public class PostChat extends Command { diff --git a/src/main/java/org/sk/skMinecraft/commands/SetBlock.java b/src/main/java/org/sk/skMinecraft/commands/SetBlock.java index 76541d2..fa8e856 100644 --- a/src/main/java/org/sk/skMinecraft/commands/SetBlock.java +++ b/src/main/java/org/sk/skMinecraft/commands/SetBlock.java @@ -4,7 +4,6 @@ import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.World; -import org.sk.skMinecraft.SkMinecraft; import org.sk.skMinecraft.SkMinecraft.StringCommand; import org.sk.skMinecraft.commands.ArgumentParser.ParseResult; diff --git a/src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java b/src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java index a0577d9..9879d02 100644 --- a/src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java +++ b/src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java @@ -3,13 +3,9 @@ import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.entity.Player; -import org.sk.skMinecraft.SkMinecraft; import org.sk.skMinecraft.SkMinecraft.StringCommand; import org.sk.skMinecraft.commands.ArgumentParser.ParseResult; -import java.util.Arrays; -import java.util.HashMap; - public class SetPlayerPos extends Command { private int x; diff --git a/src/main/java/org/sk/skMinecraft/commands/SetPlayerStat.java b/src/main/java/org/sk/skMinecraft/commands/SetPlayerStat.java index d371e27..f2c3877 100644 --- a/src/main/java/org/sk/skMinecraft/commands/SetPlayerStat.java +++ b/src/main/java/org/sk/skMinecraft/commands/SetPlayerStat.java @@ -1,12 +1,9 @@ package org.sk.skMinecraft.commands; -import java.text.ParseException; - import org.bukkit.Bukkit; import org.bukkit.attribute.Attribute; import org.bukkit.attribute.AttributeInstance; import org.bukkit.entity.Player; -import org.sk.skMinecraft.SkMinecraft; import org.sk.skMinecraft.SkMinecraft.StringCommand; import org.sk.skMinecraft.commands.ArgumentParser.ParseResult; diff --git a/src/main/java/org/sk/skMinecraft/commands/ShowTitle.java b/src/main/java/org/sk/skMinecraft/commands/ShowTitle.java index 71ec77a..453f2b1 100644 --- a/src/main/java/org/sk/skMinecraft/commands/ShowTitle.java +++ b/src/main/java/org/sk/skMinecraft/commands/ShowTitle.java @@ -1,13 +1,7 @@ package org.sk.skMinecraft.commands; -import java.util.Arrays; -import java.util.HashMap; - import org.bukkit.Bukkit; -import org.bukkit.boss.BarColor; -import org.bukkit.boss.BarStyle; import org.bukkit.entity.Player; -import org.sk.skMinecraft.SkMinecraft; import org.sk.skMinecraft.SkMinecraft.StringCommand; import org.sk.skMinecraft.commands.ArgumentParser.ParseResult; diff --git a/src/main/java/org/sk/skMinecraft/commands/SpawnEntity.java b/src/main/java/org/sk/skMinecraft/commands/SpawnEntity.java index db334dd..9a0e03c 100644 --- a/src/main/java/org/sk/skMinecraft/commands/SpawnEntity.java +++ b/src/main/java/org/sk/skMinecraft/commands/SpawnEntity.java @@ -6,7 +6,6 @@ import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.sk.skMinecraft.CentralResourceHandler; -import org.sk.skMinecraft.SkMinecraft; import org.sk.skMinecraft.SkMinecraft.StringCommand; import org.sk.skMinecraft.commands.ArgumentParser.ParseResult; From 8f03ee611fb5880d8a17a22ebf5731c2e7aa8f1f Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 13:01:48 +0100 Subject: [PATCH 27/74] add dimension to getPlayer --- src/main/java/org/sk/skMinecraft/commands/GetPlayer.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/org/sk/skMinecraft/commands/GetPlayer.java b/src/main/java/org/sk/skMinecraft/commands/GetPlayer.java index ce62456..5b492f8 100644 --- a/src/main/java/org/sk/skMinecraft/commands/GetPlayer.java +++ b/src/main/java/org/sk/skMinecraft/commands/GetPlayer.java @@ -49,6 +49,7 @@ public void apply() { int x = loc.getBlockX(); int y = loc.getBlockY(); int z = loc.getBlockZ(); + String world_name = SkMinecraft.convertWorldName(loc.getWorld().getName()); int rotation = (int)loc.getYaw(); boolean sneak = target.isSneaking(); double maxhealth = target.getAttribute(Attribute.MAX_HEALTH).getBaseValue(); @@ -64,6 +65,7 @@ public void apply() { x, y, z, + world_name, rotation, looking_at, sneak, From ac711be9f8ea76d513eec58914854a450ff4676e Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 13:10:16 +0100 Subject: [PATCH 28/74] remove name conversion --- src/main/java/org/sk/skMinecraft/commands/GetPlayer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/sk/skMinecraft/commands/GetPlayer.java b/src/main/java/org/sk/skMinecraft/commands/GetPlayer.java index 5b492f8..8c7bb2c 100644 --- a/src/main/java/org/sk/skMinecraft/commands/GetPlayer.java +++ b/src/main/java/org/sk/skMinecraft/commands/GetPlayer.java @@ -49,7 +49,7 @@ public void apply() { int x = loc.getBlockX(); int y = loc.getBlockY(); int z = loc.getBlockZ(); - String world_name = SkMinecraft.convertWorldName(loc.getWorld().getName()); + String world_name = loc.getWorld().getName(); int rotation = (int)loc.getYaw(); boolean sneak = target.isSneaking(); double maxhealth = target.getAttribute(Attribute.MAX_HEALTH).getBaseValue(); From 03aa5afab080df75f1d8269f26f8748ee0067980 Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 13:11:53 +0100 Subject: [PATCH 29/74] update getPlayer command in Readme --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 3958f69..4aef148 100644 --- a/README.md +++ b/README.md @@ -111,7 +111,8 @@ Flags are arguments that toggle an effect, the send command just needs to contai - ` ` - `` the index of the player - `` the name of the player - - `, , ` The tile position of the player + - `, , ` `` The tile position of the player + - `` should be one of `world`, `world_nether`, `world_the_end` - `` The minecraft rotation of the player. - `` The block type the player is looking at - `` depending of wether or not the player is sneaking `true` or `false` From 743a466b5657b1092d179be0e30fcc59e0e583ca Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 13:19:45 +0100 Subject: [PATCH 30/74] update return of getPlayer --- README.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 4aef148..a9c9742 100644 --- a/README.md +++ b/README.md @@ -28,6 +28,13 @@ mvn - Throughout the commands there are references to indices of online players, it is important to note that currently the index is completly based on the order the players joined in and will change if the players disconnect and rejoin. Currently there is no way to identify the players unqiuely based on a id. - You can of course still differantiate the players based on their names +#### Dimensions + +- Currently the following dimensions are available + - `world`: the normal overworld + - `world_nether`: The Nether + - ` world_the_end`: The End + ### Player - `getPlayer ` gets information about a player. [Details](#command-getplayer) @@ -108,11 +115,10 @@ Flags are arguments that toggle an effect, the send command just needs to contai #### Returns -- ` ` +- ` ` - `` the index of the player - `` the name of the player - - `, , ` `` The tile position of the player - - `` should be one of `world`, `world_nether`, `world_the_end` + - `, , ` `` The tile position of the player (see [dimensions](#dimensions)) - `` The minecraft rotation of the player. - `` The block type the player is looking at - `` depending of wether or not the player is sneaking `true` or `false` From d5e7a1ee52f317130aecbf6cba30048a78cf3b7d Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 14:58:35 +0100 Subject: [PATCH 31/74] add dimensions to Readme --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index a9c9742..130bf27 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ mvn ### Player - `getPlayer ` gets information about a player. [Details](#command-getplayer) -- `setPlayerPos ?rotation:int?` Set the player position [Details](#command-setplayerpos) +- `setPlayerPos ?rotation:int?` Set the player position [Details](#command-setplayerpos) - `setPlayerStat ` Set a player stat [Details](#command-setplayerstat) - `showTitle ` Show a Title to players [Details](#command-showtitle) @@ -240,12 +240,12 @@ getInv 0 ### Command: setPlayerPos -- `setPlayerPos ?rotation:int?` +- `setPlayerPos ?rotation:int?` #### Args - `playerIndex` the index of the online player -- `, , ` the new position of the player +- `, , ` the new position of the player (see [dimensions](#dimensions)) - `?rotation?` optionaly the direction the player should be looking in ### Command: setBlock From 49eb09955c2cb5b7fe0b5bad8a652b64adc46774 Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 15:06:21 +0100 Subject: [PATCH 32/74] add dimension to SetPlayerPos --- .../java/org/sk/skMinecraft/commands/SetPlayerPos.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java b/src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java index 9879d02..171257e 100644 --- a/src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java +++ b/src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java @@ -2,6 +2,7 @@ import org.bukkit.Bukkit; import org.bukkit.Location; +import org.bukkit.World; import org.bukkit.entity.Player; import org.sk.skMinecraft.SkMinecraft.StringCommand; import org.sk.skMinecraft.commands.ArgumentParser.ParseResult; @@ -11,6 +12,7 @@ public class SetPlayerPos extends Command { private int x; private int y; private int z; + private World world; private int rot; private boolean setRot; private int playerIndex; @@ -21,8 +23,9 @@ public SetPlayerPos(StringCommand command ){ parser.addPositionalArguments( ArgumentParser.IntParser, ArgumentParser.IntParser, - ArgumentParser.IntParser, - ArgumentParser.IntParser + ArgumentParser.IntParser, + ArgumentParser.IntParser, + ArgumentParser.StringParser ); parser.addOptionalArgument("rot", Integer::parseInt); @@ -38,6 +41,8 @@ public SetPlayerPos(StringCommand command ){ this.x = result.getPositional(1); this.y = result.getPositional(2); this.z = result.getPositional(3); + String worldName = result.getPositional(4); + this.world = Bukkit.getWorld(worldName); this.setRot = !result.isSet("rot"); if(this.setRot) { @@ -56,6 +61,7 @@ public void apply() { Player player = players[playerIndex]; Location loc = new Location(player.getWorld(), this.x, this.y, this.z); + loc.setWorld(this.world); if(!this.setRot) { loc.setYaw(player.getLocation().getYaw()); }else { From b818306f6544d3e72203b6daab1be719333b62c8 Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 15:09:15 +0100 Subject: [PATCH 33/74] fix setPlayerPos --- src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java b/src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java index 171257e..482ef97 100644 --- a/src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java +++ b/src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java @@ -60,8 +60,7 @@ public void apply() { } Player player = players[playerIndex]; - Location loc = new Location(player.getWorld(), this.x, this.y, this.z); - loc.setWorld(this.world); + Location loc = new Location(this.world, this.x, this.y, this.z); if(!this.setRot) { loc.setYaw(player.getLocation().getYaw()); }else { From e233ded887101d25e112b3c595c51939d77d1f9c Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 15:09:22 +0100 Subject: [PATCH 34/74] add dimension to setBlock --- .../java/org/sk/skMinecraft/commands/SetBlock.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/sk/skMinecraft/commands/SetBlock.java b/src/main/java/org/sk/skMinecraft/commands/SetBlock.java index fa8e856..778d41a 100644 --- a/src/main/java/org/sk/skMinecraft/commands/SetBlock.java +++ b/src/main/java/org/sk/skMinecraft/commands/SetBlock.java @@ -9,6 +9,7 @@ public class SetBlock extends Command { private int x,y,z; + private World world; private Material material; public SetBlock(StringCommand command) { @@ -18,6 +19,7 @@ public SetBlock(StringCommand command) { ArgumentParser.IntParser, ArgumentParser.IntParser, ArgumentParser.IntParser, + ArgumentParser.StringParser, ArgumentParser.StringParser ); @@ -32,7 +34,10 @@ public SetBlock(StringCommand command) { this.y = result.getPositional(1); this.z = result.getPositional(2); - String blockId = result.getPositional(3); + String worldName = result.getPositional(3); + this.world = Bukkit.getWorld(worldName); + + String blockId = result.getPositional(4); this.material = Material.matchMaterial(blockId); if (this.material == null || !this.material.isBlock()) { @@ -43,8 +48,7 @@ public SetBlock(StringCommand command) { public void apply() { Bukkit.getScheduler().runTask(this.plugin, () -> { - World world = Bukkit.getWorlds().getFirst(); // default world - Location loc = new Location(world, x, y, z); + Location loc = new Location(this.world, x, y, z); loc.getBlock().setType(this.material); }); } From 515f9c24cf65e7c19832a5c2332833438c05ce69 Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 15:09:37 +0100 Subject: [PATCH 35/74] update readme --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 130bf27..bc3eeff 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,7 @@ mvn ## Block -- `setBlock ` Set a block at a location [Deailts](#command-setblock) +- `setBlock ` Set a block at a location [Deailts](#command-setblock) - `getBlock ` gets information about a block [Details](#command-getblock) ## Chat @@ -250,11 +250,12 @@ getInv 0 ### Command: setBlock -- `setBlock ` Set a block at a location +- `setBlock ` Set a block at a location #### Args - ` ` position of the block +- `` see [dimensions](#dimensions) - `` the block id as a string i.e. "stone" #### Example From 2cd98ea04a262ed6387b783dbedc27e04176c0de Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 15:12:01 +0100 Subject: [PATCH 36/74] add dimension to GetBlock --- README.md | 5 +++-- .../java/org/sk/skMinecraft/commands/GetBlock.java | 10 +++++++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index bc3eeff..0674950 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ mvn ## Block - `setBlock ` Set a block at a location [Deailts](#command-setblock) -- `getBlock ` gets information about a block [Details](#command-getblock) +- `getBlock ` gets information about a block [Details](#command-getblock) ## Chat @@ -267,11 +267,12 @@ setBlock 10 10 10 stone ### Command: getBlock -- `getBlock ` gets information about a block +- `getBlock ` gets information about a block #### Args - ` :int int int` position of the block +- `` see [dimensions](#dimensions) #### Example diff --git a/src/main/java/org/sk/skMinecraft/commands/GetBlock.java b/src/main/java/org/sk/skMinecraft/commands/GetBlock.java index 8a2c496..bdfe9cc 100644 --- a/src/main/java/org/sk/skMinecraft/commands/GetBlock.java +++ b/src/main/java/org/sk/skMinecraft/commands/GetBlock.java @@ -9,6 +9,7 @@ public class GetBlock extends Command{ private int x,y,z; + private World world; public GetBlock(StringCommand command) { ArgumentParser parser = new ArgumentParser(); @@ -16,7 +17,8 @@ public GetBlock(StringCommand command) { parser.addPositionalArguments( ArgumentParser.IntParser, ArgumentParser.IntParser, - ArgumentParser.IntParser + ArgumentParser.IntParser, + ArgumentParser.StringParser ); ParseResult result = parser.parse(command.arguments()); @@ -29,13 +31,15 @@ public GetBlock(StringCommand command) { this.x = result.getPositional(0); this.y = result.getPositional(1); this.z = result.getPositional(2); + + String worldName = result.getPositional(3); + this.world = Bukkit.getWorld(worldName); } @Override public void apply() { Bukkit.getScheduler().runTask(plugin, () -> { - World world = Bukkit.getWorlds().getFirst(); - Block block = world.getBlockAt(x,y,z); + Block block = this.world.getBlockAt(x,y,z); this.writer.println(block.getType().name()); }); From 04ef0c28960d6dcb87960c4509923300337c6dba Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 15:14:32 +0100 Subject: [PATCH 37/74] add dimensions to spawnEntity --- README.md | 5 +++-- .../org/sk/skMinecraft/commands/SpawnEntity.java | 15 ++++++++++----- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 0674950..b3ff252 100644 --- a/README.md +++ b/README.md @@ -60,7 +60,7 @@ mvn ### Entity -- `spawnEntity ` [Details](#command-spawnentity) +- `spawnEntity ` [Details](#command-spawnentity) - `editEntity ?name:String? ?position:x;y;z? ?ai:boolean?` [Details](#command-editentity) - `getEntity ` [Details](#command-getentity) @@ -328,11 +328,12 @@ Player1:Hallo𝇉Player1:A second message𝇉Player2:Last message ### Command: spawnEntity -- `spawnEntity ` Spawns an entity +- `spawnEntity ` Spawns an entity #### Args - ` ` position +- `` see [dimensions](#dimensions) - `` a string with entity id full list can be cound here: [Entities](https://hub.spigotmc.org/javadocs/spigot/org/bukkit/entity/EntityType.html) #### Returns diff --git a/src/main/java/org/sk/skMinecraft/commands/SpawnEntity.java b/src/main/java/org/sk/skMinecraft/commands/SpawnEntity.java index 9a0e03c..86c852b 100644 --- a/src/main/java/org/sk/skMinecraft/commands/SpawnEntity.java +++ b/src/main/java/org/sk/skMinecraft/commands/SpawnEntity.java @@ -12,6 +12,7 @@ public class SpawnEntity extends Command{ private int x,y,z; + private World world; private EntityType type; public SpawnEntity(StringCommand command) { @@ -20,7 +21,9 @@ public SpawnEntity(StringCommand command) { parser.addPositionalArguments( ArgumentParser.IntParser, ArgumentParser.IntParser, - ArgumentParser.IntParser + ArgumentParser.IntParser, + ArgumentParser.StringParser, + ArgumentParser.StringParser ); ParseResult result = parser.parse(command.arguments()); @@ -31,18 +34,20 @@ public SpawnEntity(StringCommand command) { } this.x = result.getPositional(0); - this.y = result.getPositional(2); + this.y = result.getPositional(1); this.z = result.getPositional(2); - String typeName = result.getPositional(3); + String worldName = result.getPositional(3); + this.world = Bukkit.getWorld(worldName); + + String typeName = result.getPositional(4); this.type = EntityType.valueOf(typeName.toUpperCase()); } @Override public void apply() { Bukkit.getScheduler().runTask(this.plugin, () -> { - World world = Bukkit.getWorlds().getFirst(); // default world - Location loc = new Location(world, x, y, z); + Location loc = new Location(this.world, x, y, z); Entity entity = world.spawnEntity(loc, this.type); CentralResourceHandler.addEntity(entity.getUniqueId().toString(), entity); From 700bcfb23bdbe0da50800612ba9d7d2bc68ed140 Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 15:20:56 +0100 Subject: [PATCH 38/74] cleanup --- .../java/org/sk/skMinecraft/commands/ArgumentParser.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/sk/skMinecraft/commands/ArgumentParser.java b/src/main/java/org/sk/skMinecraft/commands/ArgumentParser.java index a3227a3..7aaa121 100644 --- a/src/main/java/org/sk/skMinecraft/commands/ArgumentParser.java +++ b/src/main/java/org/sk/skMinecraft/commands/ArgumentParser.java @@ -102,19 +102,18 @@ public void addFlag(String name){ } public ParseResult parse(String[] parts) { - if(parts.length < positionalArguments.size()) { return new ParseResult(null, null, false); } - ArrayList postionals = new ArrayList<>(); + ArrayList positionals = new ArrayList<>(); for(int i = 0;i < positionalArguments.size();i++) { try { String part = parts[i]; Function parser = positionalArguments.get(i); Object parsedResult = parser.apply(part); - postionals.add(new ArgumentResult(parsedResult)); + positionals.add(new ArgumentResult(parsedResult)); } catch(Exception e) { return new ParseResult(null, null, false); } @@ -161,6 +160,6 @@ public ParseResult parse(String[] parts) { optionals.put(key, new ArgumentResult(false)); } - return new ParseResult(postionals, optionals, true); + return new ParseResult(positionals, optionals, true); } } From 3b9d8ebf84b6af60582cee0c4637a63f1b5ec0c5 Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 15:06:21 +0100 Subject: [PATCH 39/74] add dimension to SetPlayerPos --- .../java/org/sk/skMinecraft/commands/SetPlayerPos.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java b/src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java index 9879d02..171257e 100644 --- a/src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java +++ b/src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java @@ -2,6 +2,7 @@ import org.bukkit.Bukkit; import org.bukkit.Location; +import org.bukkit.World; import org.bukkit.entity.Player; import org.sk.skMinecraft.SkMinecraft.StringCommand; import org.sk.skMinecraft.commands.ArgumentParser.ParseResult; @@ -11,6 +12,7 @@ public class SetPlayerPos extends Command { private int x; private int y; private int z; + private World world; private int rot; private boolean setRot; private int playerIndex; @@ -21,8 +23,9 @@ public SetPlayerPos(StringCommand command ){ parser.addPositionalArguments( ArgumentParser.IntParser, ArgumentParser.IntParser, - ArgumentParser.IntParser, - ArgumentParser.IntParser + ArgumentParser.IntParser, + ArgumentParser.IntParser, + ArgumentParser.StringParser ); parser.addOptionalArgument("rot", Integer::parseInt); @@ -38,6 +41,8 @@ public SetPlayerPos(StringCommand command ){ this.x = result.getPositional(1); this.y = result.getPositional(2); this.z = result.getPositional(3); + String worldName = result.getPositional(4); + this.world = Bukkit.getWorld(worldName); this.setRot = !result.isSet("rot"); if(this.setRot) { @@ -56,6 +61,7 @@ public void apply() { Player player = players[playerIndex]; Location loc = new Location(player.getWorld(), this.x, this.y, this.z); + loc.setWorld(this.world); if(!this.setRot) { loc.setYaw(player.getLocation().getYaw()); }else { From 1af5a58209dff39d0904c903322a9833be2fb1a6 Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 15:09:15 +0100 Subject: [PATCH 40/74] fix setPlayerPos --- src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java b/src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java index 171257e..482ef97 100644 --- a/src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java +++ b/src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java @@ -60,8 +60,7 @@ public void apply() { } Player player = players[playerIndex]; - Location loc = new Location(player.getWorld(), this.x, this.y, this.z); - loc.setWorld(this.world); + Location loc = new Location(this.world, this.x, this.y, this.z); if(!this.setRot) { loc.setYaw(player.getLocation().getYaw()); }else { From 227d9d3e68f44826e6a061033d01420b7d00c40d Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 15:09:22 +0100 Subject: [PATCH 41/74] add dimension to setBlock --- .../java/org/sk/skMinecraft/commands/SetBlock.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/sk/skMinecraft/commands/SetBlock.java b/src/main/java/org/sk/skMinecraft/commands/SetBlock.java index fa8e856..778d41a 100644 --- a/src/main/java/org/sk/skMinecraft/commands/SetBlock.java +++ b/src/main/java/org/sk/skMinecraft/commands/SetBlock.java @@ -9,6 +9,7 @@ public class SetBlock extends Command { private int x,y,z; + private World world; private Material material; public SetBlock(StringCommand command) { @@ -18,6 +19,7 @@ public SetBlock(StringCommand command) { ArgumentParser.IntParser, ArgumentParser.IntParser, ArgumentParser.IntParser, + ArgumentParser.StringParser, ArgumentParser.StringParser ); @@ -32,7 +34,10 @@ public SetBlock(StringCommand command) { this.y = result.getPositional(1); this.z = result.getPositional(2); - String blockId = result.getPositional(3); + String worldName = result.getPositional(3); + this.world = Bukkit.getWorld(worldName); + + String blockId = result.getPositional(4); this.material = Material.matchMaterial(blockId); if (this.material == null || !this.material.isBlock()) { @@ -43,8 +48,7 @@ public SetBlock(StringCommand command) { public void apply() { Bukkit.getScheduler().runTask(this.plugin, () -> { - World world = Bukkit.getWorlds().getFirst(); // default world - Location loc = new Location(world, x, y, z); + Location loc = new Location(this.world, x, y, z); loc.getBlock().setType(this.material); }); } From 6dcee7d59cea330796a62c6967483afad5a459a3 Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 15:09:37 +0100 Subject: [PATCH 42/74] update readme --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 130bf27..bc3eeff 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,7 @@ mvn ## Block -- `setBlock ` Set a block at a location [Deailts](#command-setblock) +- `setBlock ` Set a block at a location [Deailts](#command-setblock) - `getBlock ` gets information about a block [Details](#command-getblock) ## Chat @@ -250,11 +250,12 @@ getInv 0 ### Command: setBlock -- `setBlock ` Set a block at a location +- `setBlock ` Set a block at a location #### Args - ` ` position of the block +- `` see [dimensions](#dimensions) - `` the block id as a string i.e. "stone" #### Example From c17b17b20a133a901f30d98dc7e4c16df99063ca Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 15:12:01 +0100 Subject: [PATCH 43/74] add dimension to GetBlock --- README.md | 5 +++-- .../java/org/sk/skMinecraft/commands/GetBlock.java | 10 +++++++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index bc3eeff..0674950 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ mvn ## Block - `setBlock ` Set a block at a location [Deailts](#command-setblock) -- `getBlock ` gets information about a block [Details](#command-getblock) +- `getBlock ` gets information about a block [Details](#command-getblock) ## Chat @@ -267,11 +267,12 @@ setBlock 10 10 10 stone ### Command: getBlock -- `getBlock ` gets information about a block +- `getBlock ` gets information about a block #### Args - ` :int int int` position of the block +- `` see [dimensions](#dimensions) #### Example diff --git a/src/main/java/org/sk/skMinecraft/commands/GetBlock.java b/src/main/java/org/sk/skMinecraft/commands/GetBlock.java index 8a2c496..bdfe9cc 100644 --- a/src/main/java/org/sk/skMinecraft/commands/GetBlock.java +++ b/src/main/java/org/sk/skMinecraft/commands/GetBlock.java @@ -9,6 +9,7 @@ public class GetBlock extends Command{ private int x,y,z; + private World world; public GetBlock(StringCommand command) { ArgumentParser parser = new ArgumentParser(); @@ -16,7 +17,8 @@ public GetBlock(StringCommand command) { parser.addPositionalArguments( ArgumentParser.IntParser, ArgumentParser.IntParser, - ArgumentParser.IntParser + ArgumentParser.IntParser, + ArgumentParser.StringParser ); ParseResult result = parser.parse(command.arguments()); @@ -29,13 +31,15 @@ public GetBlock(StringCommand command) { this.x = result.getPositional(0); this.y = result.getPositional(1); this.z = result.getPositional(2); + + String worldName = result.getPositional(3); + this.world = Bukkit.getWorld(worldName); } @Override public void apply() { Bukkit.getScheduler().runTask(plugin, () -> { - World world = Bukkit.getWorlds().getFirst(); - Block block = world.getBlockAt(x,y,z); + Block block = this.world.getBlockAt(x,y,z); this.writer.println(block.getType().name()); }); From f0834eb0a60de02d1776779250098aa04682956a Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 15:14:32 +0100 Subject: [PATCH 44/74] add dimensions to spawnEntity --- README.md | 5 +++-- .../org/sk/skMinecraft/commands/SpawnEntity.java | 15 ++++++++++----- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 0674950..b3ff252 100644 --- a/README.md +++ b/README.md @@ -60,7 +60,7 @@ mvn ### Entity -- `spawnEntity ` [Details](#command-spawnentity) +- `spawnEntity ` [Details](#command-spawnentity) - `editEntity ?name:String? ?position:x;y;z? ?ai:boolean?` [Details](#command-editentity) - `getEntity ` [Details](#command-getentity) @@ -328,11 +328,12 @@ Player1:Hallo𝇉Player1:A second message𝇉Player2:Last message ### Command: spawnEntity -- `spawnEntity ` Spawns an entity +- `spawnEntity ` Spawns an entity #### Args - ` ` position +- `` see [dimensions](#dimensions) - `` a string with entity id full list can be cound here: [Entities](https://hub.spigotmc.org/javadocs/spigot/org/bukkit/entity/EntityType.html) #### Returns diff --git a/src/main/java/org/sk/skMinecraft/commands/SpawnEntity.java b/src/main/java/org/sk/skMinecraft/commands/SpawnEntity.java index 9a0e03c..86c852b 100644 --- a/src/main/java/org/sk/skMinecraft/commands/SpawnEntity.java +++ b/src/main/java/org/sk/skMinecraft/commands/SpawnEntity.java @@ -12,6 +12,7 @@ public class SpawnEntity extends Command{ private int x,y,z; + private World world; private EntityType type; public SpawnEntity(StringCommand command) { @@ -20,7 +21,9 @@ public SpawnEntity(StringCommand command) { parser.addPositionalArguments( ArgumentParser.IntParser, ArgumentParser.IntParser, - ArgumentParser.IntParser + ArgumentParser.IntParser, + ArgumentParser.StringParser, + ArgumentParser.StringParser ); ParseResult result = parser.parse(command.arguments()); @@ -31,18 +34,20 @@ public SpawnEntity(StringCommand command) { } this.x = result.getPositional(0); - this.y = result.getPositional(2); + this.y = result.getPositional(1); this.z = result.getPositional(2); - String typeName = result.getPositional(3); + String worldName = result.getPositional(3); + this.world = Bukkit.getWorld(worldName); + + String typeName = result.getPositional(4); this.type = EntityType.valueOf(typeName.toUpperCase()); } @Override public void apply() { Bukkit.getScheduler().runTask(this.plugin, () -> { - World world = Bukkit.getWorlds().getFirst(); // default world - Location loc = new Location(world, x, y, z); + Location loc = new Location(this.world, x, y, z); Entity entity = world.spawnEntity(loc, this.type); CentralResourceHandler.addEntity(entity.getUniqueId().toString(), entity); From 83b91725d81bb2847df2c1e12be63470ce9d3302 Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 15:20:56 +0100 Subject: [PATCH 45/74] cleanup --- .../java/org/sk/skMinecraft/commands/ArgumentParser.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/sk/skMinecraft/commands/ArgumentParser.java b/src/main/java/org/sk/skMinecraft/commands/ArgumentParser.java index a3227a3..7aaa121 100644 --- a/src/main/java/org/sk/skMinecraft/commands/ArgumentParser.java +++ b/src/main/java/org/sk/skMinecraft/commands/ArgumentParser.java @@ -102,19 +102,18 @@ public void addFlag(String name){ } public ParseResult parse(String[] parts) { - if(parts.length < positionalArguments.size()) { return new ParseResult(null, null, false); } - ArrayList postionals = new ArrayList<>(); + ArrayList positionals = new ArrayList<>(); for(int i = 0;i < positionalArguments.size();i++) { try { String part = parts[i]; Function parser = positionalArguments.get(i); Object parsedResult = parser.apply(part); - postionals.add(new ArgumentResult(parsedResult)); + positionals.add(new ArgumentResult(parsedResult)); } catch(Exception e) { return new ParseResult(null, null, false); } @@ -161,6 +160,6 @@ public ParseResult parse(String[] parts) { optionals.put(key, new ArgumentResult(false)); } - return new ParseResult(postionals, optionals, true); + return new ParseResult(positionals, optionals, true); } } From 08298340afbcf92694b57bdaa1ca6b8d616f76ce Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 17:53:45 +0100 Subject: [PATCH 46/74] add timestamp and index to message return on pollChat --- README.md | 6 ++--- .../java/org/sk/skMinecraft/SkMinecraft.java | 17 +++++++++++++- .../org/sk/skMinecraft/commands/PollChat.java | 23 +++++++++++++++++-- .../org/sk/skMinecraft/data/ChatMessage.java | 6 ++++- 4 files changed, 45 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 3958f69..6d34ab8 100644 --- a/README.md +++ b/README.md @@ -131,7 +131,7 @@ Flags are arguments that toggle an effect, the send command just needs to contai ```bash getPlayer 0 -0 ThisRyan 39 83 72 17 STONE false +0 Player1 39 83 72 17 STONE false ``` ### Command: setPlayerStat @@ -308,13 +308,13 @@ chatCommand say Hello from plugin! #### Return -- A list of block of `:` seperated by `𝇉` +- A list of blocks of `:|||||| ::` seperated by `𝇉` #### Example ```bash pollChat -Player1:Hallo𝇉Player1:A second message𝇉Player2:Last message +Player1:2025|12|21|17|49|27:0:This is a message:2025|12|21|17|49|29:1:Message 2 ``` ### Command: spawnEntity diff --git a/src/main/java/org/sk/skMinecraft/SkMinecraft.java b/src/main/java/org/sk/skMinecraft/SkMinecraft.java index 417e866..3fa0e94 100644 --- a/src/main/java/org/sk/skMinecraft/SkMinecraft.java +++ b/src/main/java/org/sk/skMinecraft/SkMinecraft.java @@ -1,5 +1,7 @@ package org.sk.skMinecraft; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.AsyncPlayerChatEvent; @@ -13,6 +15,7 @@ import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; +import java.time.LocalDateTime; import java.util.Arrays; public final class SkMinecraft extends JavaPlugin implements Listener { @@ -47,6 +50,18 @@ public static StringCommand splitCommand(String command) { return new StringCommand(parts[0], Arrays.copyOfRange(parts, 1, parts.length)); } + public static int playerIndexFromName(String name) { + Player[] players = Bukkit.getOnlinePlayers().toArray(new Player[0]); + + for(int i = 0;i < players.length;i++){ + if(players[i].getName().equals(name)) { + return i; + } + } + + return -1; + } + @Override public void onEnable() { CentralResourceHandler.init(); @@ -83,7 +98,7 @@ private void startTcpListener() { @EventHandler public void onPlayerChat(AsyncPlayerChatEvent event) { - ChatMessage message = new ChatMessage(event.getPlayer(), event.getMessage()); + ChatMessage message = new ChatMessage(event.getPlayer(), event.getMessage(), LocalDateTime.now()); CentralResourceHandler.addChatMessage(message); } diff --git a/src/main/java/org/sk/skMinecraft/commands/PollChat.java b/src/main/java/org/sk/skMinecraft/commands/PollChat.java index 84d1e13..3760246 100644 --- a/src/main/java/org/sk/skMinecraft/commands/PollChat.java +++ b/src/main/java/org/sk/skMinecraft/commands/PollChat.java @@ -6,19 +6,38 @@ import org.sk.skMinecraft.SkMinecraft.StringCommand; import org.sk.skMinecraft.data.ChatMessage; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; public class PollChat extends Command { public PollChat(StringCommand s) {} + private String formatMessage(ChatMessage message) { + StringBuilder builder = new StringBuilder(); + + builder.append(message.player.getName()); + builder.append(":"); + + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy|MM|dd|HH|mm|ss"); + builder.append(message.timestamp.format(formatter)); + builder.append(":"); + + builder.append(SkMinecraft.playerIndexFromName(message.player.getName())); + builder.append(":"); + + builder.append(message.message); + + return builder.toString(); + } + @Override public void apply() { Bukkit.getScheduler().runTask(plugin, () -> { ArrayList messages = CentralResourceHandler.getChatMessages(); String output = messages.stream() - .map(message -> message.player.getName() + ":" + message.message) - .reduce("", (arg, msg) -> arg == "" ? msg : arg + SkMinecraft.seperator + msg); + .map(message -> formatMessage(message)) + .reduce("", (arg, msg) -> arg == "" ? msg : arg + SkMinecraft.seperator + msg);; this.writer.println(output); }); diff --git a/src/main/java/org/sk/skMinecraft/data/ChatMessage.java b/src/main/java/org/sk/skMinecraft/data/ChatMessage.java index aad73d7..1c0020d 100644 --- a/src/main/java/org/sk/skMinecraft/data/ChatMessage.java +++ b/src/main/java/org/sk/skMinecraft/data/ChatMessage.java @@ -1,14 +1,18 @@ package org.sk.skMinecraft.data; +import java.time.LocalDateTime; + import org.bukkit.entity.Player; public class ChatMessage { public Player player; public String message; + public LocalDateTime timestamp; - public ChatMessage(Player player, String message) { + public ChatMessage(Player player, String message, LocalDateTime timestamp) { this.player = player; this.message = message; + this.timestamp = timestamp; } } \ No newline at end of file From ab980b9ed91bd8fbe215c451e442d43d7b3518e6 Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 17:57:28 +0100 Subject: [PATCH 47/74] fix bug in postChat --- src/main/java/org/sk/skMinecraft/commands/PostChat.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/sk/skMinecraft/commands/PostChat.java b/src/main/java/org/sk/skMinecraft/commands/PostChat.java index a067deb..ea46e3d 100644 --- a/src/main/java/org/sk/skMinecraft/commands/PostChat.java +++ b/src/main/java/org/sk/skMinecraft/commands/PostChat.java @@ -1,6 +1,7 @@ package org.sk.skMinecraft.commands; import java.util.Arrays; +import java.util.stream.Collectors; import org.bukkit.Bukkit; import org.sk.skMinecraft.SkMinecraft.StringCommand; @@ -10,7 +11,7 @@ public class PostChat extends Command { private final String message; public PostChat(StringCommand command) { - this.message = Arrays.stream(command.arguments()).toString(); + this.message = Arrays.stream(command.arguments()).collect(Collectors.joining("")); } @Override From c1f43b23536fadd550f59c36299db97244f403cb Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 18:01:34 +0100 Subject: [PATCH 48/74] add dimension to getEntity --- README.md | 4 +++- src/main/java/org/sk/skMinecraft/commands/GetEntity.java | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b3ff252..f00eac9 100644 --- a/README.md +++ b/README.md @@ -375,7 +375,9 @@ editEntity ff568527-7c0c-4536-aed2-ef77429d61b8 name:Zomb position:10;10;200 ai: #### Returns -- ` ` +- ` ` + +- `` see [dimensions](#dimensions) #### Example diff --git a/src/main/java/org/sk/skMinecraft/commands/GetEntity.java b/src/main/java/org/sk/skMinecraft/commands/GetEntity.java index 85b8234..96703df 100644 --- a/src/main/java/org/sk/skMinecraft/commands/GetEntity.java +++ b/src/main/java/org/sk/skMinecraft/commands/GetEntity.java @@ -36,6 +36,7 @@ public static String informationString(String uuid, Entity ent) { int x = loc.getBlockX(); int y = loc.getBlockY(); int z = loc.getBlockZ(); + String world = loc.getWorld().getName(); double health = 0; boolean ai = false; if(ent instanceof LivingEntity lent) { @@ -44,7 +45,7 @@ public static String informationString(String uuid, Entity ent) { } String type = ent.getType().toString(); - String result = SkMinecraft.joinWithSeperator(uuid, type, name, x, y, z, health, ai); + String result = SkMinecraft.joinWithSeperator(uuid, type, name, x, y, z, world, health, ai); return result; } From 2141c665789ef175324a30d72ae1a92286f5b22c Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 18:09:20 +0100 Subject: [PATCH 49/74] add dimension to editEntity --- README.md | 6 ++-- .../sk/skMinecraft/commands/EditEntity.java | 19 ++++++------ .../org/sk/skMinecraft/data/Position.java | 31 +++++++++++++++++++ 3 files changed, 43 insertions(+), 13 deletions(-) create mode 100644 src/main/java/org/sk/skMinecraft/data/Position.java diff --git a/README.md b/README.md index f00eac9..acd82c3 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,7 @@ mvn ### Entity - `spawnEntity ` [Details](#command-spawnentity) -- `editEntity ?name:String? ?position:x;y;z? ?ai:boolean?` [Details](#command-editentity) +- `editEntity ?name:String? ?position:x;y;z;dimension? ?ai:boolean?` [Details](#command-editentity) - `getEntity ` [Details](#command-getentity) ### Boss Bar @@ -349,13 +349,13 @@ ff568527-7c0c-4536-aed2-ef77429d61b8 ### Command: editEntity -- `editEntity ?name:String? ?position:x;y;z? ?ai:boolean?` Edits a existing entity which was previously spawned by the `spawnEntity` command +- `editEntity ?name:String? ?position:x;y;z;dimension? ?ai:boolean?` Edits a existing entity which was previously spawned by the `spawnEntity` command #### Args - `target` is the uuid returned by `spawnEntity` - `name` if is set the entites custom name is changed -- `position`if is set the entities position will be set to the given x,y,z coordinates +- `position`if is set the entities position will be set to the given x,y,z coordinates as well as the [dimension](#dimensions) , - `ai` sets the ai of the entity, if its turned off the entity will not move. #### Example diff --git a/src/main/java/org/sk/skMinecraft/commands/EditEntity.java b/src/main/java/org/sk/skMinecraft/commands/EditEntity.java index 883759e..08adb96 100644 --- a/src/main/java/org/sk/skMinecraft/commands/EditEntity.java +++ b/src/main/java/org/sk/skMinecraft/commands/EditEntity.java @@ -7,13 +7,9 @@ import org.bukkit.entity.LivingEntity; import org.sk.skMinecraft.SkMinecraft.StringCommand; import org.sk.skMinecraft.commands.ArgumentParser.ParseResult; - -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; +import org.sk.skMinecraft.data.Position; public class EditEntity extends Command { - private String target; private boolean setAi; @@ -21,6 +17,7 @@ public class EditEntity extends Command { private boolean setPosition; private int x,y,z; + private World world; private String name; @@ -35,7 +32,7 @@ public EditEntity(StringCommand command) { ); parser.addOptionalArgument("ai", Boolean::parseBoolean); - parser.addOptionalArgument("position", arg-> Arrays.stream(arg.split(";")).map(Integer::parseInt).collect(Collectors.toList())); + parser.addOptionalArgument("position", arg -> Position.fromString(arg, ";")); parser.addOptionalArgument("name", ArgumentParser.StringParser); parser.addOptionalArgument("health", Double::parseDouble); @@ -55,10 +52,11 @@ public EditEntity(StringCommand command) { this.setPosition = result.isSet("position"); if(this.setPosition) { - List positions = result.getOptional("position"); - this.x = positions.get(0); - this.y = positions.get(1); - this.z = positions.get(2); + Position position = result.getOptional("position"); + this.x = position.x; + this.y = position.y; + this.z = position.z; + this.world = position.world; } this.name = result.getOptional("name"); @@ -101,6 +99,7 @@ public void apply() { loc.setX(this.x); loc.setY(this.y); loc.setZ(this.z); + loc.setWorld(this.world); ent.teleport(loc); } diff --git a/src/main/java/org/sk/skMinecraft/data/Position.java b/src/main/java/org/sk/skMinecraft/data/Position.java new file mode 100644 index 0000000..4e38d46 --- /dev/null +++ b/src/main/java/org/sk/skMinecraft/data/Position.java @@ -0,0 +1,31 @@ +package org.sk.skMinecraft.data; + +import org.bukkit.Bukkit; +import org.bukkit.World; + +public class Position { + public int x,y,z; + public World world; + + public static Position fromString(String position, String seperator) { + String[] pos = position.split(seperator); + + + int x = Integer.parseInt(pos[0]); + int y = Integer.parseInt(pos[1]); + int z = Integer.parseInt(pos[2]); + + World world = Bukkit.getWorld(pos[3]); + + return new Position(x,y,z, world); + } + + public Position(int x, int y, int z, World world) { + this.x = x; + this.y = y; + this.z = z; + + this.world = world; + } + +} From f5d27f350480ac3ed003c40067082b04c0eae15a Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 18:19:16 +0100 Subject: [PATCH 50/74] fix small bug --- src/main/java/org/sk/skMinecraft/commands/ArgumentParser.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/sk/skMinecraft/commands/ArgumentParser.java b/src/main/java/org/sk/skMinecraft/commands/ArgumentParser.java index 7aaa121..449e125 100644 --- a/src/main/java/org/sk/skMinecraft/commands/ArgumentParser.java +++ b/src/main/java/org/sk/skMinecraft/commands/ArgumentParser.java @@ -64,7 +64,7 @@ public boolean isValid() { } public boolean getFlag(String name) { - return !optionals.get(name).asBool(); + return optionals.get(name).asBool(); } public boolean isSet(String name) { From 36399276390a83237155a2ba0b3e200f1a24ffca Mon Sep 17 00:00:00 2001 From: nonchris Date: Sun, 21 Dec 2025 18:44:25 +0100 Subject: [PATCH 51/74] how to create server --- README.md | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6d34ab8..afb9195 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ A simple minecraft plugin for sending commands to a server. -`The plugin was developed with spigot version 1.21.5`. +`The plugin was developed with spigot version 1.21.5` [download](https://getbukkit.org/download/spigot). ## Building @@ -12,6 +12,22 @@ This project can be build using maven, just run the mvn command in the directory mvn ``` +### Creating the Server +Follow the [instructions](https://www.spigotmc.org/wiki/spigot-installation/#windows). +Basically.: +- Create an arbitrary folder + - Create a new file (`.txt` is the simplest) + - Put these three lines below in it (make sure to replace the version in the .jar's filename if needed. + - Rename the file to `start.bat` (accept window's warning, we want the file to be executable). + - Put the downloaded server-jar in the folder, next to the bat + - Create a new folder inside your current folder, name it `plugins` + - Put the plugin-jar, you built or downloaded in it + + ```@echo off +java -Xms#G -Xmx#G -XX:+UseG1GC -jar spigot-1.21.5.jar nogui +pause +``` + ## Usage - This is a plugin intended to be used with a spigot server, just put the jar into the plugin folder. From 53a2e18187f9c972b06a694eb9e0023bf2636830 Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 18:57:21 +0100 Subject: [PATCH 52/74] Fix parsing bug --- src/main/java/org/sk/skMinecraft/commands/SetPlayerStat.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/sk/skMinecraft/commands/SetPlayerStat.java b/src/main/java/org/sk/skMinecraft/commands/SetPlayerStat.java index f2c3877..f205623 100644 --- a/src/main/java/org/sk/skMinecraft/commands/SetPlayerStat.java +++ b/src/main/java/org/sk/skMinecraft/commands/SetPlayerStat.java @@ -28,7 +28,7 @@ public SetPlayerStat(StringCommand command){ parser.addPositionalArguments( ArgumentParser.StringParser, ArgumentParser.IntParser, - ArgumentParser.IntParser + ArgumentParser.DoubleParser ); ParseResult result = parser.parse(command.arguments()); From 9c5f65acd5dbaa688427a255a67b452160c9fa00 Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 19:15:20 +0100 Subject: [PATCH 53/74] fix bug --- src/main/java/org/sk/skMinecraft/commands/SpawnEntity.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/sk/skMinecraft/commands/SpawnEntity.java b/src/main/java/org/sk/skMinecraft/commands/SpawnEntity.java index 9a0e03c..c5ae8ac 100644 --- a/src/main/java/org/sk/skMinecraft/commands/SpawnEntity.java +++ b/src/main/java/org/sk/skMinecraft/commands/SpawnEntity.java @@ -20,7 +20,8 @@ public SpawnEntity(StringCommand command) { parser.addPositionalArguments( ArgumentParser.IntParser, ArgumentParser.IntParser, - ArgumentParser.IntParser + ArgumentParser.IntParser, + ArgumentParser.StringParser ); ParseResult result = parser.parse(command.arguments()); From 69264bb5d3179d5fddf711f5badd09a3dfb88221 Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 13:01:48 +0100 Subject: [PATCH 54/74] add dimension to getPlayer --- src/main/java/org/sk/skMinecraft/commands/GetPlayer.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/org/sk/skMinecraft/commands/GetPlayer.java b/src/main/java/org/sk/skMinecraft/commands/GetPlayer.java index ce62456..5b492f8 100644 --- a/src/main/java/org/sk/skMinecraft/commands/GetPlayer.java +++ b/src/main/java/org/sk/skMinecraft/commands/GetPlayer.java @@ -49,6 +49,7 @@ public void apply() { int x = loc.getBlockX(); int y = loc.getBlockY(); int z = loc.getBlockZ(); + String world_name = SkMinecraft.convertWorldName(loc.getWorld().getName()); int rotation = (int)loc.getYaw(); boolean sneak = target.isSneaking(); double maxhealth = target.getAttribute(Attribute.MAX_HEALTH).getBaseValue(); @@ -64,6 +65,7 @@ public void apply() { x, y, z, + world_name, rotation, looking_at, sneak, From 2d87b30775898cabe7a3c77e9db2d40a5a8b9e07 Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 13:10:16 +0100 Subject: [PATCH 55/74] remove name conversion --- src/main/java/org/sk/skMinecraft/commands/GetPlayer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/sk/skMinecraft/commands/GetPlayer.java b/src/main/java/org/sk/skMinecraft/commands/GetPlayer.java index 5b492f8..8c7bb2c 100644 --- a/src/main/java/org/sk/skMinecraft/commands/GetPlayer.java +++ b/src/main/java/org/sk/skMinecraft/commands/GetPlayer.java @@ -49,7 +49,7 @@ public void apply() { int x = loc.getBlockX(); int y = loc.getBlockY(); int z = loc.getBlockZ(); - String world_name = SkMinecraft.convertWorldName(loc.getWorld().getName()); + String world_name = loc.getWorld().getName(); int rotation = (int)loc.getYaw(); boolean sneak = target.isSneaking(); double maxhealth = target.getAttribute(Attribute.MAX_HEALTH).getBaseValue(); From 6504b36096bb170482a6f4fef928123c73cd05ed Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 13:11:53 +0100 Subject: [PATCH 56/74] update getPlayer command in Readme --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index afb9195..6832f16 100644 --- a/README.md +++ b/README.md @@ -127,7 +127,8 @@ Flags are arguments that toggle an effect, the send command just needs to contai - ` ` - `` the index of the player - `` the name of the player - - `, , ` The tile position of the player + - `, , ` `` The tile position of the player + - `` should be one of `world`, `world_nether`, `world_the_end` - `` The minecraft rotation of the player. - `` The block type the player is looking at - `` depending of wether or not the player is sneaking `true` or `false` From f764fe827dad4523206c1e0226056637b275b803 Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 13:19:45 +0100 Subject: [PATCH 57/74] update return of getPlayer --- README.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 6832f16..047f6fa 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,13 @@ pause - Throughout the commands there are references to indices of online players, it is important to note that currently the index is completly based on the order the players joined in and will change if the players disconnect and rejoin. Currently there is no way to identify the players unqiuely based on a id. - You can of course still differantiate the players based on their names +#### Dimensions + +- Currently the following dimensions are available + - `world`: the normal overworld + - `world_nether`: The Nether + - ` world_the_end`: The End + ### Player - `getPlayer ` gets information about a player. [Details](#command-getplayer) @@ -124,11 +131,10 @@ Flags are arguments that toggle an effect, the send command just needs to contai #### Returns -- ` ` +- ` ` - `` the index of the player - `` the name of the player - - `, , ` `` The tile position of the player - - `` should be one of `world`, `world_nether`, `world_the_end` + - `, , ` `` The tile position of the player (see [dimensions](#dimensions)) - `` The minecraft rotation of the player. - `` The block type the player is looking at - `` depending of wether or not the player is sneaking `true` or `false` From 02217bb532f441c0d32c71500403afc71681c691 Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 14:58:35 +0100 Subject: [PATCH 58/74] add dimensions to Readme --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 047f6fa..4530310 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,7 @@ pause ### Player - `getPlayer ` gets information about a player. [Details](#command-getplayer) -- `setPlayerPos ?rotation:int?` Set the player position [Details](#command-setplayerpos) +- `setPlayerPos ?rotation:int?` Set the player position [Details](#command-setplayerpos) - `setPlayerStat ` Set a player stat [Details](#command-setplayerstat) - `showTitle ` Show a Title to players [Details](#command-showtitle) @@ -256,12 +256,12 @@ getInv 0 ### Command: setPlayerPos -- `setPlayerPos ?rotation:int?` +- `setPlayerPos ?rotation:int?` #### Args - `playerIndex` the index of the online player -- `, , ` the new position of the player +- `, , ` the new position of the player (see [dimensions](#dimensions)) - `?rotation?` optionaly the direction the player should be looking in ### Command: setBlock From 1feec948438cbde67ce542e2d0685e06256dc6ff Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 15:06:21 +0100 Subject: [PATCH 59/74] add dimension to SetPlayerPos --- .../java/org/sk/skMinecraft/commands/SetPlayerPos.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java b/src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java index 9879d02..171257e 100644 --- a/src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java +++ b/src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java @@ -2,6 +2,7 @@ import org.bukkit.Bukkit; import org.bukkit.Location; +import org.bukkit.World; import org.bukkit.entity.Player; import org.sk.skMinecraft.SkMinecraft.StringCommand; import org.sk.skMinecraft.commands.ArgumentParser.ParseResult; @@ -11,6 +12,7 @@ public class SetPlayerPos extends Command { private int x; private int y; private int z; + private World world; private int rot; private boolean setRot; private int playerIndex; @@ -21,8 +23,9 @@ public SetPlayerPos(StringCommand command ){ parser.addPositionalArguments( ArgumentParser.IntParser, ArgumentParser.IntParser, - ArgumentParser.IntParser, - ArgumentParser.IntParser + ArgumentParser.IntParser, + ArgumentParser.IntParser, + ArgumentParser.StringParser ); parser.addOptionalArgument("rot", Integer::parseInt); @@ -38,6 +41,8 @@ public SetPlayerPos(StringCommand command ){ this.x = result.getPositional(1); this.y = result.getPositional(2); this.z = result.getPositional(3); + String worldName = result.getPositional(4); + this.world = Bukkit.getWorld(worldName); this.setRot = !result.isSet("rot"); if(this.setRot) { @@ -56,6 +61,7 @@ public void apply() { Player player = players[playerIndex]; Location loc = new Location(player.getWorld(), this.x, this.y, this.z); + loc.setWorld(this.world); if(!this.setRot) { loc.setYaw(player.getLocation().getYaw()); }else { From 280cc459276ad9309023f68396158d53b3857689 Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 15:09:15 +0100 Subject: [PATCH 60/74] fix setPlayerPos --- src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java b/src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java index 171257e..482ef97 100644 --- a/src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java +++ b/src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java @@ -60,8 +60,7 @@ public void apply() { } Player player = players[playerIndex]; - Location loc = new Location(player.getWorld(), this.x, this.y, this.z); - loc.setWorld(this.world); + Location loc = new Location(this.world, this.x, this.y, this.z); if(!this.setRot) { loc.setYaw(player.getLocation().getYaw()); }else { From c39a8e1f2b874bca956c7fe1f2c057f3d5415794 Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 15:09:22 +0100 Subject: [PATCH 61/74] add dimension to setBlock --- .../java/org/sk/skMinecraft/commands/SetBlock.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/sk/skMinecraft/commands/SetBlock.java b/src/main/java/org/sk/skMinecraft/commands/SetBlock.java index fa8e856..778d41a 100644 --- a/src/main/java/org/sk/skMinecraft/commands/SetBlock.java +++ b/src/main/java/org/sk/skMinecraft/commands/SetBlock.java @@ -9,6 +9,7 @@ public class SetBlock extends Command { private int x,y,z; + private World world; private Material material; public SetBlock(StringCommand command) { @@ -18,6 +19,7 @@ public SetBlock(StringCommand command) { ArgumentParser.IntParser, ArgumentParser.IntParser, ArgumentParser.IntParser, + ArgumentParser.StringParser, ArgumentParser.StringParser ); @@ -32,7 +34,10 @@ public SetBlock(StringCommand command) { this.y = result.getPositional(1); this.z = result.getPositional(2); - String blockId = result.getPositional(3); + String worldName = result.getPositional(3); + this.world = Bukkit.getWorld(worldName); + + String blockId = result.getPositional(4); this.material = Material.matchMaterial(blockId); if (this.material == null || !this.material.isBlock()) { @@ -43,8 +48,7 @@ public SetBlock(StringCommand command) { public void apply() { Bukkit.getScheduler().runTask(this.plugin, () -> { - World world = Bukkit.getWorlds().getFirst(); // default world - Location loc = new Location(world, x, y, z); + Location loc = new Location(this.world, x, y, z); loc.getBlock().setType(this.material); }); } From 1717eae31d8e92c26f64c455cd87d3ad2ec86f95 Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 15:09:37 +0100 Subject: [PATCH 62/74] update readme --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4530310..6ea52e0 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,7 @@ pause ## Block -- `setBlock ` Set a block at a location [Deailts](#command-setblock) +- `setBlock ` Set a block at a location [Deailts](#command-setblock) - `getBlock ` gets information about a block [Details](#command-getblock) ## Chat @@ -266,11 +266,12 @@ getInv 0 ### Command: setBlock -- `setBlock ` Set a block at a location +- `setBlock ` Set a block at a location #### Args - ` ` position of the block +- `` see [dimensions](#dimensions) - `` the block id as a string i.e. "stone" #### Example From 21c0aabdf219cf4b93ae2691cbd19ca690f3da0c Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 15:12:01 +0100 Subject: [PATCH 63/74] add dimension to GetBlock --- README.md | 5 +++-- .../java/org/sk/skMinecraft/commands/GetBlock.java | 10 +++++++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 6ea52e0..b3886a5 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,7 @@ pause ## Block - `setBlock ` Set a block at a location [Deailts](#command-setblock) -- `getBlock ` gets information about a block [Details](#command-getblock) +- `getBlock ` gets information about a block [Details](#command-getblock) ## Chat @@ -283,11 +283,12 @@ setBlock 10 10 10 stone ### Command: getBlock -- `getBlock ` gets information about a block +- `getBlock ` gets information about a block #### Args - ` :int int int` position of the block +- `` see [dimensions](#dimensions) #### Example diff --git a/src/main/java/org/sk/skMinecraft/commands/GetBlock.java b/src/main/java/org/sk/skMinecraft/commands/GetBlock.java index 8a2c496..bdfe9cc 100644 --- a/src/main/java/org/sk/skMinecraft/commands/GetBlock.java +++ b/src/main/java/org/sk/skMinecraft/commands/GetBlock.java @@ -9,6 +9,7 @@ public class GetBlock extends Command{ private int x,y,z; + private World world; public GetBlock(StringCommand command) { ArgumentParser parser = new ArgumentParser(); @@ -16,7 +17,8 @@ public GetBlock(StringCommand command) { parser.addPositionalArguments( ArgumentParser.IntParser, ArgumentParser.IntParser, - ArgumentParser.IntParser + ArgumentParser.IntParser, + ArgumentParser.StringParser ); ParseResult result = parser.parse(command.arguments()); @@ -29,13 +31,15 @@ public GetBlock(StringCommand command) { this.x = result.getPositional(0); this.y = result.getPositional(1); this.z = result.getPositional(2); + + String worldName = result.getPositional(3); + this.world = Bukkit.getWorld(worldName); } @Override public void apply() { Bukkit.getScheduler().runTask(plugin, () -> { - World world = Bukkit.getWorlds().getFirst(); - Block block = world.getBlockAt(x,y,z); + Block block = this.world.getBlockAt(x,y,z); this.writer.println(block.getType().name()); }); From d45f4572f8eda8de3d84bc8422c2ddd3f1959aff Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 15:14:32 +0100 Subject: [PATCH 64/74] add dimensions to spawnEntity --- README.md | 5 +++-- .../org/sk/skMinecraft/commands/SpawnEntity.java | 12 ++++++++---- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index b3886a5..9e3b367 100644 --- a/README.md +++ b/README.md @@ -76,7 +76,7 @@ pause ### Entity -- `spawnEntity ` [Details](#command-spawnentity) +- `spawnEntity ` [Details](#command-spawnentity) - `editEntity ?name:String? ?position:x;y;z? ?ai:boolean?` [Details](#command-editentity) - `getEntity ` [Details](#command-getentity) @@ -344,11 +344,12 @@ Player1:2025|12|21|17|49|27:0:This is a message:2025|12|21|17|49|29:1:Message 2 ### Command: spawnEntity -- `spawnEntity ` Spawns an entity +- `spawnEntity ` Spawns an entity #### Args - ` ` position +- `` see [dimensions](#dimensions) - `` a string with entity id full list can be cound here: [Entities](https://hub.spigotmc.org/javadocs/spigot/org/bukkit/entity/EntityType.html) #### Returns diff --git a/src/main/java/org/sk/skMinecraft/commands/SpawnEntity.java b/src/main/java/org/sk/skMinecraft/commands/SpawnEntity.java index c5ae8ac..86c852b 100644 --- a/src/main/java/org/sk/skMinecraft/commands/SpawnEntity.java +++ b/src/main/java/org/sk/skMinecraft/commands/SpawnEntity.java @@ -12,6 +12,7 @@ public class SpawnEntity extends Command{ private int x,y,z; + private World world; private EntityType type; public SpawnEntity(StringCommand command) { @@ -21,6 +22,7 @@ public SpawnEntity(StringCommand command) { ArgumentParser.IntParser, ArgumentParser.IntParser, ArgumentParser.IntParser, + ArgumentParser.StringParser, ArgumentParser.StringParser ); @@ -32,18 +34,20 @@ public SpawnEntity(StringCommand command) { } this.x = result.getPositional(0); - this.y = result.getPositional(2); + this.y = result.getPositional(1); this.z = result.getPositional(2); - String typeName = result.getPositional(3); + String worldName = result.getPositional(3); + this.world = Bukkit.getWorld(worldName); + + String typeName = result.getPositional(4); this.type = EntityType.valueOf(typeName.toUpperCase()); } @Override public void apply() { Bukkit.getScheduler().runTask(this.plugin, () -> { - World world = Bukkit.getWorlds().getFirst(); // default world - Location loc = new Location(world, x, y, z); + Location loc = new Location(this.world, x, y, z); Entity entity = world.spawnEntity(loc, this.type); CentralResourceHandler.addEntity(entity.getUniqueId().toString(), entity); From 1c0cd0cbadedc2a2d5461bb46c913cf00686f12c Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 15:20:56 +0100 Subject: [PATCH 65/74] cleanup --- .../java/org/sk/skMinecraft/commands/ArgumentParser.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/sk/skMinecraft/commands/ArgumentParser.java b/src/main/java/org/sk/skMinecraft/commands/ArgumentParser.java index a3227a3..7aaa121 100644 --- a/src/main/java/org/sk/skMinecraft/commands/ArgumentParser.java +++ b/src/main/java/org/sk/skMinecraft/commands/ArgumentParser.java @@ -102,19 +102,18 @@ public void addFlag(String name){ } public ParseResult parse(String[] parts) { - if(parts.length < positionalArguments.size()) { return new ParseResult(null, null, false); } - ArrayList postionals = new ArrayList<>(); + ArrayList positionals = new ArrayList<>(); for(int i = 0;i < positionalArguments.size();i++) { try { String part = parts[i]; Function parser = positionalArguments.get(i); Object parsedResult = parser.apply(part); - postionals.add(new ArgumentResult(parsedResult)); + positionals.add(new ArgumentResult(parsedResult)); } catch(Exception e) { return new ParseResult(null, null, false); } @@ -161,6 +160,6 @@ public ParseResult parse(String[] parts) { optionals.put(key, new ArgumentResult(false)); } - return new ParseResult(postionals, optionals, true); + return new ParseResult(positionals, optionals, true); } } From 1f9fd92a6f8e6ba8eec036c726952280fbe2aa34 Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 18:01:34 +0100 Subject: [PATCH 66/74] add dimension to getEntity --- README.md | 4 +++- src/main/java/org/sk/skMinecraft/commands/GetEntity.java | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9e3b367..75d2772 100644 --- a/README.md +++ b/README.md @@ -391,7 +391,9 @@ editEntity ff568527-7c0c-4536-aed2-ef77429d61b8 name:Zomb position:10;10;200 ai: #### Returns -- ` ` +- ` ` + +- `` see [dimensions](#dimensions) #### Example diff --git a/src/main/java/org/sk/skMinecraft/commands/GetEntity.java b/src/main/java/org/sk/skMinecraft/commands/GetEntity.java index 85b8234..96703df 100644 --- a/src/main/java/org/sk/skMinecraft/commands/GetEntity.java +++ b/src/main/java/org/sk/skMinecraft/commands/GetEntity.java @@ -36,6 +36,7 @@ public static String informationString(String uuid, Entity ent) { int x = loc.getBlockX(); int y = loc.getBlockY(); int z = loc.getBlockZ(); + String world = loc.getWorld().getName(); double health = 0; boolean ai = false; if(ent instanceof LivingEntity lent) { @@ -44,7 +45,7 @@ public static String informationString(String uuid, Entity ent) { } String type = ent.getType().toString(); - String result = SkMinecraft.joinWithSeperator(uuid, type, name, x, y, z, health, ai); + String result = SkMinecraft.joinWithSeperator(uuid, type, name, x, y, z, world, health, ai); return result; } From 6c405b5044fbf92b14f9a9cf9e866c6ee77a6cf5 Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 18:09:20 +0100 Subject: [PATCH 67/74] add dimension to editEntity --- README.md | 6 ++-- .../sk/skMinecraft/commands/EditEntity.java | 19 ++++++------ .../org/sk/skMinecraft/data/Position.java | 31 +++++++++++++++++++ 3 files changed, 43 insertions(+), 13 deletions(-) create mode 100644 src/main/java/org/sk/skMinecraft/data/Position.java diff --git a/README.md b/README.md index 75d2772..eac585c 100644 --- a/README.md +++ b/README.md @@ -77,7 +77,7 @@ pause ### Entity - `spawnEntity ` [Details](#command-spawnentity) -- `editEntity ?name:String? ?position:x;y;z? ?ai:boolean?` [Details](#command-editentity) +- `editEntity ?name:String? ?position:x;y;z;dimension? ?ai:boolean?` [Details](#command-editentity) - `getEntity ` [Details](#command-getentity) ### Boss Bar @@ -365,13 +365,13 @@ ff568527-7c0c-4536-aed2-ef77429d61b8 ### Command: editEntity -- `editEntity ?name:String? ?position:x;y;z? ?ai:boolean?` Edits a existing entity which was previously spawned by the `spawnEntity` command +- `editEntity ?name:String? ?position:x;y;z;dimension? ?ai:boolean?` Edits a existing entity which was previously spawned by the `spawnEntity` command #### Args - `target` is the uuid returned by `spawnEntity` - `name` if is set the entites custom name is changed -- `position`if is set the entities position will be set to the given x,y,z coordinates +- `position`if is set the entities position will be set to the given x,y,z coordinates as well as the [dimension](#dimensions) , - `ai` sets the ai of the entity, if its turned off the entity will not move. #### Example diff --git a/src/main/java/org/sk/skMinecraft/commands/EditEntity.java b/src/main/java/org/sk/skMinecraft/commands/EditEntity.java index 883759e..08adb96 100644 --- a/src/main/java/org/sk/skMinecraft/commands/EditEntity.java +++ b/src/main/java/org/sk/skMinecraft/commands/EditEntity.java @@ -7,13 +7,9 @@ import org.bukkit.entity.LivingEntity; import org.sk.skMinecraft.SkMinecraft.StringCommand; import org.sk.skMinecraft.commands.ArgumentParser.ParseResult; - -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; +import org.sk.skMinecraft.data.Position; public class EditEntity extends Command { - private String target; private boolean setAi; @@ -21,6 +17,7 @@ public class EditEntity extends Command { private boolean setPosition; private int x,y,z; + private World world; private String name; @@ -35,7 +32,7 @@ public EditEntity(StringCommand command) { ); parser.addOptionalArgument("ai", Boolean::parseBoolean); - parser.addOptionalArgument("position", arg-> Arrays.stream(arg.split(";")).map(Integer::parseInt).collect(Collectors.toList())); + parser.addOptionalArgument("position", arg -> Position.fromString(arg, ";")); parser.addOptionalArgument("name", ArgumentParser.StringParser); parser.addOptionalArgument("health", Double::parseDouble); @@ -55,10 +52,11 @@ public EditEntity(StringCommand command) { this.setPosition = result.isSet("position"); if(this.setPosition) { - List positions = result.getOptional("position"); - this.x = positions.get(0); - this.y = positions.get(1); - this.z = positions.get(2); + Position position = result.getOptional("position"); + this.x = position.x; + this.y = position.y; + this.z = position.z; + this.world = position.world; } this.name = result.getOptional("name"); @@ -101,6 +99,7 @@ public void apply() { loc.setX(this.x); loc.setY(this.y); loc.setZ(this.z); + loc.setWorld(this.world); ent.teleport(loc); } diff --git a/src/main/java/org/sk/skMinecraft/data/Position.java b/src/main/java/org/sk/skMinecraft/data/Position.java new file mode 100644 index 0000000..4e38d46 --- /dev/null +++ b/src/main/java/org/sk/skMinecraft/data/Position.java @@ -0,0 +1,31 @@ +package org.sk.skMinecraft.data; + +import org.bukkit.Bukkit; +import org.bukkit.World; + +public class Position { + public int x,y,z; + public World world; + + public static Position fromString(String position, String seperator) { + String[] pos = position.split(seperator); + + + int x = Integer.parseInt(pos[0]); + int y = Integer.parseInt(pos[1]); + int z = Integer.parseInt(pos[2]); + + World world = Bukkit.getWorld(pos[3]); + + return new Position(x,y,z, world); + } + + public Position(int x, int y, int z, World world) { + this.x = x; + this.y = y; + this.z = z; + + this.world = world; + } + +} From 248c2824fd5c1cbe213733e0ef55c55d2c1b4e58 Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 18:19:16 +0100 Subject: [PATCH 68/74] fix small bug --- src/main/java/org/sk/skMinecraft/commands/ArgumentParser.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/sk/skMinecraft/commands/ArgumentParser.java b/src/main/java/org/sk/skMinecraft/commands/ArgumentParser.java index 7aaa121..449e125 100644 --- a/src/main/java/org/sk/skMinecraft/commands/ArgumentParser.java +++ b/src/main/java/org/sk/skMinecraft/commands/ArgumentParser.java @@ -64,7 +64,7 @@ public boolean isValid() { } public boolean getFlag(String name) { - return !optionals.get(name).asBool(); + return optionals.get(name).asBool(); } public boolean isSet(String name) { From fc7f1d8c95f46d7dbe1538dc1a318e8ee36202ae Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 20:10:52 +0100 Subject: [PATCH 69/74] fix bug --- src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java b/src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java index 482ef97..607261d 100644 --- a/src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java +++ b/src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java @@ -44,7 +44,7 @@ public SetPlayerPos(StringCommand command ){ String worldName = result.getPositional(4); this.world = Bukkit.getWorld(worldName); - this.setRot = !result.isSet("rot"); + this.setRot = result.isSet("rot"); if(this.setRot) { this.rot = result.getOptional("rot"); } From 9717b9db5d166962447026d5beb227b7079e9613 Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 21:02:20 +0100 Subject: [PATCH 70/74] fix bug --- src/main/java/org/sk/skMinecraft/commands/ChatCommand.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/sk/skMinecraft/commands/ChatCommand.java b/src/main/java/org/sk/skMinecraft/commands/ChatCommand.java index 7d0337c..cc0a843 100644 --- a/src/main/java/org/sk/skMinecraft/commands/ChatCommand.java +++ b/src/main/java/org/sk/skMinecraft/commands/ChatCommand.java @@ -1,6 +1,7 @@ package org.sk.skMinecraft.commands; import java.util.Arrays; +import java.util.stream.Collectors; import org.bukkit.Bukkit; import org.sk.skMinecraft.SkMinecraft.StringCommand; @@ -10,7 +11,7 @@ public class ChatCommand extends Command { private String command; public ChatCommand(StringCommand command) { - this.command = Arrays.stream(command.arguments()).toString(); + this.command = Arrays.stream(command.arguments()).collect(Collectors.joining("")); } @Override From 3c15d1e965c69f02a218c857986a10e752681b58 Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 21:09:18 +0100 Subject: [PATCH 71/74] set ip to something more sensible --- src/main/java/org/sk/skMinecraft/SkMinecraft.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/sk/skMinecraft/SkMinecraft.java b/src/main/java/org/sk/skMinecraft/SkMinecraft.java index 3fa0e94..2e03920 100644 --- a/src/main/java/org/sk/skMinecraft/SkMinecraft.java +++ b/src/main/java/org/sk/skMinecraft/SkMinecraft.java @@ -77,8 +77,8 @@ public void onDisable() { private void startTcpListener() { tcpListenerThread = new Thread(() -> { try { - serverSocket = new ServerSocket(12345); // Use your desired port - getLogger().info("TCP server started on port 12345"); + serverSocket = new ServerSocket(25595); + getLogger().info("TCP server started on port 25595"); while (!serverSocket.isClosed()) { Socket client = serverSocket.accept(); From 27eb08d494299c5f7a38022626248d8c522fab59 Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 21:18:37 +0100 Subject: [PATCH 72/74] fix bug --- src/main/java/org/sk/skMinecraft/commands/SetPlayerVelocity.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/org/sk/skMinecraft/commands/SetPlayerVelocity.java b/src/main/java/org/sk/skMinecraft/commands/SetPlayerVelocity.java index c6ba64a..21f9022 100644 --- a/src/main/java/org/sk/skMinecraft/commands/SetPlayerVelocity.java +++ b/src/main/java/org/sk/skMinecraft/commands/SetPlayerVelocity.java @@ -25,7 +25,6 @@ public SetPlayerVelocity(StringCommand command) { parser.addPositionalArguments( ArgumentParser.StringParser, ArgumentParser.IntParser, - ArgumentParser.IntParser, ArgumentParser.DoubleParser ); From f2abbbc38c921df016db303a2bf03978f2413777 Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 21:45:52 +0100 Subject: [PATCH 73/74] bug fix --- src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java b/src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java index 607261d..7fcbe97 100644 --- a/src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java +++ b/src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java @@ -44,9 +44,9 @@ public SetPlayerPos(StringCommand command ){ String worldName = result.getPositional(4); this.world = Bukkit.getWorld(worldName); - this.setRot = result.isSet("rot"); + this.setRot = result.isSet("rotation"); if(this.setRot) { - this.rot = result.getOptional("rot"); + this.rot = result.getOptional("rotation"); } } From 9d98728387184feb5d44d22769419ffcfd469ebc Mon Sep 17 00:00:00 2001 From: Adrian Oeyen Date: Sun, 21 Dec 2025 21:47:27 +0100 Subject: [PATCH 74/74] buggus fixus --- src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java b/src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java index 7fcbe97..b2e3584 100644 --- a/src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java +++ b/src/main/java/org/sk/skMinecraft/commands/SetPlayerPos.java @@ -28,7 +28,7 @@ public SetPlayerPos(StringCommand command ){ ArgumentParser.StringParser ); - parser.addOptionalArgument("rot", Integer::parseInt); + parser.addOptionalArgument("rotation", Integer::parseInt); ParseResult result = parser.parse(command.arguments());