- Region Boilerplate

island-experimenty
jakub 2 weeks ago
parent 8002ad6ec8
commit 0b55d67829
  1. 14
      pom.xml
  2. 8
      src/main/java/xyz/soukup/ecoCraftCore/EcoCraftCore.java
  3. 18
      src/main/java/xyz/soukup/ecoCraftCore/database/DaoRegistry.java
  4. 160
      src/main/java/xyz/soukup/ecoCraftCore/database/objects/Region.java
  5. 65
      src/main/java/xyz/soukup/ecoCraftCore/database/objects/RegionMember.java
  6. 5
      src/main/java/xyz/soukup/ecoCraftCore/regions/RegionAdminCommand.java
  7. 36
      src/main/java/xyz/soukup/ecoCraftCore/regions/RegionEvents.java

@ -79,22 +79,10 @@
</plugins> </plugins>
<resources> <resources>
<resource> <resource>
<directory>src/main/resources</directory> <directory>src/main/resources</directory>
<filtering>true</filtering> <filtering>true</filtering>
<includes>
<include>**/*.yml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<includes>
<include>**/*.slime</include>
</includes>
</resource> </resource>
</resources> </resources>
</build> </build>

@ -56,8 +56,10 @@ public final class EcoCraftCore extends JavaPlugin {
this.getLogger().info("plugin starting out"); this.getLogger().info("plugin starting out");
plugin = this; plugin = this;
config = getConfig(); config = getConfig();
this.getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord"); this.getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord");
PacketEvents.setAPI(SpigotPacketEventsBuilder.build(this)); PacketEvents.setAPI(SpigotPacketEventsBuilder.build(this));
@ -65,8 +67,8 @@ public final class EcoCraftCore extends JavaPlugin {
PacketEvents.getAPI().init(); PacketEvents.getAPI().init();
try { try {
plugin.saveConfig();
saveIslandTemplates(); saveIslandTemplates();
saveDefaultConfig();
Messages.init(); Messages.init();
prepareDatabase(); prepareDatabase();
registerCommands(); registerCommands();
@ -195,6 +197,8 @@ public final class EcoCraftCore extends JavaPlugin {
TableUtils.createTableIfNotExists(connectionSource, Account.class); TableUtils.createTableIfNotExists(connectionSource, Account.class);
TableUtils.createTableIfNotExists(connectionSource, Island.class); TableUtils.createTableIfNotExists(connectionSource, Island.class);
TableUtils.createTableIfNotExists(connectionSource, TeleportRequest.class); TableUtils.createTableIfNotExists(connectionSource, TeleportRequest.class);
TableUtils.createTableIfNotExists(connectionSource, Region.class);
TableUtils.createTableIfNotExists(connectionSource, RegionMember.class);
DaoRegistry.setActiveServerDao(DaoManager.createDao(connectionSource, ActiveServer.class)); DaoRegistry.setActiveServerDao(DaoManager.createDao(connectionSource, ActiveServer.class));
DaoRegistry.setTransactionDao(DaoManager.createDao(connectionSource, Transaction.class)); DaoRegistry.setTransactionDao(DaoManager.createDao(connectionSource, Transaction.class));
@ -203,6 +207,8 @@ public final class EcoCraftCore extends JavaPlugin {
DaoRegistry.setVirtualChestDao(DaoManager.createDao(connectionSource, VirtualChest.class)); DaoRegistry.setVirtualChestDao(DaoManager.createDao(connectionSource, VirtualChest.class));
DaoRegistry.setAccountDao(DaoManager.createDao(connectionSource, Account.class)); DaoRegistry.setAccountDao(DaoManager.createDao(connectionSource, Account.class));
DaoRegistry.setTeleportRequestsDao(DaoManager.createDao(connectionSource, TeleportRequest.class)); DaoRegistry.setTeleportRequestsDao(DaoManager.createDao(connectionSource, TeleportRequest.class));
DaoRegistry.setRegionDao(DaoManager.createDao(connectionSource, Region.class));
DaoRegistry.setRegionMemberDao(DaoManager.createDao(connectionSource, RegionMember.class));
ActiveServer activeServer = new ActiveServer(config.getString("server.name")); ActiveServer activeServer = new ActiveServer(config.getString("server.name"));
activeServer.save(); activeServer.save();

@ -12,6 +12,24 @@ public class DaoRegistry {
private static Dao<Island, Integer> islandDao; private static Dao<Island, Integer> islandDao;
private static Dao<TeleportRequest, Integer> teleportRequestsDao; private static Dao<TeleportRequest, Integer> teleportRequestsDao;
private static Dao<ActiveServer, Integer> activeServerDao; 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() { public static Dao<TeleportRequest, Integer> getTeleportRequestsDao() {
return teleportRequestsDao; return teleportRequestsDao;

@ -0,0 +1,160 @@
package xyz.soukup.ecoCraftCore.database.objects;
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 java.util.HashMap;
import java.util.List;
@DatabaseTable(tableName = "regions")
public class Region {
public static final HashMap<String, List<Region>> cache = new HashMap<>();
@DatabaseField(generatedId = true)
private int id;
@DatabaseField(canBeNull = false)
private String island;
@DatabaseField(columnName = "region_type", canBeNull = false)
private int regionType;
@DatabaseField(canBeNull = false)
private int x1;
@DatabaseField(canBeNull = false)
private int y1;
@DatabaseField(canBeNull = false)
private int x2;
@DatabaseField(canBeNull = false)
private int y2;
@ForeignCollectionField(eager = true)
private ForeignCollection<RegionMember> regionMembers;
@DatabaseField()
private Integer value;
public Region() {
}
public Region(String island, int regionType, int x1, int y1, int x2, int y2) {
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);
}
public int getRegionType() {
return regionType;
}
public int getX1() {
return x1;
}
public int getY1() {
return y1;
}
public int getX2() {
return x2;
}
public int getY2() {
return y2;
}
public ForeignCollection<RegionMember> getRegionMembers() {
return regionMembers;
}
public Integer getValue() {
return value;
}
public String getIsland() {
return island;
}
public void setRegionType(int regionType) {
this.regionType = regionType;
}
public void setValue(Integer value) {
this.value = value;
}
public void save(){
try {
DaoRegistry.getRegionDao().createOrUpdate(this);
} catch (Exception e) {
e.printStackTrace();
}
}
public boolean isInside(int x, int y) {
return x >= this.x1 && x <= this.x2 && y >= this.y1 && y <= this.y2;
}
public static Region findById(int id) {
try {
return DaoRegistry.getRegionDao().queryForId(id);
} catch (Exception e) {
return null;
}
}
public static void cacheRegions(String island) {
try {
List<Region> regions = DaoRegistry.getRegionDao().queryBuilder()
.where()
.eq("island", island)
.query();
cache.put(island, regions);
} catch (Exception e) {
}
}
public static Region findRegion(int x, int y, String island) {
Region region = null;
Integer highestType = -1;
if (!cache.containsKey(island)) {
cacheRegions(island);
}
for (Region cachedRegion : cache.get(island)) {
if (!cachedRegion.isInside(x, y)) {
continue;
}
if (highestType >= cachedRegion.getRegionType()){
continue;
}
region = cachedRegion;
}
return region;
}
}

@ -0,0 +1,65 @@
package xyz.soukup.ecoCraftCore.database.objects;
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 {
@DatabaseField(generatedId = true)
private int id;
@DatabaseField(foreign = true, foreignAutoRefresh = true, index = true)
private Region region;
@DatabaseField(columnName = "member_type", canBeNull = false)
private String membertype;
@DatabaseField(columnName = "member_name", canBeNull = false)
private String memberName;
@DatabaseField(columnName = "membership_type", canBeNull = false)
private String membershipType;
public RegionMember(){
}
public RegionMember(Region region, String membertype, String memberName, String membershipType){
this.region = region;
this.membertype = membertype;
this.memberName = memberName;
this.membershipType = membershipType;
}
public Region getRegion() {
return region;
}
public String getMembertype() {
return membertype;
}
public String getName() {
return memberName;
}
public String getMembershipType() {
return membershipType;
}
public void setMembershipType(String membershipType) {
this.membershipType = membershipType;
}
public void save(){
try {
DaoRegistry.getRegionMemberDao().createOrUpdate(this);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}

@ -0,0 +1,5 @@
package xyz.soukup.ecoCraftCore.regions;
public class RegionAdminCommand {
}

@ -0,0 +1,36 @@
package xyz.soukup.ecoCraftCore.regions;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import xyz.soukup.ecoCraftCore.database.objects.Region;
import xyz.soukup.ecoCraftCore.database.objects.RegionMember;
public class RegionEvents implements Listener {
@EventHandler
public void onPlayerInteract(PlayerInteractEvent event){
event.setCancelled(!isRegionMember(event.getClickedBlock().getWorld().getName(), event.getPlayer(), event.getClickedBlock().getX(), event.getClickedBlock().getY()));
}
private boolean isRegionMember(String island, Player player, int x, int y){
Region region = Region.findRegion(x, y, island);
if (region == null){
return false;
}
String name = player.getName();
for (RegionMember regionMember : region.getRegionMembers()){
if (regionMember.getMembertype().equals("player") && regionMember.getName().equals(name)){
return true;
}
}
return false;
}
}
Loading…
Cancel
Save