parent
8002ad6ec8
commit
0b55d67829
7 changed files with 292 additions and 14 deletions
@ -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…
Reference in new issue