fix resizing claim not respecting owners claimblocks

This commit is contained in:
Flemmli97 2021-06-13 01:58:43 +02:00
parent 9b1400b3d7
commit 23a4675135
8 changed files with 45 additions and 14 deletions

View File

@ -8,6 +8,7 @@ Flan 1.5.0
Default global value is ALLFALSE so disabled. Default global value is ALLFALSE so disabled.
- Add NOHUNGER permission: Disables hunger in claims - Add NOHUNGER permission: Disables hunger in claims
Default global value is ALLFALSE so disabled. Default global value is ALLFALSE so disabled.
- Fix resizing claims of other players not using their claim blocks
Flan 1.4.2 Flan 1.4.2
====================== ======================

View File

@ -490,7 +490,7 @@ public class Claim implements IPermissionContainer {
public void applyEffects(PlayerEntity player) { public void applyEffects(PlayerEntity player) {
this.potions.forEach((effect, amp) -> { this.potions.forEach((effect, amp) -> {
if (!player.hasStatusEffect(effect)) if (!player.hasStatusEffect(effect))
player.applyStatusEffect(new StatusEffectInstance(effect, 200, amp-1, true, false)); player.applyStatusEffect(new StatusEffectInstance(effect, 200, amp - 1, true, false));
}); });
} }

View File

@ -7,10 +7,12 @@ import com.google.gson.JsonArray;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import io.github.flemmli97.flan.Flan; import io.github.flemmli97.flan.Flan;
import io.github.flemmli97.flan.api.ClaimPermission; import io.github.flemmli97.flan.api.ClaimPermission;
import io.github.flemmli97.flan.api.IPlayerData;
import io.github.flemmli97.flan.api.PermissionRegistry; import io.github.flemmli97.flan.api.PermissionRegistry;
import io.github.flemmli97.flan.config.ConfigHandler; import io.github.flemmli97.flan.config.ConfigHandler;
import io.github.flemmli97.flan.player.EnumDisplayType; import io.github.flemmli97.flan.player.EnumDisplayType;
import io.github.flemmli97.flan.player.EnumEditMode; import io.github.flemmli97.flan.player.EnumEditMode;
import io.github.flemmli97.flan.player.OfflinePlayerData;
import io.github.flemmli97.flan.player.PlayerClaimData; import io.github.flemmli97.flan.player.PlayerClaimData;
import it.unimi.dsi.fastutil.longs.Long2ObjectArrayMap; import it.unimi.dsi.fastutil.longs.Long2ObjectArrayMap;
import net.minecraft.server.MinecraftServer; import net.minecraft.server.MinecraftServer;
@ -158,9 +160,19 @@ public class ClaimStorage {
player.sendMessage(PermHelper.simpleColoredText(ConfigHandler.lang.conflictOther, Formatting.RED), false); player.sendMessage(PermHelper.simpleColoredText(ConfigHandler.lang.conflictOther, Formatting.RED), false);
return false; return false;
} }
PlayerClaimData data = PlayerClaimData.get(player);
int diff = newClaim.getPlane() - claim.getPlane(); int diff = newClaim.getPlane() - claim.getPlane();
if (data.canUseClaimBlocks(diff)) { PlayerClaimData data = PlayerClaimData.get(player);
IPlayerData newData = null;
boolean enoughBlocks = false;
if (player.getUuid().equals(claim.getOwner()) || claim.isAdminClaim()) {
enoughBlocks = claim.isAdminClaim() || data.canUseClaimBlocks(diff);
newData = data;
} else {
ServerPlayerEntity other = player.getServer().getPlayerManager().getPlayer(claim.getOwner());
newData = other != null ? PlayerClaimData.get(other) : new OfflinePlayerData(player.getServer(), claim.getOwner());
enoughBlocks = newData.canUseClaimBlocks(diff);
}
if (enoughBlocks) {
Flan.log("Resizing claim {}", claim); Flan.log("Resizing claim {}", claim);
this.deleteClaim(claim, false, EnumEditMode.DEFAULT, player.getServerWorld()); this.deleteClaim(claim, false, EnumEditMode.DEFAULT, player.getServerWorld());
claim.copySizes(newClaim); claim.copySizes(newClaim);
@ -168,7 +180,7 @@ public class ClaimStorage {
data.addDisplayClaim(claim, EnumDisplayType.MAIN, player.getBlockPos().getY()); data.addDisplayClaim(claim, EnumDisplayType.MAIN, player.getBlockPos().getY());
player.sendMessage(PermHelper.simpleColoredText(ConfigHandler.lang.resizeSuccess, Formatting.GOLD), false); player.sendMessage(PermHelper.simpleColoredText(ConfigHandler.lang.resizeSuccess, Formatting.GOLD), false);
player.sendMessage(PermHelper.simpleColoredText(String.format(ConfigHandler.lang.claimBlocksFormat, player.sendMessage(PermHelper.simpleColoredText(String.format(ConfigHandler.lang.claimBlocksFormat,
data.getClaimBlocks(), data.getAdditionalClaims(), data.usedClaimBlocks()), Formatting.GOLD), false); newData.getClaimBlocks(), newData.getAdditionalClaims(), newData.usedClaimBlocks()), Formatting.GOLD), false);
return true; return true;
} }
player.sendMessage(PermHelper.simpleColoredText(ConfigHandler.lang.notEnoughBlocks, Formatting.RED), false); player.sendMessage(PermHelper.simpleColoredText(ConfigHandler.lang.notEnoughBlocks, Formatting.RED), false);

View File

@ -13,6 +13,7 @@ import com.mojang.brigadier.exceptions.SimpleCommandExceptionType;
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 io.github.flemmli97.flan.api.ClaimPermission; import io.github.flemmli97.flan.api.ClaimPermission;
import io.github.flemmli97.flan.api.IPlayerData;
import io.github.flemmli97.flan.api.PermissionRegistry; import io.github.flemmli97.flan.api.PermissionRegistry;
import io.github.flemmli97.flan.claim.Claim; import io.github.flemmli97.flan.claim.Claim;
import io.github.flemmli97.flan.claim.ClaimStorage; import io.github.flemmli97.flan.claim.ClaimStorage;
@ -160,13 +161,8 @@ public class CommandClaim {
if (!data.isAdminIgnoreClaim()) { if (!data.isAdminIgnoreClaim()) {
MinecraftServer server = context.getSource().getMinecraftServer(); MinecraftServer server = context.getSource().getMinecraftServer();
ServerPlayerEntity newOwner = server.getPlayerManager().getPlayer(prof.getId()); ServerPlayerEntity newOwner = server.getPlayerManager().getPlayer(prof.getId());
if (newOwner != null) { IPlayerData newData = newOwner != null ? PlayerClaimData.get(newOwner) : new OfflinePlayerData(server, prof.getId());
PlayerClaimData newData = PlayerClaimData.get(newOwner); enoughBlocks = newData.canUseClaimBlocks(claim.getPlane());
enoughBlocks = newData.canUseClaimBlocks(claim.getPlane());
} else {
OfflinePlayerData newData = new OfflinePlayerData(server, prof.getId());
enoughBlocks = ConfigHandler.config.maxClaimBlocks == -1 || newData.getUsedClaimBlocks() + claim.getPlane() < newData.claimBlocks + newData.additionalClaimBlocks;
}
} }
if (!enoughBlocks) { if (!enoughBlocks) {
player.sendMessage(PermHelper.simpleColoredText(ConfigHandler.lang.ownerTransferNoBlocks, Formatting.RED), false); player.sendMessage(PermHelper.simpleColoredText(ConfigHandler.lang.ownerTransferNoBlocks, Formatting.RED), false);

View File

@ -103,6 +103,7 @@ public class LangConfig {
public String screenMenuSub = "SubClaim-Menu"; public String screenMenuSub = "SubClaim-Menu";
public String screenMenuGlobal = "Edit Global Permissions"; public String screenMenuGlobal = "Edit Global Permissions";
public String screenMenuGroup = "Edit Permissiongroups"; public String screenMenuGroup = "Edit Permissiongroups";
public String screenMenuPotion = "Edit Potioneffects";
public String screenMenuDelete = "Delete Claim"; public String screenMenuDelete = "Delete Claim";
public String screenConfirm = "Confirm"; public String screenConfirm = "Confirm";
public String screenYes = "Yes"; public String screenYes = "Yes";

View File

@ -63,7 +63,7 @@ public class ClaimMenuScreenHandler extends ServerOnlyScreenHandler {
break; break;
case 4: case 4:
ItemStack potions = new ItemStack(Items.POTION); ItemStack potions = new ItemStack(Items.POTION);
potions.setCustomName(ServerScreenHelper.coloredGuiText(ConfigHandler.lang.screenMenuGroup, Formatting.GOLD)); potions.setCustomName(ServerScreenHelper.coloredGuiText(ConfigHandler.lang.screenMenuPotion, Formatting.GOLD));
inv.setStack(i, potions); inv.setStack(i, potions);
break; break;
case 8: case 8:

View File

@ -1,6 +1,7 @@
package io.github.flemmli97.flan.player; package io.github.flemmli97.flan.player;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import io.github.flemmli97.flan.api.IPlayerData;
import io.github.flemmli97.flan.claim.Claim; import io.github.flemmli97.flan.claim.Claim;
import io.github.flemmli97.flan.claim.ClaimStorage; import io.github.flemmli97.flan.claim.ClaimStorage;
import io.github.flemmli97.flan.config.ConfigHandler; import io.github.flemmli97.flan.config.ConfigHandler;
@ -14,7 +15,7 @@ import java.io.IOException;
import java.util.Collection; import java.util.Collection;
import java.util.UUID; import java.util.UUID;
public class OfflinePlayerData { public class OfflinePlayerData implements IPlayerData {
public final int claimBlocks, additionalClaimBlocks; public final int claimBlocks, additionalClaimBlocks;
public final UUID owner; public final UUID owner;
@ -53,4 +54,19 @@ public class OfflinePlayerData {
} }
return usedClaimsBlocks; return usedClaimsBlocks;
} }
@Override
public int getClaimBlocks() {
return this.claimBlocks;
}
@Override
public int getAdditionalClaims() {
return this.additionalClaimBlocks;
}
@Override
public int usedClaimBlocks() {
return this.usedClaimBlocks();
}
} }

View File

@ -3,6 +3,7 @@ package io.github.flemmli97.flan.player;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import io.github.flemmli97.flan.Flan; import io.github.flemmli97.flan.Flan;
import io.github.flemmli97.flan.api.ClaimPermission; import io.github.flemmli97.flan.api.ClaimPermission;
import io.github.flemmli97.flan.api.IPlayerData;
import io.github.flemmli97.flan.api.PermissionRegistry; import io.github.flemmli97.flan.api.PermissionRegistry;
import io.github.flemmli97.flan.claim.Claim; import io.github.flemmli97.flan.claim.Claim;
import io.github.flemmli97.flan.claim.ClaimStorage; import io.github.flemmli97.flan.claim.ClaimStorage;
@ -35,7 +36,7 @@ import java.util.Set;
import java.util.UUID; import java.util.UUID;
import java.util.function.Consumer; import java.util.function.Consumer;
public class PlayerClaimData { public class PlayerClaimData implements IPlayerData {
private int claimBlocks, additionalClaimBlocks, confirmTick, actionCooldown; private int claimBlocks, additionalClaimBlocks, confirmTick, actionCooldown;
@ -68,6 +69,7 @@ public class PlayerClaimData {
return ((IPlayerClaimImpl) player).get(); return ((IPlayerClaimImpl) player).get();
} }
@Override
public int getClaimBlocks() { public int getClaimBlocks() {
return this.claimBlocks; return this.claimBlocks;
} }
@ -85,6 +87,7 @@ public class PlayerClaimData {
return true; return true;
} }
@Override
public int getAdditionalClaims() { public int getAdditionalClaims() {
return this.additionalClaimBlocks; return this.additionalClaimBlocks;
} }
@ -94,6 +97,7 @@ public class PlayerClaimData {
this.dirty = true; this.dirty = true;
} }
@Override
public boolean canUseClaimBlocks(int amount) { public boolean canUseClaimBlocks(int amount) {
if (ConfigHandler.config.maxClaimBlocks == -1) if (ConfigHandler.config.maxClaimBlocks == -1)
return true; return true;
@ -101,6 +105,7 @@ public class PlayerClaimData {
return usedClaimsBlocks + amount <= this.claimBlocks + this.additionalClaimBlocks; return usedClaimsBlocks + amount <= this.claimBlocks + this.additionalClaimBlocks;
} }
@Override
public int usedClaimBlocks() { public int usedClaimBlocks() {
return this.calculateUsedClaimBlocks(); return this.calculateUsedClaimBlocks();
} }