diff --git a/.DS_Store b/.DS_Store
index ff793b9..a3dc42e 100644
Binary files a/.DS_Store and b/.DS_Store differ
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 0000000..5008ddf
Binary files /dev/null and b/target/.DS_Store differ
diff --git a/target/classes/config.yml b/target/classes/config.yml
index f1e22e2..679d09e 100644
--- a/target/classes/config.yml
+++ b/target/classes/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/target/classes/de/butzlabben/world/WorldSystem.class b/target/classes/de/butzlabben/world/WorldSystem.class
index 05f6e9e..76083ff 100644
Binary files a/target/classes/de/butzlabben/world/WorldSystem.class and b/target/classes/de/butzlabben/world/WorldSystem.class differ
diff --git a/target/classes/de/butzlabben/world/commands/WorldSystemCommand.class b/target/classes/de/butzlabben/world/commands/WorldSystemCommand.class
index b84fa90..ec11f0e 100644
Binary files a/target/classes/de/butzlabben/world/commands/WorldSystemCommand.class and b/target/classes/de/butzlabben/world/commands/WorldSystemCommand.class differ
diff --git a/target/classes/de/butzlabben/world/commands/WorldSystemCommandExecuter.class b/target/classes/de/butzlabben/world/commands/WorldSystemCommandExecuter.class
index d77c66d..955203c 100644
Binary files a/target/classes/de/butzlabben/world/commands/WorldSystemCommandExecuter.class and b/target/classes/de/butzlabben/world/commands/WorldSystemCommandExecuter.class differ
diff --git a/target/classes/de/butzlabben/world/commands/commands/DebugCommandTest.class b/target/classes/de/butzlabben/world/commands/commands/DebugCommandTest.class
new file mode 100644
index 0000000..32a910f
Binary files /dev/null and b/target/classes/de/butzlabben/world/commands/commands/DebugCommandTest.class differ
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 99f79a7..0000000
Binary files a/target/classes/de/butzlabben/world/commands/commands/testCommand.class and /dev/null differ
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 0000000..a46ba77
Binary files /dev/null and b/target/classes/de/butzlabben/world/config/GameruleConfig.class differ
diff --git a/target/classes/de/butzlabben/world/config/PluginConfig.class b/target/classes/de/butzlabben/world/config/PluginConfig.class
index 3997100..7b455fd 100644
Binary files a/target/classes/de/butzlabben/world/config/PluginConfig.class and b/target/classes/de/butzlabben/world/config/PluginConfig.class differ
diff --git a/target/classes/de/butzlabben/world/data/objects/PlayerWorld.class b/target/classes/de/butzlabben/world/data/objects/PlayerWorld.class
index 3a283a3..f08d057 100644
Binary files a/target/classes/de/butzlabben/world/data/objects/PlayerWorld.class and b/target/classes/de/butzlabben/world/data/objects/PlayerWorld.class differ
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 0000000..ef0cc34
Binary files /dev/null and b/target/classes/de/butzlabben/world/exceptions/InvaildCommandException.class differ
diff --git a/target/classes/de/butzlabben/world/utils/CubicCords.class b/target/classes/de/butzlabben/world/utils/CubicCords.class
deleted file mode 100644
index a03807d..0000000
Binary files a/target/classes/de/butzlabben/world/utils/CubicCords.class and /dev/null differ
diff --git a/target/classes/de/butzlabben/world/utils/Location.class b/target/classes/de/butzlabben/world/utils/Location.class
new file mode 100644
index 0000000..edaafa8
Binary files /dev/null and b/target/classes/de/butzlabben/world/utils/Location.class differ
diff --git a/target/classes/de/butzlabben/world/utils/Location2D.class b/target/classes/de/butzlabben/world/utils/Location2D.class
new file mode 100644
index 0000000..307e1a6
Binary files /dev/null and b/target/classes/de/butzlabben/world/utils/Location2D.class differ
diff --git a/target/classes/de/butzlabben/world/utils/PlanerCords.class b/target/classes/de/butzlabben/world/utils/PlanerCords.class
deleted file mode 100644
index aa9f447..0000000
Binary files a/target/classes/de/butzlabben/world/utils/PlanerCords.class and /dev/null differ
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 0000000..261ab86
Binary files /dev/null and b/target/test-classes/de/butzlabben/world/commands/MockCommand.class differ
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 0000000..616b04d
Binary files /dev/null and b/target/test-classes/de/butzlabben/world/commands/TestCommandExecuter.class differ
diff --git a/target/test-classes/de/butzlabben/world/config/TestGameRules.class b/target/test-classes/de/butzlabben/world/config/TestGameRules.class
new file mode 100644
index 0000000..582cd4c
Binary files /dev/null and b/target/test-classes/de/butzlabben/world/config/TestGameRules.class differ
diff --git a/target/test-classes/de/butzlabben/world/config/TestPluginConfig.class b/target/test-classes/de/butzlabben/world/config/TestPluginConfig.class
index e26b21d..c64949a 100644
Binary files a/target/test-classes/de/butzlabben/world/config/TestPluginConfig.class and b/target/test-classes/de/butzlabben/world/config/TestPluginConfig.class differ
diff --git a/target/test-classes/de/butzlabben/world/data/TestWorldDatabase.class b/target/test-classes/de/butzlabben/world/data/TestWorldDatabase.class
index b34441d..db726f6 100644
Binary files a/target/test-classes/de/butzlabben/world/data/TestWorldDatabase.class and b/target/test-classes/de/butzlabben/world/data/TestWorldDatabase.class differ
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 b13c4d1..035606f 100644
Binary files a/target/test-classes/de/butzlabben/world/data/objects/TestPlayerData.class and b/target/test-classes/de/butzlabben/world/data/objects/TestPlayerData.class differ
diff --git a/target/test-classes/de/butzlabben/world/data/objects/TestPlayerWorld.class b/target/test-classes/de/butzlabben/world/data/objects/TestPlayerWorld.class
index 04e32ff..a83df40 100644
Binary files a/target/test-classes/de/butzlabben/world/data/objects/TestPlayerWorld.class and b/target/test-classes/de/butzlabben/world/data/objects/TestPlayerWorld.class differ