From 7e92c0e8363d397878510f79a0027a784c9b700a Mon Sep 17 00:00:00 2001 From: fullwall Date: Wed, 6 Sep 2023 01:04:44 +0800 Subject: [PATCH] Make Vault optional for PlayerFilter --- .../api/ai/speech/SpeechContext.java | 27 +++++++------------ .../api/trait/trait/PlayerFilter.java | 19 +++++-------- .../citizensnpcs/api/util/PermissionUtil.java | 24 +++++++++++++++++ .../persistence/PersistenceLoaderTest.java | 3 +++ 4 files changed, 44 insertions(+), 29 deletions(-) create mode 100644 src/main/java/net/citizensnpcs/api/util/PermissionUtil.java diff --git a/src/main/java/net/citizensnpcs/api/ai/speech/SpeechContext.java b/src/main/java/net/citizensnpcs/api/ai/speech/SpeechContext.java index 7cec33ff..dc10adf2 100644 --- a/src/main/java/net/citizensnpcs/api/ai/speech/SpeechContext.java +++ b/src/main/java/net/citizensnpcs/api/ai/speech/SpeechContext.java @@ -6,7 +6,6 @@ import java.util.List; import org.bukkit.entity.Entity; -import org.bukkit.entity.LivingEntity; import net.citizensnpcs.api.ai.speech.event.NPCSpeechEvent; import net.citizensnpcs.api.npc.NPC; @@ -27,12 +26,13 @@ public SpeechContext() { } public SpeechContext(NPC talker, String message) { - if (talker != null) + if (talker != null) { setTalker(talker.getEntity()); + } this.message = message; } - public SpeechContext(NPC talker, String message, LivingEntity recipient) { + public SpeechContext(NPC talker, String message, Entity recipient) { this(talker, message); if (recipient != null) { addRecipient(recipient); @@ -43,10 +43,11 @@ public SpeechContext(String message) { this.message = message; } - public SpeechContext(String message, LivingEntity recipient) { + public SpeechContext(String message, Entity recipient) { this.message = message; - if (recipient != null) + if (recipient != null) { addRecipient(recipient); + } } /** @@ -59,17 +60,13 @@ public SpeechContext(String message, LivingEntity recipient) { * */ public SpeechContext addRecipient(Entity entity) { - if (recipients.isEmpty()) + if (recipients.isEmpty()) { recipients = new ArrayList(); + } recipients.add(new TalkableEntity(entity)); return this; } - @Deprecated - public SpeechContext addRecipient(LivingEntity entity) { - return addRecipient((Entity) entity); - } - /** * Adds a list of {@link Talkable} recipients. The {@link VocalChord} should use this information to correctly * direct the message. Note: depending on the VocalChord, this list may not be inclusive as to who gets the message. @@ -80,8 +77,9 @@ public SpeechContext addRecipient(LivingEntity entity) { * */ public SpeechContext addRecipients(List talkables) { - if (recipients.isEmpty()) + if (recipients.isEmpty()) { recipients = new ArrayList(); + } recipients.addAll(talkables); return this; } @@ -147,11 +145,6 @@ public void setTalker(Entity entity) { this.talker = new TalkableEntity(entity); } - @Deprecated - public void setTalker(LivingEntity entity) { - setTalker((Entity) entity); - } - /** * @return number of recipients. */ diff --git a/src/main/java/net/citizensnpcs/api/trait/trait/PlayerFilter.java b/src/main/java/net/citizensnpcs/api/trait/trait/PlayerFilter.java index 23f047e7..bf9948ca 100644 --- a/src/main/java/net/citizensnpcs/api/trait/trait/PlayerFilter.java +++ b/src/main/java/net/citizensnpcs/api/trait/trait/PlayerFilter.java @@ -20,6 +20,7 @@ import net.citizensnpcs.api.persistence.Persist; import net.citizensnpcs.api.trait.Trait; import net.citizensnpcs.api.trait.TraitName; +import net.citizensnpcs.api.util.PermissionUtil; @TraitName("playerfilter") public class PlayerFilter extends Trait { @@ -47,22 +48,16 @@ public PlayerFilter(BiConsumer hideFunction, BiConsumer permission.playerInGroup(p, group))) - return true; - } + if (groups != null && PermissionUtil.inGroup(groups, p) == true) + return true; + break; case ALLOWLIST: if (players != null && !players.contains(p.getUniqueId())) return true; - if (groups != null) { - net.milkbowl.vault.permission.Permission permission = Bukkit.getServicesManager() - .getRegistration(net.milkbowl.vault.permission.Permission.class).getProvider(); - if (!groups.stream().anyMatch(group -> permission.playerInGroup(p, group))) - return true; - } + if (groups != null && PermissionUtil.inGroup(groups, p) == false) + return true; + break; } return false; diff --git a/src/main/java/net/citizensnpcs/api/util/PermissionUtil.java b/src/main/java/net/citizensnpcs/api/util/PermissionUtil.java new file mode 100644 index 00000000..944a30c6 --- /dev/null +++ b/src/main/java/net/citizensnpcs/api/util/PermissionUtil.java @@ -0,0 +1,24 @@ +package net.citizensnpcs.api.util; + +import java.util.Collection; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +import net.milkbowl.vault.permission.Permission; + +public class PermissionUtil { + public static Boolean inGroup(Collection groups, Player player) { + if (!SUPPORT_PERMISSION) + return null; + try { + Permission permission = Bukkit.getServicesManager().getRegistration(Permission.class).getProvider(); + return groups.stream().anyMatch(group -> permission.playerInGroup(player, group)); + } catch (Throwable t) { + SUPPORT_PERMISSION = false; + return null; + } + } + + private static boolean SUPPORT_PERMISSION = true; +} diff --git a/src/test/java/net/citizensnpcs/api/persistence/PersistenceLoaderTest.java b/src/test/java/net/citizensnpcs/api/persistence/PersistenceLoaderTest.java index 5e4fe201..adec6c10 100644 --- a/src/test/java/net/citizensnpcs/api/persistence/PersistenceLoaderTest.java +++ b/src/test/java/net/citizensnpcs/api/persistence/PersistenceLoaderTest.java @@ -68,7 +68,10 @@ public void loadsCollections() { @Test public void loadsNullSets() { SpecificCollectionClassTest test = PersistenceLoader.load(SpecificCollectionClassTest.class, root); + PersistenceLoader.save(test, root); + PersistenceLoader.load(test, root); assertEquals(test.list, null); + assertEquals(test.set, null); } @Test