-Odstraněn dao manager a funkce předány příslušným objektům

- Přepsání regionů na používání PermissionGroup
region-rework
jakub 3 weeks ago
parent 64850aaf45
commit 87e7962028
  1. 23
      src/main/java/xyz/soukup/ecoCraftCore/EcoCraftCore.java
  2. 89
      src/main/java/xyz/soukup/ecoCraftCore/database/DaoRegistry.java
  3. 35
      src/main/java/xyz/soukup/ecoCraftCore/database/objects/Account.java
  4. 18
      src/main/java/xyz/soukup/ecoCraftCore/database/objects/ActiveServer.java
  5. 19
      src/main/java/xyz/soukup/ecoCraftCore/database/objects/Island.java
  6. 34
      src/main/java/xyz/soukup/ecoCraftCore/database/objects/Permission.java
  7. 158
      src/main/java/xyz/soukup/ecoCraftCore/database/objects/PermissionGroup.java
  8. 87
      src/main/java/xyz/soukup/ecoCraftCore/database/objects/Region.java
  9. 49
      src/main/java/xyz/soukup/ecoCraftCore/database/objects/RegionMember.java
  10. 18
      src/main/java/xyz/soukup/ecoCraftCore/database/objects/Shop.java
  11. 17
      src/main/java/xyz/soukup/ecoCraftCore/database/objects/TeleportRequest.java
  12. 16
      src/main/java/xyz/soukup/ecoCraftCore/database/objects/Transaction.java
  13. 24
      src/main/java/xyz/soukup/ecoCraftCore/database/objects/VirtualChest.java
  14. 11
      src/main/java/xyz/soukup/ecoCraftCore/islands/DatabaseIslandLoader.java
  15. 8
      src/main/java/xyz/soukup/ecoCraftCore/islands/IslandAdminCommand.java
  16. 8
      src/main/java/xyz/soukup/ecoCraftCore/islands/IslandManager.java
  17. 14
      src/main/java/xyz/soukup/ecoCraftCore/islands/IslandSelectorCommand.java
  18. 3
      src/main/java/xyz/soukup/ecoCraftCore/player/TeleportRequestsHandler.java
  19. 3
      src/main/java/xyz/soukup/ecoCraftCore/regions/RegionAdminCommand.java
  20. 3
      src/main/java/xyz/soukup/ecoCraftCore/regions/RegionEvents.java
  21. 9
      src/main/java/xyz/soukup/ecoCraftCore/regions/RegionManager.java
  22. 13
      src/main/resources/messages.yml

@ -42,7 +42,6 @@ import xyz.soukup.ecoCraftCore.database.objects.Transaction;
import io.papermc.paper.plugin.lifecycle.event.types.LifecycleEvents; import io.papermc.paper.plugin.lifecycle.event.types.LifecycleEvents;
import xyz.soukup.ecoCraftCore.database.objects.VirtualChest; import xyz.soukup.ecoCraftCore.database.objects.VirtualChest;
import xyz.soukup.ecoCraftCore.positionMarker.MarkerEvent; import xyz.soukup.ecoCraftCore.positionMarker.MarkerEvent;
import xyz.soukup.ecoCraftCore.database.DaoRegistry;
import xyz.soukup.ecoCraftCore.messages.Messages; import xyz.soukup.ecoCraftCore.messages.Messages;
import xyz.soukup.ecoCraftCore.shop.ShopLogic; import xyz.soukup.ecoCraftCore.shop.ShopLogic;
import xyz.soukup.ecoCraftCore.sign.SignEditCommand; import xyz.soukup.ecoCraftCore.sign.SignEditCommand;
@ -158,7 +157,7 @@ public final class EcoCraftCore extends JavaPlugin {
Bukkit.unloadWorld(world, true); Bukkit.unloadWorld(world, true);
getLogger().info("Unloading world " + world.getName() + " due to inactivity"); getLogger().info("Unloading world " + world.getName() + " due to inactivity");
try { try {
UpdateBuilder<Island, Integer> updateBuilder = DaoRegistry.getIslandDao().updateBuilder(); UpdateBuilder<Island, Integer> updateBuilder = Island.getDao().updateBuilder();
updateBuilder.where().eq("uuid", world.getName()); updateBuilder.where().eq("uuid", world.getName());
updateBuilder.updateColumnValue("active_on", ""); updateBuilder.updateColumnValue("active_on", "");
updateBuilder.update(); updateBuilder.update();
@ -188,7 +187,7 @@ public final class EcoCraftCore extends JavaPlugin {
} }
try { try {
UpdateBuilder<Island, Integer> updateBuilder = DaoRegistry.getIslandDao().updateBuilder(); UpdateBuilder<Island, Integer> updateBuilder = Island.getDao().updateBuilder();
updateBuilder.where().eq("active_on", config.getString("server.name")); updateBuilder.where().eq("active_on", config.getString("server.name"));
updateBuilder.updateColumnValue("active_on", ""); updateBuilder.updateColumnValue("active_on", "");
updateBuilder.update(); updateBuilder.update();
@ -239,15 +238,15 @@ public final class EcoCraftCore extends JavaPlugin {
TableUtils.createTableIfNotExists(connectionSource, Region.class); TableUtils.createTableIfNotExists(connectionSource, Region.class);
TableUtils.createTableIfNotExists(connectionSource, RegionMember.class); TableUtils.createTableIfNotExists(connectionSource, RegionMember.class);
DaoRegistry.setActiveServerDao(DaoManager.createDao(connectionSource, ActiveServer.class)); ActiveServer.setDao(DaoManager.createDao(connectionSource, ActiveServer.class));
DaoRegistry.setTransactionDao(DaoManager.createDao(connectionSource, Transaction.class)); Transaction.setDao(DaoManager.createDao(connectionSource, Transaction.class));
DaoRegistry.setIslandDaoo(DaoManager.createDao(connectionSource, Island.class)); Shop.setDao(DaoManager.createDao(connectionSource, Shop.class));
DaoRegistry.setShopDao(DaoManager.createDao(connectionSource, Shop.class)); VirtualChest.setDao(DaoManager.createDao(connectionSource, VirtualChest.class));
DaoRegistry.setVirtualChestDao(DaoManager.createDao(connectionSource, VirtualChest.class)); Account.setDao(DaoManager.createDao(connectionSource, Account.class));
DaoRegistry.setAccountDao(DaoManager.createDao(connectionSource, Account.class)); Island.setDao(DaoManager.createDao(connectionSource, Island.class));
DaoRegistry.setTeleportRequestsDao(DaoManager.createDao(connectionSource, TeleportRequest.class)); TeleportRequest.setDao(DaoManager.createDao(connectionSource, TeleportRequest.class));
DaoRegistry.setRegionDao(DaoManager.createDao(connectionSource, Region.class)); Region.setDao(DaoManager.createDao(connectionSource, Region.class));
DaoRegistry.setRegionMemberDao(DaoManager.createDao(connectionSource, RegionMember.class)); RegionMember.setDao(DaoManager.createDao(connectionSource, RegionMember.class));
ActiveServer activeServer = new ActiveServer(config.getString("server.name")); ActiveServer activeServer = new ActiveServer(config.getString("server.name"));

@ -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<Shop, Integer> shopDao;
private static Dao<Transaction, Integer> transactionDao;
private static Dao<VirtualChest, Integer> virtualChestDao;
private static Dao<Account, Integer> accountDao;
private static Dao<Island, Integer> islandDao;
private static Dao<TeleportRequest, Integer> teleportRequestsDao;
private static Dao<ActiveServer, Integer> activeServerDao;
private static Dao<Region, Integer> regionDao;
private static Dao<RegionMember, Integer> regionMemberDao;
public static Dao<RegionMember, Integer> getRegionMemberDao() {
return regionMemberDao;
}
public static void setRegionMemberDao(Dao<RegionMember, Integer> regionMemberDao) {
DaoRegistry.regionMemberDao = regionMemberDao;
}
public static Dao<Region, Integer> getRegionDao() {
return regionDao;
}
public static void setRegionDao(Dao<Region, Integer> regionDao) {
DaoRegistry.regionDao = regionDao;
}
public static Dao<TeleportRequest, Integer> getTeleportRequestsDao() {
return teleportRequestsDao;
}
public static void setTeleportRequestsDao(Dao<TeleportRequest, Integer> teleportRequestsDao) {
DaoRegistry.teleportRequestsDao = teleportRequestsDao;
}
public static Dao<ActiveServer, Integer> getActiveServerDao() {
return activeServerDao;
}
public static void setActiveServerDao(Dao<ActiveServer, Integer> activeServerDao) {
DaoRegistry.activeServerDao = activeServerDao;
}
public static Dao<Shop, Integer> getShopDao() {
return shopDao;
}
public static void setShopDao(Dao<Shop, Integer> shopDao) {
DaoRegistry.shopDao = shopDao;
}
public static Dao<Transaction, Integer> getTransactionDao() {
return transactionDao;
}
public static void setTransactionDao(Dao<Transaction, Integer> transactionDao) {
DaoRegistry.transactionDao = transactionDao;
}
public static Dao<VirtualChest, Integer> getVirtualChestDao() {
return virtualChestDao;
}
public static void setVirtualChestDao(Dao<VirtualChest, Integer> virtualChestDao) {
DaoRegistry.virtualChestDao = virtualChestDao;
}
public static Dao<Account, Integer> getAccountDao() {
return accountDao;
}
public static void setAccountDao(Dao<Account, Integer> accountDao) {
DaoRegistry.accountDao = accountDao;
}
public static Dao<Island, Integer> getIslandDao() {
return islandDao;
}
public static void setIslandDaoo(Dao<Island, Integer> islandDao) {
DaoRegistry.islandDao = islandDao;
}
}

@ -1,5 +1,6 @@
package xyz.soukup.ecoCraftCore.database.objects; package xyz.soukup.ecoCraftCore.database.objects;
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.misc.TransactionManager; import com.j256.ormlite.misc.TransactionManager;
import com.j256.ormlite.stmt.QueryBuilder; import com.j256.ormlite.stmt.QueryBuilder;
@ -7,7 +8,6 @@ import com.j256.ormlite.stmt.UpdateBuilder;
import com.j256.ormlite.table.DatabaseTable; import com.j256.ormlite.table.DatabaseTable;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import xyz.soukup.ecoCraftCore.database.DaoRegistry;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.HashMap; import java.util.HashMap;
@ -16,6 +16,19 @@ import static xyz.soukup.ecoCraftCore.EcoCraftCore.connectionSource;
@DatabaseTable(tableName = "accounts") @DatabaseTable(tableName = "accounts")
public class Account { public class Account {
private static Dao<Account, Integer> dao;
public static Dao<Account, Integer> getDao() {
return dao;
}
public static void setDao(Dao<Account, Integer> dao) {
dao = dao;
}
@DatabaseField(generatedId = true) @DatabaseField(generatedId = true)
private int id; private int id;
@ -49,7 +62,7 @@ public class Account {
public float getBalance() { public float getBalance() {
try { try {
Account fresh = DaoRegistry.getAccountDao().queryBuilder() Account fresh = getDao().queryBuilder()
.selectColumns("balance") .selectColumns("balance")
.where().eq("id", this.id) .where().eq("id", this.id)
.queryForFirst(); .queryForFirst();
@ -69,7 +82,7 @@ public class Account {
public void deposit(float amount){ public void deposit(float amount){
try { try {
TransactionManager.callInTransaction(connectionSource, () -> { TransactionManager.callInTransaction(connectionSource, () -> {
UpdateBuilder<Account, Integer> builder = DaoRegistry.getAccountDao().updateBuilder(); UpdateBuilder<Account, Integer> builder = getDao().updateBuilder();
builder.updateColumnExpression("balance", "balance + " + amount); builder.updateColumnExpression("balance", "balance + " + amount);
builder.where().idEq(this.id); builder.where().idEq(this.id);
int updated = builder.update(); int updated = builder.update();
@ -83,7 +96,7 @@ public class Account {
public void withdraw(float amount){ public void withdraw(float amount){
try { try {
TransactionManager.callInTransaction(connectionSource, () -> { TransactionManager.callInTransaction(connectionSource, () -> {
UpdateBuilder<Account, Integer> builder = DaoRegistry.getAccountDao().updateBuilder(); UpdateBuilder<Account, Integer> builder = getDao().updateBuilder();
builder.updateColumnExpression("balance", "balance - " + amount); builder.updateColumnExpression("balance", "balance - " + amount);
builder.where().idEq(this.id); builder.where().idEq(this.id);
return null; return null;
@ -98,12 +111,12 @@ public class Account {
TransactionManager.callInTransaction( TransactionManager.callInTransaction(
connectionSource, connectionSource,
() -> { () -> {
UpdateBuilder<Account, Integer> withdrawBuilder = DaoRegistry.getAccountDao().updateBuilder(); UpdateBuilder<Account, Integer> withdrawBuilder = getDao().updateBuilder();
withdrawBuilder.updateColumnExpression("balance", "balance - " + amount); withdrawBuilder.updateColumnExpression("balance", "balance - " + amount);
withdrawBuilder.where().eq("id", from.getId()); withdrawBuilder.where().eq("id", from.getId());
withdrawBuilder.update(); withdrawBuilder.update();
UpdateBuilder<Account, Integer> depositBuilder = DaoRegistry.getAccountDao().updateBuilder(); UpdateBuilder<Account, Integer> depositBuilder = getDao().updateBuilder();
depositBuilder.updateColumnExpression("balance", "balance + " + amount); depositBuilder.updateColumnExpression("balance", "balance + " + amount);
depositBuilder.where().idEq(to.getId()); depositBuilder.where().idEq(to.getId());
depositBuilder.update(); depositBuilder.update();
@ -124,14 +137,14 @@ public class Account {
return account; return account;
} }
QueryBuilder<Account, Integer> queryBuilder = DaoRegistry.getAccountDao().queryBuilder(); QueryBuilder<Account, Integer> queryBuilder = getDao().queryBuilder();
try { try {
queryBuilder.where() queryBuilder.where()
.eq("type", type) .eq("type", type)
.and() .and()
.eq("owner", owner); .eq("owner", owner);
account = DaoRegistry.getAccountDao().queryForFirst(queryBuilder.prepare()); account = getDao().queryForFirst(queryBuilder.prepare());
if (account == null){ if (account == null){
account = new Account(owner, type); account = new Account(owner, type);
@ -143,19 +156,19 @@ public class Account {
} }
public static Account getOrCreate(Player player){ public static Account getOrCreate(Player player){
QueryBuilder<Account, Integer> queryBuilder = DaoRegistry.getAccountDao().queryBuilder(); QueryBuilder<Account, Integer> queryBuilder = getDao().queryBuilder();
try { try {
queryBuilder.where() queryBuilder.where()
.eq("type", "player") .eq("type", "player")
.and() .and()
.eq("owner", player.getName()); .eq("owner", player.getName());
Account account = DaoRegistry.getAccountDao().queryForFirst(queryBuilder.prepare()); Account account = getDao().queryForFirst(queryBuilder.prepare());
if (account == null){ if (account == null){
account = new Account(player.getName(), "player"); account = new Account(player.getName(), "player");
try { try {
DaoRegistry.getAccountDao().createOrUpdate(account); getDao().createOrUpdate(account);
} catch (SQLException e) { } catch (SQLException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }

@ -1,14 +1,26 @@
package xyz.soukup.ecoCraftCore.database.objects; package xyz.soukup.ecoCraftCore.database.objects;
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable; import com.j256.ormlite.table.DatabaseTable;
import xyz.soukup.ecoCraftCore.database.DaoRegistry;
import java.sql.SQLException; import java.sql.SQLException;
@DatabaseTable(tableName = "active_servers") @DatabaseTable(tableName = "active_servers")
public class ActiveServer { public class ActiveServer {
private static Dao<ActiveServer, Integer> dao;
public static Dao<ActiveServer, Integer> getDao() {
return dao;
}
public static void setDao(Dao<ActiveServer, Integer> dao) {
ActiveServer.dao = dao;
}
@DatabaseField(unique = true, id = true) @DatabaseField(unique = true, id = true)
private String name; private String name;
@ -21,11 +33,11 @@ public class ActiveServer {
} }
public void save() throws SQLException { public void save() throws SQLException {
DaoRegistry.getActiveServerDao().createIfNotExists(this); getDao().createIfNotExists(this);
} }
public void delete() throws SQLException { public void delete() throws SQLException {
DaoRegistry.getActiveServerDao().delete(this); getDao().delete(this);
} }
public String getName() { public String getName() {

@ -1,14 +1,25 @@
package xyz.soukup.ecoCraftCore.database.objects; package xyz.soukup.ecoCraftCore.database.objects;
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.field.DataType; import com.j256.ormlite.field.DataType;
import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable; import com.j256.ormlite.table.DatabaseTable;
import xyz.soukup.ecoCraftCore.database.DaoRegistry;
import java.sql.SQLException; import java.sql.SQLException;
@DatabaseTable(tableName = "islands") @DatabaseTable(tableName = "islands")
public class Island { public class Island {
private static Dao<Island, Integer> dao;
public static Dao<Island, Integer> getDao() {
return dao;
}
public static void setDao(Dao<Island, Integer> dao) {
Island.dao = dao;
}
@DatabaseField(generatedId = true) @DatabaseField(generatedId = true)
private int id; private int id;
@ -103,7 +114,7 @@ public class Island {
try { try {
return DaoRegistry.getIslandDao().queryForId(id); return getDao().queryForId(id);
} catch (SQLException e) { } catch (SQLException e) {
return null; return null;
} }
@ -111,7 +122,7 @@ public class Island {
public static Island findByUuid(String uuid) { public static Island findByUuid(String uuid) {
try { try {
return DaoRegistry.getIslandDao().queryBuilder().where().eq("uuid", uuid).queryForFirst(); return getDao().queryBuilder().where().eq("uuid", uuid).queryForFirst();
} catch (SQLException e) { } catch (SQLException e) {
return null; return null;
} }
@ -128,7 +139,7 @@ public class Island {
this.id = existing.id; this.id = existing.id;
} }
} }
DaoRegistry.getIslandDao().createOrUpdate(this); getDao().createOrUpdate(this);
} catch (SQLException e) { } catch (SQLException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }

@ -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;
}
}

@ -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<PermissionGroup, Integer> dao;
public static void setDao(Dao<PermissionGroup, Integer> dao) {
PermissionGroup.dao = dao;
}
public static Dao<PermissionGroup, Integer> 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);
}
}
}

@ -1,17 +1,31 @@
package xyz.soukup.ecoCraftCore.database.objects; package xyz.soukup.ecoCraftCore.database.objects;
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.dao.ForeignCollection; import com.j256.ormlite.dao.ForeignCollection;
import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.field.ForeignCollectionField; import com.j256.ormlite.field.ForeignCollectionField;
import com.j256.ormlite.table.DatabaseTable; 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.HashMap;
import java.util.List; import java.util.List;
@DatabaseTable(tableName = "regions") @DatabaseTable(tableName = "regions")
public class Region { public class Region {
public static Dao<Region, Integer> dao;
public static void setDao(Dao<Region, Integer> dao) {
Region.dao = dao;
}
public static Dao<Region, Integer> getDao() {
return dao;
}
public static final HashMap<String, List<Region>> cache = new HashMap<>(); public static final HashMap<String, List<Region>> cache = new HashMap<>();
@DatabaseField(generatedId = true) @DatabaseField(generatedId = true)
@ -61,7 +75,33 @@ public class Region {
this.z1 = Math.min(z1, z2); this.z1 = Math.min(z1, z2);
this.z2 = Math.max(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() { public int getId() {
return id; return id;
} }
@ -121,7 +161,7 @@ public class Region {
public void save(){ public void save(){
try { try {
DaoRegistry.getRegionDao().createOrUpdate(this); getDao().createOrUpdate(this);
List<Region> regions = cache.get(island); List<Region> regions = cache.get(island);
if (regions == null) { if (regions == null) {
@ -135,11 +175,10 @@ public class Region {
} }
} }
public void addRegionMember(String memberType, String member, String membershipType){ public void addRegionMember(String memberType, String member, PermissionGroup permissionGroup){
RegionMember regionMember = new RegionMember(this, memberType, member, membershipType); RegionMember regionMember = new RegionMember(this, memberType, member, permissionGroup);
regionMember.save(); regionMember.save();
Region updatedRegion = Region.findById(this.id);
List<Region> regions = cache.get(island); List<Region> regions = cache.get(island);
if (regions == null) { if (regions == null) {
@ -147,8 +186,16 @@ public class Region {
} }
regions.removeIf(region -> region.getId() == this.id); 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) { public boolean isInside(int x, int y, int z) {
@ -157,7 +204,7 @@ public class Region {
public static Region findById(int id) { public static Region findById(int id) {
try { try {
return DaoRegistry.getRegionDao().queryForId(id); return getDao().queryForId(id);
} catch (Exception e) { } catch (Exception e) {
return null; return null;
} }
@ -165,7 +212,7 @@ public class Region {
public static void cacheRegions(String island) { public static void cacheRegions(String island) {
try { try {
List<Region> regions = DaoRegistry.getRegionDao().queryBuilder() List<Region> regions = getDao().queryBuilder()
.where() .where()
.eq("island", island) .eq("island", island)
.query(); .query();
@ -208,6 +255,30 @@ public class Region {
this.z2 = Math.max(z1, z2); 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;
}
} }

@ -1,63 +1,82 @@
package xyz.soukup.ecoCraftCore.database.objects; package xyz.soukup.ecoCraftCore.database.objects;
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable; import com.j256.ormlite.table.DatabaseTable;
import xyz.soukup.ecoCraftCore.database.DaoRegistry;
import java.sql.SQLException; import java.sql.SQLException;
@DatabaseTable(tableName = "region_members") @DatabaseTable(tableName = "region_members")
public class RegionMember { public class RegionMember {
public static Dao<RegionMember, Integer> dao;
public static void setDao(Dao<RegionMember, Integer> dao) {
RegionMember.dao = dao;
}
public static Dao<RegionMember, Integer> getDao() {
return dao;
}
@DatabaseField(generatedId = true) @DatabaseField(generatedId = true)
private int id; private int id;
@DatabaseField(foreign = true, foreignAutoRefresh = true) @DatabaseField(foreign = true, foreignAutoRefresh = true)
private Region region; private Region region;
@DatabaseField(columnName = "member_type", canBeNull = false) @DatabaseField(columnName = "member_group", canBeNull = false)
private String membertype; private String memberGroup;
@DatabaseField(columnName = "member_name", canBeNull = false) @DatabaseField(columnName = "member_name", canBeNull = false)
private String memberName; private String memberName;
@DatabaseField(columnName = "membership_type", canBeNull = false) @DatabaseField(columnName = "permission_group", foreign = true, foreignAutoRefresh = true,canBeNull = false)
private String membershipType; private PermissionGroup permissionGroup;
public RegionMember(){ 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.region = region;
this.membertype = membertype; this.memberGroup = membertype;
this.memberName = memberName; this.memberName = memberName;
this.membershipType = membershipType; this.permissionGroup = permissionGroup;
} }
public Region getRegion() { public Region getRegion() {
return region; return region;
} }
public String getMembertype() { public String getMemberGroup() {
return membertype; return memberGroup;
} }
public String getName() { public String getName() {
return memberName; return memberName;
} }
public String getMembershipType() { public PermissionGroup getPermissionGroup() {
return membershipType; return permissionGroup;
} }
public void setMembershipType(String membershipType) { public void setPermissionGroup(PermissionGroup permissionGroup) {
this.membershipType = membershipType; this.permissionGroup = permissionGroup;
save();
} }
public void save(){ public void save(){
try { 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) { } catch (SQLException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }

@ -1,4 +1,5 @@
package xyz.soukup.ecoCraftCore.database.objects; package xyz.soukup.ecoCraftCore.database.objects;
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable; import com.j256.ormlite.table.DatabaseTable;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
@ -9,7 +10,6 @@ import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.persistence.PersistentDataType; import org.bukkit.persistence.PersistentDataType;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import xyz.soukup.ecoCraftCore.database.DaoRegistry;
import xyz.soukup.ecoCraftCore.utilities.Converter; import xyz.soukup.ecoCraftCore.utilities.Converter;
import xyz.soukup.ecoCraftCore.utilities.PDC; import xyz.soukup.ecoCraftCore.utilities.PDC;
@ -20,6 +20,16 @@ import java.util.HashMap;
@DatabaseTable(tableName = "shops") @DatabaseTable(tableName = "shops")
public class Shop { public class Shop {
private static Dao<Shop, Integer> dao;
public static Dao<Shop, Integer> getDao() {
return dao;
}
public static void setDao(Dao<Shop, Integer> dao) {
dao = dao;
}
@DatabaseField(generatedId = true) @DatabaseField(generatedId = true)
private int id; private int id;
@ -112,7 +122,7 @@ public class Shop {
} }
try { try {
return DaoRegistry.getShopDao().queryForId(id); return getDao().queryForId(id);
} catch (SQLException e) { } catch (SQLException e) {
return null; return null;
} }
@ -124,7 +134,7 @@ public class Shop {
public void save(){ public void save(){
try { try {
DaoRegistry.getShopDao().createOrUpdate(this); getDao().createOrUpdate(this);
} catch (SQLException e) { } catch (SQLException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
@ -135,7 +145,7 @@ public class Shop {
public void delete(){ public void delete(){
try { try {
cache.remove(this.id); cache.remove(this.id);
DaoRegistry.getShopDao().delete(this); getDao().delete(this);
} catch (SQLException e) { } catch (SQLException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }

@ -1,15 +1,24 @@
package xyz.soukup.ecoCraftCore.database.objects; package xyz.soukup.ecoCraftCore.database.objects;
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable; import com.j256.ormlite.table.DatabaseTable;
import org.bukkit.Location;
import xyz.soukup.ecoCraftCore.database.DaoRegistry;
import java.sql.SQLException; import java.sql.SQLException;
@DatabaseTable(tableName = "teleport_requests") @DatabaseTable(tableName = "teleport_requests")
public class TeleportRequest { public class TeleportRequest {
public static Dao<TeleportRequest, Integer> dao;
public static void setDao(Dao<TeleportRequest, Integer> dao) {
TeleportRequest.dao = dao;
}
public static Dao<TeleportRequest, Integer> getDao() {
return dao;
}
@DatabaseField(unique = true, id = true) @DatabaseField(unique = true, id = true)
private String player; private String player;
@ -87,10 +96,10 @@ public class TeleportRequest {
} }
public void save() throws SQLException { public void save() throws SQLException {
DaoRegistry.getTeleportRequestsDao().createOrUpdate(this); getDao().createOrUpdate(this);
} }
public void delete() throws SQLException { public void delete() throws SQLException {
DaoRegistry.getTeleportRequestsDao().delete(this); getDao().delete(this);
} }
} }

@ -1,8 +1,8 @@
package xyz.soukup.ecoCraftCore.database.objects; package xyz.soukup.ecoCraftCore.database.objects;
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable; import com.j256.ormlite.table.DatabaseTable;
import xyz.soukup.ecoCraftCore.database.DaoRegistry;
import java.sql.SQLException; import java.sql.SQLException;
import java.sql.Timestamp; import java.sql.Timestamp;
@ -10,6 +10,16 @@ import java.sql.Timestamp;
@DatabaseTable(tableName = "transactions") @DatabaseTable(tableName = "transactions")
public class Transaction { public class Transaction {
public static Dao<Transaction, Integer> dao;
public static void setDao(Dao<Transaction, Integer> dao) {
Transaction.dao = dao;
}
public static Dao<Transaction, Integer> getDao() {
return dao;
}
@DatabaseField(generatedId = true) @DatabaseField(generatedId = true)
private long id; 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); Account.transferFunds(Account.getOrCreate(this.senderType, this.sender), Account.getOrCreate(this.receiverType, this.receiver), this.amount);
try { try {
DaoRegistry.getTransactionDao().createOrUpdate(this); getDao().createOrUpdate(this);
} catch (SQLException e) { } catch (SQLException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
@ -66,7 +76,7 @@ public class Transaction {
public static Transaction findById(int id) { public static Transaction findById(int id) {
try { try {
return DaoRegistry.getTransactionDao().queryForId(id); return getDao().queryForId(id);
} catch (SQLException e) { } catch (SQLException e) {
return null; return null;
} }

@ -1,5 +1,6 @@
package xyz.soukup.ecoCraftCore.database.objects; package xyz.soukup.ecoCraftCore.database.objects;
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.field.DataType; import com.j256.ormlite.field.DataType;
import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.stmt.DeleteBuilder; import com.j256.ormlite.stmt.DeleteBuilder;
@ -8,7 +9,6 @@ import com.j256.ormlite.table.DatabaseTable;
import org.bukkit.block.Chest; import org.bukkit.block.Chest;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import xyz.soukup.ecoCraftCore.database.DaoRegistry;
import xyz.soukup.ecoCraftCore.inventory.InventoryUtils; import xyz.soukup.ecoCraftCore.inventory.InventoryUtils;
import xyz.soukup.ecoCraftCore.utilities.Converter; import xyz.soukup.ecoCraftCore.utilities.Converter;
import xyz.soukup.ecoCraftCore.utilities.PDC; import xyz.soukup.ecoCraftCore.utilities.PDC;
@ -21,6 +21,16 @@ import java.util.List;
@DatabaseTable(tableName = "virtual_chests") @DatabaseTable(tableName = "virtual_chests")
public class VirtualChest { public class VirtualChest {
private static Dao<VirtualChest, Integer> dao;
public static Dao<VirtualChest, Integer> getDao() {
return dao;
}
public static void setDao(Dao<VirtualChest, Integer> dao) {
VirtualChest.dao = dao;
}
@DatabaseField(generatedId = true) @DatabaseField(generatedId = true)
private int id; private int id;
@ -71,7 +81,7 @@ public class VirtualChest {
} }
try { try {
return DaoRegistry.getVirtualChestDao().queryForId(id); return getDao().queryForId(id);
} catch (SQLException e) { } catch (SQLException e) {
return null; return null;
} }
@ -99,7 +109,7 @@ public class VirtualChest {
this.inventoryString = Converter.toString(this.inventory); this.inventoryString = Converter.toString(this.inventory);
} }
try { try {
DaoRegistry.getVirtualChestDao().createOrUpdate(this); getDao().createOrUpdate(this);
} catch (SQLException e) { } catch (SQLException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
@ -110,15 +120,15 @@ public class VirtualChest {
public void delete(){ public void delete(){
try { try {
DaoRegistry.getVirtualChestDao().delete(this); getDao().delete(this);
} catch (SQLException e) { } catch (SQLException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
} }
public void deleteSelfAndShops(){ public void deleteSelfAndShops(){
QueryBuilder<Shop, Integer> queryBuilder = DaoRegistry.getShopDao().queryBuilder(); QueryBuilder<Shop, Integer> queryBuilder = Shop.getDao().queryBuilder();
DeleteBuilder<Shop, Integer> deleteBuilder = DaoRegistry.getShopDao().deleteBuilder(); DeleteBuilder<Shop, Integer> deleteBuilder = Shop.getDao().deleteBuilder();
try { try {
queryBuilder queryBuilder
.selectColumns("id") .selectColumns("id")
@ -135,7 +145,7 @@ public class VirtualChest {
deleteBuilder.where().eq("virtualChestID", this.id); deleteBuilder.where().eq("virtualChestID", this.id);
deleteBuilder.delete(); deleteBuilder.delete();
DaoRegistry.getVirtualChestDao().delete(this); getDao().delete(this);
} catch (SQLException e) { } catch (SQLException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }

@ -3,7 +3,6 @@ import com.infernalsuite.asp.api.exceptions.UnknownWorldException;
import com.infernalsuite.asp.api.loaders.SlimeLoader; import com.infernalsuite.asp.api.loaders.SlimeLoader;
import com.j256.ormlite.stmt.DeleteBuilder; import com.j256.ormlite.stmt.DeleteBuilder;
import xyz.soukup.ecoCraftCore.database.objects.Island; import xyz.soukup.ecoCraftCore.database.objects.Island;
import xyz.soukup.ecoCraftCore.database.DaoRegistry;
import java.io.IOException; import java.io.IOException;
import java.sql.SQLException; import java.sql.SQLException;
@ -19,7 +18,7 @@ public class DatabaseIslandLoader implements SlimeLoader {
Island island; Island island;
try { try {
island = DaoRegistry.getIslandDao().queryBuilder().where().eq("uuid", worldName).queryForFirst(); island = Island.getDao().queryBuilder().where().eq("uuid", worldName).queryForFirst();
} catch (SQLException e) { } catch (SQLException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
@ -34,7 +33,7 @@ public class DatabaseIslandLoader implements SlimeLoader {
@Override @Override
public boolean worldExists(String worldName) throws IOException { public boolean worldExists(String worldName) throws IOException {
try { try {
long count = DaoRegistry.getIslandDao().queryBuilder() long count = Island.getDao().queryBuilder()
.setCountOf(true) .setCountOf(true)
.where() .where()
.eq("uuid", worldName) .eq("uuid", worldName)
@ -52,7 +51,7 @@ public class DatabaseIslandLoader implements SlimeLoader {
@Override @Override
public void saveWorld(String worldName, byte[] serializedWorld) throws IOException { public void saveWorld(String worldName, byte[] serializedWorld) throws IOException {
try { try {
Island island = DaoRegistry.getIslandDao().queryBuilder().where().eq("uuid", worldName).queryForFirst(); Island island = Island.getDao().queryBuilder().where().eq("uuid", worldName).queryForFirst();
if (island != null) { if (island != null) {
island.setData(serializedWorld); island.setData(serializedWorld);
@ -68,7 +67,7 @@ public class DatabaseIslandLoader implements SlimeLoader {
@Override @Override
public void deleteWorld(String worldName) throws IOException { public void deleteWorld(String worldName) throws IOException {
try { try {
DeleteBuilder<Island, Integer> deleteBuilder = DaoRegistry.getIslandDao().deleteBuilder(); DeleteBuilder<Island, Integer> deleteBuilder = Island.getDao().deleteBuilder();
deleteBuilder.where().eq("uuid", worldName); deleteBuilder.where().eq("uuid", worldName);
deleteBuilder.delete(); deleteBuilder.delete();
@ -80,7 +79,7 @@ public class DatabaseIslandLoader implements SlimeLoader {
@Override @Override
public List<String> listWorlds() throws IOException { public List<String> listWorlds() throws IOException {
try { try {
return DaoRegistry.getIslandDao().queryBuilder() return Island.getDao().queryBuilder()
.selectColumns("uuid") // Only fetch the ID column .selectColumns("uuid") // Only fetch the ID column
.query() // This returns Island objects with ONLY the ID field populated .query() // This returns Island objects with ONLY the ID field populated
.stream() .stream()

@ -9,7 +9,6 @@ import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import com.mojang.brigadier.context.CommandContext; import com.mojang.brigadier.context.CommandContext;
import io.papermc.paper.command.brigadier.CommandSourceStack; import io.papermc.paper.command.brigadier.CommandSourceStack;
import io.papermc.paper.command.brigadier.Commands; import io.papermc.paper.command.brigadier.Commands;
import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.NamespacedKey; import org.bukkit.NamespacedKey;
import org.bukkit.Registry; import org.bukkit.Registry;
@ -17,7 +16,6 @@ import org.bukkit.block.Biome;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.persistence.PersistentDataContainer; import org.bukkit.persistence.PersistentDataContainer;
import org.bukkit.persistence.PersistentDataType; import org.bukkit.persistence.PersistentDataType;
import xyz.soukup.ecoCraftCore.database.DaoRegistry;
import xyz.soukup.ecoCraftCore.database.objects.Island; import xyz.soukup.ecoCraftCore.database.objects.Island;
import xyz.soukup.ecoCraftCore.messages.Messages; import xyz.soukup.ecoCraftCore.messages.Messages;
@ -40,7 +38,7 @@ public class IslandAdminCommand {
.executes(IslandAdminCommand::teleport) .executes(IslandAdminCommand::teleport)
.suggests(((context, builder) -> { .suggests(((context, builder) -> {
try { try {
QueryBuilder<Island, Integer> queryBuilder = DaoRegistry.getIslandDao().queryBuilder(); QueryBuilder<Island, Integer> queryBuilder = Island.getDao().queryBuilder();
queryBuilder.selectColumns("uuid"); queryBuilder.selectColumns("uuid");
List<Island> islands = queryBuilder.query(); List<Island> islands = queryBuilder.query();
for (Island island : islands) { for (Island island : islands) {
@ -74,7 +72,7 @@ public class IslandAdminCommand {
.then(Commands.argument("uuid", StringArgumentType.word()) .then(Commands.argument("uuid", StringArgumentType.word())
.suggests(((context, builder) -> { .suggests(((context, builder) -> {
try { try {
QueryBuilder<Island, Integer> queryBuilder = DaoRegistry.getIslandDao().queryBuilder(); QueryBuilder<Island, Integer> queryBuilder = Island.getDao().queryBuilder();
queryBuilder.selectColumns("uuid"); queryBuilder.selectColumns("uuid");
List<Island> islands = queryBuilder.query(); List<Island> islands = queryBuilder.query();
for (Island island : islands) { for (Island island : islands) {
@ -117,7 +115,7 @@ public class IslandAdminCommand {
.then(Commands.argument("uuid", StringArgumentType.word()) .then(Commands.argument("uuid", StringArgumentType.word())
.suggests((context, builder) -> { .suggests((context, builder) -> {
try { try {
QueryBuilder<Island, Integer> queryBuilder = DaoRegistry.getIslandDao().queryBuilder(); QueryBuilder<Island, Integer> queryBuilder = Island.getDao().queryBuilder();
queryBuilder.selectColumns("uuid"); queryBuilder.selectColumns("uuid");
List<Island> islands = queryBuilder.query(); List<Island> islands = queryBuilder.query();
for (Island island : islands) { for (Island island : islands) {

@ -17,8 +17,8 @@ import com.j256.ormlite.stmt.UpdateBuilder;
import org.bukkit.*; import org.bukkit.*;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.persistence.PersistentDataType; import org.bukkit.persistence.PersistentDataType;
import xyz.soukup.ecoCraftCore.database.objects.ActiveServer;
import xyz.soukup.ecoCraftCore.database.objects.Island; 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.Region;
import xyz.soukup.ecoCraftCore.database.objects.TeleportRequest; import xyz.soukup.ecoCraftCore.database.objects.TeleportRequest;
import xyz.soukup.ecoCraftCore.utilities.PDC; import xyz.soukup.ecoCraftCore.utilities.PDC;
@ -36,7 +36,7 @@ public class IslandManager {
private final AdvancedSlimePaperAPI asp = AdvancedSlimePaperAPI.instance(); private final AdvancedSlimePaperAPI asp = AdvancedSlimePaperAPI.instance();
private final DatabaseIslandLoader databaseLoader = new DatabaseIslandLoader(); private final DatabaseIslandLoader databaseLoader = new DatabaseIslandLoader();
public final FileIslandLoader fileLoader = new FileIslandLoader(); public final FileIslandLoader fileLoader = new FileIslandLoader();
private final Dao<Island, Integer> dao = DaoRegistry.getIslandDao(); private final Dao<Island, Integer> dao = Island.getDao();
public void createIslandTemplate(String uuid, String templateName){ public void createIslandTemplate(String uuid, String templateName){
try { try {
@ -429,7 +429,7 @@ public class IslandManager {
PDC.setUniversal(world, "bordery1", z1, PersistentDataType.INTEGER); PDC.setUniversal(world, "bordery1", z1, PersistentDataType.INTEGER);
PDC.setUniversal(world, "bordery2", z2, PersistentDataType.INTEGER); PDC.setUniversal(world, "bordery2", z2, PersistentDataType.INTEGER);
QueryBuilder<Region, Integer> queryBuilder = DaoRegistry.getRegionDao().queryBuilder(); QueryBuilder<Region, Integer> queryBuilder = Region.getDao().queryBuilder();
try { try {
queryBuilder.where() queryBuilder.where()
.eq("island", world.getName()) .eq("island", world.getName())
@ -455,7 +455,7 @@ public class IslandManager {
"LIMIT 1"; "LIMIT 1";
GenericRawResults<String[]> rawResults = GenericRawResults<String[]> rawResults =
DaoRegistry.getActiveServerDao().queryRaw(query); ActiveServer.getDao().queryRaw(query);
String[] firstResult = rawResults.getFirstResult(); String[] firstResult = rawResults.getFirstResult();
rawResults.close(); rawResults.close();

@ -17,7 +17,6 @@ import net.kyori.adventure.text.format.TextColor;
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import xyz.soukup.ecoCraftCore.database.DaoRegistry;
import xyz.soukup.ecoCraftCore.database.objects.Island; import xyz.soukup.ecoCraftCore.database.objects.Island;
import xyz.soukup.ecoCraftCore.database.objects.Region; import xyz.soukup.ecoCraftCore.database.objects.Region;
import xyz.soukup.ecoCraftCore.database.objects.RegionMember; import xyz.soukup.ecoCraftCore.database.objects.RegionMember;
@ -27,7 +26,6 @@ import xyz.soukup.ecoCraftCore.messages.Messages;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects;
public class IslandSelectorCommand { public class IslandSelectorCommand {
@ -59,7 +57,7 @@ public class IslandSelectorCommand {
} }
private static List<Island> getAllIslands(){ private static List<Island> getAllIslands(){
QueryBuilder<Island, Integer> queryBuilder = DaoRegistry.getIslandDao().queryBuilder(); QueryBuilder<Island, Integer> queryBuilder = Island.getDao().queryBuilder();
queryBuilder.selectColumns("display_name", "uuid", "descritpion", "type"); queryBuilder.selectColumns("display_name", "uuid", "descritpion", "type");
try { try {
return queryBuilder.query(); return queryBuilder.query();
@ -69,7 +67,7 @@ public class IslandSelectorCommand {
} }
private static List<Island> getPublicIslands(){ private static List<Island> getPublicIslands(){
QueryBuilder<Island, Integer> queryBuilder = DaoRegistry.getIslandDao().queryBuilder(); QueryBuilder<Island, Integer> queryBuilder = Island.getDao().queryBuilder();
queryBuilder.selectColumns("display_name", "uuid", "descritpion", "type"); queryBuilder.selectColumns("display_name", "uuid", "descritpion", "type");
try { try {
queryBuilder.where().eq("is_public", true); queryBuilder.where().eq("is_public", true);
@ -80,7 +78,7 @@ public class IslandSelectorCommand {
} }
private static List<Island> getMyIslands(Player player){ private static List<Island> getMyIslands(Player player){
QueryBuilder<Island, Integer> queryBuilder = DaoRegistry.getIslandDao().queryBuilder(); QueryBuilder<Island, Integer> queryBuilder = Island.getDao().queryBuilder();
queryBuilder.selectColumns("display_name", "uuid", "descritpion", "type"); queryBuilder.selectColumns("display_name", "uuid", "descritpion", "type");
try { try {
queryBuilder.where().eq("owner", player.getName()).and().eq("owner_type", "player"); queryBuilder.where().eq("owner", player.getName()).and().eq("owner_type", "player");
@ -91,16 +89,16 @@ public class IslandSelectorCommand {
} }
private static List<Island> getSharedIslands(Player player){ private static List<Island> getSharedIslands(Player player){
QueryBuilder<RegionMember, Integer> memberQb = DaoRegistry.getRegionMemberDao().queryBuilder(); QueryBuilder<RegionMember, Integer> memberQb = RegionMember.getDao().queryBuilder();
memberQb.selectColumns("region_id"); memberQb.selectColumns("region_id");
try { try {
memberQb.where().eq("member_name", player.getName()).and().eq("member_type", "player"); memberQb.where().eq("member_name", player.getName()).and().eq("member_type", "player");
QueryBuilder<Region, Integer> regionQb = DaoRegistry.getRegionDao().queryBuilder(); QueryBuilder<Region, Integer> regionQb = Region.getDao().queryBuilder();
regionQb.selectColumns("island"); regionQb.selectColumns("island");
regionQb.where().in("id", memberQb); regionQb.where().in("id", memberQb);
return DaoRegistry.getIslandDao().queryBuilder() return Island.getDao().queryBuilder()
.where() .where()
.in("uuid", regionQb) .in("uuid", regionQb)
.query(); .query();

@ -1,13 +1,10 @@
package xyz.soukup.ecoCraftCore.player; package xyz.soukup.ecoCraftCore.player;
import com.google.common.eventbus.DeadEvent;
import com.j256.ormlite.stmt.QueryBuilder; import com.j256.ormlite.stmt.QueryBuilder;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerJoinEvent;
import xyz.soukup.ecoCraftCore.database.DaoRegistry;
import xyz.soukup.ecoCraftCore.database.objects.TeleportRequest; import xyz.soukup.ecoCraftCore.database.objects.TeleportRequest;
import xyz.soukup.ecoCraftCore.islands.IslandManager; import xyz.soukup.ecoCraftCore.islands.IslandManager;

@ -9,7 +9,6 @@ import io.papermc.paper.command.brigadier.CommandSourceStack;
import io.papermc.paper.command.brigadier.Commands; import io.papermc.paper.command.brigadier.Commands;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import xyz.soukup.ecoCraftCore.database.DaoRegistry;
import xyz.soukup.ecoCraftCore.database.objects.Region; import xyz.soukup.ecoCraftCore.database.objects.Region;
import xyz.soukup.ecoCraftCore.messages.Messages; import xyz.soukup.ecoCraftCore.messages.Messages;
@ -28,7 +27,7 @@ public class RegionAdminCommand {
.then(Commands.argument("id", IntegerArgumentType.integer()) .then(Commands.argument("id", IntegerArgumentType.integer())
.suggests((context, builder) -> { .suggests((context, builder) -> {
try { try {
QueryBuilder<Region, Integer> queryBuilder = DaoRegistry.getRegionDao().queryBuilder(); QueryBuilder<Region, Integer> queryBuilder = Region.getDao().queryBuilder();
queryBuilder.selectColumns("id"); queryBuilder.selectColumns("id");
List<Region> regions = queryBuilder.query(); List<Region> regions = queryBuilder.query();
for (Region region : regions) { for (Region region : regions) {

@ -5,7 +5,6 @@ import org.bukkit.NamespacedKey;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.Item; import org.bukkit.entity.Item;
import org.bukkit.entity.Minecart;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
@ -307,7 +306,7 @@ public class RegionEvents implements Listener {
for (RegionMember regionMember : region.getRegionMembers()){ 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; return true;
} }
} }

@ -30,19 +30,20 @@ public class RegionManager {
Region region = new Region(worldName, type, x1, y1, z1, x2, y2, z2); Region region = new Region(worldName, type, x1, y1, z1, x2, y2, z2);
region.save(); region.save();
region.addRegionMember(ownerType, owner, "owner"); region.addRegionMember(ownerType, owner, region.getPermissionGroup("owner"));
return 0; 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); Region region = Region.findById(id);
if (region == null){ if (region == null){
return 1; return 1;
} }
region.addRegionMember(memberType, member, membershipType); region.addRegionMember(memberType, member, region.getPermissionGroup(permissionGroup));
return 0; return 0;
} }
@ -67,7 +68,7 @@ public class RegionManager {
for (RegionMember regionMember : region.getRegionMembers()){ 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; return true;
} }
} }

@ -13,6 +13,19 @@ generic:
self: "<red>Nemáš dostatek itemů" self: "<red>Nemáš dostatek itemů"
shop: "<red>Obchod nemá dostatek itemů" shop: "<red>Obchod nemá dostatek itemů"
region: region:
permission-groups:
owner:
name: "<red>Majitel"
description: "<gray>Může vše co admin a k tomu předat vlastnictví"
admin:
name: "<yellow>Správce"
description: "<gray>Může měnit veškerá nastavení pozemku"
member:
name: "<green>Člen"
description: "<gray>Může interagovat s pozemkem"
default:
name: "<gray>Výchozí"
description: "<gray>Oprávnění, které mají všichni"
error: error:
not-marked: "<red>Musíš nejprve označit pozice" not-marked: "<red>Musíš nejprve označit pozice"
not-exist: "<red>Region neexistuje" not-exist: "<red>Region neexistuje"

Loading…
Cancel
Save