From 327d714dd652276bc82bd5c3f96f58c591fa91c4 Mon Sep 17 00:00:00 2001 From: Flemmli97 Date: Mon, 24 Aug 2020 22:32:29 +0200 Subject: [PATCH] fix claim overlap display --- .../java/com/flemmli97/flan/claim/Claim.java | 27 ++++++++++++------- .../flemmli97/flan/claim/ClaimStorage.java | 4 ++- .../flan/event/ItemInteractEvents.java | 16 +++++++---- 3 files changed, 31 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/flemmli97/flan/claim/Claim.java b/src/main/java/com/flemmli97/flan/claim/Claim.java index 14a4230..b0420cb 100644 --- a/src/main/java/com/flemmli97/flan/claim/Claim.java +++ b/src/main/java/com/flemmli97/flan/claim/Claim.java @@ -5,6 +5,7 @@ import com.flemmli97.flan.player.PlayerClaimData; import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import com.google.common.collect.Maps; +import com.google.common.collect.Sets; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; @@ -20,6 +21,7 @@ import java.util.Arrays; import java.util.EnumMap; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.UUID; public class Claim { @@ -210,17 +212,20 @@ public class Claim { return uuid; } - public boolean tryCreateSubClaim(BlockPos pos1, BlockPos pos2) { + public Set tryCreateSubClaim(BlockPos pos1, BlockPos pos2) { Claim sub = new Claim(pos1, new BlockPos(pos2.getX(), 0, pos2.getZ()), this.owner, this.world); sub.setClaimID(this.generateUUID()); + Set conflicts = Sets.newHashSet(); for(Claim other : this.subClaims) if (sub.intersects(other)) { - return false; + conflicts.add(sub); } - sub.parent = this.claimID; - sub.parentClaim = this; - this.subClaims.add(sub); - return true; + if(conflicts.isEmpty()) { + sub.parent = this.claimID; + sub.parentClaim = this; + this.subClaims.add(sub); + } + return conflicts; } public void addSubClaimGriefprevention(Claim claim){ @@ -245,15 +250,17 @@ public class Claim { return ImmutableList.copyOf(this.subClaims); } - public boolean resizeSubclaim(Claim claim, BlockPos from, BlockPos to){ + public Set resizeSubclaim(Claim claim, BlockPos from, BlockPos to){ 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]); Claim newClaim = new Claim(opposite, to, claim.claimID, this.world); + Set conflicts = Sets.newHashSet(); for(Claim other : this.subClaims) if (!claim.equals(other) && newClaim.intersects(other)) - return false; - claim.copySizes(newClaim); - return true; + conflicts.add(other); + if(conflicts.isEmpty()) + claim.copySizes(newClaim); + return conflicts; } public boolean setPlayerGroup(UUID player, String group, boolean force) { diff --git a/src/main/java/com/flemmli97/flan/claim/ClaimStorage.java b/src/main/java/com/flemmli97/flan/claim/ClaimStorage.java index 13980ac..e59041b 100644 --- a/src/main/java/com/flemmli97/flan/claim/ClaimStorage.java +++ b/src/main/java/com/flemmli97/flan/claim/ClaimStorage.java @@ -76,6 +76,8 @@ public class ClaimStorage { player.sendMessage(PermHelper.simpleColoredText(ConfigHandler.lang.claimCreateSuccess, Formatting.GOLD), false); return true; } + PlayerClaimData data = PlayerClaimData.get(player); + conflicts.forEach(conf->data.addDisplayClaim(conf, EnumDisplayType.CONFLICT, player.getBlockPos().getY())); player.sendMessage(PermHelper.simpleColoredText(ConfigHandler.lang.conflictOther, Formatting.RED), false); return false; } @@ -89,7 +91,7 @@ public class ClaimStorage { if (claims != null) for (Claim other : claims) { if (claim.intersects(other) && !other.equals(except)) { - conflicted.add(claim); + conflicted.add(other); } } } diff --git a/src/main/java/com/flemmli97/flan/event/ItemInteractEvents.java b/src/main/java/com/flemmli97/flan/event/ItemInteractEvents.java index c4c557a..665d032 100644 --- a/src/main/java/com/flemmli97/flan/event/ItemInteractEvents.java +++ b/src/main/java/com/flemmli97/flan/event/ItemInteractEvents.java @@ -24,6 +24,8 @@ import net.minecraft.util.hit.HitResult; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import java.util.Set; + public class ItemInteractEvents { public static TypedActionResult useItem(PlayerEntity p, World world, Hand hand) { @@ -98,18 +100,22 @@ public class ItemInteractEvents { } } else { if(data.currentEdit()!=null){ - boolean fl = claim.resizeSubclaim(data.currentEdit(), data.editingCorner(), target); - if(!fl) + Set fl = claim.resizeSubclaim(data.currentEdit(), data.editingCorner(), target); + if(!fl.isEmpty()) { + fl.forEach(confl -> data.addDisplayClaim(confl, EnumDisplayType.MAIN, player.getBlockPos().getY())); player.sendMessage(PermHelper.simpleColoredText(ConfigHandler.lang.conflictOther, Formatting.RED), false); + } data.setEditClaim(null, 0); data.setEditingCorner(null); } else if (data.editingCorner() != null) { - boolean fl = claim.tryCreateSubClaim(data.editingCorner(), target); - if(!fl) + Set fl = claim.tryCreateSubClaim(data.editingCorner(), target); + data.addDisplayClaim(claim, EnumDisplayType.MAIN, player.getBlockPos().getY()); + if(!fl.isEmpty()) { + fl.forEach(confl -> data.addDisplayClaim(confl, EnumDisplayType.MAIN, player.getBlockPos().getY())); player.sendMessage(PermHelper.simpleColoredText(ConfigHandler.lang.conflictOther, Formatting.RED), false); + } else{ - data.addDisplayClaim(claim, EnumDisplayType.MAIN, player.getBlockPos().getY()); player.sendMessage(PermHelper.simpleColoredText(ConfigHandler.lang.subClaimCreateSuccess, Formatting.GOLD), false); } data.setEditingCorner(null);