From 6cd0d56e9b4fba853d38cf8867788f8160d5b503 Mon Sep 17 00:00:00 2001 From: Teriuihi Date: Thu, 12 Jan 2023 17:02:30 +0100 Subject: [PATCH 1/6] Added support for uuids in claimslist command --- .../GriefPrevention/DataStore.java | 4 +++ .../GriefPrevention/GriefPrevention.java | 31 +++++++++++++------ 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/src/main/java/me/ryanhamshire/GriefPrevention/DataStore.java b/src/main/java/me/ryanhamshire/GriefPrevention/DataStore.java index 1821371..902aa47 100644 --- a/src/main/java/me/ryanhamshire/GriefPrevention/DataStore.java +++ b/src/main/java/me/ryanhamshire/GriefPrevention/DataStore.java @@ -630,6 +630,10 @@ public abstract class DataStore return playerData; } + synchronized public PlayerData getPlayerDataIfExists(UUID playerID) { + return this.playerNameToPlayerDataMap.get(playerID); + } + abstract PlayerData getPlayerDataFromStorage(UUID playerID); //deletes a claim or subdivision diff --git a/src/main/java/me/ryanhamshire/GriefPrevention/GriefPrevention.java b/src/main/java/me/ryanhamshire/GriefPrevention/GriefPrevention.java index e490f63..6121d00 100644 --- a/src/main/java/me/ryanhamshire/GriefPrevention/GriefPrevention.java +++ b/src/main/java/me/ryanhamshire/GriefPrevention/GriefPrevention.java @@ -2046,13 +2046,14 @@ public class GriefPrevention extends JavaPlugin if (args.length > 1) return false; //player whose claims will be listed - OfflinePlayer otherPlayer; +// OfflinePlayer otherPlayer; + UUID uuid; //if another player isn't specified, assume current player if (args.length < 1) { if (player != null) - otherPlayer = player; + uuid = player.getUniqueId(); else return false; } @@ -2067,21 +2068,31 @@ public class GriefPrevention extends JavaPlugin //otherwise try to find the specified player else { - otherPlayer = this.resolvePlayerByName(args[0]); + OfflinePlayer otherPlayer = this.resolvePlayerByName(args[0]); if (otherPlayer == null) { - GriefPrevention.sendMessage(player, TextMode.Err, Messages.PlayerNotFound2); - return true; + try { + uuid = UUID.fromString(args[0]); + } catch (IllegalArgumentException ignored) { + GriefPrevention.sendMessage(player, TextMode.Err, Messages.PlayerNotFound2); + return true; + } + } else { + uuid = otherPlayer.getUniqueId(); } } //load the target player's data - PlayerData playerData = this.dataStore.getPlayerData(otherPlayer.getUniqueId()); + PlayerData playerData = this.dataStore.getPlayerDataIfExists(uuid); + if (playerData == null) { + GriefPrevention.sendMessage(player, TextMode.Err, Messages.PlayerNotFound2); + return true; + } Vector claims = playerData.getClaims(); GriefPrevention.sendMessage(player, TextMode.Instr, Messages.StartBlockMath, String.valueOf(playerData.getAccruedClaimBlocks()), - String.valueOf((playerData.getBonusClaimBlocks() + this.dataStore.getGroupBonusBlocks(otherPlayer.getUniqueId()))), - String.valueOf((playerData.getAccruedClaimBlocks() + playerData.getBonusClaimBlocks() + this.dataStore.getGroupBonusBlocks(otherPlayer.getUniqueId())))); + String.valueOf((playerData.getBonusClaimBlocks() + this.dataStore.getGroupBonusBlocks(uuid))), + String.valueOf((playerData.getAccruedClaimBlocks() + playerData.getBonusClaimBlocks() + this.dataStore.getGroupBonusBlocks(uuid)))); if (claims.size() > 0) { GriefPrevention.sendMessage(player, TextMode.Instr, Messages.ClaimsListHeader); @@ -2095,8 +2106,8 @@ public class GriefPrevention extends JavaPlugin } //drop the data we just loaded, if the player isn't online - if (!otherPlayer.isOnline()) - this.dataStore.clearCachedPlayerData(otherPlayer.getUniqueId()); + if (!Bukkit.getOfflinePlayer(uuid).isOnline()) + this.dataStore.clearCachedPlayerData(uuid); return true; } From beaa0ca8a52ee2d7ca4e0f096e37138fb3db4643 Mon Sep 17 00:00:00 2001 From: Teriuihi Date: Thu, 12 Jan 2023 17:12:37 +0100 Subject: [PATCH 2/6] Changed how we find the players uuid for claimslist --- .../GriefPrevention/GriefPrevention.java | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/src/main/java/me/ryanhamshire/GriefPrevention/GriefPrevention.java b/src/main/java/me/ryanhamshire/GriefPrevention/GriefPrevention.java index 6121d00..71d1d99 100644 --- a/src/main/java/me/ryanhamshire/GriefPrevention/GriefPrevention.java +++ b/src/main/java/me/ryanhamshire/GriefPrevention/GriefPrevention.java @@ -2068,18 +2068,8 @@ public class GriefPrevention extends JavaPlugin //otherwise try to find the specified player else { - OfflinePlayer otherPlayer = this.resolvePlayerByName(args[0]); - if (otherPlayer == null) - { - try { - uuid = UUID.fromString(args[0]); - } catch (IllegalArgumentException ignored) { - GriefPrevention.sendMessage(player, TextMode.Err, Messages.PlayerNotFound2); - return true; - } - } else { - uuid = otherPlayer.getUniqueId(); - } + OfflinePlayer otherPlayer = Bukkit.getServer().getOfflinePlayer(args[0]); + uuid = otherPlayer.getUniqueId(); } //load the target player's data From 06109e617b9f857ca0e8bd1dadbed68b8d54a697 Mon Sep 17 00:00:00 2001 From: Teriuihi Date: Sun, 22 Jan 2023 20:23:13 +0100 Subject: [PATCH 3/6] Revert "Changed how we find the players uuid for claimslist" This reverts commit beaa0ca8a52ee2d7ca4e0f096e37138fb3db4643. --- .../GriefPrevention/GriefPrevention.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/main/java/me/ryanhamshire/GriefPrevention/GriefPrevention.java b/src/main/java/me/ryanhamshire/GriefPrevention/GriefPrevention.java index 71d1d99..6121d00 100644 --- a/src/main/java/me/ryanhamshire/GriefPrevention/GriefPrevention.java +++ b/src/main/java/me/ryanhamshire/GriefPrevention/GriefPrevention.java @@ -2068,8 +2068,18 @@ public class GriefPrevention extends JavaPlugin //otherwise try to find the specified player else { - OfflinePlayer otherPlayer = Bukkit.getServer().getOfflinePlayer(args[0]); - uuid = otherPlayer.getUniqueId(); + OfflinePlayer otherPlayer = this.resolvePlayerByName(args[0]); + if (otherPlayer == null) + { + try { + uuid = UUID.fromString(args[0]); + } catch (IllegalArgumentException ignored) { + GriefPrevention.sendMessage(player, TextMode.Err, Messages.PlayerNotFound2); + return true; + } + } else { + uuid = otherPlayer.getUniqueId(); + } } //load the target player's data From f5a99cefd32c0b5a323ee74931d54a15a24f6fde Mon Sep 17 00:00:00 2001 From: Teriuihi Date: Tue, 24 Jan 2023 01:58:54 +0100 Subject: [PATCH 4/6] Don't allow players without access trust to shoot targets --- .../GriefPrevention/BlockEventHandler.java | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/main/java/me/ryanhamshire/GriefPrevention/BlockEventHandler.java b/src/main/java/me/ryanhamshire/GriefPrevention/BlockEventHandler.java index add8713..f426199 100644 --- a/src/main/java/me/ryanhamshire/GriefPrevention/BlockEventHandler.java +++ b/src/main/java/me/ryanhamshire/GriefPrevention/BlockEventHandler.java @@ -294,7 +294,7 @@ public class BlockEventHandler implements Listener //If block is a chest, don't allow a DoubleChest to form across a claim boundary denyConnectingDoubleChestsAcrossClaimBoundary(claim, block, player); - + if (claim != null) { playerData.lastClaim = claim; @@ -861,7 +861,7 @@ public class BlockEventHandler implements Listener Block block = event.getHitBlock(); // Ensure projectile affects block. - if (block == null || block.getType() != Material.CHORUS_FLOWER) + if (block == null || !(block.getType() == Material.CHORUS_FLOWER || block.getType() == Material.TARGET)) return; Claim claim = dataStore.getClaimAt(block.getLocation(), false, null); @@ -871,8 +871,8 @@ public class BlockEventHandler implements Listener Player shooter = null; Projectile projectile = event.getEntity(); - if (projectile.getShooter() instanceof Player) - shooter = (Player) projectile.getShooter(); + if (projectile.getShooter() instanceof Player player) + shooter = player; if (shooter == null) { @@ -880,13 +880,20 @@ public class BlockEventHandler implements Listener return; } - Supplier allowContainer = claim.checkPermission(shooter, ClaimPermission.Inventory, event); + Supplier allowAction = claim.checkPermission( + shooter, + switch (block.getType()) + { + case CHORUS_FLOWER -> ClaimPermission.Inventory; + case TARGET -> ClaimPermission.Access; + default -> ClaimPermission.Build; + }, + event); - if (allowContainer != null) + if (allowAction != null) { event.setCancelled(true); - GriefPrevention.sendMessage(shooter, TextMode.Err, allowContainer.get()); - return; + GriefPrevention.sendMessage(shooter, TextMode.Err, allowAction.get()); } } From 4776000c30ee169f9da8f499eb72553c59f49b0e Mon Sep 17 00:00:00 2001 From: Teriuihi Date: Mon, 1 May 2023 02:33:15 +0200 Subject: [PATCH 5/6] Added container trust for rotating item frames --- .../GriefPrevention/PlayerEventHandler.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/java/me/ryanhamshire/GriefPrevention/PlayerEventHandler.java b/src/main/java/me/ryanhamshire/GriefPrevention/PlayerEventHandler.java index 276aec4..21f8056 100644 --- a/src/main/java/me/ryanhamshire/GriefPrevention/PlayerEventHandler.java +++ b/src/main/java/me/ryanhamshire/GriefPrevention/PlayerEventHandler.java @@ -48,6 +48,7 @@ import org.bukkit.entity.EntityType; import org.bukkit.entity.Fish; import org.bukkit.entity.Hanging; import org.bukkit.entity.Item; +import org.bukkit.entity.ItemFrame; import org.bukkit.entity.Llama; import org.bukkit.entity.Mule; import org.bukkit.entity.Player; @@ -623,7 +624,7 @@ class PlayerEventHandler implements Listener } //don't allow interaction with item frames or armor stands in claimed areas without build permission - if (entity.getType() == EntityType.ARMOR_STAND || entity instanceof Hanging) + if (entity.getType() == EntityType.ARMOR_STAND || entity instanceof Hanging && !(entity instanceof ItemFrame)) { String noBuildReason = instance.allowBuild(player, entity.getLocation(), Material.ITEM_FRAME); if (noBuildReason != null) @@ -634,6 +635,17 @@ class PlayerEventHandler implements Listener } } + //don't allow interaction with item frames in claimed areas without container permission + if (entity instanceof ItemFrame) { + Claim claim = this.dataStore.getClaimAt(entity.getLocation(), false, playerData.lastClaim); + Supplier stringSupplier = claim.checkPermission(player, ClaimPermission.Access, event); + if (stringSupplier != null) { + instance.sendMessage(player, TextMode.Err, stringSupplier.get()); + event.setCancelled(true); + return; + } + } + //always allow interactions when player is in ignore claims mode if (playerData.ignoreClaims) return; From 3ba67d597dcaf15455f26e4d5333aa01b1e3eae8 Mon Sep 17 00:00:00 2001 From: Teriuihi Date: Mon, 1 May 2023 22:41:37 +0200 Subject: [PATCH 6/6] Fix for making item frames invisible with diamonds --- .../me/ryanhamshire/GriefPrevention/PlayerEventHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/me/ryanhamshire/GriefPrevention/PlayerEventHandler.java b/src/main/java/me/ryanhamshire/GriefPrevention/PlayerEventHandler.java index 21f8056..762912b 100644 --- a/src/main/java/me/ryanhamshire/GriefPrevention/PlayerEventHandler.java +++ b/src/main/java/me/ryanhamshire/GriefPrevention/PlayerEventHandler.java @@ -636,7 +636,7 @@ class PlayerEventHandler implements Listener } //don't allow interaction with item frames in claimed areas without container permission - if (entity instanceof ItemFrame) { + if ((entity instanceof ItemFrame) && !player.getInventory().getItem(event.getHand()).getType().equals(Material.DIAMOND)) { Claim claim = this.dataStore.getClaimAt(entity.getLocation(), false, playerData.lastClaim); Supplier stringSupplier = claim.checkPermission(player, ClaimPermission.Access, event); if (stringSupplier != null) {