-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 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<Island, Integer> updateBuilder = DaoRegistry.getIslandDao().updateBuilder();
UpdateBuilder<Island, Integer> 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<Island, Integer> updateBuilder = DaoRegistry.getIslandDao().updateBuilder();
UpdateBuilder<Island, Integer> 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"));

@ -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;
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<Account, Integer> dao;
public static Dao<Account, Integer> getDao() {
return dao;
}
public static void setDao(Dao<Account, Integer> 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<Account, Integer> builder = DaoRegistry.getAccountDao().updateBuilder();
UpdateBuilder<Account, Integer> 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<Account, Integer> builder = DaoRegistry.getAccountDao().updateBuilder();
UpdateBuilder<Account, Integer> 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<Account, Integer> withdrawBuilder = DaoRegistry.getAccountDao().updateBuilder();
UpdateBuilder<Account, Integer> withdrawBuilder = getDao().updateBuilder();
withdrawBuilder.updateColumnExpression("balance", "balance - " + amount);
withdrawBuilder.where().eq("id", from.getId());
withdrawBuilder.update();
UpdateBuilder<Account, Integer> depositBuilder = DaoRegistry.getAccountDao().updateBuilder();
UpdateBuilder<Account, Integer> 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<Account, Integer> queryBuilder = DaoRegistry.getAccountDao().queryBuilder();
QueryBuilder<Account, Integer> 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<Account, Integer> queryBuilder = DaoRegistry.getAccountDao().queryBuilder();
QueryBuilder<Account, Integer> 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);
}

@ -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<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)
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() {

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

@ -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;
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<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<>();
@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<Region> 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<Region> regions = cache.get(island);
if (regions == null) {
@ -147,17 +186,25 @@ 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) {
return x >= this.x1 && x <= this.x2 && y >= this.y1 && y <= this.y2 && z >= this.z1 && z <= this.z2;
}
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<Region> regions = DaoRegistry.getRegionDao().queryBuilder()
List<Region> 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;
}
}

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

@ -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<Shop, Integer> dao;
public static Dao<Shop, Integer> getDao() {
return dao;
}
public static void setDao(Dao<Shop, Integer> 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);
}

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

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

@ -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<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)
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<Shop, Integer> queryBuilder = DaoRegistry.getShopDao().queryBuilder();
DeleteBuilder<Shop, Integer> deleteBuilder = DaoRegistry.getShopDao().deleteBuilder();
QueryBuilder<Shop, Integer> queryBuilder = Shop.getDao().queryBuilder();
DeleteBuilder<Shop, Integer> 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);
}

@ -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<Island, Integer> deleteBuilder = DaoRegistry.getIslandDao().deleteBuilder();
DeleteBuilder<Island, Integer> deleteBuilder = Island.getDao().deleteBuilder();
deleteBuilder.where().eq("uuid", worldName);
deleteBuilder.delete();
@ -80,7 +79,7 @@ public class DatabaseIslandLoader implements SlimeLoader {
@Override
public List<String> 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()

@ -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<Island, Integer> queryBuilder = DaoRegistry.getIslandDao().queryBuilder();
QueryBuilder<Island, Integer> queryBuilder = Island.getDao().queryBuilder();
queryBuilder.selectColumns("uuid");
List<Island> 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<Island, Integer> queryBuilder = DaoRegistry.getIslandDao().queryBuilder();
QueryBuilder<Island, Integer> queryBuilder = Island.getDao().queryBuilder();
queryBuilder.selectColumns("uuid");
List<Island> 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<Island, Integer> queryBuilder = DaoRegistry.getIslandDao().queryBuilder();
QueryBuilder<Island, Integer> queryBuilder = Island.getDao().queryBuilder();
queryBuilder.selectColumns("uuid");
List<Island> islands = queryBuilder.query();
for (Island island : islands) {

@ -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<Island, Integer> dao = DaoRegistry.getIslandDao();
private final Dao<Island, Integer> 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<Region, Integer> queryBuilder = DaoRegistry.getRegionDao().queryBuilder();
QueryBuilder<Region, Integer> queryBuilder = Region.getDao().queryBuilder();
try {
queryBuilder.where()
.eq("island", world.getName())
@ -455,7 +455,7 @@ public class IslandManager {
"LIMIT 1";
GenericRawResults<String[]> rawResults =
DaoRegistry.getActiveServerDao().queryRaw(query);
ActiveServer.getDao().queryRaw(query);
String[] firstResult = rawResults.getFirstResult();
rawResults.close();

@ -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<Island> getAllIslands(){
QueryBuilder<Island, Integer> queryBuilder = DaoRegistry.getIslandDao().queryBuilder();
QueryBuilder<Island, Integer> 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<Island> getPublicIslands(){
QueryBuilder<Island, Integer> queryBuilder = DaoRegistry.getIslandDao().queryBuilder();
QueryBuilder<Island, Integer> 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<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");
try {
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){
QueryBuilder<RegionMember, Integer> memberQb = DaoRegistry.getRegionMemberDao().queryBuilder();
QueryBuilder<RegionMember, Integer> memberQb = RegionMember.getDao().queryBuilder();
memberQb.selectColumns("region_id");
try {
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.where().in("id", memberQb);
return DaoRegistry.getIslandDao().queryBuilder()
return Island.getDao().queryBuilder()
.where()
.in("uuid", regionQb)
.query();

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

@ -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<Region, Integer> queryBuilder = DaoRegistry.getRegionDao().queryBuilder();
QueryBuilder<Region, Integer> queryBuilder = Region.getDao().queryBuilder();
queryBuilder.selectColumns("id");
List<Region> regions = queryBuilder.query();
for (Region region : regions) {

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

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

@ -13,6 +13,19 @@ generic:
self: "<red>Nemáš dostatek itemů"
shop: "<red>Obchod nemá dostatek itemů"
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:
not-marked: "<red>Musíš nejprve označit pozice"
not-exist: "<red>Region neexistuje"

Loading…
Cancel
Save