From 19e61e2ae0369913d2211bf2ee840bb8ebcbe548 Mon Sep 17 00:00:00 2001 From: Daniel Date: Wed, 5 Oct 2022 16:28:18 -0400 Subject: [PATCH] Completed Command Framework The Command Framework is done and has been tested via JUnit Testing and via in game testing. Along with that the project can properly be build into a valid plugin --- .DS_Store | Bin 8196 -> 8196 bytes TestFiles/TestConfig 2.yml | 123 +++++++++ TestFiles/TestConfig.yml | 4 +- .../workingDir/ExistingEmptyFileInit.json | 2 +- .../dataBaseInitTestFromNoFile.json | 2 +- .../dataBaseInitTestFromNoFileNum2.json | 1 + pom.xml | 3 +- .../java/de/butzlabben/world/WorldSystem.java | 20 +- .../world/commands/WorldSystemCommand.java | 6 +- .../commands/WorldSystemCommandExecuter.java | 36 ++- .../commands/commands/DebugCommandTest.java | 19 ++ .../world/commands/commands/testCommand.java | 12 - .../world/config/GameruleConfig.java | 164 +++++++++++- .../butzlabben/world/config/PluginConfig.java | 92 ++++--- .../world/data/objects/PlayerWorld.java | 50 ++++ .../exceptions/InvaildCommandException.java | 8 + src/main/resources/config.yml | 11 +- .../world/commands/MockCommand.java | 22 ++ .../world/commands/TestCommandExecuter.java | 53 ++++ .../world/config/TestGameRules.java | 237 +++++++++++++++++- .../world/config/TestPluginConfig.java | 38 +++ .../world/data/TestWorldDatabase.java | 15 +- .../world/data/objects/TestPlayerData.java | 1 + .../world/data/objects/TestPlayerWorld.java | 58 +++++ target/.DS_Store | Bin 0 -> 6148 bytes target/classes/config.yml | 11 +- .../de/butzlabben/world/WorldSystem.class | Bin 298 -> 1031 bytes .../world/commands/WorldSystemCommand.class | Bin 166 -> 244 bytes .../commands/WorldSystemCommandExecuter.class | Bin 1294 -> 2669 bytes .../commands/commands/DebugCommandTest.class | Bin 0 -> 819 bytes .../world/commands/commands/testCommand.class | Bin 459 -> 0 bytes .../world/config/GameruleConfig.class | Bin 0 -> 3904 bytes .../world/config/PluginConfig.class | Bin 7930 -> 7810 bytes .../world/data/objects/PlayerWorld.class | Bin 529 -> 1964 bytes .../exceptions/InvaildCommandException.class | Bin 0 -> 423 bytes .../butzlabben/world/utils/CubicCords.class | Bin 492 -> 0 bytes .../de/butzlabben/world/utils/Location.class | Bin 0 -> 485 bytes .../butzlabben/world/utils/Location2D.class | Bin 0 -> 547 bytes .../butzlabben/world/utils/PlanerCords.class | Bin 550 -> 0 bytes target/classes/plugin.yml | 11 +- target/maven-archiver/pom.properties | 5 + .../compile/default-compile/createdFiles.lst | 119 ++------- .../compile/default-compile/inputFiles.lst | 97 ++----- .../default-testCompile/createdFiles.lst | 8 + .../default-testCompile/inputFiles.lst | 8 + ...ben.world.commands.TestCommandExecuter.xml | 65 +++++ ....butzlabben.world.config.TestGameRules.xml | 87 +++++++ ...tzlabben.world.config.TestPluginConfig.xml | 79 ++++++ ...utzlabben.world.data.TestWorldDatabase.xml | 67 +++++ ...bben.world.data.objects.TestPlayerData.xml | 66 +++++ ...ben.world.data.objects.TestPlayerWorld.xml | 68 +++++ ...world.data.objects.TestWorldSystemData.xml | 68 +++++ ...ben.world.commands.TestCommandExecuter.txt | 4 + ....butzlabben.world.config.TestGameRules.txt | 4 + ...tzlabben.world.config.TestPluginConfig.txt | 4 + ...utzlabben.world.data.TestWorldDatabase.txt | 4 + ...bben.world.data.objects.TestPlayerData.txt | 4 + ...ben.world.data.objects.TestPlayerWorld.txt | 4 + ...world.data.objects.TestWorldSystemData.txt | 4 + .../world/commands/MockCommand.class | Bin 0 -> 683 bytes .../world/commands/TestCommandExecuter.class | Bin 0 -> 2362 bytes .../world/config/TestGameRules.class | Bin 0 -> 5679 bytes .../world/config/TestPluginConfig.class | Bin 4118 -> 5002 bytes .../world/data/TestWorldDatabase.class | Bin 2202 -> 2465 bytes .../world/data/objects/TestPlayerData.class | Bin 1484 -> 1484 bytes .../world/data/objects/TestPlayerWorld.class | Bin 875 -> 2304 bytes 66 files changed, 1514 insertions(+), 250 deletions(-) create mode 100644 TestFiles/TestConfig 2.yml create mode 100644 TestFiles/workingDir/dataBaseInitTestFromNoFileNum2.json create mode 100644 src/main/java/de/butzlabben/world/commands/commands/DebugCommandTest.java delete mode 100644 src/main/java/de/butzlabben/world/commands/commands/testCommand.java create mode 100644 src/main/java/de/butzlabben/world/exceptions/InvaildCommandException.java create mode 100644 src/test/java/de/butzlabben/world/commands/MockCommand.java create mode 100644 src/test/java/de/butzlabben/world/commands/TestCommandExecuter.java create mode 100644 target/.DS_Store create mode 100644 target/classes/de/butzlabben/world/commands/commands/DebugCommandTest.class delete mode 100644 target/classes/de/butzlabben/world/commands/commands/testCommand.class create mode 100644 target/classes/de/butzlabben/world/config/GameruleConfig.class create mode 100644 target/classes/de/butzlabben/world/exceptions/InvaildCommandException.class delete mode 100644 target/classes/de/butzlabben/world/utils/CubicCords.class create mode 100644 target/classes/de/butzlabben/world/utils/Location.class create mode 100644 target/classes/de/butzlabben/world/utils/Location2D.class delete mode 100644 target/classes/de/butzlabben/world/utils/PlanerCords.class create mode 100644 target/maven-archiver/pom.properties create mode 100644 target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst create mode 100644 target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst create mode 100644 target/surefire-reports/TEST-de.butzlabben.world.commands.TestCommandExecuter.xml create mode 100644 target/surefire-reports/TEST-de.butzlabben.world.config.TestGameRules.xml create mode 100644 target/surefire-reports/TEST-de.butzlabben.world.config.TestPluginConfig.xml create mode 100644 target/surefire-reports/TEST-de.butzlabben.world.data.TestWorldDatabase.xml create mode 100644 target/surefire-reports/TEST-de.butzlabben.world.data.objects.TestPlayerData.xml create mode 100644 target/surefire-reports/TEST-de.butzlabben.world.data.objects.TestPlayerWorld.xml create mode 100644 target/surefire-reports/TEST-de.butzlabben.world.data.objects.TestWorldSystemData.xml create mode 100644 target/surefire-reports/de.butzlabben.world.commands.TestCommandExecuter.txt create mode 100644 target/surefire-reports/de.butzlabben.world.config.TestGameRules.txt create mode 100644 target/surefire-reports/de.butzlabben.world.config.TestPluginConfig.txt create mode 100644 target/surefire-reports/de.butzlabben.world.data.TestWorldDatabase.txt create mode 100644 target/surefire-reports/de.butzlabben.world.data.objects.TestPlayerData.txt create mode 100644 target/surefire-reports/de.butzlabben.world.data.objects.TestPlayerWorld.txt create mode 100644 target/surefire-reports/de.butzlabben.world.data.objects.TestWorldSystemData.txt create mode 100644 target/test-classes/de/butzlabben/world/commands/MockCommand.class create mode 100644 target/test-classes/de/butzlabben/world/commands/TestCommandExecuter.class create mode 100644 target/test-classes/de/butzlabben/world/config/TestGameRules.class diff --git a/.DS_Store b/.DS_Store index ff793b97dd88d004d55d7d5dfa2d87b286e581e9..a3dc42e2d5431b211afccc5006aba0f8b7c5f84b 100644 GIT binary patch delta 37 tcmZp1XmOa}&nUeyU^hRb^kyD`ZOj}g#mPBI`T04MHwt%c4iVYF4FK*p4FmuH delta 33 pcmZp1XmOa}&nUGqU^hRb)Mg%mZOoHz3s-Ko<~hT>nO)*9I{?B;3yJ^$ diff --git a/TestFiles/TestConfig 2.yml b/TestFiles/TestConfig 2.yml new file mode 100644 index 0000000..d7608d7 --- /dev/null +++ b/TestFiles/TestConfig 2.yml @@ -0,0 +1,123 @@ +########################################################################## +### __ __ __ _______ __ ### +### \ \ / / / / / / ___/ / / ### +### \ \ __ / /___ ___/ /___/ / /____ ______/ /______________ ### +### \ \ / \ / / __ \/ _/ / __ /__ / / / / __/ __/ ___/ _ _ / ### +### \ \/ /\ \/ / /_/ / // / /_/ /__/ / /_/ /_ / /_/ ___/ // // / ### +### \__/ \__/\____/_//_/\__,_/____/\__, /___/\__/\___/_//_//_/ ### +### ___/ / ### +### \___/ ### +########################################################################## + + +#################### +# General Settings # +#################### + +# The Language to plugin should run in +language: "en" +#The Path that the Worlds of players will be stored when not in use. +playerWorldsDir: 'plugins/WorldSystem/Worlds' + +#The time that a world should take till it unloads from no use +unloadTime: 20 + +#Prefix on Messages sent by the plugin +prefix: '&8[&3WorldSystem&8] &6' + +#Delete the world after set amount of days +#-1 to disable +deleteAfterDays: -1 + +#World Difficulty + #Options: PEACEFUL, EASY, NORMAL, HARD +worldDifficulty: 'EASY' + +########################## +# World Creation Setting # +########################## + +#Allow Players to Choose the Template they want +multiChoose: false +#The Default Generation File +#Warning: "do not add the .json" +defaultGenerator: 'Vanilla' +#World Generation Folder +worldGenTemplates: 'plugins/WorldSystem/Generators' + +#World Borders + #The Default World Border Size for everyone +worldBorderDefaultSize: 500 +#!Note: Dynamic World Borders Will Added back in a Future Update + +#World Border Center +worldBorderCenter: + x: 0 + z: 0 + +########################## +# World Entering/Exiting # +########################## + +#This is the Settings you need to adjust to your server +serverSpawn: + #The Gamemode the Main server uses + #Options: Survival, Creative, Adventure + #Warning: Spectator is not a Valid Input + #Warning: Spelling Matters, Capitalization Does not + serverGamemode: 'Survival' + #The point the player should be placed when leaving a WS World + serverSpawnPoint: + worldName: 'world' + x: 0 + y: 60 + z: 0 + +#This is the Settings you need to adjust to your server +wsWorldSpawn: + #The Gamemode the Main server uses + #World Gamemode + #Options: Survival, Creative, Adventure + #Warning: Spectator is not a Valid Input + #Warning: Spelling Matters, Capitalization Does not + worldGameMode: 'Survival' + # places the player at their last known location in the world + useLastLocation: false + #The point the player should be placed when entering a WS World + #for the first Time + defaultWorldSpawnPoint: + worldName: 'world' + x: 0 + y: 60 + z: 0 + +################### +# World Gamerules # +################### + +#!DevTODO create a class to handle this to make it cleaner +#Also Document this part of the config +announceAdvancements: true +commandBlockOutput: false +disableElytraMovementCheck: false +doDaylightCycle: true +doEntityDrops: true +doFireTick: true +doLimitedCrafting: false +doMobLoot: true +doMobSpawning: true +doTileDrops: true +doWeatherCycle: false +gameLoopFunction: false +keepInventory: true +logAdminCommands: true +maxCommandChainLength: 65536 +maxEntityCramming: 24 +mobGriefing: true +naturalRegeneration: true +randomTickSpeed: 3 +reducedDebugInfo: false +sendCommandFeedback: true +showDeathMessages: true +spawnRadius: 10 +spectatorsGenerateChunks: true \ No newline at end of file diff --git a/TestFiles/TestConfig.yml b/TestFiles/TestConfig.yml index 6245184..679d09e 100644 --- a/TestFiles/TestConfig.yml +++ b/TestFiles/TestConfig.yml @@ -82,7 +82,7 @@ wsWorldSpawn: #Warning: Spelling Matters, Capitalization Does not worldGameMode: 'Survival' # places the player at their last known location in the world - useLastLocation: false; + useLastLocation: false #The point the player should be placed when entering a WS World #for the first Time defaultWorldSpawnPoint: @@ -96,7 +96,7 @@ wsWorldSpawn: # These Config Options are for the Devlopment and Maintenace # Of World System. These features are not for production. -devcmds: false; +devcmds: false ################### # World Gamerules # diff --git a/TestFiles/workingDir/ExistingEmptyFileInit.json b/TestFiles/workingDir/ExistingEmptyFileInit.json index 8085c6b..ae5bd6a 100644 --- a/TestFiles/workingDir/ExistingEmptyFileInit.json +++ b/TestFiles/workingDir/ExistingEmptyFileInit.json @@ -1 +1 @@ -{"players":{}} \ No newline at end of file +{"players":{"BlankUUID":{"playerWorlds":[]}}} \ No newline at end of file diff --git a/TestFiles/workingDir/dataBaseInitTestFromNoFile.json b/TestFiles/workingDir/dataBaseInitTestFromNoFile.json index ae5bd6a..506339c 100644 --- a/TestFiles/workingDir/dataBaseInitTestFromNoFile.json +++ b/TestFiles/workingDir/dataBaseInitTestFromNoFile.json @@ -1 +1 @@ -{"players":{"BlankUUID":{"playerWorlds":[]}}} \ No newline at end of file +{"players":{"null":{"playerWorlds":[]}}} \ No newline at end of file diff --git a/TestFiles/workingDir/dataBaseInitTestFromNoFileNum2.json b/TestFiles/workingDir/dataBaseInitTestFromNoFileNum2.json new file mode 100644 index 0000000..506339c --- /dev/null +++ b/TestFiles/workingDir/dataBaseInitTestFromNoFileNum2.json @@ -0,0 +1 @@ +{"players":{"null":{"playerWorlds":[]}}} \ No newline at end of file diff --git a/pom.xml b/pom.xml index 7360ddf..6cffe3b 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - de.butzlabben + de.butzlabben.world WorldSystem 2.4.20-SNAPSHOT @@ -15,6 +15,7 @@ + spigot-repo https://hub.spigotmc.org/nexus/content/repositories/snapshots/ diff --git a/src/main/java/de/butzlabben/world/WorldSystem.java b/src/main/java/de/butzlabben/world/WorldSystem.java index a2e0075..27b51b8 100644 --- a/src/main/java/de/butzlabben/world/WorldSystem.java +++ b/src/main/java/de/butzlabben/world/WorldSystem.java @@ -1,5 +1,23 @@ package de.butzlabben.world; -public class WorldSystem +import de.butzlabben.world.commands.WorldSystemCommandExecuter; +import de.butzlabben.world.commands.commands.DebugCommandTest; +import org.bukkit.plugin.java.JavaPlugin; + +public class WorldSystem extends JavaPlugin { + @Override + public void onEnable() { + createCommands(); + } + + + private void createCommands() { + WorldSystemCommandExecuter cmdExecuter = new WorldSystemCommandExecuter(); + + cmdExecuter.addCommand("test", new DebugCommandTest()); + + this.getCommand("ws").setExecutor(cmdExecuter); + } + } diff --git a/src/main/java/de/butzlabben/world/commands/WorldSystemCommand.java b/src/main/java/de/butzlabben/world/commands/WorldSystemCommand.java index 08ba3e5..94eb33c 100644 --- a/src/main/java/de/butzlabben/world/commands/WorldSystemCommand.java +++ b/src/main/java/de/butzlabben/world/commands/WorldSystemCommand.java @@ -1,6 +1,10 @@ package de.butzlabben.world.commands; +import org.bukkit.command.CommandSender; + public interface WorldSystemCommand { - public boolean run(); + public boolean run(CommandSender sender); + + public String[] arguments(); } diff --git a/src/main/java/de/butzlabben/world/commands/WorldSystemCommandExecuter.java b/src/main/java/de/butzlabben/world/commands/WorldSystemCommandExecuter.java index a122eaf..09af8c8 100644 --- a/src/main/java/de/butzlabben/world/commands/WorldSystemCommandExecuter.java +++ b/src/main/java/de/butzlabben/world/commands/WorldSystemCommandExecuter.java @@ -1,13 +1,34 @@ package de.butzlabben.world.commands; +import de.butzlabben.world.exceptions.InvaildCommandException; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.jetbrains.annotations.NotNull; + import java.util.HashMap; import java.util.Map; -public class WorldSystemCommandExecuter +public class WorldSystemCommandExecuter implements CommandExecutor { - private static Map commands = new HashMap(); - public static void addCommand(String commandName, WorldSystemCommand cmd) + + private Map commands = new HashMap(); + + @Override + public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, @NotNull String[] args) + { + try { + return executeCommand(args[0],commandSender); + } + catch (InvaildCommandException e) + { + //Tell the Player that the commands was Wrong + return false; + } + } + + public void addCommand(String commandName, WorldSystemCommand cmd) { if (commands.containsValue(commandName)) { //Log Command Excists @@ -16,9 +37,12 @@ public class WorldSystemCommandExecuter commands.put(commandName, cmd); } - public static boolean execute(String cmd) { - return commands.get(cmd).run(); + public boolean executeCommand(String cmd, CommandSender commandSender) throws InvaildCommandException + { + if (commands.get(cmd) == null) { + throw new InvaildCommandException(cmd + "Is not a command"); + } + return commands.get(cmd).run(commandSender); } - } diff --git a/src/main/java/de/butzlabben/world/commands/commands/DebugCommandTest.java b/src/main/java/de/butzlabben/world/commands/commands/DebugCommandTest.java new file mode 100644 index 0000000..79140bb --- /dev/null +++ b/src/main/java/de/butzlabben/world/commands/commands/DebugCommandTest.java @@ -0,0 +1,19 @@ +package de.butzlabben.world.commands.commands; + +import de.butzlabben.world.commands.WorldSystemCommand; +import org.bukkit.command.CommandSender; + +public class DebugCommandTest implements WorldSystemCommand +{ + @Override + public boolean run(CommandSender sender) + { + sender.sendMessage("The Command Framework is Working"); + return true; + } + @Override + public String[] arguments() + { + return new String[0]; + } +} diff --git a/src/main/java/de/butzlabben/world/commands/commands/testCommand.java b/src/main/java/de/butzlabben/world/commands/commands/testCommand.java deleted file mode 100644 index f47592e..0000000 --- a/src/main/java/de/butzlabben/world/commands/commands/testCommand.java +++ /dev/null @@ -1,12 +0,0 @@ -package de.butzlabben.world.commands.commands; - -import de.butzlabben.world.commands.WorldSystemCommand; - -public class testCommand implements WorldSystemCommand -{ - @Override - public boolean run() - { - return false; - } -} diff --git a/src/main/java/de/butzlabben/world/config/GameruleConfig.java b/src/main/java/de/butzlabben/world/config/GameruleConfig.java index 4e96d9e..d0d2350 100644 --- a/src/main/java/de/butzlabben/world/config/GameruleConfig.java +++ b/src/main/java/de/butzlabben/world/config/GameruleConfig.java @@ -1,2 +1,164 @@ -package de.butzlabben.world.config;public class GameruleConfig { +package de.butzlabben.world.config; + +import de.butzlabben.world.exceptions.InvalidConfigFormatException; +import java.io.IOException; +import org.bukkit.configuration.file.YamlConfiguration; + +/** + * This class handels the data from the + * config relevant to Minecraft's Gamerules + */ +public class GameruleConfig +{ + + private YamlConfiguration config; + public GameruleConfig(PluginConfig cfg) { + config = cfg.config; + try + { + verifyGamerules(); + } + catch (InvalidConfigFormatException e) + { + try + { + cfg.brokenConfig(); + } + catch (IOException ex) + { + //Bad Thing + //Log + throw new RuntimeException(ex); + } + } + } + + private boolean verifyGamerules() throws InvalidConfigFormatException + { + if (!(config.isBoolean("announceAdvancements") && + config.isBoolean("commandBlockOutput") && + config.isBoolean("disableElytraMovementCheck") && + config.isBoolean("doDaylightCycle") && + config.isBoolean("doEntityDrops") && + config.isBoolean("doFireTick") && + config.isBoolean("doLimitedCrafting") && + config.isBoolean("doMobLoot") && + config.isBoolean("doMobSpawning") && + config.isBoolean("doTileDrops") && + config.isBoolean("doWeatherCycle") && + config.isBoolean("gameLoopFunction") && + config.isBoolean("keepInventory") && + config.isBoolean("logAdminCommands") && + config.isInt("maxCommandChainLength") && + config.isInt("maxEntityCramming") && + config.isBoolean("mobGriefing") && + config.isBoolean("naturalRegeneration") && + config.isInt("randomTickSpeed") && + config.isBoolean("reducedDebugInfo") && + config.isBoolean("sendCommandFeedback") && + config.isBoolean("showDeathMessages") && + config.isInt("spawnRadius") && + config.isBoolean("spectatorsGenerateChunks"))) + { + throw new InvalidConfigFormatException("Invaild Config Format in Gamerules "); + } + return true; + } + + public boolean commandBlockOutput() { + return config.getBoolean("commandBlockOutput"); + } + + public boolean announceAdvancements() { + return config.getBoolean("announceAdvancements"); + } + + public boolean disableElytraMovementCheck() { + return config.getBoolean("disableElytraMovementCheck"); + } + + public boolean doDaylightCycle() { + return config.getBoolean("doDaylightCycle"); + } + + public boolean doEntityDrops() { + return config.getBoolean("doEntityDrops"); + } + + + public boolean doFireTick() { + return config.getBoolean("doFireTick"); + } + + public boolean doLimitedCrafting() { + return config.getBoolean("doLimitedCrafting"); + } + + public boolean doMobLoot() { + return config.getBoolean("doMobLoot"); + } + + public boolean doMobSpawning() { + return config.getBoolean("doMobSpawning"); + } + + public boolean doTileDrops() { + return config.getBoolean("doTileDrops"); + } + + public boolean doWeatherCycle() { + return config.getBoolean("doWeatherCycle"); + } + + public boolean gameLoopFunction() { + return config.getBoolean("gameLoopFunction"); + } + + public boolean keepInventory() { + return config.getBoolean("doDaylightCycle"); + } + + public boolean logAdminCommands() { + return config.getBoolean("logAdminCommands"); + } + + public int maxCommandChainLength() { + return config.getInt("maxCommandChainLength"); + } + + public int maxEntityCramming() { + return config.getInt("maxEntityCramming"); + } + + public boolean mobGriefing() { + return config.getBoolean("doDaylightCycle"); + } + + public boolean naturalRegeneration() { + return config.getBoolean("logAdminCommands"); + } + + public int randomTickSpeed() { + return config.getInt("randomTickSpeed"); + } + + public boolean reducedDebugInfo() { + return config.getBoolean("reducedDebugInfo"); + } + + public boolean sendCommandFeedback() { + return config.getBoolean("sendCommandFeedback"); + } + + public boolean showDeathMessages() { + return config.getBoolean("showDeathMessages"); + } + + public int spawnRadius() { + return config.getInt("spawnRadius"); + } + + public boolean spectatorsGenerateChunks() { + return config.getBoolean("spectatorsGenerateChunks"); + } } diff --git a/src/main/java/de/butzlabben/world/config/PluginConfig.java b/src/main/java/de/butzlabben/world/config/PluginConfig.java index d0efff3..7e1ff31 100644 --- a/src/main/java/de/butzlabben/world/config/PluginConfig.java +++ b/src/main/java/de/butzlabben/world/config/PluginConfig.java @@ -18,7 +18,7 @@ public class PluginConfig { //New Config - private YamlConfiguration config; + protected YamlConfiguration config; private File configFile; @@ -31,21 +31,12 @@ public class PluginConfig { } catch (FileNotFoundException e) { throw new FileNotFoundException("Cannot access config file"); } - try { verifyConfigFormating(); } catch (InvalidConfigFormatException e) { try { - Files.copy(configFile.toPath(), - new File(configFile.getParentFile(), "config-broken-" - + new SimpleDateFormat("dd-MM-yyyy-HH-mm-ss").format(new Date()) + ".yml").toPath(), - StandardCopyOption.REPLACE_EXISTING); - Files.delete(configFile.toPath()); - System.err.println("[WorldSystem] Config is broken, creating a new one!"); - - //TODO Create new Config + brokenConfig(); } catch (IOException ex) { - //Somthing Really Bad Happened //TODO Log it ex.printStackTrace(); @@ -82,6 +73,11 @@ public class PluginConfig { { throw new InvalidConfigFormatException("Invaild Config Format in World Creation Settings"); } + //Verify Dev Settings + if (!(config.isBoolean("devcmds"))) + { + throw new InvalidConfigFormatException("Invaild Config Format in Dev Settings"); + } if (!(config.isString("serverSpawn.serverGamemode") && config.isString("serverSpawn.serverSpawnPoint.worldName") && @@ -90,41 +86,12 @@ public class PluginConfig { config.isInt("serverSpawn.serverSpawnPoint.z") && config.isString("wsWorldSpawn.worldGameMode") && config.isBoolean("wsWorldSpawn.useLastLocation") && - config.isString("wsWorldSpawn.defaultWorldSpawnPoint.worldName") && config.isInt("wsWorldSpawn.defaultWorldSpawnPoint.x") && config.isInt("wsWorldSpawn.defaultWorldSpawnPoint.y") && config.isInt("wsWorldSpawn.defaultWorldSpawnPoint.z"))) { throw new InvalidConfigFormatException("Invaild Config Format in World Entering/Exiting"); } - - if (!(config.isBoolean("announceAdvancements") && - config.isBoolean("commandBlockOutput") && - config.isBoolean("disableElytraMovementCheck") && - config.isBoolean("doDaylightCycle") && - config.isBoolean("doEntityDrops") && - config.isBoolean("doFireTick") && - config.isBoolean("doLimitedCrafting") && - config.isBoolean("doMobLoot") && - config.isBoolean("doMobSpawning") && - config.isBoolean("doTileDrops") && - config.isBoolean("doWeatherCycle") && - config.isBoolean("gameLoopFunction") && - config.isBoolean("keepInventory") && - config.isBoolean("logAdminCommands") && - config.isInt("maxCommandChainLength") && - config.isInt("maxEntityCramming") && - config.isBoolean("mobGriefing") && - config.isBoolean("naturalRegeneration") && - config.isInt("randomTickSpeed") && - config.isBoolean("reducedDebugInfo") && - config.isBoolean("sendCommandFeedback") && - config.isBoolean("showDeathMessages") && - config.isInt("spawnRadius") && - config.isBoolean("spectatorsGenerateChunks"))) - { - throw new InvalidConfigFormatException("Invaild Config Format in Gamerules "); - } } @@ -195,6 +162,39 @@ public class PluginConfig { config.getInt("serverSpawn.serverSpawnPoint.z")); } + public String getServerWorldName() { + return config.getString("serverSpawn.serverSpawnPoint.worldName"); + } + + public GameMode getPlayerWorldGamemode() { + + return stringToGamemode(config.getString("wsWorldSpawn.worldGameMode")); + } + + public boolean usePlayerWorldLastLocation() { + + return config.getBoolean("wsWorldSpawn.useLastLocation"); + } + + public Location getPlayerWorldSpawnPoint() { + return new Location( + config.getInt("wsWorldSpawn.defaultWorldSpawnPoint.x"), + config.getInt("wsWorldSpawn.defaultWorldSpawnPoint.y"), + config.getInt("wsWorldSpawn.defaultWorldSpawnPoint.z")); + } + + //Dev Settings + + public boolean allowDevCommands() { + return config.getBoolean("devcmds"); + } + + //Gamerule Stuff + public GameruleConfig getGamerules() + { + return new GameruleConfig(this); + } + @@ -223,4 +223,16 @@ public class PluginConfig { return Difficulty.PEACEFUL; } } + + protected void brokenConfig() throws IOException + { + Files.copy(configFile.toPath(), + new File(configFile.getParentFile(), "config-broken-" + + new SimpleDateFormat("dd-MM-yyyy-HH-mm-ss").format(new Date()) + ".yml").toPath(), + StandardCopyOption.REPLACE_EXISTING); + Files.delete(configFile.toPath()); + System.err.println("[WorldSystem] Config is broken, creating a new one!"); + + //TODO Create new Config + } } diff --git a/src/main/java/de/butzlabben/world/data/objects/PlayerWorld.java b/src/main/java/de/butzlabben/world/data/objects/PlayerWorld.java index 75bb550..f7ed0cd 100644 --- a/src/main/java/de/butzlabben/world/data/objects/PlayerWorld.java +++ b/src/main/java/de/butzlabben/world/data/objects/PlayerWorld.java @@ -1,16 +1,39 @@ package de.butzlabben.world.data.objects; +import de.butzlabben.world.config.PluginConfig; +import de.butzlabben.world.utils.Location; + +import java.util.HashMap; +import java.util.Map; + public class PlayerWorld { private int worldNumber; private long lastLoaded; + private Map playerLocations; + private Location spawn; + /** * Creates an new Player World Data Structure if the worldNumber given + * WARNING: this constuctor is only for tests * @param worldNumber the index of the world held by the player */ public PlayerWorld(int worldNumber) { this.worldNumber = worldNumber; this.lastLoaded = -1; + this.playerLocations = new HashMap(); + this.spawn = new Location(0, 60, 0); + } + /** + * Creates an new Player World Data Structure if the worldNumber given + * @param worldNumber the index of the world held by the player + * @param config the plugin's config file that some settings are loaded from + */ + public PlayerWorld(int worldNumber, PluginConfig config) { + this.worldNumber = worldNumber; + this.lastLoaded = -1; + this.playerLocations = new HashMap(); + this.spawn = config.getPlayerWorldSpawnPoint(); } /** @@ -22,4 +45,31 @@ public class PlayerWorld { public int getWorldNumber() { return worldNumber; } + + /** + * returns the last known location of the player with a given uuid + * @param uuid the UUID string of the player you want + * @return the players last know location in the world + */ + public Location getLocationOfPlayer(String uuid) { + return this.playerLocations.get(uuid); + } + + /** + * Adds/Updates the Location information of a player + * @param uuid the UUID string of the player + * @param loc the Location of the Player + */ + public void addPlayerLocationData(String uuid, Location loc) { + playerLocations.put(uuid, loc); + } + + + public Location getWorldSpawn() { + return this.spawn; + } + + public void setWorldSpawn(Location newSpawn) { + this.spawn = newSpawn; + } } diff --git a/src/main/java/de/butzlabben/world/exceptions/InvaildCommandException.java b/src/main/java/de/butzlabben/world/exceptions/InvaildCommandException.java new file mode 100644 index 0000000..9079c8b --- /dev/null +++ b/src/main/java/de/butzlabben/world/exceptions/InvaildCommandException.java @@ -0,0 +1,8 @@ +package de.butzlabben.world.exceptions; + +public class InvaildCommandException extends Exception +{ + public InvaildCommandException(String message) { + super(message); + } +} diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index f1e22e2..679d09e 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -82,15 +82,22 @@ wsWorldSpawn: #Warning: Spelling Matters, Capitalization Does not worldGameMode: 'Survival' # places the player at their last known location in the world - useLastLocation: false; + useLastLocation: false #The point the player should be placed when entering a WS World #for the first Time defaultWorldSpawnPoint: - worldName: 'world' x: 0 y: 60 z: 0 +############# +# Dev Tools # +############# +# These Config Options are for the Devlopment and Maintenace +# Of World System. These features are not for production. + +devcmds: false + ################### # World Gamerules # ################### diff --git a/src/test/java/de/butzlabben/world/commands/MockCommand.java b/src/test/java/de/butzlabben/world/commands/MockCommand.java new file mode 100644 index 0000000..ca0077a --- /dev/null +++ b/src/test/java/de/butzlabben/world/commands/MockCommand.java @@ -0,0 +1,22 @@ +package de.butzlabben.world.commands; + +import org.bukkit.command.CommandSender; + +public class MockCommand implements WorldSystemCommand +{ + + public MockCommand() { + } + + @Override + public boolean run(CommandSender sender) + { + return true; + } + + @Override + public String[] arguments() + { + return new String[]{"zero", "one"}; + } +} diff --git a/src/test/java/de/butzlabben/world/commands/TestCommandExecuter.java b/src/test/java/de/butzlabben/world/commands/TestCommandExecuter.java new file mode 100644 index 0000000..c55a0d6 --- /dev/null +++ b/src/test/java/de/butzlabben/world/commands/TestCommandExecuter.java @@ -0,0 +1,53 @@ +package de.butzlabben.world.commands; + +import be.seeseemelk.mockbukkit.MockBukkit; +import be.seeseemelk.mockbukkit.ServerMock; +import be.seeseemelk.mockbukkit.entity.PlayerMock; +import de.butzlabben.world.WorldSystem; +import de.butzlabben.world.exceptions.InvaildCommandException; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class TestCommandExecuter +{ + + + @Test + public void testExecuterInvalidCommand() { + WorldSystemCommandExecuter cmdEx = new WorldSystemCommandExecuter(); + + assertThrows(InvaildCommandException.class, () -> {cmdEx.executeCommand("test", null);}); + } + + @Test + public void testExecuterAddCMD() throws InvaildCommandException + { + WorldSystemCommandExecuter cmdEx = new WorldSystemCommandExecuter(); + + cmdEx.addCommand("test", new MockCommand()); + + assertTrue(cmdEx.executeCommand("test", null)); + } + + @Test + public void testExecuterMultipleCommands() throws InvaildCommandException + { + WorldSystemCommandExecuter cmdEx = new WorldSystemCommandExecuter(); + + cmdEx.addCommand("test1", new MockCommand()); + cmdEx.addCommand("test2", new MockCommand()); + cmdEx.addCommand("test3", new MockCommand()); + + assertTrue(cmdEx.executeCommand("test1", null)); + + assertTrue(cmdEx.executeCommand("test2", null)); + + assertTrue(cmdEx.executeCommand("test3", null)); + + assertTrue(cmdEx.executeCommand("test2", null)); + } + +} diff --git a/src/test/java/de/butzlabben/world/config/TestGameRules.java b/src/test/java/de/butzlabben/world/config/TestGameRules.java index f1e2bd4..3d824f0 100644 --- a/src/test/java/de/butzlabben/world/config/TestGameRules.java +++ b/src/test/java/de/butzlabben/world/config/TestGameRules.java @@ -1,2 +1,237 @@ -package de.butzlabben.world.config;public class TestGameRules { +package de.butzlabben.world.config; + +import org.junit.jupiter.api.Test; + +import java.io.File; +import java.io.FileNotFoundException; + +import static org.junit.jupiter.api.Assertions.*; + +public class TestGameRules +{ + @Test + public void testGameruleInit() throws FileNotFoundException + { + File cfgFile = new File("TestFiles/TestConfig.yml"); + PluginConfig cfg = new PluginConfig(cfgFile); + + assertNotNull(cfg.getGamerules()); + } + + @Test + public void testAnnounceAdvancements() throws FileNotFoundException + { + File cfgFile = new File("TestFiles/TestConfig.yml"); + PluginConfig cfg = new PluginConfig(cfgFile); + + assertTrue(cfg.getGamerules().announceAdvancements()); + } + + @Test + public void testCommandBlockOutput() throws FileNotFoundException + { + File cfgFile = new File("TestFiles/TestConfig.yml"); + PluginConfig cfg = new PluginConfig(cfgFile); + + assertFalse(cfg.getGamerules().commandBlockOutput()); + } + + @Test + public void testElytraMovementCheck() throws FileNotFoundException + { + File cfgFile = new File("TestFiles/TestConfig.yml"); + PluginConfig cfg = new PluginConfig(cfgFile); + + assertFalse(cfg.getGamerules().disableElytraMovementCheck()); + } + + @Test + public void testDaylightCycle() throws FileNotFoundException + { + File cfgFile = new File("TestFiles/TestConfig.yml"); + PluginConfig cfg = new PluginConfig(cfgFile); + + assertTrue(cfg.getGamerules().doDaylightCycle()); + } + + @Test + public void testEntityDrops() throws FileNotFoundException + { + File cfgFile = new File("TestFiles/TestConfig.yml"); + PluginConfig cfg = new PluginConfig(cfgFile); + + assertTrue(cfg.getGamerules().doEntityDrops()); + } + + @Test + public void testFireTick() throws FileNotFoundException + { + File cfgFile = new File("TestFiles/TestConfig.yml"); + PluginConfig cfg = new PluginConfig(cfgFile); + + assertTrue(cfg.getGamerules().doFireTick()); + } + + @Test + public void testLimitCrafting() throws FileNotFoundException + { + File cfgFile = new File("TestFiles/TestConfig.yml"); + PluginConfig cfg = new PluginConfig(cfgFile); + + assertFalse(cfg.getGamerules().doLimitedCrafting()); + } + + @Test + public void testMobLoot() throws FileNotFoundException + { + File cfgFile = new File("TestFiles/TestConfig.yml"); + PluginConfig cfg = new PluginConfig(cfgFile); + + assertTrue(cfg.getGamerules().doMobLoot()); + } + + @Test + public void testMobSpawning() throws FileNotFoundException + { + File cfgFile = new File("TestFiles/TestConfig.yml"); + PluginConfig cfg = new PluginConfig(cfgFile); + + assertTrue(cfg.getGamerules().doMobSpawning()); + } + + @Test + public void testTileDrops() throws FileNotFoundException + { + File cfgFile = new File("TestFiles/TestConfig.yml"); + PluginConfig cfg = new PluginConfig(cfgFile); + + assertTrue(cfg.getGamerules().doTileDrops()); + } + + @Test + public void testWeatherCycle() throws FileNotFoundException + { + File cfgFile = new File("TestFiles/TestConfig.yml"); + PluginConfig cfg = new PluginConfig(cfgFile); + + assertFalse(cfg.getGamerules().doWeatherCycle()); + } + + @Test + public void testLoopFunction() throws FileNotFoundException + { + File cfgFile = new File("TestFiles/TestConfig.yml"); + PluginConfig cfg = new PluginConfig(cfgFile); + + assertFalse(cfg.getGamerules().gameLoopFunction()); + } + + @Test + public void testKeepInventory() throws FileNotFoundException + { + File cfgFile = new File("TestFiles/TestConfig.yml"); + PluginConfig cfg = new PluginConfig(cfgFile); + + assertTrue(cfg.getGamerules().keepInventory()); + } + + @Test + public void testAdminCommandLogs() throws FileNotFoundException + { + File cfgFile = new File("TestFiles/TestConfig.yml"); + PluginConfig cfg = new PluginConfig(cfgFile); + + assertTrue(cfg.getGamerules().logAdminCommands()); + } + + @Test + public void testCommandChainLength() throws FileNotFoundException + { + File cfgFile = new File("TestFiles/TestConfig.yml"); + PluginConfig cfg = new PluginConfig(cfgFile); + + assertEquals(65536, cfg.getGamerules().maxCommandChainLength()); + } + + @Test + public void testMaxEntityCramming() throws FileNotFoundException + { + File cfgFile = new File("TestFiles/TestConfig.yml"); + PluginConfig cfg = new PluginConfig(cfgFile); + + assertEquals(24, cfg.getGamerules().maxEntityCramming()); + } + + @Test + public void testMobGriefing() throws FileNotFoundException + { + File cfgFile = new File("TestFiles/TestConfig.yml"); + PluginConfig cfg = new PluginConfig(cfgFile); + + assertTrue(cfg.getGamerules().mobGriefing()); + } + + @Test + public void testNaturalRegen() throws FileNotFoundException + { + File cfgFile = new File("TestFiles/TestConfig.yml"); + PluginConfig cfg = new PluginConfig(cfgFile); + + assertTrue(cfg.getGamerules().naturalRegeneration()); + } + + @Test + public void testRandomTickSpeed() throws FileNotFoundException + { + File cfgFile = new File("TestFiles/TestConfig.yml"); + PluginConfig cfg = new PluginConfig(cfgFile); + + assertEquals(3, cfg.getGamerules().randomTickSpeed()); + } + + @Test + public void testReducedDebugInfo() throws FileNotFoundException + { + File cfgFile = new File("TestFiles/TestConfig.yml"); + PluginConfig cfg = new PluginConfig(cfgFile); + + assertFalse(cfg.getGamerules().reducedDebugInfo()); + } + + @Test + public void testCommandFeedback() throws FileNotFoundException + { + File cfgFile = new File("TestFiles/TestConfig.yml"); + PluginConfig cfg = new PluginConfig(cfgFile); + + assertTrue(cfg.getGamerules().sendCommandFeedback()); + } + + @Test + public void testDeathMessage() throws FileNotFoundException + { + File cfgFile = new File("TestFiles/TestConfig.yml"); + PluginConfig cfg = new PluginConfig(cfgFile); + + assertTrue(cfg.getGamerules().showDeathMessages()); + } + + @Test + public void testSpawnRad() throws FileNotFoundException + { + File cfgFile = new File("TestFiles/TestConfig.yml"); + PluginConfig cfg = new PluginConfig(cfgFile); + + assertEquals(10, cfg.getGamerules().spawnRadius()); + } + + @Test + public void testSpectatorsChunkGen() throws FileNotFoundException + { + File cfgFile = new File("TestFiles/TestConfig.yml"); + PluginConfig cfg = new PluginConfig(cfgFile); + + assertTrue(cfg.getGamerules().spectatorsGenerateChunks()); + } + } diff --git a/src/test/java/de/butzlabben/world/config/TestPluginConfig.java b/src/test/java/de/butzlabben/world/config/TestPluginConfig.java index 000f221..03460b9 100644 --- a/src/test/java/de/butzlabben/world/config/TestPluginConfig.java +++ b/src/test/java/de/butzlabben/world/config/TestPluginConfig.java @@ -8,6 +8,7 @@ import java.io.File; import java.io.FileNotFoundException; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; public class TestPluginConfig { @Test @@ -135,4 +136,41 @@ public class TestPluginConfig { assertEquals(0, cfg.getServerSpawnPoint().getZ()); } + @Test + public void testGetServerWorldName() throws FileNotFoundException + { + File cfgFile = new File("TestFiles/TestConfig.yml"); + PluginConfig cfg = new PluginConfig(cfgFile); + + assertEquals("world", cfg.getServerWorldName()); + } + + @Test + public void testPlayerWorldGamemode() throws FileNotFoundException + { + File cfgFile = new File("TestFiles/TestConfig.yml"); + PluginConfig cfg = new PluginConfig(cfgFile); + assertEquals(GameMode.SURVIVAL, cfg.getPlayerWorldGamemode()); + } + + @Test + public void testUsePlayersLastLocation() throws FileNotFoundException + { + File cfgFile = new File("TestFiles/TestConfig.yml"); + PluginConfig cfg = new PluginConfig(cfgFile); + + assertFalse(cfg.usePlayerWorldLastLocation()); + } + + @Test + public void testGetPlayerWorldDefaultSpawnPoint() throws FileNotFoundException + { + File cfgFile = new File("TestFiles/TestConfig.yml"); + PluginConfig cfg = new PluginConfig(cfgFile); + + assertEquals(0, cfg.getPlayerWorldSpawnPoint().getX()); + assertEquals(60, cfg.getPlayerWorldSpawnPoint().getY()); + assertEquals(0, cfg.getPlayerWorldSpawnPoint().getZ()); + } + } diff --git a/src/test/java/de/butzlabben/world/data/TestWorldDatabase.java b/src/test/java/de/butzlabben/world/data/TestWorldDatabase.java index 4f5f632..3e56459 100644 --- a/src/test/java/de/butzlabben/world/data/TestWorldDatabase.java +++ b/src/test/java/de/butzlabben/world/data/TestWorldDatabase.java @@ -31,7 +31,17 @@ public class TestWorldDatabase { final String path = "TestFiles/workingDir/dataBaseInitTestFromNoFile.json"; WorldDatabase wb = new WorldDatabase(path); - assertEquals(0, wb.getPlayerCount()); + wb.addPlayer("null"); + assertEquals(1, wb.getPlayerCount()); + } + + @Test + public void testDatabaseInitalizationFromNoFile2() { + final String path = "TestFiles/workingDir/dataBaseInitTestFromNoFileNum2.json"; + + WorldDatabase wb = new WorldDatabase(path); + wb.addPlayer("null"); + assertEquals(1, wb.getPlayerCount()); } /** @@ -59,7 +69,8 @@ public class TestWorldDatabase { final String path = "TestFiles/workingDir/ExistingEmptyFileInit.json"; WorldDatabase wb = new WorldDatabase(path); - assertEquals(0, wb.getPlayerCount()); + wb.addPlayer("BlankUUID"); + assertEquals(1, wb.getPlayerCount()); } /** diff --git a/src/test/java/de/butzlabben/world/data/objects/TestPlayerData.java b/src/test/java/de/butzlabben/world/data/objects/TestPlayerData.java index 37b45ae..30a7999 100644 --- a/src/test/java/de/butzlabben/world/data/objects/TestPlayerData.java +++ b/src/test/java/de/butzlabben/world/data/objects/TestPlayerData.java @@ -1,5 +1,6 @@ package de.butzlabben.world.data.objects; +import de.butzlabben.world.utils.Location; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; diff --git a/src/test/java/de/butzlabben/world/data/objects/TestPlayerWorld.java b/src/test/java/de/butzlabben/world/data/objects/TestPlayerWorld.java index 9964ed7..a421b17 100644 --- a/src/test/java/de/butzlabben/world/data/objects/TestPlayerWorld.java +++ b/src/test/java/de/butzlabben/world/data/objects/TestPlayerWorld.java @@ -1,5 +1,6 @@ package de.butzlabben.world.data.objects; +import de.butzlabben.world.utils.Location; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -23,4 +24,61 @@ public class TestPlayerWorld { PlayerWorld pw = new PlayerWorld(6); assertEquals(6,pw.getWorldNumber()); } + + @Test + public void testSavingPlayerLocationOfSinglePlayer() + { + PlayerWorld pw = new PlayerWorld(6); + pw.addPlayerLocationData("Blank", new Location(0,20,5)); + + assertEquals(0, pw.getLocationOfPlayer("Blank").getX()); + assertEquals(20, pw.getLocationOfPlayer("Blank").getY()); + assertEquals(5, pw.getLocationOfPlayer("Blank").getZ()); + } + + @Test + public void testSavingPlayerLocationOfThreePlayers() + { + PlayerWorld pw = new PlayerWorld(6); + pw.addPlayerLocationData("Blank", new Location(0,20,5)); + pw.addPlayerLocationData("Blank2", new Location(20,30,400)); + pw.addPlayerLocationData("Blank3", new Location(4,28,9)); + + assertEquals(0, pw.getLocationOfPlayer("Blank").getX()); + assertEquals(20, pw.getLocationOfPlayer("Blank").getY()); + assertEquals(5, pw.getLocationOfPlayer("Blank").getZ()); + + assertEquals(20, pw.getLocationOfPlayer("Blank2").getX()); + assertEquals(30, pw.getLocationOfPlayer("Blank2").getY()); + assertEquals(400, pw.getLocationOfPlayer("Blank2").getZ()); + + assertEquals(4, pw.getLocationOfPlayer("Blank3").getX()); + assertEquals(28, pw.getLocationOfPlayer("Blank3").getY()); + assertEquals(9, pw.getLocationOfPlayer("Blank3").getZ()); + } + + @Test + public void testDefaultWorldSpawn() { + PlayerWorld pw = new PlayerWorld(0); + assertEquals(0, pw.getWorldSpawn().getX()); + assertEquals(60, pw.getWorldSpawn().getY()); + assertEquals(0, pw.getWorldSpawn().getZ()); + } + + @Test + public void testAdjustedWorldSpawn() { + PlayerWorld pw = new PlayerWorld(0); + assertEquals(0, pw.getWorldSpawn().getX()); + assertEquals(60, pw.getWorldSpawn().getY()); + assertEquals(0, pw.getWorldSpawn().getZ()); + + pw.setWorldSpawn(new Location(20 ,80, 400)); + + assertEquals(20, pw.getWorldSpawn().getX()); + assertEquals(80, pw.getWorldSpawn().getY()); + assertEquals(400, pw.getWorldSpawn().getZ()); + + + } + } diff --git a/target/.DS_Store b/target/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 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 literal 0 HcmV?d00001 diff --git a/target/classes/de/butzlabben/world/commands/commands/testCommand.class b/target/classes/de/butzlabben/world/commands/commands/testCommand.class deleted file mode 100644 index 99f79a7e77e0346b825c70e6ff7bfcb6eb046625..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 459 zcmaJ-yH3L}6g_Uz211~v@B?gs5Ef$Ou~cG;U??gQo1IwTDsiO50hMoJVM1cy1NbP! zbx0vomvipx+}GFl$0vXb?1t#U3*blSW56()izmS|VIKI6oU6n#49>OD_L9NdKbQqr zV>n3_m$iM#gp|tg=c3F~o)md5Oj`XLR#kTL8x0UL@RhPV*JZk>tjb#vgFh)!#W0Mu zQP*`YRe399Mv-w`BqE!MQais5`u0&*45#tRIe&Y0);pu)%Gxw1-ZO;LqAnA4rQN7e zr|#H&2YU$UX$4?y!DTqzNsI|8+B#+u-o6w1mh+SRJ Tdv!>aOJ&$m_OMiro2s23O!;R% diff --git a/target/classes/de/butzlabben/world/config/GameruleConfig.class b/target/classes/de/butzlabben/world/config/GameruleConfig.class new file mode 100644 index 0000000000000000000000000000000000000000..a46ba77548d07f306a4b6716fc1622c2bc5a763a GIT binary patch literal 3904 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 Y&#TGk9N@1*bn!02(IL?-Zp8Xu0BD=GMgRZ+ literal 7930 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 diff --git a/target/classes/de/butzlabben/world/exceptions/InvaildCommandException.class b/target/classes/de/butzlabben/world/exceptions/InvaildCommandException.class new file mode 100644 index 0000000000000000000000000000000000000000..ef0cc345f195bc6cbf53e18c93bd928929f050ca GIT binary patch literal 423 zcmbVIO-lnY5PezKU0tiK6+LN_mLWRVRySjY z-NW>|VA@pL7Q>@ij5UU{TyfbpPew?oEPrs7$+`N{sQHzh3vKd=D@$SXAL8M}<%*%3 zYOAi>QmX1kNJC6Nb(t_TQE88tWZ2y5nqiRsZ`_a}E>&HNVlm*?XBd*HYpYCMYQMt% zA6uXLMjRj}_xxdW$v=wggvP{rJ~}>m0ehw_Ktj=bO)OQ$*r050i96UN4!x=je{_hiGQDFapV`diYNYQ z93(R9r&%-+unttB@*@GWI~epv4a}fn!*S7sE3o~yO1}uzxE2wQ0%AZhYEVSL=%$^lp!A=PWI< zu{>5Krv3Z6y_?`Jz!vw?_)&tMn=#Xvo0z3tmw`h2lmj2yT*g(2g&*KY ziD%Nf?&97#_s+TJ%$=X#uWtay*zjP$bYc0h;Rx&vWf+&mIEms|rr}eTC&RETR5A*C z*&r%ZmL8l5I7cc~#fgC3?shx<8s<=Q;rW<{FR(jXL_oYSx|E^3z+Q=oxRJf%m?yZX_NZ@ zdi(d$V}u=UWblUsGj}2~h;7uF8?0_%!s6)%o7eMOZsabaL4)>M7fVOa|X0wu>$k^O4$c_ZGwncP>oyz- zWMhU>D+t=La|EALY?TAXtF(pVHqpb5rL9ns**w)39MpmCgW3^!-6f5 zY{F1(`+ld-pm)43+5o<*{s5B2;$BFcl_zqF5tekk%A zW#6AQcMRrLT4V!p7D<`rFRzDk0oWs_8ZAhpLl0FI*`{0q`9_oCGIh6ddz5YW9n5V_ zVYoX})L#|Aq3A%TSfyB_W1>NHD>T`i!LW)o>WDzeFjYw*jRe-QF_-Zu%Wq}(4aN%< e8W95(HEbwCYxcvOkYRHnxc(RHECg>UiR~Z7PFAb{ diff --git a/target/classes/plugin.yml b/target/classes/plugin.yml index 15e9915..6317d0a 100644 --- a/target/classes/plugin.yml +++ b/target/classes/plugin.yml @@ -1,7 +1,14 @@ name: 'WorldSystem' version: '2.4.20' -main: de.bulzlabben.world.WorldSystem - +main: de.butzlabben.world.WorldSystem +author: Trainerlord description: The one world per player solution you have always dreamed of. +commands: + ws: + description: Main Commands for World System + usage: /ws + permission: ws.*; + + api-version: '1.17' \ No newline at end of file diff --git a/target/maven-archiver/pom.properties b/target/maven-archiver/pom.properties new file mode 100644 index 0000000..bfde027 --- /dev/null +++ b/target/maven-archiver/pom.properties @@ -0,0 +1,5 @@ +#Generated by Maven +#Wed Oct 05 16:00:04 EDT 2022 +groupId=de.butzlabben.world +artifactId=WorldSystem +version=2.4.20-SNAPSHOT diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst index 6944f54..fd9419a 100644 --- a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -1,93 +1,26 @@ -de\butzlabben\world\command\CommandRegistry.class -de\butzlabben\world\util\TeleportUtil.class -de\butzlabben\world\command\commands\WorldAdministrateCommand.class -de\butzlabben\world\util\database\DatabaseUtil.class -de\butzlabben\world\wrapper\GeneratorSettings.class -de\butzlabben\world\config\PluginConfig.class -org\bstats\bukkit\Metrics$2.class -de\butzlabben\world\listener\CommandListener.class -org\bstats\bukkit\Metrics$SimpleBarChart.class -de\butzlabben\world\listener\PlayerListener.class -de\butzlabben\world\wrapper\AsyncCreatorAdapter.class -de\butzlabben\world\event\WorldResetEvent.class -de\butzlabben\world\listener\WorldInitSkipSpawn.class -de\butzlabben\world\event\WorldToggleTntEvent.class -de\butzlabben\world\autoupdater\AutoUpdater.class -de\butzlabben\inventory\pages\PageGUICreator.class -de\butzlabben\world\wrapper\SystemWorld$1.class -de\butzlabben\world\config\GuiConfig.class -de\butzlabben\world\listener\BlockListener.class -de\butzlabben\world\GameProfileBuilder$GameProfileSerializer.class -de\butzlabben\world\util\database\DatabaseProvider.class -de\butzlabben\world\event\WorldEvent.class -de\butzlabben\world\wrapper\SystemWorld$1$1.class -de\butzlabben\world\gui\worldoption\TntStatus.class -de\butzlabben\world\autoupdater\UpdateInformations.class -de\butzlabben\inventory\OrcItem.class -de\butzlabben\inventory\pages\InventoryPage.class -de\butzlabben\world\gui\playeroption\BuildStatus.class -de\butzlabben\inventory\DependListener.class -de\butzlabben\world\gui\WorldSystemGUI.class -de\butzlabben\world\gui\playeroption\TeleportStatus.class -de\butzlabben\world\gui\WorldOptionsGUI.class -de\butzlabben\world\util\database\MysqlConnection.class -de\butzlabben\world\util\PlayerPositions.class -de\butzlabben\world\event\WorldRemovememberEvent.class -de\butzlabben\world\event\WorldToggleFireEvent.class -de\butzlabben\inventory\CostumInv.class -de\butzlabben\world\config\MessageConfig.class -de\butzlabben\world\WorldCheckerRunnable.class -de\butzlabben\world\wrapper\WorldTemplateProvider.class -de\butzlabben\world\wrapper\SystemWorld.class -org\bstats\bukkit\Metrics$CustomChart.class -de\butzlabben\world\wrapper\CreatorAdapter.class -de\butzlabben\world\wrapper\WorldPlayer.class -de\butzlabben\inventory\pages\ItemConverter.class -de\butzlabben\world\gui\clicklistener\InventoryOpenClickListener.class -org\bstats\bukkit\Metrics.class -de\butzlabben\world\command\commands\WSCommands.class -de\butzlabben\world\GCRunnable.class -de\butzlabben\world\gui\PlayersPageGUI.class -de\butzlabben\inventory\OrcInventory.class -de\butzlabben\inventory\OrcListener.class -de\butzlabben\world\util\PlayerWrapper.class -org\bstats\bukkit\Metrics$SingleLineChart.class -de\butzlabben\world\util\PapiExtension.class -de\butzlabben\inventory\OrcClickListener.class -de\butzlabben\world\config\SettingsConfig.class -de\butzlabben\world\event\WorldLoadEvent.class -de\butzlabben\world\gui\PlayerOptionsGUI.class -de\butzlabben\world\util\VersionUtil.class -org\bstats\bukkit\Metrics$1$1.class -de\butzlabben\world\gui\worldoption\FireStatus.class -org\bstats\bukkit\Metrics$AdvancedPie.class -de\butzlabben\world\config\DependenceConfig.class -de\butzlabben\world\event\WorldCreateEvent.class -de\butzlabben\world\event\WorldUnloadEvent.class -de\butzlabben\world\listener\WorldEditListener.class -de\butzlabben\world\util\Worldutils.class -de\butzlabben\world\config\Entry.class -org\bstats\bukkit\Metrics$AdvancedBarChart.class -de\butzlabben\world\gui\GuiCommand.class -de\butzlabben\world\command\commands\WorldSettingsCommands.class -de\butzlabben\world\event\WorldDeleteEvent.class -org\bstats\bukkit\Metrics$MultiLineChart.class -de\butzlabben\world\GameProfileBuilder$CachedProfile.class -de\butzlabben\world\gui\playeroption\WorldEditStatus.class -de\butzlabben\world\wrapper\SystemWorld$2.class -de\butzlabben\world\GameProfileBuilder.class -de\butzlabben\world\autoupdater\AutoUpdate.class -de\butzlabben\world\util\database\SqliteConnection.class -de\butzlabben\world\util\database\DatabaseConnection.class -de\butzlabben\world\gui\clicklistener\ComingSoonClickListener.class -de\butzlabben\world\util\MoneyUtil.class -de\butzlabben\world\gui\clicklistener\CommandExecutorClickListener.class -de\butzlabben\world\event\WorldAddmemberEvent.class -de\butzlabben\world\wrapper\WorldTemplate.class -org\bstats\bukkit\Metrics$SimplePie.class -de\butzlabben\world\config\WorldConfig.class -de\butzlabben\world\config\WorldPerm.class -de\butzlabben\world\gui\playeroption\GamemodeStatus.class -org\bstats\bukkit\Metrics$1.class -de\butzlabben\world\gui\WorldChooseGUI.class -org\bstats\bukkit\Metrics$DrilldownPie.class +org/bstats/bukkit/Metrics$AdvancedBarChart.class +de/butzlabben/world/exceptions/InvaildCommandException.class +de/butzlabben/world/data/objects/PlayerData.class +de/butzlabben/world/utils/Location.class +org/bstats/bukkit/Metrics$CustomChart.class +de/butzlabben/world/data/objects/PlayerWorld.class +org/bstats/bukkit/Metrics$1.class +de/butzlabben/world/commands/WorldSystemCommand.class +de/butzlabben/world/data/WorldDatabase.class +de/butzlabben/world/config/GameruleConfig.class +org/bstats/bukkit/Metrics.class +org/bstats/bukkit/Metrics$SimplePie.class +org/bstats/bukkit/Metrics$2.class +de/butzlabben/world/exceptions/InvalidConfigFormatException.class +org/bstats/bukkit/Metrics$AdvancedPie.class +de/butzlabben/world/commands/commands/DebugCommandTest.class +org/bstats/bukkit/Metrics$1$1.class +de/butzlabben/world/data/objects/WorldSystemData.class +org/bstats/bukkit/Metrics$DrilldownPie.class +de/butzlabben/world/commands/WorldSystemCommandExecuter.class +de/butzlabben/world/utils/Location2D.class +org/bstats/bukkit/Metrics$SimpleBarChart.class +org/bstats/bukkit/Metrics$SingleLineChart.class +org/bstats/bukkit/Metrics$MultiLineChart.class +de/butzlabben/world/WorldSystem.class +de/butzlabben/world/config/PluginConfig.class diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst index 351a554..ebd397e 100644 --- a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -1,82 +1,15 @@ -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\gui\WorldChooseGUI.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\gui\playeroption\BuildStatus.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\event\WorldUnloadEvent.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\inventory\OrcClickListener.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\listener\CommandListener.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\listener\BlockListener.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\inventory\pages\InventoryPage.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\data\objects\PlayerData.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\listener\PlayerListener.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\event\WorldRemovememberEvent.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\event\WorldToggleFireEvent.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\GameProfileBuilder.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\listener\WorldEditListener.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\gui\worldoption\TntStatus.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\inventory\pages\PageGUICreator.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\wrapper\WorldTemplateProvider.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\util\VersionUtil.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\autoupdater\AutoUpdater.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\command\commands\WorldSettingsCommands.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\inventory\DependListener.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\inventory\pages\ItemConverter.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\event\WorldDeleteEvent.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\util\PlayerPositions.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\event\WorldLoadEvent.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\gui\WorldOptionsGUI.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\config\WorldConfig.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\inventory\OrcListener.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\config\WorldPerm.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\inventory\OrcItem.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\gui\playeroption\GamemodeStatus.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\gui\playeroption\TeleportStatus.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\event\WorldToggleTntEvent.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\util\MoneyUtil.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\config\SettingsConfig.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\config\MessageConfig.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\util\database\DatabaseConnection.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\util\database\MysqlConnection.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\gui\GuiCommand.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\util\database\SqliteConnection.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\config\PluginConfig.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\WorldCheckerRunnable.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\autoupdater\UpdateInformations.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\util\TeleportUtil.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\event\WorldCreateEvent.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\gui\PlayerOptionsGUI.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\GCRunnable.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\util\database\DatabaseProvider.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\command\CommandRegistry.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\data\objects\PlayerWorld.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\inventory\CostumInv.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\event\WorldAddmemberEvent.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\listener\WorldInitSkipSpawn.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\wrapper\WorldPlayer.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\util\PlayerWrapper.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\autoupdater\AutoUpdate.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\gui\clicklistener\CommandExecutorClickListener.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\util\database\DatabaseUtil.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\data\objects\WorldSystemData.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\command\commands\WorldAdministrateCommand.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\command\commands\WSCommands.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\gui\WorldSystemGUI.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\gui\playeroption\WorldEditStatus.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\event\WorldResetEvent.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\util\PapiExtension.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\util\Worldutils.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\config\DependenceConfig.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\gui\worldoption\FireStatus.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\wrapper\WorldTemplate.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\wrapper\AsyncCreatorAdapter.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\inventory\OrcInventory.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\wrapper\CreatorAdapter.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\wrapper\SystemWorld.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\gui\PlayersPageGUI.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\event\WorldEvent.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\org\bstats\bukkit\Metrics.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\config\GuiConfig.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\data\WorldDatabase.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\gui\clicklistener\InventoryOpenClickListener.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\wrapper\GeneratorSettings.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\WorldSystem.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\gui\clicklistener\ComingSoonClickListener.java -C:\Users\train\Documents\Projects\WorldSystem\src\main\java\de\butzlabben\world\config\Entry.java +/Users/danielbyomujuni/Documents/Projects/WorldSystem/src/main/java/de/butzlabben/world/utils/Location2D.java +/Users/danielbyomujuni/Documents/Projects/WorldSystem/src/main/java/de/butzlabben/world/data/objects/PlayerWorld.java +/Users/danielbyomujuni/Documents/Projects/WorldSystem/src/main/java/de/butzlabben/world/commands/WorldSystemCommandExecuter.java +/Users/danielbyomujuni/Documents/Projects/WorldSystem/src/main/java/de/butzlabben/world/data/objects/WorldSystemData.java +/Users/danielbyomujuni/Documents/Projects/WorldSystem/src/main/java/de/butzlabben/world/commands/commands/DebugCommandTest.java +/Users/danielbyomujuni/Documents/Projects/WorldSystem/src/main/java/de/butzlabben/world/exceptions/InvaildCommandException.java +/Users/danielbyomujuni/Documents/Projects/WorldSystem/src/main/java/de/butzlabben/world/WorldSystem.java +/Users/danielbyomujuni/Documents/Projects/WorldSystem/src/main/java/de/butzlabben/world/data/WorldDatabase.java +/Users/danielbyomujuni/Documents/Projects/WorldSystem/src/main/java/de/butzlabben/world/utils/Location.java +/Users/danielbyomujuni/Documents/Projects/WorldSystem/src/main/java/org/bstats/bukkit/Metrics.java +/Users/danielbyomujuni/Documents/Projects/WorldSystem/src/main/java/de/butzlabben/world/commands/WorldSystemCommand.java +/Users/danielbyomujuni/Documents/Projects/WorldSystem/src/main/java/de/butzlabben/world/config/PluginConfig.java +/Users/danielbyomujuni/Documents/Projects/WorldSystem/src/main/java/de/butzlabben/world/exceptions/InvalidConfigFormatException.java +/Users/danielbyomujuni/Documents/Projects/WorldSystem/src/main/java/de/butzlabben/world/data/objects/PlayerData.java +/Users/danielbyomujuni/Documents/Projects/WorldSystem/src/main/java/de/butzlabben/world/config/GameruleConfig.java diff --git a/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst new file mode 100644 index 0000000..2eb3fb0 --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst @@ -0,0 +1,8 @@ +de/butzlabben/world/commands/MockCommand.class +de/butzlabben/world/data/objects/TestWorldSystemData.class +de/butzlabben/world/data/TestWorldDatabase.class +de/butzlabben/world/commands/TestCommandExecuter.class +de/butzlabben/world/data/objects/TestPlayerData.class +de/butzlabben/world/data/objects/TestPlayerWorld.class +de/butzlabben/world/config/TestPluginConfig.class +de/butzlabben/world/config/TestGameRules.class diff --git a/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst new file mode 100644 index 0000000..bc38dc6 --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst @@ -0,0 +1,8 @@ +/Users/danielbyomujuni/Documents/Projects/WorldSystem/src/test/java/de/butzlabben/world/commands/MockCommand.java +/Users/danielbyomujuni/Documents/Projects/WorldSystem/src/test/java/de/butzlabben/world/data/objects/TestWorldSystemData.java +/Users/danielbyomujuni/Documents/Projects/WorldSystem/src/test/java/de/butzlabben/world/config/TestPluginConfig.java +/Users/danielbyomujuni/Documents/Projects/WorldSystem/src/test/java/de/butzlabben/world/data/objects/TestPlayerWorld.java +/Users/danielbyomujuni/Documents/Projects/WorldSystem/src/test/java/de/butzlabben/world/config/TestGameRules.java +/Users/danielbyomujuni/Documents/Projects/WorldSystem/src/test/java/de/butzlabben/world/commands/TestCommandExecuter.java +/Users/danielbyomujuni/Documents/Projects/WorldSystem/src/test/java/de/butzlabben/world/data/objects/TestPlayerData.java +/Users/danielbyomujuni/Documents/Projects/WorldSystem/src/test/java/de/butzlabben/world/data/TestWorldDatabase.java diff --git a/target/surefire-reports/TEST-de.butzlabben.world.commands.TestCommandExecuter.xml b/target/surefire-reports/TEST-de.butzlabben.world.commands.TestCommandExecuter.xml new file mode 100644 index 0000000..739fb34 --- /dev/null +++ b/target/surefire-reports/TEST-de.butzlabben.world.commands.TestCommandExecuter.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/target/surefire-reports/TEST-de.butzlabben.world.config.TestGameRules.xml b/target/surefire-reports/TEST-de.butzlabben.world.config.TestGameRules.xml new file mode 100644 index 0000000..7693e37 --- /dev/null +++ b/target/surefire-reports/TEST-de.butzlabben.world.config.TestGameRules.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/target/surefire-reports/TEST-de.butzlabben.world.config.TestPluginConfig.xml b/target/surefire-reports/TEST-de.butzlabben.world.config.TestPluginConfig.xml new file mode 100644 index 0000000..0ed1360 --- /dev/null +++ b/target/surefire-reports/TEST-de.butzlabben.world.config.TestPluginConfig.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/target/surefire-reports/TEST-de.butzlabben.world.data.TestWorldDatabase.xml b/target/surefire-reports/TEST-de.butzlabben.world.data.TestWorldDatabase.xml new file mode 100644 index 0000000..03c63a9 --- /dev/null +++ b/target/surefire-reports/TEST-de.butzlabben.world.data.TestWorldDatabase.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/target/surefire-reports/TEST-de.butzlabben.world.data.objects.TestPlayerData.xml b/target/surefire-reports/TEST-de.butzlabben.world.data.objects.TestPlayerData.xml new file mode 100644 index 0000000..ede64c6 --- /dev/null +++ b/target/surefire-reports/TEST-de.butzlabben.world.data.objects.TestPlayerData.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/target/surefire-reports/TEST-de.butzlabben.world.data.objects.TestPlayerWorld.xml b/target/surefire-reports/TEST-de.butzlabben.world.data.objects.TestPlayerWorld.xml new file mode 100644 index 0000000..51dcb12 --- /dev/null +++ b/target/surefire-reports/TEST-de.butzlabben.world.data.objects.TestPlayerWorld.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/target/surefire-reports/TEST-de.butzlabben.world.data.objects.TestWorldSystemData.xml b/target/surefire-reports/TEST-de.butzlabben.world.data.objects.TestWorldSystemData.xml new file mode 100644 index 0000000..1230417 --- /dev/null +++ b/target/surefire-reports/TEST-de.butzlabben.world.data.objects.TestWorldSystemData.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/target/surefire-reports/de.butzlabben.world.commands.TestCommandExecuter.txt b/target/surefire-reports/de.butzlabben.world.commands.TestCommandExecuter.txt new file mode 100644 index 0000000..2b84336 --- /dev/null +++ b/target/surefire-reports/de.butzlabben.world.commands.TestCommandExecuter.txt @@ -0,0 +1,4 @@ +------------------------------------------------------------------------------- +Test set: de.butzlabben.world.commands.TestCommandExecuter +------------------------------------------------------------------------------- +Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.003 sec diff --git a/target/surefire-reports/de.butzlabben.world.config.TestGameRules.txt b/target/surefire-reports/de.butzlabben.world.config.TestGameRules.txt new file mode 100644 index 0000000..188d41e --- /dev/null +++ b/target/surefire-reports/de.butzlabben.world.config.TestGameRules.txt @@ -0,0 +1,4 @@ +------------------------------------------------------------------------------- +Test set: de.butzlabben.world.config.TestGameRules +------------------------------------------------------------------------------- +Tests run: 25, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.169 sec diff --git a/target/surefire-reports/de.butzlabben.world.config.TestPluginConfig.txt b/target/surefire-reports/de.butzlabben.world.config.TestPluginConfig.txt new file mode 100644 index 0000000..8e8e8e0 --- /dev/null +++ b/target/surefire-reports/de.butzlabben.world.config.TestPluginConfig.txt @@ -0,0 +1,4 @@ +------------------------------------------------------------------------------- +Test set: de.butzlabben.world.config.TestPluginConfig +------------------------------------------------------------------------------- +Tests run: 17, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.043 sec diff --git a/target/surefire-reports/de.butzlabben.world.data.TestWorldDatabase.txt b/target/surefire-reports/de.butzlabben.world.data.TestWorldDatabase.txt new file mode 100644 index 0000000..d5d4284 --- /dev/null +++ b/target/surefire-reports/de.butzlabben.world.data.TestWorldDatabase.txt @@ -0,0 +1,4 @@ +------------------------------------------------------------------------------- +Test set: de.butzlabben.world.data.TestWorldDatabase +------------------------------------------------------------------------------- +Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.098 sec diff --git a/target/surefire-reports/de.butzlabben.world.data.objects.TestPlayerData.txt b/target/surefire-reports/de.butzlabben.world.data.objects.TestPlayerData.txt new file mode 100644 index 0000000..e35880c --- /dev/null +++ b/target/surefire-reports/de.butzlabben.world.data.objects.TestPlayerData.txt @@ -0,0 +1,4 @@ +------------------------------------------------------------------------------- +Test set: de.butzlabben.world.data.objects.TestPlayerData +------------------------------------------------------------------------------- +Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec diff --git a/target/surefire-reports/de.butzlabben.world.data.objects.TestPlayerWorld.txt b/target/surefire-reports/de.butzlabben.world.data.objects.TestPlayerWorld.txt new file mode 100644 index 0000000..394ab47 --- /dev/null +++ b/target/surefire-reports/de.butzlabben.world.data.objects.TestPlayerWorld.txt @@ -0,0 +1,4 @@ +------------------------------------------------------------------------------- +Test set: de.butzlabben.world.data.objects.TestPlayerWorld +------------------------------------------------------------------------------- +Tests run: 6, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec diff --git a/target/surefire-reports/de.butzlabben.world.data.objects.TestWorldSystemData.txt b/target/surefire-reports/de.butzlabben.world.data.objects.TestWorldSystemData.txt new file mode 100644 index 0000000..fa6b060 --- /dev/null +++ b/target/surefire-reports/de.butzlabben.world.data.objects.TestWorldSystemData.txt @@ -0,0 +1,4 @@ +------------------------------------------------------------------------------- +Test set: de.butzlabben.world.data.objects.TestWorldSystemData +------------------------------------------------------------------------------- +Tests run: 6, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.005 sec diff --git a/target/test-classes/de/butzlabben/world/commands/MockCommand.class b/target/test-classes/de/butzlabben/world/commands/MockCommand.class new file mode 100644 index 0000000000000000000000000000000000000000..261ab862fcb6c4fac977b668c208db2e875cfb8b GIT binary patch literal 683 zcmah`%StOj5IvntoFqmQu*b=5P|#7Snlp);fCH@VQ2 zAm|79QDSwHtI>sS>d}2p)v2o2x2G2XyI3kChrA7|f&xYuYHfbSotVp(bL6*0kTQ(y zL^4YE81jwgiH+hHkeBL6wu&e-Shqr}A}Rz_QrH-0XoSM?v-CFRzAvP6t#lkZfl3lC z!>)6vg3f+Fu~B1ieng)dvUk%>MKT~!%Y79JhN>G$@h?k!p^v#A(@Wh|0gq3(j!Zsy zw9?C{%dqDD*k?%9HjSb)$*|gRm2S}}olcbgAHW&N@PrJ7-fo`Ls=B?HVdZx`Ly7BF zmI#@WsOd)Y!u{NRf34KN?5Ru#;vh0p)rPdK8!(nJM)#u)&@uDm>4sz{DBB><$QRZg z!5%2cp-$GE8z{m;36m66`XEeUnlgqN%#t+)Hpv@o&bl+U$2P@*@g8%g|2tqB#2@^n pe}*~ClQlKAsE=V(3(v66^7WE;X4OZ%`)>uOhNM(Kq%8DMi|=|AmEHgV literal 0 HcmV?d00001 diff --git a/target/test-classes/de/butzlabben/world/commands/TestCommandExecuter.class b/target/test-classes/de/butzlabben/world/commands/TestCommandExecuter.class new file mode 100644 index 0000000000000000000000000000000000000000..616b04de633e76966d758ad91ea5d51dbcfc24dd GIT binary patch literal 2362 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 literal 4118 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 diff --git a/target/test-classes/de/butzlabben/world/data/objects/TestPlayerData.class b/target/test-classes/de/butzlabben/world/data/objects/TestPlayerData.class index b13c4d13d506e93f54262a1f37a5620a05a0e430..035606ffb354f27e57cce25330add6952e22df7c 100644 GIT binary patch delta 93 zcmX@ZeTI9(OlC&T$+MU}I0YCu7=#!E7=$OkX3pi60`g=S#2I86K4Tu^IsYBB>9C delta 93 zcmX@ZeTI9(OlC%o$+MU}IQbbk7z7yv7=$LjX3pi61oEUA#2I85IeE^lN|UwvRt#S8%LJD-e{P0*Qz-U0oCw=M?W+Tn_+*ZK%6)}kV@P{#i@ICcbPGZ$o|;I4{$SZ0Zazv+I7 z>zRw_k=|PsSP1KDkN0-WhTG*os()CkngWAG%Q0I%+cC;EGb!0_d)KI2GWL^w?hA_^ zS`6iM9uUb5yS>;2npPlkbSyCc?s{FMS!?`R({Zhr=C0MS$Zp+nYOZHelAA1sp9v|Q zuckw2EOM)4x@5efJ$qfewO?Y+HUrO{vvB7{-SpRy$B3+$H}{RE-8#npj*iOwdiAi` zaLuZBzWs@0sn)Dl%neJnKfS|MU83jZA;J}`@Jf;&1w6lq@wvuG=eOW@|BX|KKRJl- z`hqtN#BrZvwY31B;|oRt>zs{vFK;616-~W{vKKu?q8QDdK>Zt9r_un|0E0+C;{`P2 zRUB=- zjr0rKBioekAZ1gduQ9e4)za}(Oq}4OC^ILxa)N6Vs-=S{!zdmE*`6Luus(R%B{7Z5 zm_deD(;Zx;=4)Ln^KF(Zp)8*SEXAzP^6VUz+0?wGt);c8A@OUAc{a5mbBZ>pCEibq zlsVrKJrzV!G|LB}l&uh@vvM+sn2}lBqQ9eSbQZ^wu(UIW zy=+H$d_dd;@zOjK)8v{ZVuwl2XOiGPhxzTxHj`6t1XSLGN!H)j?OqSs}3#IS)eETfh?s<&77#5UzKsI{lKIEX zyuJT)%>1BHzvniNMXTBhy@NHK