fix claim overlap display

This commit is contained in:
Flemmli97 2020-08-24 22:32:29 +02:00
parent 835aa5ba21
commit 327d714dd6
3 changed files with 31 additions and 16 deletions

View File

@ -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<Claim> 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<Claim> 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<Claim> 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<Claim> 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) {

View File

@ -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);
}
}
}

View File

@ -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<ItemStack> 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<Claim> 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<Claim> 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);