From 5c9403cf7c01933924f96799fd5770d5945f1352 Mon Sep 17 00:00:00 2001 From: Flemmli97 Date: Sun, 4 Apr 2021 12:33:10 +0200 Subject: [PATCH] check if new owner has enough blocks. fix #41 --- Changelog.txt | 7 +++++++ gradle.properties | 2 +- .../flemmli97/flan/commands/CommandClaim.java | 21 ++++++++++++++++++- .../com/flemmli97/flan/config/LangConfig.java | 2 ++ .../flan/event/EntityInteractEvents.java | 6 +++--- 5 files changed, 33 insertions(+), 5 deletions(-) diff --git a/Changelog.txt b/Changelog.txt index d83df52..739106d 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,3 +1,10 @@ +Flan 1.2.4 +====================== +- Fix crash in void worlds #39 +- Fix permission autocomplete #43 +- Fix mod icon #42 +- Check if the new owner has enough claim blocks when using transferClaim. Bypassed with admin mode + Flan 1.2.3 ====================== - Fabric Permission API support for commands and claim creation. See wiki for permission nodes diff --git a/gradle.properties b/gradle.properties index b93bd85..3ecf60e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,7 +8,7 @@ org.gradle.jvmargs=-Xmx2G loader_version=0.9.1+build.205 # Mod Properties - mod_version = 1.2.3 + mod_version = 1.2.4 maven_group = com.flemmli97.flan archives_base_name = flan diff --git a/src/main/java/com/flemmli97/flan/commands/CommandClaim.java b/src/main/java/com/flemmli97/flan/commands/CommandClaim.java index 057c0b1..afccfe8 100644 --- a/src/main/java/com/flemmli97/flan/commands/CommandClaim.java +++ b/src/main/java/com/flemmli97/flan/commands/CommandClaim.java @@ -36,8 +36,8 @@ import net.minecraft.util.Formatting; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -import java.util.Collection; import java.util.ArrayList; +import java.util.Collection; import java.util.List; import java.util.Map; import java.util.UUID; @@ -128,6 +128,25 @@ public class CommandClaim { player.sendMessage(PermHelper.simpleColoredText(ConfigHandler.lang.noClaim, Formatting.RED), false); return 0; } + PlayerClaimData data = PlayerClaimData.get(player); + boolean enoughBlocks = true; + if (!data.isAdminIgnoreClaim()) { + MinecraftServer server = context.getSource().getMinecraftServer(); + ServerPlayerEntity newOwner = server.getPlayerManager().getPlayer(prof.getId()); + if (newOwner != null) { + PlayerClaimData newData = PlayerClaimData.get(newOwner); + enoughBlocks = newData.canUseClaimBlocks(claim.getPlane()); + } else { + OfflinePlayerData newData = new OfflinePlayerData(server, prof.getId()); + enoughBlocks = ConfigHandler.config.maxClaimBlocks == -1 || newData.getUsedClaimBlocks(server) + claim.getPlane() < newData.claimBlocks + newData.additionalClaimBlocks; + } + } + if (!enoughBlocks) { + player.sendMessage(PermHelper.simpleColoredText(ConfigHandler.lang.ownerTransferNoBlocks, Formatting.RED), false); + if (CommandPermission.perm(context.getSource(), CommandPermission.cmdAdminMode, true)) + player.sendMessage(PermHelper.simpleColoredText(ConfigHandler.lang.ownerTransferNoBlocksAdmin, Formatting.RED), false); + return 0; + } if (!storage.transferOwner(claim, player, prof.getId())) { player.sendMessage(PermHelper.simpleColoredText(ConfigHandler.lang.ownerTransferFail, Formatting.RED), false); return 0; diff --git a/src/main/java/com/flemmli97/flan/config/LangConfig.java b/src/main/java/com/flemmli97/flan/config/LangConfig.java index f9d31f2..810c8a3 100644 --- a/src/main/java/com/flemmli97/flan/config/LangConfig.java +++ b/src/main/java/com/flemmli97/flan/config/LangConfig.java @@ -28,6 +28,8 @@ public class LangConfig { public String onlyOnePlayer = "Only one player can be used as argument"; public String ownerTransferSuccess = "New Claimowner now: %s"; public String ownerTransferFail = "Only the owner may transfer claims"; + public String ownerTransferNoBlocks = "The new owner doesnt have enough claimblocks"; + public String ownerTransferNoBlocksAdmin = "You can ignore this by switching to admin mode"; 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/event/EntityInteractEvents.java b/src/main/java/com/flemmli97/flan/event/EntityInteractEvents.java index 5659a18..eae9e5c 100644 --- a/src/main/java/com/flemmli97/flan/event/EntityInteractEvents.java +++ b/src/main/java/com/flemmli97/flan/event/EntityInteractEvents.java @@ -136,14 +136,14 @@ public class EntityInteractEvents { } Entity hit = ((EntityHitResult) res).getEntity(); boolean fail = attackSimple(player, hit, true) != ActionResult.PASS; - if(fail && proj instanceof PersistentProjectileEntity && ((PersistentProjectileEntity) proj).getPierceLevel() > 0) { + if (fail && proj instanceof PersistentProjectileEntity && ((PersistentProjectileEntity) proj).getPierceLevel() > 0) { PersistentProjectileEntity pers = (PersistentProjectileEntity) proj; IntOpenHashSet pierced = ((IPersistentProjectileVars) pers).getPiercedEntities(); - if(pierced == null) + if (pierced == null) pierced = new IntOpenHashSet(5); pierced.add(hit.getEntityId()); ((IPersistentProjectileVars) pers).setPiercedEntities(pierced); - pers.setPierceLevel((byte) (pers.getPierceLevel() +1)); + pers.setPierceLevel((byte) (pers.getPierceLevel() + 1)); } return fail; }