From 2d4bfdeb18e5310efb3f69f0ee5f6d83c87c8740 Mon Sep 17 00:00:00 2001 From: Flemmli97 Date: Sun, 30 Jan 2022 19:21:43 +0100 Subject: [PATCH] fake player permission --- .../flan/api/permission/PermissionRegistry.java | 1 + .../java/io/github/flemmli97/flan/claim/Claim.java | 11 ++++++++++- .../io/github/flemmli97/flan/config/LangManager.java | 3 ++- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/io/github/flemmli97/flan/api/permission/PermissionRegistry.java b/common/src/main/java/io/github/flemmli97/flan/api/permission/PermissionRegistry.java index 9ffcb6e..7ab667a 100644 --- a/common/src/main/java/io/github/flemmli97/flan/api/permission/PermissionRegistry.java +++ b/common/src/main/java/io/github/flemmli97/flan/api/permission/PermissionRegistry.java @@ -86,6 +86,7 @@ public class PermissionRegistry { public static ClaimPermission ANIMALSPAWN = global(new ClaimPermission("ANIMALSPAWN", () -> new ItemStack(Items.PIG_SPAWN_EGG), "Prevent other spawn in claim")); public static ClaimPermission LIGHTNING = global(new ClaimPermission("LIGHTNING", () -> new ItemStack(Items.TRIDENT), "Allow lightning to affect claims", "e.g. set blocks on fire", "or affect animals (mobs are excluded)")); public static ClaimPermission LOCKITEMS = global(new ClaimPermission("LOCKITEMS", () -> new ItemStack(Items.FIREWORK_STAR), true, "If items should be locked on death")); + public static ClaimPermission FAKEPLAYER = global(new ClaimPermission("FAKEPLAYER", () -> new ItemStack(Items.CARROT_ON_A_STICK), false, "Allow fakeplayers to interact in this claim", "Some mods fakeplayer has the users uuid", "For those mods this permission is not needed")); private static ClaimPermission register(ClaimPermission perm) { if (locked) { diff --git a/common/src/main/java/io/github/flemmli97/flan/claim/Claim.java b/common/src/main/java/io/github/flemmli97/flan/claim/Claim.java index 2809260..0a0e9a6 100644 --- a/common/src/main/java/io/github/flemmli97/flan/claim/Claim.java +++ b/common/src/main/java/io/github/flemmli97/flan/claim/Claim.java @@ -238,7 +238,16 @@ public class Claim implements IPermissionContainer { @Override public boolean canInteract(ServerPlayer player, ClaimPermission perm, BlockPos pos, boolean message) { - message = message && player.getClass().equals(ServerPlayer.class); //dont send messages to fake players + boolean realPlayer = player != null && player.getClass().equals(ServerPlayer.class); + message = message && realPlayer; //dont send messages to fake players + //Delegate interaction to FAKEPLAYER perm if a fake player + if (player != null && !realPlayer) { + //Some mods use the actual user/placer/owner whatever of the fakeplayer. E.g. ComputerCraft + //For those mods we dont pass them as fake players + if (!player.getUUID().equals(this.owner) && !this.playersGroups.containsKey(player.getUUID())) { + perm = PermissionRegistry.FAKEPLAYER; + } + } InteractionResult res = ClaimPermissionCheck.check(player, perm, pos); if (res != InteractionResult.PASS) return res != InteractionResult.FAIL; diff --git a/common/src/main/java/io/github/flemmli97/flan/config/LangManager.java b/common/src/main/java/io/github/flemmli97/flan/config/LangManager.java index 237d20b..aea93d0 100644 --- a/common/src/main/java/io/github/flemmli97/flan/config/LangManager.java +++ b/common/src/main/java/io/github/flemmli97/flan/config/LangManager.java @@ -309,7 +309,8 @@ public class LangManager { }); //en_us is basically used as a default modifiable file if (lang.equals("en_us")) { - this.defaultTranslation.forEach((key, t) -> this.translation.putIfAbsent(key, t)); + this.defaultTranslation.forEach(this.translation::putIfAbsent); + this.defaultTranslationArray.forEach(this.translationArr::putIfAbsent); saveTo(this.confDir.resolve("en_us.json").toFile(), this.translation, this.translationArr); } } catch (IOException e) {