From 332595028e11c553c7d7db08726ee6c00feea48b Mon Sep 17 00:00:00 2001 From: Flemmli97 Date: Tue, 25 Aug 2020 21:06:36 +0200 Subject: [PATCH] fix admin claims --- src/main/java/com/flemmli97/flan/claim/Claim.java | 15 +++++++++------ .../com/flemmli97/flan/claim/ClaimStorage.java | 14 +++++++++++--- .../com/flemmli97/flan/commands/CommandClaim.java | 11 +++++++++++ .../com/flemmli97/flan/config/LangConfig.java | 1 + .../flemmli97/flan/player/PlayerClaimData.java | 4 ++-- 5 files changed, 34 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/flemmli97/flan/claim/Claim.java b/src/main/java/com/flemmli97/flan/claim/Claim.java index a1c9806..452524a 100644 --- a/src/main/java/com/flemmli97/flan/claim/Claim.java +++ b/src/main/java/com/flemmli97/flan/claim/Claim.java @@ -91,7 +91,7 @@ public class Claim { return null; if (this.parentClaim == null) { ClaimStorage storage = ClaimStorage.get(this.world); - this.parentClaim = storage.claimUUIDMap.get(this.parent); + this.parentClaim = storage.getFromUUID(this.parent); } return this.parentClaim; } @@ -155,13 +155,13 @@ public class Claim { if (this.hasPerm(perm)) return true; if (message) - player.sendMessage(PermHelper.simpleColoredText(ConfigHandler.lang.noPermissionSimple, Formatting.DARK_RED), false); + player.sendMessage(PermHelper.simpleColoredText(ConfigHandler.lang.noPermissionSimple, Formatting.DARK_RED), true); return false; } if (player.getUuid().equals(this.owner)) return true; PlayerClaimData data = PlayerClaimData.get(player); - if (player.hasPermissionLevel(2) && data.isAdminIgnoreClaim()) + if (player.hasPermissionLevel(2) || data.isAdminIgnoreClaim()) return true; for (Claim claim : this.subClaims) { if (claim.insideClaim(pos)) { @@ -177,14 +177,14 @@ public class Claim { if (map.get(perm)) return true; if (message) - player.sendMessage(PermHelper.simpleColoredText(ConfigHandler.lang.noPermissionSimple, Formatting.DARK_RED), false); + player.sendMessage(PermHelper.simpleColoredText(ConfigHandler.lang.noPermissionSimple, Formatting.DARK_RED), true); return false; } } if (this.hasPerm(perm)) return true; if (message) - player.sendMessage(PermHelper.simpleColoredText(ConfigHandler.lang.noPermissionSimple, Formatting.DARK_RED), false); + player.sendMessage(PermHelper.simpleColoredText(ConfigHandler.lang.noPermissionSimple, Formatting.DARK_RED), true); return false; } @@ -371,7 +371,8 @@ public class Claim { this.minZ = pos.get(2).getAsInt(); this.maxZ = pos.get(3).getAsInt(); this.minY = pos.get(4).getAsInt(); - this.owner = uuid; + if(!obj.has("AdminClaim")) + this.owner = uuid; this.claimID = UUID.fromString(obj.get("ID").getAsString()); this.globalPerm.clear(); this.permissions.clear(); @@ -412,6 +413,8 @@ public class Claim { pos.add(this.minY); obj.add("PosxXzZY", pos); obj.addProperty("ID", this.claimID.toString()); + if(this.owner==null) + obj.addProperty("AdminClaim", true); if (this.parent != null) obj.addProperty("Parent", this.parent.toString()); if (!this.globalPerm.isEmpty()) { diff --git a/src/main/java/com/flemmli97/flan/claim/ClaimStorage.java b/src/main/java/com/flemmli97/flan/claim/ClaimStorage.java index c5fb8ab..b9549bc 100644 --- a/src/main/java/com/flemmli97/flan/claim/ClaimStorage.java +++ b/src/main/java/com/flemmli97/flan/claim/ClaimStorage.java @@ -37,9 +37,9 @@ import java.util.UUID; public class ClaimStorage { - public final Long2ObjectArrayMap> claims = new Long2ObjectArrayMap<>(); - public final Map claimUUIDMap = Maps.newHashMap(); - public final Map> playerClaimMap = Maps.newHashMap(); + private final Long2ObjectArrayMap> claims = new Long2ObjectArrayMap<>(); + private final Map claimUUIDMap = Maps.newHashMap(); + private final Map> playerClaimMap = Maps.newHashMap(); public static ClaimStorage get(ServerWorld world) { return (ClaimStorage) ((IClaimData) world).getClaimData(); @@ -154,6 +154,10 @@ public class ClaimStorage { return null; } + public Claim getFromUUID(UUID uuid) { + return this.claimUUIDMap.get(uuid); + } + private void addClaim(Claim claim) { int[] pos = getChunkPos(claim); for (int x = pos[0]; x <= pos[1]; x++) @@ -175,6 +179,10 @@ public class ClaimStorage { return this.playerClaimMap.containsKey(player) ? ImmutableSet.copyOf(this.playerClaimMap.get(player)) : ImmutableSet.of(); } + public Collection getAdminClaims(){ + return ImmutableSet.copyOf(this.claimUUIDMap.values().stream().filter(claim->claim.getOwner()==null).iterator()); + } + public static int[] getChunkPos(Claim claim) { int[] dim = claim.getDimensions(); int[] pos = new int[4]; diff --git a/src/main/java/com/flemmli97/flan/commands/CommandClaim.java b/src/main/java/com/flemmli97/flan/commands/CommandClaim.java index f5b8ad6..35c41af 100644 --- a/src/main/java/com/flemmli97/flan/commands/CommandClaim.java +++ b/src/main/java/com/flemmli97/flan/commands/CommandClaim.java @@ -9,6 +9,7 @@ import com.flemmli97.flan.gui.ClaimMenuScreenHandler; import com.flemmli97.flan.player.EnumDisplayType; import com.flemmli97.flan.player.EnumEditMode; import com.flemmli97.flan.player.PlayerClaimData; +import com.google.common.collect.Collections2; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.mojang.authlib.GameProfile; @@ -54,6 +55,7 @@ public class CommandClaim { CommandManager.literal("adminMode").requires(src -> src.hasPermissionLevel(2)).executes(CommandClaim::switchAdminMode), CommandManager.literal("readGriefPrevention").requires(src -> src.hasPermissionLevel(2)).executes(CommandClaim::readGriefPreventionData), CommandManager.literal("setAdminClaim").requires(src -> src.hasPermissionLevel(2)).executes(CommandClaim::setAdminClaim), + CommandManager.literal("listAdminClaims").requires(src -> src.hasPermissionLevel(2)).executes(CommandClaim::listAdminClaims), CommandManager.literal("adminDelete").requires(src -> src.hasPermissionLevel(2)).executes(CommandClaim::adminDelete) .then(CommandManager.literal("all").then(CommandManager.argument("players", GameProfileArgumentType.gameProfile())) .executes(CommandClaim::adminDeleteAll)), @@ -304,6 +306,15 @@ public class CommandClaim { return Command.SINGLE_SUCCESS; } + private static int listAdminClaims(CommandContext context) throws CommandSyntaxException { + ServerCommandSource src = context.getSource(); + Collection claims = ClaimStorage.get(src.getWorld()).getAdminClaims(); + src.sendFeedback(PermHelper.simpleColoredText(String.format(ConfigHandler.lang.listAdminClaims, src.getWorld().getRegistryKey().getValue()), Formatting.GOLD), false); + for (Claim claim : claims) + src.sendFeedback(PermHelper.simpleColoredText(claim.formattedClaim(), Formatting.YELLOW), false); + return Command.SINGLE_SUCCESS; + } + private static int readGriefPreventionData(CommandContext context) { ServerCommandSource src = context.getSource(); src.sendFeedback(PermHelper.simpleColoredText(ConfigHandler.lang.readGriefpreventionData, Formatting.GOLD), true); diff --git a/src/main/java/com/flemmli97/flan/config/LangConfig.java b/src/main/java/com/flemmli97/flan/config/LangConfig.java index b8e0676..78829ac 100644 --- a/src/main/java/com/flemmli97/flan/config/LangConfig.java +++ b/src/main/java/com/flemmli97/flan/config/LangConfig.java @@ -19,6 +19,7 @@ public class LangConfig { public String inspectNoClaim = "Nobody owns this block"; public String claimBlocksFormat = "Claim Blocks: %1$d + (Bonus) %2$d; Used: %3$d"; public String listClaims = "Listing all claims:"; + public String listAdminClaims = "Listing all admin-claims in %1:"; public String noPermission = "You don't have the required permissions to do that here!"; public String noPermissionSimple = "Sorry you can't do that here!"; diff --git a/src/main/java/com/flemmli97/flan/player/PlayerClaimData.java b/src/main/java/com/flemmli97/flan/player/PlayerClaimData.java index d22b3c0..83b0d03 100644 --- a/src/main/java/com/flemmli97/flan/player/PlayerClaimData.java +++ b/src/main/java/com/flemmli97/flan/player/PlayerClaimData.java @@ -239,9 +239,9 @@ public class PlayerClaimData { private int calculateUsedClaimBlocks() { int usedClaimsBlocks = 0; for (ServerWorld world : this.player.getServer().getWorlds()) { - Collection claims = ClaimStorage.get(world).playerClaimMap.get(this.player.getUuid()); + Collection claims = ClaimStorage.get(world).allClaimsFromPlayer(this.player.getUuid()); if (claims != null) - usedClaimsBlocks += claims.stream().mapToInt(Claim::getPlane).sum(); + usedClaimsBlocks += claims.stream().filter(claim->claim.getOwner()!=null).mapToInt(Claim::getPlane).sum(); } return usedClaimsBlocks; }