From 87e796202886e9e84ad96246a9bfecaea3f3ac60 Mon Sep 17 00:00:00 2001 From: jakub Date: Sat, 18 Apr 2026 08:26:50 +0200 Subject: [PATCH] =?UTF-8?q?-Odstran=C4=9Bn=20dao=20manager=20a=20funkce=20?= =?UTF-8?q?p=C5=99ed=C3=A1ny=20p=C5=99=C3=ADslu=C5=A1n=C3=BDm=20objekt?= =?UTF-8?q?=C5=AFm=20-=20P=C5=99eps=C3=A1n=C3=AD=20region=C5=AF=20na=20pou?= =?UTF-8?q?=C5=BE=C3=ADv=C3=A1n=C3=AD=20PermissionGroup?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xyz/soukup/ecoCraftCore/EcoCraftCore.java | 23 ++- .../ecoCraftCore/database/DaoRegistry.java | 89 ---------- .../database/objects/Account.java | 35 ++-- .../database/objects/ActiveServer.java | 18 +- .../ecoCraftCore/database/objects/Island.java | 19 ++- .../database/objects/Permission.java | 34 ++++ .../database/objects/PermissionGroup.java | 158 ++++++++++++++++++ .../ecoCraftCore/database/objects/Region.java | 87 +++++++++- .../database/objects/RegionMember.java | 49 ++++-- .../ecoCraftCore/database/objects/Shop.java | 18 +- .../database/objects/TeleportRequest.java | 17 +- .../database/objects/Transaction.java | 16 +- .../database/objects/VirtualChest.java | 24 ++- .../islands/DatabaseIslandLoader.java | 11 +- .../islands/IslandAdminCommand.java | 8 +- .../ecoCraftCore/islands/IslandManager.java | 8 +- .../islands/IslandSelectorCommand.java | 14 +- .../player/TeleportRequestsHandler.java | 3 - .../regions/RegionAdminCommand.java | 3 +- .../ecoCraftCore/regions/RegionEvents.java | 3 +- .../ecoCraftCore/regions/RegionManager.java | 9 +- src/main/resources/messages.yml | 13 ++ 22 files changed, 465 insertions(+), 194 deletions(-) delete mode 100644 src/main/java/xyz/soukup/ecoCraftCore/database/DaoRegistry.java create mode 100644 src/main/java/xyz/soukup/ecoCraftCore/database/objects/Permission.java create mode 100644 src/main/java/xyz/soukup/ecoCraftCore/database/objects/PermissionGroup.java diff --git a/src/main/java/xyz/soukup/ecoCraftCore/EcoCraftCore.java b/src/main/java/xyz/soukup/ecoCraftCore/EcoCraftCore.java index 72fee3f..4695378 100644 --- a/src/main/java/xyz/soukup/ecoCraftCore/EcoCraftCore.java +++ b/src/main/java/xyz/soukup/ecoCraftCore/EcoCraftCore.java @@ -42,7 +42,6 @@ import xyz.soukup.ecoCraftCore.database.objects.Transaction; import io.papermc.paper.plugin.lifecycle.event.types.LifecycleEvents; import xyz.soukup.ecoCraftCore.database.objects.VirtualChest; import xyz.soukup.ecoCraftCore.positionMarker.MarkerEvent; -import xyz.soukup.ecoCraftCore.database.DaoRegistry; import xyz.soukup.ecoCraftCore.messages.Messages; import xyz.soukup.ecoCraftCore.shop.ShopLogic; import xyz.soukup.ecoCraftCore.sign.SignEditCommand; @@ -158,7 +157,7 @@ public final class EcoCraftCore extends JavaPlugin { Bukkit.unloadWorld(world, true); getLogger().info("Unloading world " + world.getName() + " due to inactivity"); try { - UpdateBuilder updateBuilder = DaoRegistry.getIslandDao().updateBuilder(); + UpdateBuilder updateBuilder = Island.getDao().updateBuilder(); updateBuilder.where().eq("uuid", world.getName()); updateBuilder.updateColumnValue("active_on", ""); updateBuilder.update(); @@ -188,7 +187,7 @@ public final class EcoCraftCore extends JavaPlugin { } try { - UpdateBuilder updateBuilder = DaoRegistry.getIslandDao().updateBuilder(); + UpdateBuilder updateBuilder = Island.getDao().updateBuilder(); updateBuilder.where().eq("active_on", config.getString("server.name")); updateBuilder.updateColumnValue("active_on", ""); updateBuilder.update(); @@ -239,15 +238,15 @@ public final class EcoCraftCore extends JavaPlugin { TableUtils.createTableIfNotExists(connectionSource, Region.class); TableUtils.createTableIfNotExists(connectionSource, RegionMember.class); - DaoRegistry.setActiveServerDao(DaoManager.createDao(connectionSource, ActiveServer.class)); - DaoRegistry.setTransactionDao(DaoManager.createDao(connectionSource, Transaction.class)); - DaoRegistry.setIslandDaoo(DaoManager.createDao(connectionSource, Island.class)); - DaoRegistry.setShopDao(DaoManager.createDao(connectionSource, Shop.class)); - DaoRegistry.setVirtualChestDao(DaoManager.createDao(connectionSource, VirtualChest.class)); - DaoRegistry.setAccountDao(DaoManager.createDao(connectionSource, Account.class)); - DaoRegistry.setTeleportRequestsDao(DaoManager.createDao(connectionSource, TeleportRequest.class)); - DaoRegistry.setRegionDao(DaoManager.createDao(connectionSource, Region.class)); - DaoRegistry.setRegionMemberDao(DaoManager.createDao(connectionSource, RegionMember.class)); + ActiveServer.setDao(DaoManager.createDao(connectionSource, ActiveServer.class)); + Transaction.setDao(DaoManager.createDao(connectionSource, Transaction.class)); + Shop.setDao(DaoManager.createDao(connectionSource, Shop.class)); + VirtualChest.setDao(DaoManager.createDao(connectionSource, VirtualChest.class)); + Account.setDao(DaoManager.createDao(connectionSource, Account.class)); + Island.setDao(DaoManager.createDao(connectionSource, Island.class)); + TeleportRequest.setDao(DaoManager.createDao(connectionSource, TeleportRequest.class)); + Region.setDao(DaoManager.createDao(connectionSource, Region.class)); + RegionMember.setDao(DaoManager.createDao(connectionSource, RegionMember.class)); ActiveServer activeServer = new ActiveServer(config.getString("server.name")); diff --git a/src/main/java/xyz/soukup/ecoCraftCore/database/DaoRegistry.java b/src/main/java/xyz/soukup/ecoCraftCore/database/DaoRegistry.java deleted file mode 100644 index eaf7907..0000000 --- a/src/main/java/xyz/soukup/ecoCraftCore/database/DaoRegistry.java +++ /dev/null @@ -1,89 +0,0 @@ -package xyz.soukup.ecoCraftCore.database; - -import com.j256.ormlite.dao.Dao; -import xyz.soukup.ecoCraftCore.database.objects.*; -import xyz.soukup.ecoCraftCore.database.objects.VirtualChest; - -public class DaoRegistry { - private static Dao shopDao; - private static Dao transactionDao; - private static Dao virtualChestDao; - private static Dao accountDao; - private static Dao islandDao; - private static Dao teleportRequestsDao; - private static Dao activeServerDao; - private static Dao regionDao; - private static Dao regionMemberDao; - - public static Dao getRegionMemberDao() { - return regionMemberDao; - } - - public static void setRegionMemberDao(Dao regionMemberDao) { - DaoRegistry.regionMemberDao = regionMemberDao; - } - - public static Dao getRegionDao() { - return regionDao; - } - - public static void setRegionDao(Dao regionDao) { - DaoRegistry.regionDao = regionDao; - } - - public static Dao getTeleportRequestsDao() { - return teleportRequestsDao; - } - - public static void setTeleportRequestsDao(Dao teleportRequestsDao) { - DaoRegistry.teleportRequestsDao = teleportRequestsDao; - } - - public static Dao getActiveServerDao() { - return activeServerDao; - } - - public static void setActiveServerDao(Dao activeServerDao) { - DaoRegistry.activeServerDao = activeServerDao; - } - - public static Dao getShopDao() { - return shopDao; - } - - public static void setShopDao(Dao shopDao) { - DaoRegistry.shopDao = shopDao; - } - - public static Dao getTransactionDao() { - return transactionDao; - } - - public static void setTransactionDao(Dao transactionDao) { - DaoRegistry.transactionDao = transactionDao; - } - - public static Dao getVirtualChestDao() { - return virtualChestDao; - } - - public static void setVirtualChestDao(Dao virtualChestDao) { - DaoRegistry.virtualChestDao = virtualChestDao; - } - - public static Dao getAccountDao() { - return accountDao; - } - - public static void setAccountDao(Dao accountDao) { - DaoRegistry.accountDao = accountDao; - } - - public static Dao getIslandDao() { - return islandDao; - } - - public static void setIslandDaoo(Dao islandDao) { - DaoRegistry.islandDao = islandDao; - } -} diff --git a/src/main/java/xyz/soukup/ecoCraftCore/database/objects/Account.java b/src/main/java/xyz/soukup/ecoCraftCore/database/objects/Account.java index 50d7954..1c1ef2e 100644 --- a/src/main/java/xyz/soukup/ecoCraftCore/database/objects/Account.java +++ b/src/main/java/xyz/soukup/ecoCraftCore/database/objects/Account.java @@ -1,5 +1,6 @@ package xyz.soukup.ecoCraftCore.database.objects; +import com.j256.ormlite.dao.Dao; import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.misc.TransactionManager; import com.j256.ormlite.stmt.QueryBuilder; @@ -7,7 +8,6 @@ import com.j256.ormlite.stmt.UpdateBuilder; import com.j256.ormlite.table.DatabaseTable; import org.bukkit.entity.Player; -import xyz.soukup.ecoCraftCore.database.DaoRegistry; import java.sql.SQLException; import java.util.HashMap; @@ -16,6 +16,19 @@ import static xyz.soukup.ecoCraftCore.EcoCraftCore.connectionSource; @DatabaseTable(tableName = "accounts") public class Account { + + private static Dao dao; + + public static Dao getDao() { + return dao; + } + + public static void setDao(Dao dao) { + dao = dao; + } + + + @DatabaseField(generatedId = true) private int id; @@ -49,7 +62,7 @@ public class Account { public float getBalance() { try { - Account fresh = DaoRegistry.getAccountDao().queryBuilder() + Account fresh = getDao().queryBuilder() .selectColumns("balance") .where().eq("id", this.id) .queryForFirst(); @@ -69,7 +82,7 @@ public class Account { public void deposit(float amount){ try { TransactionManager.callInTransaction(connectionSource, () -> { - UpdateBuilder builder = DaoRegistry.getAccountDao().updateBuilder(); + UpdateBuilder builder = getDao().updateBuilder(); builder.updateColumnExpression("balance", "balance + " + amount); builder.where().idEq(this.id); int updated = builder.update(); @@ -83,7 +96,7 @@ public class Account { public void withdraw(float amount){ try { TransactionManager.callInTransaction(connectionSource, () -> { - UpdateBuilder builder = DaoRegistry.getAccountDao().updateBuilder(); + UpdateBuilder builder = getDao().updateBuilder(); builder.updateColumnExpression("balance", "balance - " + amount); builder.where().idEq(this.id); return null; @@ -98,12 +111,12 @@ public class Account { TransactionManager.callInTransaction( connectionSource, () -> { - UpdateBuilder withdrawBuilder = DaoRegistry.getAccountDao().updateBuilder(); + UpdateBuilder withdrawBuilder = getDao().updateBuilder(); withdrawBuilder.updateColumnExpression("balance", "balance - " + amount); withdrawBuilder.where().eq("id", from.getId()); withdrawBuilder.update(); - UpdateBuilder depositBuilder = DaoRegistry.getAccountDao().updateBuilder(); + UpdateBuilder depositBuilder = getDao().updateBuilder(); depositBuilder.updateColumnExpression("balance", "balance + " + amount); depositBuilder.where().idEq(to.getId()); depositBuilder.update(); @@ -124,14 +137,14 @@ public class Account { return account; } - QueryBuilder queryBuilder = DaoRegistry.getAccountDao().queryBuilder(); + QueryBuilder queryBuilder = getDao().queryBuilder(); try { queryBuilder.where() .eq("type", type) .and() .eq("owner", owner); - account = DaoRegistry.getAccountDao().queryForFirst(queryBuilder.prepare()); + account = getDao().queryForFirst(queryBuilder.prepare()); if (account == null){ account = new Account(owner, type); @@ -143,19 +156,19 @@ public class Account { } public static Account getOrCreate(Player player){ - QueryBuilder queryBuilder = DaoRegistry.getAccountDao().queryBuilder(); + QueryBuilder queryBuilder = getDao().queryBuilder(); try { queryBuilder.where() .eq("type", "player") .and() .eq("owner", player.getName()); - Account account = DaoRegistry.getAccountDao().queryForFirst(queryBuilder.prepare()); + Account account = getDao().queryForFirst(queryBuilder.prepare()); if (account == null){ account = new Account(player.getName(), "player"); try { - DaoRegistry.getAccountDao().createOrUpdate(account); + getDao().createOrUpdate(account); } catch (SQLException e) { throw new RuntimeException(e); } diff --git a/src/main/java/xyz/soukup/ecoCraftCore/database/objects/ActiveServer.java b/src/main/java/xyz/soukup/ecoCraftCore/database/objects/ActiveServer.java index f02ce5b..451f344 100644 --- a/src/main/java/xyz/soukup/ecoCraftCore/database/objects/ActiveServer.java +++ b/src/main/java/xyz/soukup/ecoCraftCore/database/objects/ActiveServer.java @@ -1,14 +1,26 @@ package xyz.soukup.ecoCraftCore.database.objects; +import com.j256.ormlite.dao.Dao; import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.table.DatabaseTable; -import xyz.soukup.ecoCraftCore.database.DaoRegistry; import java.sql.SQLException; @DatabaseTable(tableName = "active_servers") public class ActiveServer { + + private static Dao dao; + + public static Dao getDao() { + return dao; + } + + public static void setDao(Dao dao) { + ActiveServer.dao = dao; + } + + @DatabaseField(unique = true, id = true) private String name; @@ -21,11 +33,11 @@ public class ActiveServer { } public void save() throws SQLException { - DaoRegistry.getActiveServerDao().createIfNotExists(this); + getDao().createIfNotExists(this); } public void delete() throws SQLException { - DaoRegistry.getActiveServerDao().delete(this); + getDao().delete(this); } public String getName() { diff --git a/src/main/java/xyz/soukup/ecoCraftCore/database/objects/Island.java b/src/main/java/xyz/soukup/ecoCraftCore/database/objects/Island.java index 18647b6..a0f8df4 100644 --- a/src/main/java/xyz/soukup/ecoCraftCore/database/objects/Island.java +++ b/src/main/java/xyz/soukup/ecoCraftCore/database/objects/Island.java @@ -1,14 +1,25 @@ package xyz.soukup.ecoCraftCore.database.objects; +import com.j256.ormlite.dao.Dao; import com.j256.ormlite.field.DataType; import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.table.DatabaseTable; -import xyz.soukup.ecoCraftCore.database.DaoRegistry; import java.sql.SQLException; @DatabaseTable(tableName = "islands") public class Island { + + private static Dao dao; + + public static Dao getDao() { + return dao; + } + + public static void setDao(Dao dao) { + Island.dao = dao; + } + @DatabaseField(generatedId = true) private int id; @@ -103,7 +114,7 @@ public class Island { try { - return DaoRegistry.getIslandDao().queryForId(id); + return getDao().queryForId(id); } catch (SQLException e) { return null; } @@ -111,7 +122,7 @@ public class Island { public static Island findByUuid(String uuid) { try { - return DaoRegistry.getIslandDao().queryBuilder().where().eq("uuid", uuid).queryForFirst(); + return getDao().queryBuilder().where().eq("uuid", uuid).queryForFirst(); } catch (SQLException e) { return null; } @@ -128,7 +139,7 @@ public class Island { this.id = existing.id; } } - DaoRegistry.getIslandDao().createOrUpdate(this); + getDao().createOrUpdate(this); } catch (SQLException e) { throw new RuntimeException(e); } diff --git a/src/main/java/xyz/soukup/ecoCraftCore/database/objects/Permission.java b/src/main/java/xyz/soukup/ecoCraftCore/database/objects/Permission.java new file mode 100644 index 0000000..8497498 --- /dev/null +++ b/src/main/java/xyz/soukup/ecoCraftCore/database/objects/Permission.java @@ -0,0 +1,34 @@ +package xyz.soukup.ecoCraftCore.database.objects; + +public enum Permission { + PLACE(1), + BREAK(2), + REDSTONE_INTERACT(3), + ENTITY_INTERACT(4), + VEHICLE_INTERACT(5), + ENTER(6), + EXIT(7), + MANAGE_MEMBERS(8), + MANAGE_GROUPS(9), + MANAGE_REGIONS(10), + TRANSFER_OWNERSHIP(11), + USE_HOPPER(12), + HARVEST(13), + PLANT(14), + PICKUP_ITEMS(15), + DROP_ITEMS(16), + PLOUGH(17), + SIT(18), + SHOP_INTERACT(19), + HARM_ENTITIES(20), + HARM_PLAYERS(21); + + private final int bit; + Permission(int bit) { + this.bit = bit; + } + + public int getBit() { + return bit; + } +} diff --git a/src/main/java/xyz/soukup/ecoCraftCore/database/objects/PermissionGroup.java b/src/main/java/xyz/soukup/ecoCraftCore/database/objects/PermissionGroup.java new file mode 100644 index 0000000..5b96649 --- /dev/null +++ b/src/main/java/xyz/soukup/ecoCraftCore/database/objects/PermissionGroup.java @@ -0,0 +1,158 @@ +package xyz.soukup.ecoCraftCore.database.objects; + +import com.j256.ormlite.dao.Dao; +import com.j256.ormlite.field.DatabaseField; +import com.j256.ormlite.table.DatabaseTable; +import org.bukkit.Material; + +import java.security.Permissions; +import java.sql.SQLException; + +@DatabaseTable(tableName = "permission_groups") +public class PermissionGroup { + + public static Dao dao; + + public static void setDao(Dao dao) { + PermissionGroup.dao = dao; + } + + public static Dao getDao() { + return dao; + } + + @DatabaseField(generatedId = true) + private int id; + + @DatabaseField(foreign = true, foreignAutoRefresh = true, uniqueCombo = true) + private Region region; + + @DatabaseField(canBeNull = false, uniqueCombo = true) + private String name; + + @DatabaseField(canBeNull = false, columnName = "display_name") + private String displayName; + + @DatabaseField() + private String description; + + @DatabaseField(canBeNull = false) + private Material icon; + + @DatabaseField(canBeNull = false, defaultValue = "0") + private int weight; + + @DatabaseField(canBeNull = false, defaultValue = "true") + private Boolean editable; + + @DatabaseField(canBeNull = false, defaultValue = "true") + private Boolean deletable; + + @DatabaseField(canBeNull = false, defaultValue = "0", columnName = "permissions_number") + private int permissionsNumber; + + public PermissionGroup(){ + + } + + public PermissionGroup(Region region, String name, String displayName, String description, Material icon){ + this.region = region; + this.name = name; + this.displayName = displayName; + this.description = description; + this.icon = icon; + this.editable = true; + this.deletable = true; + this.permissionsNumber = 0; + this.weight = 0; + } + + public PermissionGroup(Region region, String name, String displayName, String description, Material icon, Boolean editable, Boolean deletable, int weight,int permissions){ + this.region = region; + this.name = name; + this.displayName = displayName; + this.description = description; + this.icon = icon; + this.editable = editable; + this.deletable = deletable; + this.permissionsNumber = permissions; + this.weight = weight; + } + + public PermissionGroup(Region region, String name, String displayName, String description, Material icon, Boolean editable, Boolean deletable, int weight, Permission... permissions) { + this.region = region; + this.name = name; + this.displayName = displayName; + this.description = description; + this.icon = icon; + this.editable = editable; + this.deletable = deletable; + this.permissionsNumber = 0; + this.weight = 0; + for (Permission permission : permissions) { + this.permissionsNumber |= permission.getBit(); + } + } + + public boolean hasPermission(Permission permission) { + return (this.permissionsNumber & permission.getBit()) != 0; + } + + public void addPermission(Permission... permissions) { + for (Permission permission : permissions){ + this.permissionsNumber |= permission.getBit(); + } + } + + public void removePermission(Permission permission) { + this.permissionsNumber &= ~permission.getBit(); + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDisplayName() { + return displayName; + } + + public void setDisplayName(String displayName) { + this.displayName = displayName; + } + + public Material getIcon() { + return icon; + } + + public void setIcon(Material icon) { + this.icon = icon; + } + + public int getWeight() { + return weight; + } + + public void setWeight(int weight) { + this.weight = weight; + } + + public void save(){ + try { + getDao().createOrUpdate(this); + } catch (SQLException e) { + throw new RuntimeException(e); + } + } + + public static PermissionGroup getPermissionGroup(Region region, String name){ + try { + return getDao().queryBuilder().where().eq("region", region).and().eq("name", name).queryForFirst(); + } catch (SQLException e) { + throw new RuntimeException(e); + } + } +} diff --git a/src/main/java/xyz/soukup/ecoCraftCore/database/objects/Region.java b/src/main/java/xyz/soukup/ecoCraftCore/database/objects/Region.java index ea06c7c..c0168a5 100644 --- a/src/main/java/xyz/soukup/ecoCraftCore/database/objects/Region.java +++ b/src/main/java/xyz/soukup/ecoCraftCore/database/objects/Region.java @@ -1,17 +1,31 @@ package xyz.soukup.ecoCraftCore.database.objects; +import com.j256.ormlite.dao.Dao; import com.j256.ormlite.dao.ForeignCollection; import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.field.ForeignCollectionField; import com.j256.ormlite.table.DatabaseTable; -import xyz.soukup.ecoCraftCore.database.DaoRegistry; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import xyz.soukup.ecoCraftCore.messages.Messages; +import java.sql.SQLException; import java.util.HashMap; import java.util.List; @DatabaseTable(tableName = "regions") public class Region { + public static Dao dao; + + public static void setDao(Dao dao) { + Region.dao = dao; + } + + public static Dao getDao() { + return dao; + } + public static final HashMap> cache = new HashMap<>(); @DatabaseField(generatedId = true) @@ -61,7 +75,33 @@ public class Region { this.z1 = Math.min(z1, z2); this.z2 = Math.max(z1, z2); + save(); + createDefaultGroupsAndReturnOwner(); + + } + + public PermissionGroup getPermissionGroup(String name){ + return PermissionGroup.getPermissionGroup(this, name); } + + public Region(String island, int regionType, int x1, int y1, int z1, int x2, int y2, int z2, Player owner) { + this.island = island; + this.regionType = regionType; + this.x1 = Math.min(x1, x2); + this.y1 = Math.min(y1, y2); + this.x2 = Math.max(x1, x2); + this.y2 = Math.max(y1, y2); + this.z1 = Math.min(z1, z2); + this.z2 = Math.max(z1, z2); + + this.save(); + + PermissionGroup ownerGroup = this.createDefaultGroupsAndReturnOwner(); + addRegionMember("player", owner.getName(), ownerGroup); + + + } + public int getId() { return id; } @@ -121,7 +161,7 @@ public class Region { public void save(){ try { - DaoRegistry.getRegionDao().createOrUpdate(this); + getDao().createOrUpdate(this); List regions = cache.get(island); if (regions == null) { @@ -135,11 +175,10 @@ public class Region { } } - public void addRegionMember(String memberType, String member, String membershipType){ - RegionMember regionMember = new RegionMember(this, memberType, member, membershipType); + public void addRegionMember(String memberType, String member, PermissionGroup permissionGroup){ + RegionMember regionMember = new RegionMember(this, memberType, member, permissionGroup); regionMember.save(); - Region updatedRegion = Region.findById(this.id); List regions = cache.get(island); if (regions == null) { @@ -147,8 +186,16 @@ public class Region { } regions.removeIf(region -> region.getId() == this.id); - regions.add(updatedRegion); + regions.add(this); + + } + public void removeRegionMember(String memberType, String member){ + try { + RegionMember.getDao().queryBuilder().where().eq("region", this).query(); + } catch (SQLException e) { + throw new RuntimeException(e); + } } public boolean isInside(int x, int y, int z) { @@ -157,7 +204,7 @@ public class Region { public static Region findById(int id) { try { - return DaoRegistry.getRegionDao().queryForId(id); + return getDao().queryForId(id); } catch (Exception e) { return null; } @@ -165,7 +212,7 @@ public class Region { public static void cacheRegions(String island) { try { - List regions = DaoRegistry.getRegionDao().queryBuilder() + List regions = getDao().queryBuilder() .where() .eq("island", island) .query(); @@ -208,6 +255,30 @@ public class Region { this.z2 = Math.max(z1, z2); } + public PermissionGroup createDefaultGroupsAndReturnOwner(){ + String ownerDisplayName = Messages.getAsString("region.permission-groups.owner.name"); + String ownerDescription = Messages.getAsString("region.permission-groups.owner.description"); + PermissionGroup owner = new PermissionGroup(this, "owner", ownerDisplayName, ownerDescription, Material.RED_CONCRETE, false, false, 101); + owner.save(); + + String adminDisplayName = Messages.getAsString("region.permission-groups.admin.name"); + String adminDescription = Messages.getAsString("region.permission-groups.admin.description"); + PermissionGroup admin = new PermissionGroup(this, "admin", adminDisplayName, adminDescription, Material.YELLOW_CONCRETE, true, true, 90); + admin.save(); + + String memberDisplayName = Messages.getAsString("region.permission-groups.member.name"); + String memberDescription = Messages.getAsString("region.permission-groups.member.description"); + PermissionGroup member = new PermissionGroup(this, "member", memberDisplayName, memberDescription, Material.GREEN_CONCRETE, true, true, 10); + member.save(); + + String defaultDisplayName = Messages.getAsString("region.permission-groups.default"); + String defaultDescription = Messages.getAsString("region.permission-groups.default.description"); + PermissionGroup defaultGroup = new PermissionGroup(this, "default", defaultDisplayName, defaultDescription, Material.GRAY_CONCRETE, true, true, 0); + defaultGroup.save(); + + return owner; + } + } diff --git a/src/main/java/xyz/soukup/ecoCraftCore/database/objects/RegionMember.java b/src/main/java/xyz/soukup/ecoCraftCore/database/objects/RegionMember.java index 610d47a..2cba6f5 100644 --- a/src/main/java/xyz/soukup/ecoCraftCore/database/objects/RegionMember.java +++ b/src/main/java/xyz/soukup/ecoCraftCore/database/objects/RegionMember.java @@ -1,63 +1,82 @@ package xyz.soukup.ecoCraftCore.database.objects; +import com.j256.ormlite.dao.Dao; import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.table.DatabaseTable; -import xyz.soukup.ecoCraftCore.database.DaoRegistry; import java.sql.SQLException; @DatabaseTable(tableName = "region_members") public class RegionMember { + public static Dao dao; + + public static void setDao(Dao dao) { + RegionMember.dao = dao; + } + + public static Dao getDao() { + return dao; + } + @DatabaseField(generatedId = true) private int id; @DatabaseField(foreign = true, foreignAutoRefresh = true) private Region region; - @DatabaseField(columnName = "member_type", canBeNull = false) - private String membertype; + @DatabaseField(columnName = "member_group", canBeNull = false) + private String memberGroup; @DatabaseField(columnName = "member_name", canBeNull = false) private String memberName; - @DatabaseField(columnName = "membership_type", canBeNull = false) - private String membershipType; + @DatabaseField(columnName = "permission_group", foreign = true, foreignAutoRefresh = true,canBeNull = false) + private PermissionGroup permissionGroup; public RegionMember(){ } - public RegionMember(Region region, String membertype, String memberName, String membershipType){ + public RegionMember(Region region, String membertype, String memberName, PermissionGroup permissionGroup){ this.region = region; - this.membertype = membertype; + this.memberGroup = membertype; this.memberName = memberName; - this.membershipType = membershipType; + this.permissionGroup = permissionGroup; } public Region getRegion() { return region; } - public String getMembertype() { - return membertype; + public String getMemberGroup() { + return memberGroup; } public String getName() { return memberName; } - public String getMembershipType() { - return membershipType; + public PermissionGroup getPermissionGroup() { + return permissionGroup; } - public void setMembershipType(String membershipType) { - this.membershipType = membershipType; + public void setPermissionGroup(PermissionGroup permissionGroup) { + this.permissionGroup = permissionGroup; + save(); } public void save(){ try { - DaoRegistry.getRegionMemberDao().createOrUpdate(this); + getDao().createOrUpdate(this); + } catch (SQLException e) { + throw new RuntimeException(e); + } + } + + public void delete(){ + try { + getDao().delete(this); } catch (SQLException e) { throw new RuntimeException(e); } diff --git a/src/main/java/xyz/soukup/ecoCraftCore/database/objects/Shop.java b/src/main/java/xyz/soukup/ecoCraftCore/database/objects/Shop.java index 86c53a5..3c8c2fc 100644 --- a/src/main/java/xyz/soukup/ecoCraftCore/database/objects/Shop.java +++ b/src/main/java/xyz/soukup/ecoCraftCore/database/objects/Shop.java @@ -1,4 +1,5 @@ package xyz.soukup.ecoCraftCore.database.objects; +import com.j256.ormlite.dao.Dao; import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.table.DatabaseTable; import net.kyori.adventure.text.Component; @@ -9,7 +10,6 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.persistence.PersistentDataType; import org.jetbrains.annotations.NotNull; -import xyz.soukup.ecoCraftCore.database.DaoRegistry; import xyz.soukup.ecoCraftCore.utilities.Converter; import xyz.soukup.ecoCraftCore.utilities.PDC; @@ -20,6 +20,16 @@ import java.util.HashMap; @DatabaseTable(tableName = "shops") public class Shop { + private static Dao dao; + + public static Dao getDao() { + return dao; + } + + public static void setDao(Dao dao) { + dao = dao; + } + @DatabaseField(generatedId = true) private int id; @@ -112,7 +122,7 @@ public class Shop { } try { - return DaoRegistry.getShopDao().queryForId(id); + return getDao().queryForId(id); } catch (SQLException e) { return null; } @@ -124,7 +134,7 @@ public class Shop { public void save(){ try { - DaoRegistry.getShopDao().createOrUpdate(this); + getDao().createOrUpdate(this); } catch (SQLException e) { throw new RuntimeException(e); } @@ -135,7 +145,7 @@ public class Shop { public void delete(){ try { cache.remove(this.id); - DaoRegistry.getShopDao().delete(this); + getDao().delete(this); } catch (SQLException e) { throw new RuntimeException(e); } diff --git a/src/main/java/xyz/soukup/ecoCraftCore/database/objects/TeleportRequest.java b/src/main/java/xyz/soukup/ecoCraftCore/database/objects/TeleportRequest.java index 0dc48bf..500eb91 100644 --- a/src/main/java/xyz/soukup/ecoCraftCore/database/objects/TeleportRequest.java +++ b/src/main/java/xyz/soukup/ecoCraftCore/database/objects/TeleportRequest.java @@ -1,15 +1,24 @@ package xyz.soukup.ecoCraftCore.database.objects; +import com.j256.ormlite.dao.Dao; import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.table.DatabaseTable; -import org.bukkit.Location; -import xyz.soukup.ecoCraftCore.database.DaoRegistry; import java.sql.SQLException; @DatabaseTable(tableName = "teleport_requests") public class TeleportRequest { + public static Dao dao; + + public static void setDao(Dao dao) { + TeleportRequest.dao = dao; + } + + public static Dao getDao() { + return dao; + } + @DatabaseField(unique = true, id = true) private String player; @@ -87,10 +96,10 @@ public class TeleportRequest { } public void save() throws SQLException { - DaoRegistry.getTeleportRequestsDao().createOrUpdate(this); + getDao().createOrUpdate(this); } public void delete() throws SQLException { - DaoRegistry.getTeleportRequestsDao().delete(this); + getDao().delete(this); } } diff --git a/src/main/java/xyz/soukup/ecoCraftCore/database/objects/Transaction.java b/src/main/java/xyz/soukup/ecoCraftCore/database/objects/Transaction.java index bd13d04..56e6fec 100644 --- a/src/main/java/xyz/soukup/ecoCraftCore/database/objects/Transaction.java +++ b/src/main/java/xyz/soukup/ecoCraftCore/database/objects/Transaction.java @@ -1,8 +1,8 @@ package xyz.soukup.ecoCraftCore.database.objects; +import com.j256.ormlite.dao.Dao; import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.table.DatabaseTable; -import xyz.soukup.ecoCraftCore.database.DaoRegistry; import java.sql.SQLException; import java.sql.Timestamp; @@ -10,6 +10,16 @@ import java.sql.Timestamp; @DatabaseTable(tableName = "transactions") public class Transaction { + public static Dao dao; + + public static void setDao(Dao dao) { + Transaction.dao = dao; + } + + public static Dao getDao() { + return dao; + } + @DatabaseField(generatedId = true) private long id; @@ -58,7 +68,7 @@ public class Transaction { Account.transferFunds(Account.getOrCreate(this.senderType, this.sender), Account.getOrCreate(this.receiverType, this.receiver), this.amount); try { - DaoRegistry.getTransactionDao().createOrUpdate(this); + getDao().createOrUpdate(this); } catch (SQLException e) { throw new RuntimeException(e); } @@ -66,7 +76,7 @@ public class Transaction { public static Transaction findById(int id) { try { - return DaoRegistry.getTransactionDao().queryForId(id); + return getDao().queryForId(id); } catch (SQLException e) { return null; } diff --git a/src/main/java/xyz/soukup/ecoCraftCore/database/objects/VirtualChest.java b/src/main/java/xyz/soukup/ecoCraftCore/database/objects/VirtualChest.java index 4b7ba97..a11cb83 100644 --- a/src/main/java/xyz/soukup/ecoCraftCore/database/objects/VirtualChest.java +++ b/src/main/java/xyz/soukup/ecoCraftCore/database/objects/VirtualChest.java @@ -1,5 +1,6 @@ package xyz.soukup.ecoCraftCore.database.objects; +import com.j256.ormlite.dao.Dao; import com.j256.ormlite.field.DataType; import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.stmt.DeleteBuilder; @@ -8,7 +9,6 @@ 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.database.DaoRegistry; import xyz.soukup.ecoCraftCore.inventory.InventoryUtils; import xyz.soukup.ecoCraftCore.utilities.Converter; import xyz.soukup.ecoCraftCore.utilities.PDC; @@ -21,6 +21,16 @@ import java.util.List; @DatabaseTable(tableName = "virtual_chests") public class VirtualChest { + private static Dao dao; + + public static Dao getDao() { + return dao; + } + + public static void setDao(Dao dao) { + VirtualChest.dao = dao; + } + @DatabaseField(generatedId = true) private int id; @@ -71,7 +81,7 @@ public class VirtualChest { } try { - return DaoRegistry.getVirtualChestDao().queryForId(id); + return getDao().queryForId(id); } catch (SQLException e) { return null; } @@ -99,7 +109,7 @@ public class VirtualChest { this.inventoryString = Converter.toString(this.inventory); } try { - DaoRegistry.getVirtualChestDao().createOrUpdate(this); + getDao().createOrUpdate(this); } catch (SQLException e) { throw new RuntimeException(e); } @@ -110,15 +120,15 @@ public class VirtualChest { public void delete(){ try { - DaoRegistry.getVirtualChestDao().delete(this); + getDao().delete(this); } catch (SQLException e) { throw new RuntimeException(e); } } public void deleteSelfAndShops(){ - QueryBuilder queryBuilder = DaoRegistry.getShopDao().queryBuilder(); - DeleteBuilder deleteBuilder = DaoRegistry.getShopDao().deleteBuilder(); + QueryBuilder queryBuilder = Shop.getDao().queryBuilder(); + DeleteBuilder deleteBuilder = Shop.getDao().deleteBuilder(); try { queryBuilder .selectColumns("id") @@ -135,7 +145,7 @@ public class VirtualChest { deleteBuilder.where().eq("virtualChestID", this.id); deleteBuilder.delete(); - DaoRegistry.getVirtualChestDao().delete(this); + getDao().delete(this); } catch (SQLException e) { throw new RuntimeException(e); } diff --git a/src/main/java/xyz/soukup/ecoCraftCore/islands/DatabaseIslandLoader.java b/src/main/java/xyz/soukup/ecoCraftCore/islands/DatabaseIslandLoader.java index 93c8b6e..1276880 100644 --- a/src/main/java/xyz/soukup/ecoCraftCore/islands/DatabaseIslandLoader.java +++ b/src/main/java/xyz/soukup/ecoCraftCore/islands/DatabaseIslandLoader.java @@ -3,7 +3,6 @@ import com.infernalsuite.asp.api.exceptions.UnknownWorldException; import com.infernalsuite.asp.api.loaders.SlimeLoader; import com.j256.ormlite.stmt.DeleteBuilder; import xyz.soukup.ecoCraftCore.database.objects.Island; -import xyz.soukup.ecoCraftCore.database.DaoRegistry; import java.io.IOException; import java.sql.SQLException; @@ -19,7 +18,7 @@ public class DatabaseIslandLoader implements SlimeLoader { Island island; try { - island = DaoRegistry.getIslandDao().queryBuilder().where().eq("uuid", worldName).queryForFirst(); + island = Island.getDao().queryBuilder().where().eq("uuid", worldName).queryForFirst(); } catch (SQLException e) { throw new RuntimeException(e); } @@ -34,7 +33,7 @@ public class DatabaseIslandLoader implements SlimeLoader { @Override public boolean worldExists(String worldName) throws IOException { try { - long count = DaoRegistry.getIslandDao().queryBuilder() + long count = Island.getDao().queryBuilder() .setCountOf(true) .where() .eq("uuid", worldName) @@ -52,7 +51,7 @@ public class DatabaseIslandLoader implements SlimeLoader { @Override public void saveWorld(String worldName, byte[] serializedWorld) throws IOException { try { - Island island = DaoRegistry.getIslandDao().queryBuilder().where().eq("uuid", worldName).queryForFirst(); + Island island = Island.getDao().queryBuilder().where().eq("uuid", worldName).queryForFirst(); if (island != null) { island.setData(serializedWorld); @@ -68,7 +67,7 @@ public class DatabaseIslandLoader implements SlimeLoader { @Override public void deleteWorld(String worldName) throws IOException { try { - DeleteBuilder deleteBuilder = DaoRegistry.getIslandDao().deleteBuilder(); + DeleteBuilder deleteBuilder = Island.getDao().deleteBuilder(); deleteBuilder.where().eq("uuid", worldName); deleteBuilder.delete(); @@ -80,7 +79,7 @@ public class DatabaseIslandLoader implements SlimeLoader { @Override public List listWorlds() throws IOException { try { - return DaoRegistry.getIslandDao().queryBuilder() + return Island.getDao().queryBuilder() .selectColumns("uuid") // Only fetch the ID column .query() // This returns Island objects with ONLY the ID field populated .stream() diff --git a/src/main/java/xyz/soukup/ecoCraftCore/islands/IslandAdminCommand.java b/src/main/java/xyz/soukup/ecoCraftCore/islands/IslandAdminCommand.java index 8af3232..b40b410 100644 --- a/src/main/java/xyz/soukup/ecoCraftCore/islands/IslandAdminCommand.java +++ b/src/main/java/xyz/soukup/ecoCraftCore/islands/IslandAdminCommand.java @@ -9,7 +9,6 @@ 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; -import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.NamespacedKey; import org.bukkit.Registry; @@ -17,7 +16,6 @@ import org.bukkit.block.Biome; import org.bukkit.entity.Player; import org.bukkit.persistence.PersistentDataContainer; import org.bukkit.persistence.PersistentDataType; -import xyz.soukup.ecoCraftCore.database.DaoRegistry; import xyz.soukup.ecoCraftCore.database.objects.Island; import xyz.soukup.ecoCraftCore.messages.Messages; @@ -40,7 +38,7 @@ public class IslandAdminCommand { .executes(IslandAdminCommand::teleport) .suggests(((context, builder) -> { try { - QueryBuilder queryBuilder = DaoRegistry.getIslandDao().queryBuilder(); + QueryBuilder queryBuilder = Island.getDao().queryBuilder(); queryBuilder.selectColumns("uuid"); List islands = queryBuilder.query(); for (Island island : islands) { @@ -74,7 +72,7 @@ public class IslandAdminCommand { .then(Commands.argument("uuid", StringArgumentType.word()) .suggests(((context, builder) -> { try { - QueryBuilder queryBuilder = DaoRegistry.getIslandDao().queryBuilder(); + QueryBuilder queryBuilder = Island.getDao().queryBuilder(); queryBuilder.selectColumns("uuid"); List islands = queryBuilder.query(); for (Island island : islands) { @@ -117,7 +115,7 @@ public class IslandAdminCommand { .then(Commands.argument("uuid", StringArgumentType.word()) .suggests((context, builder) -> { try { - QueryBuilder queryBuilder = DaoRegistry.getIslandDao().queryBuilder(); + QueryBuilder queryBuilder = Island.getDao().queryBuilder(); queryBuilder.selectColumns("uuid"); List islands = queryBuilder.query(); for (Island island : islands) { diff --git a/src/main/java/xyz/soukup/ecoCraftCore/islands/IslandManager.java b/src/main/java/xyz/soukup/ecoCraftCore/islands/IslandManager.java index 34e6594..258a099 100644 --- a/src/main/java/xyz/soukup/ecoCraftCore/islands/IslandManager.java +++ b/src/main/java/xyz/soukup/ecoCraftCore/islands/IslandManager.java @@ -17,8 +17,8 @@ import com.j256.ormlite.stmt.UpdateBuilder; import org.bukkit.*; import org.bukkit.entity.Player; import org.bukkit.persistence.PersistentDataType; +import xyz.soukup.ecoCraftCore.database.objects.ActiveServer; import xyz.soukup.ecoCraftCore.database.objects.Island; -import xyz.soukup.ecoCraftCore.database.DaoRegistry; import xyz.soukup.ecoCraftCore.database.objects.Region; import xyz.soukup.ecoCraftCore.database.objects.TeleportRequest; import xyz.soukup.ecoCraftCore.utilities.PDC; @@ -36,7 +36,7 @@ public class IslandManager { private final AdvancedSlimePaperAPI asp = AdvancedSlimePaperAPI.instance(); private final DatabaseIslandLoader databaseLoader = new DatabaseIslandLoader(); public final FileIslandLoader fileLoader = new FileIslandLoader(); - private final Dao dao = DaoRegistry.getIslandDao(); + private final Dao dao = Island.getDao(); public void createIslandTemplate(String uuid, String templateName){ try { @@ -429,7 +429,7 @@ public class IslandManager { PDC.setUniversal(world, "bordery1", z1, PersistentDataType.INTEGER); PDC.setUniversal(world, "bordery2", z2, PersistentDataType.INTEGER); - QueryBuilder queryBuilder = DaoRegistry.getRegionDao().queryBuilder(); + QueryBuilder queryBuilder = Region.getDao().queryBuilder(); try { queryBuilder.where() .eq("island", world.getName()) @@ -455,7 +455,7 @@ public class IslandManager { "LIMIT 1"; GenericRawResults rawResults = - DaoRegistry.getActiveServerDao().queryRaw(query); + ActiveServer.getDao().queryRaw(query); String[] firstResult = rawResults.getFirstResult(); rawResults.close(); diff --git a/src/main/java/xyz/soukup/ecoCraftCore/islands/IslandSelectorCommand.java b/src/main/java/xyz/soukup/ecoCraftCore/islands/IslandSelectorCommand.java index 546e875..1aa62a2 100644 --- a/src/main/java/xyz/soukup/ecoCraftCore/islands/IslandSelectorCommand.java +++ b/src/main/java/xyz/soukup/ecoCraftCore/islands/IslandSelectorCommand.java @@ -17,7 +17,6 @@ import net.kyori.adventure.text.format.TextColor; import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import org.bukkit.Material; import org.bukkit.entity.Player; -import xyz.soukup.ecoCraftCore.database.DaoRegistry; import xyz.soukup.ecoCraftCore.database.objects.Island; import xyz.soukup.ecoCraftCore.database.objects.Region; import xyz.soukup.ecoCraftCore.database.objects.RegionMember; @@ -27,7 +26,6 @@ import xyz.soukup.ecoCraftCore.messages.Messages; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; -import java.util.Objects; public class IslandSelectorCommand { @@ -59,7 +57,7 @@ public class IslandSelectorCommand { } private static List getAllIslands(){ - QueryBuilder queryBuilder = DaoRegistry.getIslandDao().queryBuilder(); + QueryBuilder queryBuilder = Island.getDao().queryBuilder(); queryBuilder.selectColumns("display_name", "uuid", "descritpion", "type"); try { return queryBuilder.query(); @@ -69,7 +67,7 @@ public class IslandSelectorCommand { } private static List getPublicIslands(){ - QueryBuilder queryBuilder = DaoRegistry.getIslandDao().queryBuilder(); + QueryBuilder queryBuilder = Island.getDao().queryBuilder(); queryBuilder.selectColumns("display_name", "uuid", "descritpion", "type"); try { queryBuilder.where().eq("is_public", true); @@ -80,7 +78,7 @@ public class IslandSelectorCommand { } private static List getMyIslands(Player player){ - QueryBuilder queryBuilder = DaoRegistry.getIslandDao().queryBuilder(); + QueryBuilder queryBuilder = Island.getDao().queryBuilder(); queryBuilder.selectColumns("display_name", "uuid", "descritpion", "type"); try { queryBuilder.where().eq("owner", player.getName()).and().eq("owner_type", "player"); @@ -91,16 +89,16 @@ public class IslandSelectorCommand { } private static List getSharedIslands(Player player){ - QueryBuilder memberQb = DaoRegistry.getRegionMemberDao().queryBuilder(); + QueryBuilder memberQb = RegionMember.getDao().queryBuilder(); memberQb.selectColumns("region_id"); try { memberQb.where().eq("member_name", player.getName()).and().eq("member_type", "player"); - QueryBuilder regionQb = DaoRegistry.getRegionDao().queryBuilder(); + QueryBuilder regionQb = Region.getDao().queryBuilder(); regionQb.selectColumns("island"); regionQb.where().in("id", memberQb); - return DaoRegistry.getIslandDao().queryBuilder() + return Island.getDao().queryBuilder() .where() .in("uuid", regionQb) .query(); diff --git a/src/main/java/xyz/soukup/ecoCraftCore/player/TeleportRequestsHandler.java b/src/main/java/xyz/soukup/ecoCraftCore/player/TeleportRequestsHandler.java index 56a7c25..34cabbb 100644 --- a/src/main/java/xyz/soukup/ecoCraftCore/player/TeleportRequestsHandler.java +++ b/src/main/java/xyz/soukup/ecoCraftCore/player/TeleportRequestsHandler.java @@ -1,13 +1,10 @@ package xyz.soukup.ecoCraftCore.player; -import com.google.common.eventbus.DeadEvent; import com.j256.ormlite.stmt.QueryBuilder; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; -import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.player.PlayerJoinEvent; -import xyz.soukup.ecoCraftCore.database.DaoRegistry; import xyz.soukup.ecoCraftCore.database.objects.TeleportRequest; import xyz.soukup.ecoCraftCore.islands.IslandManager; diff --git a/src/main/java/xyz/soukup/ecoCraftCore/regions/RegionAdminCommand.java b/src/main/java/xyz/soukup/ecoCraftCore/regions/RegionAdminCommand.java index a9c9b6d..524c1bc 100644 --- a/src/main/java/xyz/soukup/ecoCraftCore/regions/RegionAdminCommand.java +++ b/src/main/java/xyz/soukup/ecoCraftCore/regions/RegionAdminCommand.java @@ -9,7 +9,6 @@ import io.papermc.paper.command.brigadier.CommandSourceStack; import io.papermc.paper.command.brigadier.Commands; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import xyz.soukup.ecoCraftCore.database.DaoRegistry; import xyz.soukup.ecoCraftCore.database.objects.Region; import xyz.soukup.ecoCraftCore.messages.Messages; @@ -28,7 +27,7 @@ public class RegionAdminCommand { .then(Commands.argument("id", IntegerArgumentType.integer()) .suggests((context, builder) -> { try { - QueryBuilder queryBuilder = DaoRegistry.getRegionDao().queryBuilder(); + QueryBuilder queryBuilder = Region.getDao().queryBuilder(); queryBuilder.selectColumns("id"); List regions = queryBuilder.query(); for (Region region : regions) { diff --git a/src/main/java/xyz/soukup/ecoCraftCore/regions/RegionEvents.java b/src/main/java/xyz/soukup/ecoCraftCore/regions/RegionEvents.java index 7033ea4..254638d 100644 --- a/src/main/java/xyz/soukup/ecoCraftCore/regions/RegionEvents.java +++ b/src/main/java/xyz/soukup/ecoCraftCore/regions/RegionEvents.java @@ -5,7 +5,6 @@ import org.bukkit.NamespacedKey; import org.bukkit.block.Block; import org.bukkit.entity.Entity; import org.bukkit.entity.Item; -import org.bukkit.entity.Minecart; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -307,7 +306,7 @@ public class RegionEvents implements Listener { for (RegionMember regionMember : region.getRegionMembers()){ - if (regionMember.getMembertype().equals("player") && regionMember.getName().equals(name)){ + if (regionMember.getMemberGroup().equals("player") && regionMember.getName().equals(name)){ return true; } } diff --git a/src/main/java/xyz/soukup/ecoCraftCore/regions/RegionManager.java b/src/main/java/xyz/soukup/ecoCraftCore/regions/RegionManager.java index 63c365c..a98bfa7 100644 --- a/src/main/java/xyz/soukup/ecoCraftCore/regions/RegionManager.java +++ b/src/main/java/xyz/soukup/ecoCraftCore/regions/RegionManager.java @@ -30,19 +30,20 @@ public class RegionManager { Region region = new Region(worldName, type, x1, y1, z1, x2, y2, z2); region.save(); - region.addRegionMember(ownerType, owner, "owner"); + region.addRegionMember(ownerType, owner, region.getPermissionGroup("owner")); + return 0; } - public static int addMember(int id, String memberType, String member, String membershipType){ + public static int addMember(int id, String memberType, String member, String permissionGroup){ Region region = Region.findById(id); if (region == null){ return 1; } - region.addRegionMember(memberType, member, membershipType); + region.addRegionMember(memberType, member, region.getPermissionGroup(permissionGroup)); return 0; } @@ -67,7 +68,7 @@ public class RegionManager { for (RegionMember regionMember : region.getRegionMembers()){ - if (regionMember.getMembertype().equals("player") && regionMember.getName().equals(name)){ + if (regionMember.getMemberGroup().equals("player") && regionMember.getName().equals(name)){ return true; } } diff --git a/src/main/resources/messages.yml b/src/main/resources/messages.yml index 1c9a4fc..1cd95d3 100644 --- a/src/main/resources/messages.yml +++ b/src/main/resources/messages.yml @@ -13,6 +13,19 @@ generic: self: "Nemáš dostatek itemů" shop: "Obchod nemá dostatek itemů" region: + permission-groups: + owner: + name: "Majitel" + description: "Může vše co admin a k tomu předat vlastnictví" + admin: + name: "Správce" + description: "Může měnit veškerá nastavení pozemku" + member: + name: "Člen" + description: "Může interagovat s pozemkem" + default: + name: "Výchozí" + description: "Oprávnění, které mají všichni" error: not-marked: "Musíš nejprve označit pozice" not-exist: "Region neexistuje"