read set perms from griefpreventiondata, add ability to list other peoples claims
This commit is contained in:
parent
fdab079aed
commit
0f8c813c71
@ -30,7 +30,6 @@ public class Claim {
|
|||||||
private int minX, minZ, maxX, maxZ, minY;
|
private int minX, minZ, maxX, maxZ, minY;
|
||||||
|
|
||||||
private UUID owner;
|
private UUID owner;
|
||||||
private boolean adminClaim;
|
|
||||||
|
|
||||||
private UUID claimID;
|
private UUID claimID;
|
||||||
private final EnumMap<EnumPermission, Boolean> globalPerm = Maps.newEnumMap(EnumPermission.class);
|
private final EnumMap<EnumPermission, Boolean> globalPerm = Maps.newEnumMap(EnumPermission.class);
|
||||||
@ -66,7 +65,7 @@ public class Claim {
|
|||||||
this.minY = Math.max(0, minY);
|
this.minY = Math.max(0, minY);
|
||||||
this.owner = creator;
|
this.owner = creator;
|
||||||
this.world = world;
|
this.world = world;
|
||||||
this.setDirty();
|
this.setDirty(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Claim fromJson(JsonObject obj, UUID owner, ServerWorld world) {
|
public static Claim fromJson(JsonObject obj, UUID owner, ServerWorld world) {
|
||||||
@ -77,12 +76,12 @@ public class Claim {
|
|||||||
|
|
||||||
public void setClaimID(UUID uuid) {
|
public void setClaimID(UUID uuid) {
|
||||||
this.claimID = uuid;
|
this.claimID = uuid;
|
||||||
this.setDirty();
|
this.setDirty(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void extendDownwards(BlockPos pos){
|
public void extendDownwards(BlockPos pos){
|
||||||
this.minY = pos.getY();
|
this.minY = pos.getY();
|
||||||
this.setDirty();
|
this.setDirty(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public UUID getClaimID() {
|
public UUID getClaimID() {
|
||||||
@ -110,17 +109,27 @@ public class Claim {
|
|||||||
this.maxZ = claim.maxZ;
|
this.maxZ = claim.maxZ;
|
||||||
this.minY = claim.minY;
|
this.minY = claim.minY;
|
||||||
this.removed = false;
|
this.removed = false;
|
||||||
this.setDirty();
|
this.setDirty(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void toggleAdminClaim(boolean flag) {
|
public void toggleAdminClaim(ServerPlayerEntity player, boolean flag) {
|
||||||
this.adminClaim = flag;
|
if(!flag)
|
||||||
this.subClaims.forEach(claim->claim.adminClaim = flag);
|
this.transferOwner(player);
|
||||||
this.setDirty();
|
else {
|
||||||
|
this.owner = null;
|
||||||
|
this.subClaims.forEach(claim -> claim.owner = null);
|
||||||
|
}
|
||||||
|
this.setDirty(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isAdminClaim(){
|
public boolean isAdminClaim(){
|
||||||
return this.adminClaim;
|
return this.owner==null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void transferOwner(ServerPlayerEntity player){
|
||||||
|
this.owner = player.getUuid();
|
||||||
|
this.subClaims.forEach(claim->claim.owner = player.getUuid());
|
||||||
|
this.setDirty(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getPlane() {
|
public int getPlane() {
|
||||||
@ -175,7 +184,7 @@ public class Claim {
|
|||||||
if (player.getUuid().equals(this.owner))
|
if (player.getUuid().equals(this.owner))
|
||||||
return true;
|
return true;
|
||||||
PlayerClaimData data = PlayerClaimData.get(player);
|
PlayerClaimData data = PlayerClaimData.get(player);
|
||||||
if ((this.adminClaim && player.hasPermissionLevel(2)) || data.isAdminIgnoreClaim())
|
if ((this.isAdminClaim() && player.hasPermissionLevel(2)) || data.isAdminIgnoreClaim())
|
||||||
return true;
|
return true;
|
||||||
for (Claim claim : this.subClaims) {
|
for (Claim claim : this.subClaims) {
|
||||||
if (claim.insideClaim(pos)) {
|
if (claim.insideClaim(pos)) {
|
||||||
@ -238,7 +247,7 @@ public class Claim {
|
|||||||
sub.parent = this.claimID;
|
sub.parent = this.claimID;
|
||||||
sub.parentClaim = this;
|
sub.parentClaim = this;
|
||||||
this.subClaims.add(sub);
|
this.subClaims.add(sub);
|
||||||
this.setDirty();
|
this.setDirty(true);
|
||||||
}
|
}
|
||||||
return conflicts;
|
return conflicts;
|
||||||
}
|
}
|
||||||
@ -248,7 +257,7 @@ public class Claim {
|
|||||||
claim.parent = this.claimID;
|
claim.parent = this.claimID;
|
||||||
claim.parentClaim = this;
|
claim.parentClaim = this;
|
||||||
this.subClaims.add(claim);
|
this.subClaims.add(claim);
|
||||||
this.setDirty();
|
this.setDirty(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Claim getSubClaim(BlockPos pos) {
|
public Claim getSubClaim(BlockPos pos) {
|
||||||
@ -260,7 +269,7 @@ public class Claim {
|
|||||||
|
|
||||||
public boolean deleteSubClaim(Claim claim) {
|
public boolean deleteSubClaim(Claim claim) {
|
||||||
claim.remove();
|
claim.remove();
|
||||||
this.setDirty();
|
this.setDirty(true);
|
||||||
return this.subClaims.remove(claim);
|
return this.subClaims.remove(claim);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -278,22 +287,22 @@ public class Claim {
|
|||||||
conflicts.add(other);
|
conflicts.add(other);
|
||||||
if (conflicts.isEmpty()) {
|
if (conflicts.isEmpty()) {
|
||||||
claim.copySizes(newClaim);
|
claim.copySizes(newClaim);
|
||||||
this.setDirty();
|
this.setDirty(true);
|
||||||
}
|
}
|
||||||
return conflicts;
|
return conflicts;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean setPlayerGroup(UUID player, String group, boolean force) {
|
public boolean setPlayerGroup(UUID player, String group, boolean force) {
|
||||||
if (this.owner.equals(player))
|
if (player.equals(this.owner))
|
||||||
return false;
|
return false;
|
||||||
if (group == null) {
|
if (group == null) {
|
||||||
this.playersGroups.remove(player);
|
this.playersGroups.remove(player);
|
||||||
this.setDirty();
|
this.setDirty(true);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (!this.playersGroups.containsKey(player) || force) {
|
if (!this.playersGroups.containsKey(player) || force) {
|
||||||
this.playersGroups.put(player, group);
|
this.playersGroups.put(player, group);
|
||||||
this.setDirty();
|
this.setDirty(true);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -322,17 +331,22 @@ public class Claim {
|
|||||||
this.globalPerm.remove(toggle);
|
this.globalPerm.remove(toggle);
|
||||||
else
|
else
|
||||||
this.globalPerm.put(toggle, mode == 1);
|
this.globalPerm.put(toggle, mode == 1);
|
||||||
this.setDirty();
|
this.setDirty(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean editPerms(ServerPlayerEntity player, String group, EnumPermission perm, int mode) {
|
||||||
|
return this.editPerms(player, group, perm, mode, false);
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* Edit the permissions for a group. If not defined for the group creates a new default permission map for that group
|
* Edit the permissions for a group. If not defined for the group creates a new default permission map for that group
|
||||||
*
|
*
|
||||||
* @param mode -1 = makes it resort to the global perm, 0 = deny perm, 1 = allow perm
|
* @param mode -1 = makes it resort to the global perm, 0 = deny perm, 1 = allow perm
|
||||||
* @return If editing was successful or not
|
* @return If editing was successful or not
|
||||||
*/
|
*/
|
||||||
public boolean editPerms(ServerPlayerEntity player, String group, EnumPermission perm, int mode) {
|
public boolean editPerms(ServerPlayerEntity player, String group, EnumPermission perm, int mode, boolean griefPrevention) {
|
||||||
if (this.canInteract(player, EnumPermission.EDITPERMS, player.getBlockPos())) {
|
if(perm.isAlwaysGlobalPerm())
|
||||||
|
return false;
|
||||||
|
if (griefPrevention || this.canInteract(player, EnumPermission.EDITPERMS, player.getBlockPos())) {
|
||||||
if (mode > 1)
|
if (mode > 1)
|
||||||
mode = -1;
|
mode = -1;
|
||||||
boolean has = this.permissions.containsKey(group);
|
boolean has = this.permissions.containsKey(group);
|
||||||
@ -343,7 +357,7 @@ public class Claim {
|
|||||||
perms.put(perm, mode == 1);
|
perms.put(perm, mode == 1);
|
||||||
if (!has)
|
if (!has)
|
||||||
this.permissions.put(group, perms);
|
this.permissions.put(group, perms);
|
||||||
this.setDirty();
|
this.setDirty(true);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -358,7 +372,7 @@ public class Claim {
|
|||||||
toRemove.add(uuid);
|
toRemove.add(uuid);
|
||||||
});
|
});
|
||||||
toRemove.forEach(this.playersGroups::remove);
|
toRemove.forEach(this.playersGroups::remove);
|
||||||
this.setDirty();
|
this.setDirty(true);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -379,11 +393,11 @@ public class Claim {
|
|||||||
/**
|
/**
|
||||||
* Only marks non sub claims
|
* Only marks non sub claims
|
||||||
*/
|
*/
|
||||||
public void setDirty() {
|
public void setDirty(boolean flag) {
|
||||||
if(this.parentClaim()!=null)
|
if(this.parentClaim()!=null)
|
||||||
this.parentClaim().setDirty();
|
this.parentClaim().setDirty(flag);
|
||||||
else
|
else
|
||||||
this.dirty = true;
|
this.dirty = flag;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isDirty() {
|
public boolean isDirty() {
|
||||||
@ -391,15 +405,17 @@ public class Claim {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void readJson(JsonObject obj, UUID uuid) {
|
public void readJson(JsonObject obj, UUID uuid) {
|
||||||
|
this.claimID = UUID.fromString(obj.get("ID").getAsString());
|
||||||
JsonArray pos = obj.getAsJsonArray("PosxXzZY");
|
JsonArray pos = obj.getAsJsonArray("PosxXzZY");
|
||||||
this.minX = pos.get(0).getAsInt();
|
this.minX = pos.get(0).getAsInt();
|
||||||
this.maxX = pos.get(1).getAsInt();
|
this.maxX = pos.get(1).getAsInt();
|
||||||
this.minZ = pos.get(2).getAsInt();
|
this.minZ = pos.get(2).getAsInt();
|
||||||
this.maxZ = pos.get(3).getAsInt();
|
this.maxZ = pos.get(3).getAsInt();
|
||||||
this.minY = pos.get(4).getAsInt();
|
this.minY = pos.get(4).getAsInt();
|
||||||
this.owner = uuid;
|
if(obj.has("AdminClaim")?obj.get("AdminClaim").getAsBoolean():false)
|
||||||
this.adminClaim = obj.has("AdminClaim")?obj.get("AdminClaim").getAsBoolean():false;
|
this.owner = null;
|
||||||
this.claimID = UUID.fromString(obj.get("ID").getAsString());
|
else
|
||||||
|
this.owner = uuid;
|
||||||
this.globalPerm.clear();
|
this.globalPerm.clear();
|
||||||
this.permissions.clear();
|
this.permissions.clear();
|
||||||
this.subClaims.clear();
|
this.subClaims.clear();
|
||||||
@ -431,6 +447,7 @@ public class Claim {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public JsonObject toJson(JsonObject obj) {
|
public JsonObject toJson(JsonObject obj) {
|
||||||
|
obj.addProperty("ID", this.claimID.toString());
|
||||||
JsonArray pos = new JsonArray();
|
JsonArray pos = new JsonArray();
|
||||||
pos.add(this.minX);
|
pos.add(this.minX);
|
||||||
pos.add(this.maxX);
|
pos.add(this.maxX);
|
||||||
@ -438,8 +455,6 @@ public class Claim {
|
|||||||
pos.add(this.maxZ);
|
pos.add(this.maxZ);
|
||||||
pos.add(this.minY);
|
pos.add(this.minY);
|
||||||
obj.add("PosxXzZY", pos);
|
obj.add("PosxXzZY", pos);
|
||||||
obj.addProperty("ID", this.claimID.toString());
|
|
||||||
obj.addProperty("AdminClaim", this.adminClaim);
|
|
||||||
if (this.parent != null)
|
if (this.parent != null)
|
||||||
obj.addProperty("Parent", this.parent.toString());
|
obj.addProperty("Parent", this.parent.toString());
|
||||||
if (!this.globalPerm.isEmpty()) {
|
if (!this.globalPerm.isEmpty()) {
|
||||||
@ -499,7 +514,7 @@ public class Claim {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return String.format("Claim:[ID=%s, Owner=%s, from: x=%d; z=%d, to: x=%d, z=%d", this.claimID != null ? this.claimID.toString() : "null", this.owner.toString(), this.minX, this.minZ, this.maxX, this.maxZ);
|
return String.format("Claim:[ID=%s, Owner=%s, from: x=%d; z=%d, to: x=%d, z=%d", this.claimID != null ? this.claimID.toString() : "null", this.owner!=null?this.owner.toString():"Admin", this.minX, this.minZ, this.maxX, this.maxZ);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String formattedClaim() {
|
public String formattedClaim() {
|
||||||
@ -510,8 +525,8 @@ public class Claim {
|
|||||||
boolean perms = this.canInteract(player, EnumPermission.EDITPERMS, player.getBlockPos());
|
boolean perms = this.canInteract(player, EnumPermission.EDITPERMS, player.getBlockPos());
|
||||||
List<Text> l = Lists.newArrayList();
|
List<Text> l = Lists.newArrayList();
|
||||||
l.add(PermHelper.simpleColoredText("=============================================", Formatting.GREEN));
|
l.add(PermHelper.simpleColoredText("=============================================", Formatting.GREEN));
|
||||||
GameProfile prof = player.getServer().getUserCache().getByUuid(this.owner);
|
GameProfile prof = this.owner!=null?player.getServer().getUserCache().getByUuid(this.owner):null;
|
||||||
String ownerName = this.adminClaim ? "Admin" : prof != null ? prof.getName() : "<UNKNOWN>";
|
String ownerName = this.isAdminClaim() ? "Admin" : prof != null ? prof.getName() : "<UNKNOWN>";
|
||||||
if(this.parent==null)
|
if(this.parent==null)
|
||||||
l.add(PermHelper.simpleColoredText(String.format(ConfigHandler.lang.claimBasicInfo, ownerName, this.minX, this.minZ, this.maxX, this.maxZ, this.subClaims.size()), Formatting.GOLD));
|
l.add(PermHelper.simpleColoredText(String.format(ConfigHandler.lang.claimBasicInfo, ownerName, this.minX, this.minZ, this.maxX, this.maxZ, this.subClaims.size()), Formatting.GOLD));
|
||||||
else
|
else
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package com.flemmli97.flan.claim;
|
package com.flemmli97.flan.claim;
|
||||||
|
|
||||||
|
import com.flemmli97.flan.Flan;
|
||||||
import com.flemmli97.flan.IClaimData;
|
import com.flemmli97.flan.IClaimData;
|
||||||
import com.flemmli97.flan.config.ConfigHandler;
|
import com.flemmli97.flan.config.ConfigHandler;
|
||||||
import com.flemmli97.flan.player.EnumDisplayType;
|
import com.flemmli97.flan.player.EnumDisplayType;
|
||||||
@ -14,8 +15,17 @@ import com.google.gson.JsonObject;
|
|||||||
import com.ibm.icu.impl.Pair;
|
import com.ibm.icu.impl.Pair;
|
||||||
import it.unimi.dsi.fastutil.longs.Long2ObjectArrayMap;
|
import it.unimi.dsi.fastutil.longs.Long2ObjectArrayMap;
|
||||||
import net.minecraft.server.MinecraftServer;
|
import net.minecraft.server.MinecraftServer;
|
||||||
|
import net.minecraft.server.command.LocateBiomeCommand;
|
||||||
|
import net.minecraft.server.command.ServerCommandSource;
|
||||||
import net.minecraft.server.network.ServerPlayerEntity;
|
import net.minecraft.server.network.ServerPlayerEntity;
|
||||||
import net.minecraft.server.world.ServerWorld;
|
import net.minecraft.server.world.ServerWorld;
|
||||||
|
import net.minecraft.text.BaseText;
|
||||||
|
import net.minecraft.text.ClickEvent;
|
||||||
|
import net.minecraft.text.HoverEvent;
|
||||||
|
import net.minecraft.text.LiteralText;
|
||||||
|
import net.minecraft.text.MutableText;
|
||||||
|
import net.minecraft.text.Text;
|
||||||
|
import net.minecraft.text.TranslatableText;
|
||||||
import net.minecraft.util.Formatting;
|
import net.minecraft.util.Formatting;
|
||||||
import net.minecraft.util.WorldSavePath;
|
import net.minecraft.util.WorldSavePath;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
@ -30,18 +40,21 @@ import java.io.FileReader;
|
|||||||
import java.io.FileWriter;
|
import java.io.FileWriter;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.EnumMap;
|
||||||
import java.util.EnumSet;
|
import java.util.EnumSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
|
||||||
public class ClaimStorage {
|
public class ClaimStorage {
|
||||||
|
|
||||||
|
public static final String adminClaimString = "!AdminClaims";
|
||||||
private final Long2ObjectArrayMap<List<Claim>> claims = new Long2ObjectArrayMap<>();
|
private final Long2ObjectArrayMap<List<Claim>> claims = new Long2ObjectArrayMap<>();
|
||||||
private final Map<UUID, Claim> claimUUIDMap = Maps.newHashMap();
|
private final Map<UUID, Claim> claimUUIDMap = Maps.newHashMap();
|
||||||
private final Map<UUID, Set<Claim>> playerClaimMap = Maps.newHashMap();
|
private final Map<UUID, Set<Claim>> playerClaimMap = Maps.newHashMap();
|
||||||
|
private final Set<UUID> dirty = Sets.newHashSet();
|
||||||
public static ClaimStorage get(ServerWorld world) {
|
public static ClaimStorage get(ServerWorld world) {
|
||||||
return (ClaimStorage) ((IClaimData) world).getClaimData();
|
return (ClaimStorage) ((IClaimData) world).getClaimData();
|
||||||
}
|
}
|
||||||
@ -118,9 +131,16 @@ public class ClaimStorage {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
this.playerClaimMap.getOrDefault(claim.getOwner(), Sets.newHashSet()).remove(claim);
|
this.playerClaimMap.getOrDefault(claim.getOwner(), Sets.newHashSet()).remove(claim);
|
||||||
|
this.dirty.add(claim.getOwner());
|
||||||
return this.claimUUIDMap.remove(claim.getClaimID()) != null;
|
return this.claimUUIDMap.remove(claim.getClaimID()) != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void toggleAdminClaim(ServerPlayerEntity player, Claim claim, boolean toggle){
|
||||||
|
this.deleteClaim(claim, false, EnumEditMode.DEFAULT, player.getServerWorld());
|
||||||
|
claim.toggleAdminClaim(player, toggle);
|
||||||
|
this.addClaim(claim);
|
||||||
|
}
|
||||||
|
|
||||||
public boolean resizeClaim(Claim claim, BlockPos from, BlockPos to, ServerPlayerEntity player) {
|
public boolean resizeClaim(Claim claim, BlockPos from, BlockPos to, ServerPlayerEntity player) {
|
||||||
int[] dims = claim.getDimensions();
|
int[] dims = claim.getDimensions();
|
||||||
BlockPos opposite = new BlockPos(dims[0] == from.getX() ? dims[1] : dims[0], dims[4], dims[2] == from.getZ() ? dims[3] : dims[2]);
|
BlockPos opposite = new BlockPos(dims[0] == from.getX() ? dims[1] : dims[0], dims[4], dims[2] == from.getZ() ? dims[3] : dims[2]);
|
||||||
@ -181,7 +201,7 @@ public class ClaimStorage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Collection<Claim> getAdminClaims(){
|
public Collection<Claim> getAdminClaims(){
|
||||||
return ImmutableSet.copyOf(this.claimUUIDMap.values().stream().filter(claim->claim.isAdminClaim()).iterator());
|
return ImmutableSet.copyOf(this.playerClaimMap.get(null));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int[] getChunkPos(Claim claim) {
|
public static int[] getChunkPos(Claim claim) {
|
||||||
@ -201,7 +221,8 @@ public class ClaimStorage {
|
|||||||
for (File file : dir.listFiles()) {
|
for (File file : dir.listFiles()) {
|
||||||
if (!file.getName().endsWith(".json"))
|
if (!file.getName().endsWith(".json"))
|
||||||
continue;
|
continue;
|
||||||
UUID uuid = UUID.fromString(file.getName().replace(".json", ""));
|
String realName = file.getName().replace(".json", "");
|
||||||
|
UUID uuid = realName.equals(adminClaimString)?null:UUID.fromString(file.getName().replace(".json", ""));
|
||||||
FileReader reader = new FileReader(file);
|
FileReader reader = new FileReader(file);
|
||||||
JsonArray arr = ConfigHandler.GSON.fromJson(reader, JsonArray.class);
|
JsonArray arr = ConfigHandler.GSON.fromJson(reader, JsonArray.class);
|
||||||
if (arr == null)
|
if (arr == null)
|
||||||
@ -225,8 +246,8 @@ public class ClaimStorage {
|
|||||||
dir.mkdir();
|
dir.mkdir();
|
||||||
try {
|
try {
|
||||||
for (Map.Entry<UUID, Set<Claim>> e : this.playerClaimMap.entrySet()) {
|
for (Map.Entry<UUID, Set<Claim>> e : this.playerClaimMap.entrySet()) {
|
||||||
|
String owner = e.getKey()==null?adminClaimString:e.getKey().toString();
|
||||||
File file = new File(dir, e.getKey().toString() + ".json");
|
File file = new File(dir, owner + ".json");
|
||||||
boolean dirty = false;
|
boolean dirty = false;
|
||||||
if (!file.exists()) {
|
if (!file.exists()) {
|
||||||
if (e.getValue().isEmpty())
|
if (e.getValue().isEmpty())
|
||||||
@ -234,11 +255,17 @@ public class ClaimStorage {
|
|||||||
file.createNewFile();
|
file.createNewFile();
|
||||||
dirty = true;
|
dirty = true;
|
||||||
} else {
|
} else {
|
||||||
for (Claim claim : e.getValue())
|
if(this.dirty.contains(owner.equals(adminClaimString)?null:e.getKey())) {
|
||||||
if (claim.isDirty()) {
|
dirty = true;
|
||||||
dirty = true;
|
this.dirty.clear();
|
||||||
break;
|
}
|
||||||
}
|
else {
|
||||||
|
for (Claim claim : e.getValue())
|
||||||
|
if (claim.isDirty()) {
|
||||||
|
dirty = true;
|
||||||
|
claim.setDirty(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (dirty) {
|
if (dirty) {
|
||||||
JsonArray arr = new JsonArray();
|
JsonArray arr = new JsonArray();
|
||||||
@ -253,11 +280,11 @@ public class ClaimStorage {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Set<String> readGriefPreventionData(MinecraftServer server) {
|
public static void readGriefPreventionData(MinecraftServer server, ServerCommandSource src) {
|
||||||
Yaml yml = new Yaml();
|
Yaml yml = new Yaml();
|
||||||
File griefPrevention = server.getSavePath(WorldSavePath.ROOT).resolve("plugins/GriefPreventionData/ClaimData").toFile();
|
File griefPrevention = server.getSavePath(WorldSavePath.ROOT).resolve("plugins/GriefPreventionData/ClaimData").toFile();
|
||||||
if (!griefPrevention.exists())
|
if (!griefPrevention.exists())
|
||||||
return null;
|
return;
|
||||||
Map<File, List<File>> subClaimMap = Maps.newHashMap();
|
Map<File, List<File>> subClaimMap = Maps.newHashMap();
|
||||||
Map<Integer, File> intFileMap = Maps.newHashMap();
|
Map<Integer, File> intFileMap = Maps.newHashMap();
|
||||||
|
|
||||||
@ -273,14 +300,14 @@ public class ClaimStorage {
|
|||||||
EnumPermission.LECTERNTAKE, EnumPermission.ENDCRYSTALPLACE, EnumPermission.PROJECTILES, EnumPermission.TRAMPLE, EnumPermission.RAID,
|
EnumPermission.LECTERNTAKE, EnumPermission.ENDCRYSTALPLACE, EnumPermission.PROJECTILES, EnumPermission.TRAMPLE, EnumPermission.RAID,
|
||||||
EnumPermission.BUCKET, EnumPermission.ANIMALINTERACT, EnumPermission.HURTANIMAL, EnumPermission.TRADING, EnumPermission.ARMORSTAND,
|
EnumPermission.BUCKET, EnumPermission.ANIMALINTERACT, EnumPermission.HURTANIMAL, EnumPermission.TRADING, EnumPermission.ARMORSTAND,
|
||||||
EnumPermission.BREAKNONLIVING));
|
EnumPermission.BREAKNONLIVING));
|
||||||
System.out.println(managers);
|
Map<String, EnumSet<EnumPermission>> perms = Maps.newHashMap();
|
||||||
System.out.println(builders);
|
perms.put("managers", managers);
|
||||||
System.out.println(containers);
|
perms.put("builders", builders);
|
||||||
System.out.println(accessors);
|
perms.put("containers", containers);
|
||||||
|
perms.put("accessors", accessors);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
//Get all parent claims
|
//Get all parent claims
|
||||||
Set<String> failedClaimsFile = Sets.newHashSet();
|
|
||||||
for (File f : griefPrevention.listFiles()) {
|
for (File f : griefPrevention.listFiles()) {
|
||||||
if (f.getName().endsWith(".yml")) {
|
if (f.getName().endsWith(".yml")) {
|
||||||
FileReader reader = new FileReader(f);
|
FileReader reader = new FileReader(f);
|
||||||
@ -290,7 +317,7 @@ public class ClaimStorage {
|
|||||||
intFileMap.put(Integer.valueOf(f.getName().replace(".yml", "")), f);
|
intFileMap.put(Integer.valueOf(f.getName().replace(".yml", "")), f);
|
||||||
}
|
}
|
||||||
catch (NumberFormatException e){
|
catch (NumberFormatException e){
|
||||||
failedClaimsFile.add(f.getName());
|
src.sendFeedback(PermHelper.simpleColoredText(String.format(ConfigHandler.lang.errorFile, f.getName(), Formatting.RED)), false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -310,42 +337,114 @@ public class ClaimStorage {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (File parent : intFileMap.values()) {
|
for (File parent : intFileMap.values()) {
|
||||||
Pair<ServerWorld, Claim> parentClaim = parseFromYaml(parent, yml, server);
|
try {
|
||||||
List<File> childs = subClaimMap.get(parent);
|
Pair<ServerWorld, Claim> parentClaim = parseFromYaml(parent, yml, server, perms);
|
||||||
if (childs != null && !childs.isEmpty()) {
|
List<File> childs = subClaimMap.get(parent);
|
||||||
for (File childF : childs)
|
if (childs != null && !childs.isEmpty()) {
|
||||||
parentClaim.second.addSubClaimGriefprevention(parseFromYaml(childF, yml, server).second);
|
for (File childF : childs)
|
||||||
|
parentClaim.second.addSubClaimGriefprevention(parseFromYaml(childF, yml, server, perms).second);
|
||||||
|
}
|
||||||
|
ClaimStorage storage = ClaimStorage.get(parentClaim.first);
|
||||||
|
Set<Claim> conflicts = storage.conflicts(parentClaim.second, null);
|
||||||
|
if (conflicts.isEmpty()) {
|
||||||
|
parentClaim.second.setClaimID(storage.generateUUID());
|
||||||
|
storage.addClaim(parentClaim.second);
|
||||||
|
} else {
|
||||||
|
src.sendFeedback(PermHelper.simpleColoredText(String.format(ConfigHandler.lang.readConflict, parent.getName(), conflicts), Formatting.DARK_RED), false);
|
||||||
|
for(Claim claim : conflicts){
|
||||||
|
int[] dim = claim.getDimensions();
|
||||||
|
MutableText text = PermHelper.simpleColoredText(String.format("@[x=%d;z=%d]", dim[0], dim[2]), Formatting.RED);
|
||||||
|
text.setStyle(text.getStyle().withClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/tp @s " + dim[0] + " ~ " + dim[2])).withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new TranslatableText("chat.coordinates.tooltip"))));
|
||||||
|
src.sendFeedback(text, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
ClaimStorage storage = ClaimStorage.get(parentClaim.first);
|
catch (Exception e){
|
||||||
if (storage.conflicts(parentClaim.second, null).isEmpty()) {
|
src.sendFeedback(PermHelper.simpleColoredText(String.format(ConfigHandler.lang.errorFile, parent.getName(), Formatting.RED)), false);
|
||||||
parentClaim.second.setClaimID(storage.generateUUID());
|
e.printStackTrace();
|
||||||
storage.addClaim(parentClaim.second);
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
failedClaimsFile.add(parent.getName());
|
|
||||||
}
|
}
|
||||||
if (!failedClaimsFile.isEmpty())
|
|
||||||
return failedClaimsFile;
|
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Pair<ServerWorld, Claim> parseFromYaml(File file, Yaml yml, MinecraftServer server) throws IOException {
|
private static Pair<ServerWorld, Claim> parseFromYaml(File file, Yaml yml, MinecraftServer server,
|
||||||
|
Map<String, EnumSet<EnumPermission>> perms) throws IOException {
|
||||||
FileReader reader = new FileReader(file);
|
FileReader reader = new FileReader(file);
|
||||||
Map<String, Object> values = yml.load(reader);
|
Map<String, Object> values = yml.load(reader);
|
||||||
reader.close();
|
reader.close();
|
||||||
UUID owner = UUID.fromString(values.get("Owner").toString());
|
String ownerString = (String) values.get("Owner");
|
||||||
|
|
||||||
|
UUID owner = ownerString.isEmpty()?null:UUID.fromString(ownerString);
|
||||||
|
List<String> builders = readList(values, "Builders");
|
||||||
|
List<String> managers = readList(values, "Managers");
|
||||||
|
List<String> containers = readList(values, "Containers");
|
||||||
|
List<String> accessors = readList(values, "Accessors");
|
||||||
String[] lesserCorner = values.get("Lesser Boundary Corner").toString().split(";");
|
String[] lesserCorner = values.get("Lesser Boundary Corner").toString().split(";");
|
||||||
String[] greaterCorner = values.get("Greater Boundary Corner").toString().split(";");
|
String[] greaterCorner = values.get("Greater Boundary Corner").toString().split(";");
|
||||||
ServerWorld world = server.getWorld(worldRegFromString(lesserCorner[0]));
|
ServerWorld world = server.getWorld(worldRegFromString(lesserCorner[0]));
|
||||||
Claim claim = new Claim(Integer.parseInt(lesserCorner[1]), Integer.parseInt(greaterCorner[1]),
|
Claim claim = new Claim(Integer.parseInt(lesserCorner[1]), Integer.parseInt(greaterCorner[1]),
|
||||||
Integer.parseInt(lesserCorner[3]), Integer.parseInt(greaterCorner[3]), ConfigHandler.config.defaultClaimDepth == 255?0:
|
Integer.parseInt(lesserCorner[3]), Integer.parseInt(greaterCorner[3]), ConfigHandler.config.defaultClaimDepth == 255?0:
|
||||||
Integer.parseInt(lesserCorner[2]), owner, world);
|
Integer.parseInt(lesserCorner[2]), owner, world);
|
||||||
|
if(!builders.isEmpty() && !builders.contains(ownerString)) {
|
||||||
|
if(builders.contains("public")){
|
||||||
|
perms.get("builders").forEach(perm -> {
|
||||||
|
if(!perm.isAlwaysGlobalPerm())
|
||||||
|
claim.editGlobalPerms(perm, 1);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
perms.get("builders").forEach(perm -> claim.editPerms(null, "Builders", perm, 1, true));
|
||||||
|
builders.forEach(s -> claim.setPlayerGroup(UUID.fromString(s), "Builders", true));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!managers.isEmpty() && !managers.contains(ownerString)) {
|
||||||
|
if(managers.contains("public")){
|
||||||
|
perms.get("managers").forEach(perm -> {
|
||||||
|
if(!perm.isAlwaysGlobalPerm())
|
||||||
|
claim.editGlobalPerms(perm, 1);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
perms.get("managers").forEach(perm -> claim.editPerms(null, "Managers", perm, 1, true));
|
||||||
|
managers.forEach(s -> claim.setPlayerGroup(UUID.fromString(s), "Managers", true));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!containers.isEmpty() && !containers.contains(ownerString)) {
|
||||||
|
if(containers.contains("public")){
|
||||||
|
perms.get("containers").forEach(perm -> {
|
||||||
|
if(!perm.isAlwaysGlobalPerm())
|
||||||
|
claim.editGlobalPerms(perm, 1);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
perms.get("containers").forEach(perm -> claim.editPerms(null, "Containers", perm, 1, true));
|
||||||
|
containers.forEach(s -> claim.setPlayerGroup(UUID.fromString(s), "Containers", true));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!accessors.isEmpty() && !accessors.contains(ownerString)) {
|
||||||
|
if(accessors.contains("public")){
|
||||||
|
perms.get("accessors").forEach(perm -> {
|
||||||
|
if(!perm.isAlwaysGlobalPerm())
|
||||||
|
claim.editGlobalPerms(perm, 1);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
perms.get("accessors").forEach(perm -> claim.editPerms(null, "Accessors", perm, 1, true));
|
||||||
|
accessors.forEach(s -> claim.setPlayerGroup(UUID.fromString(s), "Accessors", true));
|
||||||
|
}
|
||||||
|
}
|
||||||
return Pair.of(world, claim);
|
return Pair.of(world, claim);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static <T> List<T> readList(Map<String, Object> values, String key){
|
||||||
|
Object obj = values.get(key);
|
||||||
|
if(obj instanceof List)
|
||||||
|
return (List<T>) obj;
|
||||||
|
return Lists.newArrayList();
|
||||||
|
}
|
||||||
|
|
||||||
public static RegistryKey<World> worldRegFromString(String spigot) {
|
public static RegistryKey<World> worldRegFromString(String spigot) {
|
||||||
if (spigot.equals("world_the_end"))
|
if (spigot.equals("world_the_end"))
|
||||||
return World.END;
|
return World.END;
|
||||||
|
@ -3,6 +3,7 @@ package com.flemmli97.flan.claim;
|
|||||||
import com.flemmli97.flan.config.ConfigHandler;
|
import com.flemmli97.flan.config.ConfigHandler;
|
||||||
import net.minecraft.server.network.ServerPlayerEntity;
|
import net.minecraft.server.network.ServerPlayerEntity;
|
||||||
import net.minecraft.text.LiteralText;
|
import net.minecraft.text.LiteralText;
|
||||||
|
import net.minecraft.text.MutableText;
|
||||||
import net.minecraft.text.Style;
|
import net.minecraft.text.Style;
|
||||||
import net.minecraft.text.Text;
|
import net.minecraft.text.Text;
|
||||||
import net.minecraft.util.Formatting;
|
import net.minecraft.util.Formatting;
|
||||||
@ -42,7 +43,7 @@ public class PermHelper {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Text simpleColoredText(String text, Formatting... formatting) {
|
public static MutableText simpleColoredText(String text, Formatting... formatting) {
|
||||||
return new LiteralText(text).setStyle(formatting != null ? Style.EMPTY.withFormatting(formatting) : Style.EMPTY);
|
return new LiteralText(text).setStyle(formatting != null ? Style.EMPTY.withFormatting(formatting) : Style.EMPTY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@ import com.flemmli97.flan.config.ConfigHandler;
|
|||||||
import com.flemmli97.flan.gui.ClaimMenuScreenHandler;
|
import com.flemmli97.flan.gui.ClaimMenuScreenHandler;
|
||||||
import com.flemmli97.flan.player.EnumDisplayType;
|
import com.flemmli97.flan.player.EnumDisplayType;
|
||||||
import com.flemmli97.flan.player.EnumEditMode;
|
import com.flemmli97.flan.player.EnumEditMode;
|
||||||
|
import com.flemmli97.flan.player.OfflinePlayerData;
|
||||||
import com.flemmli97.flan.player.PlayerClaimData;
|
import com.flemmli97.flan.player.PlayerClaimData;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
@ -25,6 +26,7 @@ import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
|||||||
import com.mojang.brigadier.suggestion.Suggestions;
|
import com.mojang.brigadier.suggestion.Suggestions;
|
||||||
import com.mojang.brigadier.suggestion.SuggestionsBuilder;
|
import com.mojang.brigadier.suggestion.SuggestionsBuilder;
|
||||||
import net.minecraft.command.argument.GameProfileArgumentType;
|
import net.minecraft.command.argument.GameProfileArgumentType;
|
||||||
|
import net.minecraft.server.MinecraftServer;
|
||||||
import net.minecraft.server.command.CommandManager;
|
import net.minecraft.server.command.CommandManager;
|
||||||
import net.minecraft.server.command.CommandSource;
|
import net.minecraft.server.command.CommandSource;
|
||||||
import net.minecraft.server.command.ServerCommandSource;
|
import net.minecraft.server.command.ServerCommandSource;
|
||||||
@ -39,6 +41,7 @@ import java.util.Collection;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.UUID;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
|
||||||
public class CommandClaim {
|
public class CommandClaim {
|
||||||
@ -52,7 +55,7 @@ public class CommandClaim {
|
|||||||
CommandManager.literal("deleteAll").executes(CommandClaim::deleteAllClaim),
|
CommandManager.literal("deleteAll").executes(CommandClaim::deleteAllClaim),
|
||||||
CommandManager.literal("deleteSubClaim").executes(CommandClaim::deleteSubClaim),
|
CommandManager.literal("deleteSubClaim").executes(CommandClaim::deleteSubClaim),
|
||||||
CommandManager.literal("deleteAllSubClaims").executes(CommandClaim::deleteAllSubClaim),
|
CommandManager.literal("deleteAllSubClaims").executes(CommandClaim::deleteAllSubClaim),
|
||||||
CommandManager.literal("list").executes(CommandClaim::listClaims),
|
CommandManager.literal("list").executes(CommandClaim::listClaims).then(CommandManager.argument("player", GameProfileArgumentType.gameProfile()).requires(src -> src.hasPermissionLevel(2)).executes(cmd->listClaims(cmd, GameProfileArgumentType.getProfileArgument(cmd, "player")))),
|
||||||
CommandManager.literal("switchMode").executes(CommandClaim::switchClaimMode),
|
CommandManager.literal("switchMode").executes(CommandClaim::switchClaimMode),
|
||||||
CommandManager.literal("adminMode").requires(src -> src.hasPermissionLevel(2)).executes(CommandClaim::switchAdminMode),
|
CommandManager.literal("adminMode").requires(src -> src.hasPermissionLevel(2)).executes(CommandClaim::switchAdminMode),
|
||||||
CommandManager.literal("readGriefPrevention").requires(src -> src.hasPermissionLevel(2)).executes(CommandClaim::readGriefPreventionData),
|
CommandManager.literal("readGriefPrevention").requires(src -> src.hasPermissionLevel(2)).executes(CommandClaim::readGriefPreventionData),
|
||||||
@ -218,18 +221,42 @@ public class CommandClaim {
|
|||||||
|
|
||||||
private static int listClaims(CommandContext<ServerCommandSource> context) throws CommandSyntaxException {
|
private static int listClaims(CommandContext<ServerCommandSource> context) throws CommandSyntaxException {
|
||||||
ServerPlayerEntity player = context.getSource().getPlayer();
|
ServerPlayerEntity player = context.getSource().getPlayer();
|
||||||
Map<World, Collection<Claim>> claims = Maps.newHashMap();
|
return listClaimsFromUUID(context, null);
|
||||||
for (ServerWorld world : player.getServer().getWorlds()) {
|
}
|
||||||
ClaimStorage storage = ClaimStorage.get(world);
|
|
||||||
claims.put(world, storage.allClaimsFromPlayer(player.getUuid()));
|
private static int listClaims(CommandContext<ServerCommandSource> context, Collection<GameProfile> profs) throws CommandSyntaxException {
|
||||||
|
if(profs.size()!=1) {
|
||||||
|
context.getSource().sendFeedback(PermHelper.simpleColoredText(ConfigHandler.lang.onlyOnePlayer, Formatting.RED), false);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
PlayerClaimData data = PlayerClaimData.get(player);
|
GameProfile prof = profs.iterator().next();
|
||||||
player.sendMessage(PermHelper.simpleColoredText(String.format(ConfigHandler.lang.claimBlocksFormat,
|
if(prof == null || prof.getId()==null)
|
||||||
data.getClaimBlocks(), data.getAdditionalClaims(), data.usedClaimBlocks()), Formatting.GOLD), false);
|
return 0;
|
||||||
player.sendMessage(PermHelper.simpleColoredText(ConfigHandler.lang.listClaims, Formatting.GOLD), false);
|
return listClaimsFromUUID(context, prof.getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int listClaimsFromUUID(CommandContext<ServerCommandSource> context, UUID of) throws CommandSyntaxException {
|
||||||
|
MinecraftServer server = context.getSource().getMinecraftServer();
|
||||||
|
ServerPlayerEntity player = of==null?context.getSource().getPlayer():server.getPlayerManager().getPlayer(of);
|
||||||
|
Map<World, Collection<Claim>> claims = Maps.newHashMap();
|
||||||
|
for (ServerWorld world : server.getWorlds()) {
|
||||||
|
ClaimStorage storage = ClaimStorage.get(world);
|
||||||
|
claims.put(world, storage.allClaimsFromPlayer(player!=null?player.getUuid():of));
|
||||||
|
}
|
||||||
|
if(player!=null) {
|
||||||
|
PlayerClaimData data = PlayerClaimData.get(player);
|
||||||
|
context.getSource().sendFeedback(PermHelper.simpleColoredText(String.format(ConfigHandler.lang.claimBlocksFormat,
|
||||||
|
data.getClaimBlocks(), data.getAdditionalClaims(), data.usedClaimBlocks()), Formatting.GOLD), false);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
OfflinePlayerData data = new OfflinePlayerData(server, of);
|
||||||
|
context.getSource().sendFeedback(PermHelper.simpleColoredText(String.format(ConfigHandler.lang.claimBlocksFormat,
|
||||||
|
data.claimBlocks, data.additionalClaimBlocks, data.getUsedClaimBlocks(server)), Formatting.GOLD), false);
|
||||||
|
}
|
||||||
|
context.getSource().sendFeedback(PermHelper.simpleColoredText(ConfigHandler.lang.listClaims, Formatting.GOLD), false);
|
||||||
for (Map.Entry<World, Collection<Claim>> entry : claims.entrySet())
|
for (Map.Entry<World, Collection<Claim>> entry : claims.entrySet())
|
||||||
for (Claim claim : entry.getValue())
|
for (Claim claim : entry.getValue())
|
||||||
player.sendMessage(PermHelper.simpleColoredText(
|
context.getSource().sendFeedback(PermHelper.simpleColoredText(
|
||||||
entry.getKey().getRegistryKey().getValue().toString() + " # " + claim.formattedClaim(), Formatting.YELLOW), false);
|
entry.getKey().getRegistryKey().getValue().toString() + " # " + claim.formattedClaim(), Formatting.YELLOW), false);
|
||||||
return Command.SINGLE_SUCCESS;
|
return Command.SINGLE_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -286,16 +313,16 @@ public class CommandClaim {
|
|||||||
return Command.SINGLE_SUCCESS;
|
return Command.SINGLE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int toggleAdminClaim(CommandContext<ServerCommandSource> context) {
|
private static int toggleAdminClaim(CommandContext<ServerCommandSource> context) throws CommandSyntaxException {
|
||||||
ServerCommandSource src = context.getSource();
|
ServerPlayerEntity player = context.getSource().getPlayer();
|
||||||
ClaimStorage storage = ClaimStorage.get(src.getWorld());
|
ClaimStorage storage = ClaimStorage.get(player.getServerWorld());
|
||||||
Claim claim = storage.getClaimAt(new BlockPos(src.getPosition()));
|
Claim claim = storage.getClaimAt(player.getBlockPos());
|
||||||
if (claim == null) {
|
if (claim == null) {
|
||||||
src.sendFeedback(PermHelper.simpleColoredText(ConfigHandler.lang.noClaim, Formatting.RED), false);
|
context.getSource().sendFeedback(PermHelper.simpleColoredText(ConfigHandler.lang.noClaim, Formatting.RED), false);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
claim.toggleAdminClaim(BoolArgumentType.getBool(context, "toggle"));
|
storage.toggleAdminClaim(player, claim, BoolArgumentType.getBool(context, "toggle"));
|
||||||
src.sendFeedback(PermHelper.simpleColoredText(String.format(ConfigHandler.lang.setAdminClaim, claim.isAdminClaim()), Formatting.GOLD), true);
|
context.getSource().sendFeedback(PermHelper.simpleColoredText(String.format(ConfigHandler.lang.setAdminClaim, claim.isAdminClaim()), Formatting.GOLD), true);
|
||||||
return Command.SINGLE_SUCCESS;
|
return Command.SINGLE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -311,12 +338,9 @@ public class CommandClaim {
|
|||||||
private static int readGriefPreventionData(CommandContext<ServerCommandSource> context) {
|
private static int readGriefPreventionData(CommandContext<ServerCommandSource> context) {
|
||||||
ServerCommandSource src = context.getSource();
|
ServerCommandSource src = context.getSource();
|
||||||
src.sendFeedback(PermHelper.simpleColoredText(ConfigHandler.lang.readGriefpreventionData, Formatting.GOLD), true);
|
src.sendFeedback(PermHelper.simpleColoredText(ConfigHandler.lang.readGriefpreventionData, Formatting.GOLD), true);
|
||||||
Set<String> errors = ClaimStorage.readGriefPreventionData(src.getMinecraftServer());
|
ClaimStorage.readGriefPreventionData(src.getMinecraftServer(), src);
|
||||||
PlayerClaimData.readGriefPreventionPlayerData(src.getMinecraftServer());
|
PlayerClaimData.readGriefPreventionPlayerData(src.getMinecraftServer(), src);
|
||||||
if (errors == null)
|
src.sendFeedback(PermHelper.simpleColoredText(ConfigHandler.lang.readGriefpreventionDataSuccess, Formatting.GOLD), true);
|
||||||
src.sendFeedback(PermHelper.simpleColoredText(ConfigHandler.lang.readGriefpreventionDataSuccess, Formatting.GOLD), true);
|
|
||||||
else
|
|
||||||
src.sendFeedback(PermHelper.simpleColoredText(String.format(ConfigHandler.lang.readGriefpreventionDataFail, errors), Formatting.RED), true);
|
|
||||||
return Command.SINGLE_SUCCESS;
|
return Command.SINGLE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,6 +20,7 @@ public class LangConfig {
|
|||||||
public String claimBlocksFormat = "Claim Blocks: %1$d + (Bonus) %2$d; Used: %3$d";
|
public String claimBlocksFormat = "Claim Blocks: %1$d + (Bonus) %2$d; Used: %3$d";
|
||||||
public String listClaims = "Listing all claims:";
|
public String listClaims = "Listing all claims:";
|
||||||
public String listAdminClaims = "Listing all admin-claims in %1:";
|
public String listAdminClaims = "Listing all admin-claims in %1:";
|
||||||
|
public String onlyOnePlayer = "Only one player can be used as argument";
|
||||||
|
|
||||||
public String noPermission = "You don't have the required permissions to do that here!";
|
public String noPermission = "You don't have the required permissions to do that here!";
|
||||||
public String noPermissionSimple = "Sorry you can't do that here!";
|
public String noPermissionSimple = "Sorry you can't do that here!";
|
||||||
@ -58,7 +59,8 @@ public class LangConfig {
|
|||||||
public String setAdminClaim = "Adminclaim of this claim now: %s";
|
public String setAdminClaim = "Adminclaim of this claim now: %s";
|
||||||
public String readGriefpreventionData = "Reading data from GriefPrevention";
|
public String readGriefpreventionData = "Reading data from GriefPrevention";
|
||||||
public String readGriefpreventionDataSuccess = "Successfully read data";
|
public String readGriefpreventionDataSuccess = "Successfully read data";
|
||||||
public String readGriefpreventionDataFail = "Failed reading data for following claim files (Check the logs!): %s";
|
public String errorFile = "Error reading file %s";
|
||||||
|
public String readConflict = "%1$s conflicts with existing claims. Not added to world! Conflicts:";
|
||||||
public String giveClaimBlocks = "Gave following players %2$d claimblocks: %1$s";
|
public String giveClaimBlocks = "Gave following players %2$d claimblocks: %1$s";
|
||||||
|
|
||||||
public String claimBasicInfo = "Owner: %1$s, from: [x=%2$d,z=%3$d] to [x=%4$d,z=%5$d]; Subclaim-amount: %6$d";
|
public String claimBasicInfo = "Owner: %1$s, from: [x=%2$d,z=%3$d] to [x=%4$d,z=%5$d]; Subclaim-amount: %6$d";
|
||||||
|
@ -0,0 +1,53 @@
|
|||||||
|
package com.flemmli97.flan.player;
|
||||||
|
|
||||||
|
import com.flemmli97.flan.claim.Claim;
|
||||||
|
import com.flemmli97.flan.claim.ClaimStorage;
|
||||||
|
import com.flemmli97.flan.config.ConfigHandler;
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
import net.minecraft.server.MinecraftServer;
|
||||||
|
import net.minecraft.server.world.ServerWorld;
|
||||||
|
import net.minecraft.util.WorldSavePath;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
public class OfflinePlayerData {
|
||||||
|
|
||||||
|
public final int claimBlocks, additionalClaimBlocks;
|
||||||
|
public final UUID owner;
|
||||||
|
public OfflinePlayerData(MinecraftServer server, UUID uuid){
|
||||||
|
File dir = new File(server.getSavePath(WorldSavePath.PLAYERDATA).toFile(), "/claimData/");
|
||||||
|
int claim = ConfigHandler.config.startingBlocks;
|
||||||
|
int add = 0;
|
||||||
|
this.owner = uuid;
|
||||||
|
if (dir.exists()) {
|
||||||
|
try {
|
||||||
|
File file = new File(dir, uuid + ".json");
|
||||||
|
if (file.exists()) {
|
||||||
|
FileReader reader = new FileReader(file);
|
||||||
|
JsonObject obj = ConfigHandler.GSON.fromJson(reader, JsonObject.class);
|
||||||
|
claim = obj.get("ClaimBlocks").getAsInt();
|
||||||
|
add = obj.get("AdditionalBlocks").getAsInt();
|
||||||
|
reader.close();
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.claimBlocks = claim;
|
||||||
|
this.additionalClaimBlocks = add;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getUsedClaimBlocks(MinecraftServer server){
|
||||||
|
int usedClaimsBlocks = 0;
|
||||||
|
for (ServerWorld world : server.getWorlds()) {
|
||||||
|
Collection<Claim> claims = ClaimStorage.get(world).allClaimsFromPlayer(this.owner);
|
||||||
|
if (claims != null)
|
||||||
|
usedClaimsBlocks += claims.stream().filter(claim->!claim.isAdminClaim()).mapToInt(Claim::getPlane).sum();
|
||||||
|
}
|
||||||
|
return usedClaimsBlocks;
|
||||||
|
}
|
||||||
|
}
|
@ -4,6 +4,7 @@ import com.flemmli97.flan.IClaimData;
|
|||||||
import com.flemmli97.flan.claim.Claim;
|
import com.flemmli97.flan.claim.Claim;
|
||||||
import com.flemmli97.flan.claim.ClaimStorage;
|
import com.flemmli97.flan.claim.ClaimStorage;
|
||||||
import com.flemmli97.flan.claim.ParticleIndicators;
|
import com.flemmli97.flan.claim.ParticleIndicators;
|
||||||
|
import com.flemmli97.flan.claim.PermHelper;
|
||||||
import com.flemmli97.flan.config.ConfigHandler;
|
import com.flemmli97.flan.config.ConfigHandler;
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
@ -11,8 +12,10 @@ import net.minecraft.block.BlockState;
|
|||||||
import net.minecraft.entity.player.PlayerEntity;
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
import net.minecraft.network.packet.s2c.play.ParticleS2CPacket;
|
import net.minecraft.network.packet.s2c.play.ParticleS2CPacket;
|
||||||
import net.minecraft.server.MinecraftServer;
|
import net.minecraft.server.MinecraftServer;
|
||||||
|
import net.minecraft.server.command.ServerCommandSource;
|
||||||
import net.minecraft.server.network.ServerPlayerEntity;
|
import net.minecraft.server.network.ServerPlayerEntity;
|
||||||
import net.minecraft.server.world.ServerWorld;
|
import net.minecraft.server.world.ServerWorld;
|
||||||
|
import net.minecraft.util.Formatting;
|
||||||
import net.minecraft.util.WorldSavePath;
|
import net.minecraft.util.WorldSavePath;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
|
||||||
@ -267,12 +270,14 @@ public class PlayerClaimData {
|
|||||||
return usedClaimsBlocks;
|
return usedClaimsBlocks;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void readGriefPreventionPlayerData(MinecraftServer server) {
|
public static void readGriefPreventionPlayerData(MinecraftServer server, ServerCommandSource src) {
|
||||||
File griefPrevention = server.getSavePath(WorldSavePath.ROOT).resolve("plugins/GriefPreventionData/PlayerData").toFile();
|
File griefPrevention = server.getSavePath(WorldSavePath.ROOT).resolve("plugins/GriefPreventionData/PlayerData").toFile();
|
||||||
if (!griefPrevention.exists())
|
if (!griefPrevention.exists())
|
||||||
return;
|
return;
|
||||||
try {
|
for (File f : griefPrevention.listFiles()) {
|
||||||
for (File f : griefPrevention.listFiles()) {
|
try {
|
||||||
|
if (f.getName().contains("."))
|
||||||
|
continue;
|
||||||
if (f.getName().startsWith("$")) {
|
if (f.getName().startsWith("$")) {
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
@ -301,8 +306,9 @@ public class PlayerClaimData {
|
|||||||
reader.close();
|
reader.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (IOException e) {
|
catch (Exception e){
|
||||||
e.printStackTrace();
|
src.sendFeedback(PermHelper.simpleColoredText(String.format(ConfigHandler.lang.errorFile, f.getName(), Formatting.RED)), false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user