diff --git a/pom.xml b/pom.xml
index 2c1e871..59f0843 100644
--- a/pom.xml
+++ b/pom.xml
@@ -43,7 +43,7 @@
- xyz.soukup.ecoCraftCore.objects.**
+ xyz.soukup.ecoCraftCore.database.objects.**
diff --git a/src/main/java/xyz/soukup/ecoCraftCore/EcoCraftCore.java b/src/main/java/xyz/soukup/ecoCraftCore/EcoCraftCore.java
index b6e39d0..372486b 100644
--- a/src/main/java/xyz/soukup/ecoCraftCore/EcoCraftCore.java
+++ b/src/main/java/xyz/soukup/ecoCraftCore/EcoCraftCore.java
@@ -10,16 +10,17 @@ import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
import org.jetbrains.annotations.NotNull;
import xyz.soukup.ecoCraftCore.commands.MoneyCommand;
-import xyz.soukup.ecoCraftCore.commands.RulerCommand;
+import xyz.soukup.ecoCraftCore.positionMarker.RulerCommand;
import xyz.soukup.ecoCraftCore.commands.ShopCommand;
import xyz.soukup.ecoCraftCore.events.*;
-import xyz.soukup.ecoCraftCore.objects.Account;
-import xyz.soukup.ecoCraftCore.objects.Shop;
-import xyz.soukup.ecoCraftCore.objects.Transaction;
+import xyz.soukup.ecoCraftCore.database.objects.Account;
+import xyz.soukup.ecoCraftCore.database.objects.Shop;
+import xyz.soukup.ecoCraftCore.database.objects.Transaction;
import io.papermc.paper.plugin.lifecycle.event.types.LifecycleEvents;
-import xyz.soukup.ecoCraftCore.objects.VirtualChest;
-import xyz.soukup.ecoCraftCore.utilities.DaoRegistry;
-import xyz.soukup.ecoCraftCore.utilities.Messages;
+import xyz.soukup.ecoCraftCore.inventory.VirtualChest;
+import xyz.soukup.ecoCraftCore.positionMarker.RulerMarking;
+import xyz.soukup.ecoCraftCore.database.DaoRegistry;
+import xyz.soukup.ecoCraftCore.messages.Messages;
import java.io.IOException;
import java.sql.SQLException;
diff --git a/src/main/java/xyz/soukup/ecoCraftCore/commands/IslandCommand.java b/src/main/java/xyz/soukup/ecoCraftCore/commands/IslandCommand.java
deleted file mode 100644
index 1e7e173..0000000
--- a/src/main/java/xyz/soukup/ecoCraftCore/commands/IslandCommand.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package xyz.soukup.ecoCraftCore.commands;
-
-public class IslandCommand {
-}
diff --git a/src/main/java/xyz/soukup/ecoCraftCore/commands/MoneyCommand.java b/src/main/java/xyz/soukup/ecoCraftCore/commands/MoneyCommand.java
index cc39f48..3921bb1 100644
--- a/src/main/java/xyz/soukup/ecoCraftCore/commands/MoneyCommand.java
+++ b/src/main/java/xyz/soukup/ecoCraftCore/commands/MoneyCommand.java
@@ -11,12 +11,12 @@ import io.papermc.paper.command.brigadier.argument.ArgumentTypes;
import io.papermc.paper.command.brigadier.argument.resolvers.selector.PlayerSelectorArgumentResolver;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
-import xyz.soukup.ecoCraftCore.objects.Account;
-import xyz.soukup.ecoCraftCore.objects.Transaction;
-import xyz.soukup.ecoCraftCore.utilities.Messages;
-import xyz.soukup.ecoCraftCore.utilities.PHHM;
+import xyz.soukup.ecoCraftCore.database.objects.Account;
+import xyz.soukup.ecoCraftCore.database.objects.Transaction;
+import xyz.soukup.ecoCraftCore.messages.Messages;
+import xyz.soukup.ecoCraftCore.messages.PHHM;
+
-@SuppressWarnings("UnstableApiUsage")
public class MoneyCommand {
public static LiteralArgumentBuilder createCommand() {
diff --git a/src/main/java/xyz/soukup/ecoCraftCore/commands/ShopCommand.java b/src/main/java/xyz/soukup/ecoCraftCore/commands/ShopCommand.java
index 78a3656..a768b3a 100644
--- a/src/main/java/xyz/soukup/ecoCraftCore/commands/ShopCommand.java
+++ b/src/main/java/xyz/soukup/ecoCraftCore/commands/ShopCommand.java
@@ -9,11 +9,11 @@ import org.bukkit.block.Chest;
import org.bukkit.block.Sign;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
-import xyz.soukup.ecoCraftCore.events.RulerMarking;
-import xyz.soukup.ecoCraftCore.objects.Shop;
-import xyz.soukup.ecoCraftCore.objects.VirtualChest;
-import xyz.soukup.ecoCraftCore.utilities.InventoryUtils;
-import xyz.soukup.ecoCraftCore.utilities.Messages;
+import xyz.soukup.ecoCraftCore.positionMarker.RulerMarking;
+import xyz.soukup.ecoCraftCore.database.objects.Shop;
+import xyz.soukup.ecoCraftCore.inventory.VirtualChest;
+import xyz.soukup.ecoCraftCore.inventory.InventoryUtils;
+import xyz.soukup.ecoCraftCore.messages.Messages;
import xyz.soukup.ecoCraftCore.utilities.PDC;
@SuppressWarnings("UnstableApiUsage")
diff --git a/src/main/java/xyz/soukup/ecoCraftCore/utilities/DaoRegistry.java b/src/main/java/xyz/soukup/ecoCraftCore/database/DaoRegistry.java
similarity index 90%
rename from src/main/java/xyz/soukup/ecoCraftCore/utilities/DaoRegistry.java
rename to src/main/java/xyz/soukup/ecoCraftCore/database/DaoRegistry.java
index 017539f..46c9389 100644
--- a/src/main/java/xyz/soukup/ecoCraftCore/utilities/DaoRegistry.java
+++ b/src/main/java/xyz/soukup/ecoCraftCore/database/DaoRegistry.java
@@ -1,8 +1,8 @@
-package xyz.soukup.ecoCraftCore.utilities;
+package xyz.soukup.ecoCraftCore.database;
import com.j256.ormlite.dao.Dao;
-import com.j256.ormlite.stmt.query.In;
-import xyz.soukup.ecoCraftCore.objects.*;
+import xyz.soukup.ecoCraftCore.database.objects.*;
+import xyz.soukup.ecoCraftCore.inventory.VirtualChest;
public class DaoRegistry {
private static Dao shopDao;
diff --git a/src/main/java/xyz/soukup/ecoCraftCore/objects/Account.java b/src/main/java/xyz/soukup/ecoCraftCore/database/objects/Account.java
similarity index 97%
rename from src/main/java/xyz/soukup/ecoCraftCore/objects/Account.java
rename to src/main/java/xyz/soukup/ecoCraftCore/database/objects/Account.java
index d174a84..50d7954 100644
--- a/src/main/java/xyz/soukup/ecoCraftCore/objects/Account.java
+++ b/src/main/java/xyz/soukup/ecoCraftCore/database/objects/Account.java
@@ -1,4 +1,4 @@
-package xyz.soukup.ecoCraftCore.objects;
+package xyz.soukup.ecoCraftCore.database.objects;
import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.misc.TransactionManager;
@@ -7,8 +7,7 @@ import com.j256.ormlite.stmt.UpdateBuilder;
import com.j256.ormlite.table.DatabaseTable;
import org.bukkit.entity.Player;
-import xyz.soukup.ecoCraftCore.EcoCraftCore;
-import xyz.soukup.ecoCraftCore.utilities.DaoRegistry;
+import xyz.soukup.ecoCraftCore.database.DaoRegistry;
import java.sql.SQLException;
import java.util.HashMap;
diff --git a/src/main/java/xyz/soukup/ecoCraftCore/objects/Island.java b/src/main/java/xyz/soukup/ecoCraftCore/database/objects/Island.java
similarity index 95%
rename from src/main/java/xyz/soukup/ecoCraftCore/objects/Island.java
rename to src/main/java/xyz/soukup/ecoCraftCore/database/objects/Island.java
index 86611b9..edd47c5 100644
--- a/src/main/java/xyz/soukup/ecoCraftCore/objects/Island.java
+++ b/src/main/java/xyz/soukup/ecoCraftCore/database/objects/Island.java
@@ -1,9 +1,9 @@
-package xyz.soukup.ecoCraftCore.objects;
+package xyz.soukup.ecoCraftCore.database.objects;
import com.j256.ormlite.field.DataType;
import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;
-import xyz.soukup.ecoCraftCore.utilities.DaoRegistry;
+import xyz.soukup.ecoCraftCore.database.DaoRegistry;
import java.sql.SQLException;
diff --git a/src/main/java/xyz/soukup/ecoCraftCore/objects/Shop.java b/src/main/java/xyz/soukup/ecoCraftCore/database/objects/Shop.java
similarity index 97%
rename from src/main/java/xyz/soukup/ecoCraftCore/objects/Shop.java
rename to src/main/java/xyz/soukup/ecoCraftCore/database/objects/Shop.java
index 48716a5..6317a3c 100644
--- a/src/main/java/xyz/soukup/ecoCraftCore/objects/Shop.java
+++ b/src/main/java/xyz/soukup/ecoCraftCore/database/objects/Shop.java
@@ -1,4 +1,4 @@
-package xyz.soukup.ecoCraftCore.objects;
+package xyz.soukup.ecoCraftCore.database.objects;
import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;
import net.kyori.adventure.text.Component;
@@ -8,7 +8,7 @@ import org.bukkit.block.sign.SignSide;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull;
-import xyz.soukup.ecoCraftCore.utilities.DaoRegistry;
+import xyz.soukup.ecoCraftCore.database.DaoRegistry;
import xyz.soukup.ecoCraftCore.utilities.Converter;
import xyz.soukup.ecoCraftCore.utilities.PDC;
diff --git a/src/main/java/xyz/soukup/ecoCraftCore/objects/Transaction.java b/src/main/java/xyz/soukup/ecoCraftCore/database/objects/Transaction.java
similarity index 95%
rename from src/main/java/xyz/soukup/ecoCraftCore/objects/Transaction.java
rename to src/main/java/xyz/soukup/ecoCraftCore/database/objects/Transaction.java
index f831595..bd13d04 100644
--- a/src/main/java/xyz/soukup/ecoCraftCore/objects/Transaction.java
+++ b/src/main/java/xyz/soukup/ecoCraftCore/database/objects/Transaction.java
@@ -1,13 +1,11 @@
-package xyz.soukup.ecoCraftCore.objects;
+package xyz.soukup.ecoCraftCore.database.objects;
import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;
-import org.bukkit.entity.Player;
-import xyz.soukup.ecoCraftCore.utilities.DaoRegistry;
+import xyz.soukup.ecoCraftCore.database.DaoRegistry;
import java.sql.SQLException;
import java.sql.Timestamp;
-import java.util.Objects;
@DatabaseTable(tableName = "transactions")
public class Transaction {
diff --git a/src/main/java/xyz/soukup/ecoCraftCore/events/PreparePlayer.java b/src/main/java/xyz/soukup/ecoCraftCore/events/PreparePlayer.java
index a6509a7..c960d5b 100644
--- a/src/main/java/xyz/soukup/ecoCraftCore/events/PreparePlayer.java
+++ b/src/main/java/xyz/soukup/ecoCraftCore/events/PreparePlayer.java
@@ -3,7 +3,7 @@ package xyz.soukup.ecoCraftCore.events;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
-import xyz.soukup.ecoCraftCore.objects.Account;
+import xyz.soukup.ecoCraftCore.database.objects.Account;
public class PreparePlayer implements Listener {
diff --git a/src/main/java/xyz/soukup/ecoCraftCore/events/ShopLogic.java b/src/main/java/xyz/soukup/ecoCraftCore/events/ShopLogic.java
index 09d8cf2..ddb250b 100644
--- a/src/main/java/xyz/soukup/ecoCraftCore/events/ShopLogic.java
+++ b/src/main/java/xyz/soukup/ecoCraftCore/events/ShopLogic.java
@@ -10,7 +10,6 @@ import io.papermc.paper.registry.data.dialog.action.DialogAction;
import io.papermc.paper.registry.data.dialog.input.DialogInput;
import io.papermc.paper.registry.data.dialog.type.DialogType;
import net.kyori.adventure.audience.Audience;
-import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.event.ClickCallback;
import org.bukkit.Material;
import org.bukkit.block.Block;
@@ -23,10 +22,13 @@ import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory;
-import xyz.soukup.ecoCraftCore.objects.Account;
-import xyz.soukup.ecoCraftCore.objects.Shop;
-import xyz.soukup.ecoCraftCore.objects.Transaction;
-import xyz.soukup.ecoCraftCore.objects.VirtualChest;
+import xyz.soukup.ecoCraftCore.gui.GuiItemBuilder;
+import xyz.soukup.ecoCraftCore.inventory.InventoryUtils;
+import xyz.soukup.ecoCraftCore.messages.Messages;
+import xyz.soukup.ecoCraftCore.database.objects.Account;
+import xyz.soukup.ecoCraftCore.database.objects.Shop;
+import xyz.soukup.ecoCraftCore.database.objects.Transaction;
+import xyz.soukup.ecoCraftCore.inventory.VirtualChest;
import xyz.soukup.ecoCraftCore.utilities.*;
import java.util.HashMap;
diff --git a/src/main/java/xyz/soukup/ecoCraftCore/events/VirtualChestLogic.java b/src/main/java/xyz/soukup/ecoCraftCore/events/VirtualChestLogic.java
index 5ac6fc7..2699dfa 100644
--- a/src/main/java/xyz/soukup/ecoCraftCore/events/VirtualChestLogic.java
+++ b/src/main/java/xyz/soukup/ecoCraftCore/events/VirtualChestLogic.java
@@ -11,7 +11,7 @@ import org.bukkit.event.inventory.InventoryMoveItemEvent;
import org.bukkit.event.inventory.InventoryOpenEvent;
import org.bukkit.inventory.InventoryHolder;
import org.bukkit.inventory.ItemStack;
-import xyz.soukup.ecoCraftCore.objects.VirtualChest;
+import xyz.soukup.ecoCraftCore.inventory.VirtualChest;
import xyz.soukup.ecoCraftCore.utilities.PDC;
import java.util.HashMap;
diff --git a/src/main/java/xyz/soukup/ecoCraftCore/utilities/GuiItemBuilder.java b/src/main/java/xyz/soukup/ecoCraftCore/gui/GuiItemBuilder.java
similarity index 95%
rename from src/main/java/xyz/soukup/ecoCraftCore/utilities/GuiItemBuilder.java
rename to src/main/java/xyz/soukup/ecoCraftCore/gui/GuiItemBuilder.java
index 3150ea7..66f95c2 100644
--- a/src/main/java/xyz/soukup/ecoCraftCore/utilities/GuiItemBuilder.java
+++ b/src/main/java/xyz/soukup/ecoCraftCore/gui/GuiItemBuilder.java
@@ -1,4 +1,4 @@
-package xyz.soukup.ecoCraftCore.utilities;
+package xyz.soukup.ecoCraftCore.gui;
import com.github.stefvanschie.inventoryframework.gui.GuiItem;
import net.kyori.adventure.text.Component;
diff --git a/src/main/java/xyz/soukup/ecoCraftCore/utilities/InventoryUtils.java b/src/main/java/xyz/soukup/ecoCraftCore/inventory/InventoryUtils.java
similarity index 95%
rename from src/main/java/xyz/soukup/ecoCraftCore/utilities/InventoryUtils.java
rename to src/main/java/xyz/soukup/ecoCraftCore/inventory/InventoryUtils.java
index a3ab141..403b7f4 100644
--- a/src/main/java/xyz/soukup/ecoCraftCore/utilities/InventoryUtils.java
+++ b/src/main/java/xyz/soukup/ecoCraftCore/inventory/InventoryUtils.java
@@ -1,4 +1,4 @@
-package xyz.soukup.ecoCraftCore.utilities;
+package xyz.soukup.ecoCraftCore.inventory;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
diff --git a/src/main/java/xyz/soukup/ecoCraftCore/objects/VirtualChest.java b/src/main/java/xyz/soukup/ecoCraftCore/inventory/VirtualChest.java
similarity index 95%
rename from src/main/java/xyz/soukup/ecoCraftCore/objects/VirtualChest.java
rename to src/main/java/xyz/soukup/ecoCraftCore/inventory/VirtualChest.java
index 09c8332..5a09a87 100644
--- a/src/main/java/xyz/soukup/ecoCraftCore/objects/VirtualChest.java
+++ b/src/main/java/xyz/soukup/ecoCraftCore/inventory/VirtualChest.java
@@ -1,4 +1,4 @@
-package xyz.soukup.ecoCraftCore.objects;
+package xyz.soukup.ecoCraftCore.inventory;
import com.j256.ormlite.field.DataType;
import com.j256.ormlite.field.DatabaseField;
@@ -6,9 +6,8 @@ import com.j256.ormlite.table.DatabaseTable;
import org.bukkit.block.Chest;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
-import xyz.soukup.ecoCraftCore.utilities.DaoRegistry;
+import xyz.soukup.ecoCraftCore.database.DaoRegistry;
import xyz.soukup.ecoCraftCore.utilities.Converter;
-import xyz.soukup.ecoCraftCore.utilities.InventoryUtils;
import xyz.soukup.ecoCraftCore.utilities.PDC;
import java.sql.SQLException;
diff --git a/src/main/java/xyz/soukup/ecoCraftCore/islands/IslandCommand.java b/src/main/java/xyz/soukup/ecoCraftCore/islands/IslandCommand.java
new file mode 100644
index 0000000..283b225
--- /dev/null
+++ b/src/main/java/xyz/soukup/ecoCraftCore/islands/IslandCommand.java
@@ -0,0 +1,32 @@
+package xyz.soukup.ecoCraftCore.islands;
+
+import com.mojang.brigadier.arguments.StringArgumentType;
+import com.mojang.brigadier.builder.LiteralArgumentBuilder;
+import com.mojang.brigadier.context.CommandContext;
+import io.papermc.paper.command.brigadier.CommandSourceStack;
+import io.papermc.paper.command.brigadier.Commands;
+
+
+public class IslandCommand {
+
+ LiteralArgumentBuilder tp = Commands.literal("tp")
+ .then(Commands.argument("uuid", StringArgumentType.word())
+ .executes(IslandCommand::teleport));
+
+ LiteralArgumentBuilder create = Commands.literal("create")
+ .then(Commands.argument("name", StringArgumentType.word())
+ .then(Commands.argument("display_name", StringArgumentType.string())));
+
+ private static int teleport(CommandContext context) {
+ return 0;
+ }
+
+ private static int createWorld(CommandContext context) {
+ return 0;
+ }
+
+ private static int loadWorld(CommandContext context) {
+ return 0;
+ }
+
+}
diff --git a/src/main/java/xyz/soukup/ecoCraftCore/islands/IslandLoader.java b/src/main/java/xyz/soukup/ecoCraftCore/islands/IslandLoader.java
index 6819687..1431f76 100644
--- a/src/main/java/xyz/soukup/ecoCraftCore/islands/IslandLoader.java
+++ b/src/main/java/xyz/soukup/ecoCraftCore/islands/IslandLoader.java
@@ -2,9 +2,8 @@ package xyz.soukup.ecoCraftCore.islands;
import com.infernalsuite.asp.api.exceptions.UnknownWorldException;
import com.infernalsuite.asp.api.loaders.SlimeLoader;
import com.j256.ormlite.stmt.DeleteBuilder;
-import com.j256.ormlite.stmt.Where;
-import xyz.soukup.ecoCraftCore.objects.Island;
-import xyz.soukup.ecoCraftCore.utilities.DaoRegistry;
+import xyz.soukup.ecoCraftCore.database.objects.Island;
+import xyz.soukup.ecoCraftCore.database.DaoRegistry;
import java.io.IOException;
import java.sql.SQLException;
diff --git a/src/main/java/xyz/soukup/ecoCraftCore/islands/IslandManager.java b/src/main/java/xyz/soukup/ecoCraftCore/islands/IslandManager.java
index 7ff145e..939b960 100644
--- a/src/main/java/xyz/soukup/ecoCraftCore/islands/IslandManager.java
+++ b/src/main/java/xyz/soukup/ecoCraftCore/islands/IslandManager.java
@@ -5,10 +5,10 @@ import com.infernalsuite.asp.api.world.SlimeWorld;
import com.infernalsuite.asp.api.world.properties.SlimeProperties;
import com.infernalsuite.asp.api.world.properties.SlimePropertyMap;
import org.bukkit.Bukkit;
-import org.bukkit.entity.Player;
-import xyz.soukup.ecoCraftCore.objects.Island;
+import xyz.soukup.ecoCraftCore.database.objects.Island;
+import xyz.soukup.ecoCraftCore.database.DaoRegistry;
-import java.util.Objects;
+import java.sql.SQLException;
import java.util.UUID;
import static xyz.soukup.ecoCraftCore.EcoCraftCore.plugin;
@@ -17,7 +17,7 @@ public class IslandManager {
private final AdvancedSlimePaperAPI asp = AdvancedSlimePaperAPI.instance();
private final IslandLoader loader = new IslandLoader();
- // 1. Create a brand new island
+
public void createIsland(String name, String displayName, String descritpion, String owner, String ownerType) {
String uuid = UUID.randomUUID().toString();
@@ -35,9 +35,10 @@ public class IslandManager {
// Create the database entry first so the loader has a row to update
- SlimeWorld slimeWorld = asp.createEmptyWorld(uuid, false, props, loader);
Island island = new Island(name, uuid, displayName, descritpion, owner, ownerType, null);
island.save();
+ SlimeWorld slimeWorld = asp.createEmptyWorld(uuid, false, props, loader);
+
Bukkit.getScheduler().runTask(plugin, () -> {
asp.loadWorld(slimeWorld, true);
@@ -48,21 +49,38 @@ public class IslandManager {
}
// 2. Retrieve and Load existing island
- public void loadIsland(Player player, String uuidStr) {
+ public int loadIsland(String uuid) {
+
+ if (Bukkit.getWorld(uuid) != null) {
+ return 0;
+ }
+
+ try {
+ Island island = DaoRegistry.getIslandDao().queryBuilder()
+ .selectColumns("active_on")
+ .where()
+ .eq("uuid", uuid)
+ .queryForFirst();
+
+ if (!island.getActiveOn().isEmpty()){
+ return 1;
+ }
+ } catch (SQLException e) {
+ return 2;
+ }
+
+
Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> {
try {
- // Check if world is already loaded in Bukkit
- if (Bukkit.getWorld(uuidStr) != null) {
- Bukkit.getScheduler().runTask(plugin, () -> player.teleport(Bukkit.getWorld(uuidStr).getSpawnLocation()));
- return;
- }
- SlimeWorld slimeWorld = asp.readWorld(loader, uuidStr, false, new SlimePropertyMap());
+ SlimeWorld slimeWorld = asp.readWorld(loader, uuid, false, new SlimePropertyMap());
Bukkit.getScheduler().runTask(plugin, () -> {
asp.loadWorld(slimeWorld, true);
- player.teleport(Bukkit.getWorld(uuidStr).getSpawnLocation());
});
} catch (Exception e) { e.printStackTrace(); }
});
+ return 0;
}
+
+
}
diff --git a/src/main/java/xyz/soukup/ecoCraftCore/islands/UnloadWorld.java b/src/main/java/xyz/soukup/ecoCraftCore/islands/UnloadWorld.java
new file mode 100644
index 0000000..63977a8
--- /dev/null
+++ b/src/main/java/xyz/soukup/ecoCraftCore/islands/UnloadWorld.java
@@ -0,0 +1,4 @@
+package xyz.soukup.ecoCraftCore.islands;
+
+public class UnloadWorld {
+}
diff --git a/src/main/java/xyz/soukup/ecoCraftCore/utilities/Messages.java b/src/main/java/xyz/soukup/ecoCraftCore/messages/Messages.java
similarity index 95%
rename from src/main/java/xyz/soukup/ecoCraftCore/utilities/Messages.java
rename to src/main/java/xyz/soukup/ecoCraftCore/messages/Messages.java
index 8ec0439..2371064 100644
--- a/src/main/java/xyz/soukup/ecoCraftCore/utilities/Messages.java
+++ b/src/main/java/xyz/soukup/ecoCraftCore/messages/Messages.java
@@ -1,13 +1,11 @@
-package xyz.soukup.ecoCraftCore.utilities;
+package xyz.soukup.ecoCraftCore.messages;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.MiniMessage;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.bukkit.command.CommandSender;
-import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
-import org.bukkit.entity.Player;
import java.io.File;
import java.io.IOException;
diff --git a/src/main/java/xyz/soukup/ecoCraftCore/utilities/PHHM.java b/src/main/java/xyz/soukup/ecoCraftCore/messages/PHHM.java
similarity index 90%
rename from src/main/java/xyz/soukup/ecoCraftCore/utilities/PHHM.java
rename to src/main/java/xyz/soukup/ecoCraftCore/messages/PHHM.java
index fee94d5..0116993 100644
--- a/src/main/java/xyz/soukup/ecoCraftCore/utilities/PHHM.java
+++ b/src/main/java/xyz/soukup/ecoCraftCore/messages/PHHM.java
@@ -1,9 +1,9 @@
-package xyz.soukup.ecoCraftCore.utilities;
+package xyz.soukup.ecoCraftCore.messages;
import org.bukkit.Location;
-import xyz.soukup.ecoCraftCore.objects.Account;
-import xyz.soukup.ecoCraftCore.objects.Transaction;
+import xyz.soukup.ecoCraftCore.database.objects.Account;
+import xyz.soukup.ecoCraftCore.database.objects.Transaction;
import java.util.HashMap;
diff --git a/src/main/java/xyz/soukup/ecoCraftCore/commands/RulerCommand.java b/src/main/java/xyz/soukup/ecoCraftCore/positionMarker/RulerCommand.java
similarity index 92%
rename from src/main/java/xyz/soukup/ecoCraftCore/commands/RulerCommand.java
rename to src/main/java/xyz/soukup/ecoCraftCore/positionMarker/RulerCommand.java
index 3240456..dd09626 100644
--- a/src/main/java/xyz/soukup/ecoCraftCore/commands/RulerCommand.java
+++ b/src/main/java/xyz/soukup/ecoCraftCore/positionMarker/RulerCommand.java
@@ -1,4 +1,4 @@
-package xyz.soukup.ecoCraftCore.commands;
+package xyz.soukup.ecoCraftCore.positionMarker;
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import com.mojang.brigadier.context.CommandContext;
@@ -8,7 +8,7 @@ import org.bukkit.Material;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
-import xyz.soukup.ecoCraftCore.utilities.Messages;
+import xyz.soukup.ecoCraftCore.messages.Messages;
import xyz.soukup.ecoCraftCore.utilities.PDC;
public class RulerCommand {
diff --git a/src/main/java/xyz/soukup/ecoCraftCore/events/RulerMarking.java b/src/main/java/xyz/soukup/ecoCraftCore/positionMarker/RulerMarking.java
similarity index 95%
rename from src/main/java/xyz/soukup/ecoCraftCore/events/RulerMarking.java
rename to src/main/java/xyz/soukup/ecoCraftCore/positionMarker/RulerMarking.java
index c9f642a..2f47d46 100644
--- a/src/main/java/xyz/soukup/ecoCraftCore/events/RulerMarking.java
+++ b/src/main/java/xyz/soukup/ecoCraftCore/positionMarker/RulerMarking.java
@@ -1,4 +1,4 @@
-package xyz.soukup.ecoCraftCore.events;
+package xyz.soukup.ecoCraftCore.positionMarker;
import org.bukkit.Location;
import org.bukkit.block.Block;
@@ -10,9 +10,9 @@ import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.EquipmentSlot;
import org.bukkit.inventory.ItemStack;
-import xyz.soukup.ecoCraftCore.utilities.Messages;
+import xyz.soukup.ecoCraftCore.messages.Messages;
import xyz.soukup.ecoCraftCore.utilities.PDC;
-import xyz.soukup.ecoCraftCore.utilities.PHHM;
+import xyz.soukup.ecoCraftCore.messages.PHHM;
import java.util.HashMap;