From 28a3e0bf7903e2f2c8c517df89fae3ad52b379a6 Mon Sep 17 00:00:00 2001 From: fullwall Date: Sun, 3 Sep 2023 23:41:38 +0800 Subject: [PATCH] Simplify getAllNPCs() implementation --- .../main/java/net/citizensnpcs/Citizens.java | 2 +- .../java/net/citizensnpcs/EventListen.java | 12 +++------ .../citizensnpcs/commands/NPCCommands.java | 15 ++++++++--- .../npc/skin/SkinUpdateTracker.java | 11 ++------ .../net/citizensnpcs/trait/CommandTrait.java | 4 +-- .../net/citizensnpcs/trait/text/Text.java | 27 +++++++------------ 6 files changed, 30 insertions(+), 41 deletions(-) diff --git a/main/src/main/java/net/citizensnpcs/Citizens.java b/main/src/main/java/net/citizensnpcs/Citizens.java index 821d221b3..3e761979f 100644 --- a/main/src/main/java/net/citizensnpcs/Citizens.java +++ b/main/src/main/java/net/citizensnpcs/Citizens.java @@ -416,7 +416,7 @@ public class Citizens extends JavaPlugin implements CitizensPlugin { })); selector = new NPCSelector(this); - Bukkit.getPluginManager().registerEvents(new EventListen(storedRegistries), this); + Bukkit.getPluginManager().registerEvents(new EventListen(), this); Bukkit.getPluginManager().registerEvents(new Placeholders(), this); Placeholders.registerNPCPlaceholder(Pattern.compile("command_[a-zA-Z_0-9]+"), (npc, sender, input) -> { npc = npc.hasTrait(ClickRedirectTrait.class) ? npc.getTraitNullable(ClickRedirectTrait.class).getNPC() diff --git a/main/src/main/java/net/citizensnpcs/EventListen.java b/main/src/main/java/net/citizensnpcs/EventListen.java index 9a47100db..7a162a9ae 100644 --- a/main/src/main/java/net/citizensnpcs/EventListen.java +++ b/main/src/main/java/net/citizensnpcs/EventListen.java @@ -3,7 +3,6 @@ package net.citizensnpcs; import java.lang.reflect.Method; import java.util.Arrays; import java.util.List; -import java.util.Map; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -101,7 +100,6 @@ import net.citizensnpcs.api.event.NPCVehicleDamageEvent; import net.citizensnpcs.api.event.PlayerCreateNPCEvent; import net.citizensnpcs.api.event.SpawnReason; import net.citizensnpcs.api.npc.NPC; -import net.citizensnpcs.api.npc.NPCRegistry; import net.citizensnpcs.api.trait.trait.Owner; import net.citizensnpcs.api.trait.trait.PlayerFilter; import net.citizensnpcs.api.util.Messaging; @@ -121,13 +119,11 @@ import net.citizensnpcs.util.Util; public class EventListen implements Listener { private Listener chunkEventListener; - private final Map registries; private final SkinUpdateTracker skinUpdateTracker; private final ListMultimap toRespawn = ArrayListMultimap.create(64, 4); - EventListen(Map registries) { - this.registries = registries; - this.skinUpdateTracker = new SkinUpdateTracker(registries); + EventListen() { + this.skinUpdateTracker = new SkinUpdateTracker(); try { Class.forName("org.bukkit.event.world.EntitiesLoadEvent"); Bukkit.getPluginManager().registerEvents(new Listener() { @@ -209,9 +205,7 @@ public class EventListen implements Listener { } private Iterable getAllNPCs() { - return Iterables.filter( - Iterables. concat(CitizensAPI.getNPCRegistry(), Iterables.concat(registries.values())), - Predicates.notNull()); + return Iterables.filter(Iterables.concat(CitizensAPI.getNPCRegistries()), Predicates.notNull()); } void loadNPCs(ChunkEvent event) { diff --git a/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java b/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java index d3a3f9d93..2524f4265 100644 --- a/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java +++ b/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java @@ -3057,17 +3057,19 @@ public class NPCCommands { @Command( aliases = { "npc" }, - usage = "speak [message] --target [npcid|player name] --range (range to look for entities to speak to in blocks)", + usage = "speak [message] --bubble [duration] --target [npcid|player name] --range (range to look for entities to speak to in blocks)", desc = "Says a message from the NPC", modifiers = { "speak" }, min = 2, permission = "citizens.npc.speak") - public void speak(CommandContext args, CommandSender sender, NPC npc, @Flag("type") String type, - @Flag("target") String target, @Flag("range") Float range) throws CommandException { + public void speak(CommandContext args, CommandSender sender, NPC npc, @Flag("bubble") Duration bubbleDuration, + @Flag("type") String type, @Flag("target") String target, @Flag("range") Float range) + throws CommandException { String message = args.getJoinedStrings(1); SpeechContext context = new SpeechContext(message); + Player playerRecipient = null; if (target != null) { if (target.matches("\\d+")) { NPC targetNPC = CitizensAPI.getNPCRegistry().getById(Integer.valueOf(args.getFlag("target"))); @@ -3077,10 +3079,17 @@ public class NPCCommands { Player player = Bukkit.getPlayerExact(target); if (player != null) { context.addRecipient(player); + playerRecipient = player; } } } + if (bubbleDuration != null) { + HologramTrait trait = npc.getOrAddTrait(HologramTrait.class); + trait.addTemporaryLine(Placeholders.replace(message, playerRecipient, npc), Util.toTicks(bubbleDuration)); + return; + } + if (range != null) { npc.getEntity().getNearbyEntities(range, range, range).forEach(e -> { if (!CitizensAPI.getNPCRegistry().isNPC(e)) { diff --git a/main/src/main/java/net/citizensnpcs/npc/skin/SkinUpdateTracker.java b/main/src/main/java/net/citizensnpcs/npc/skin/SkinUpdateTracker.java index 60ba9ccbf..111012e02 100644 --- a/main/src/main/java/net/citizensnpcs/npc/skin/SkinUpdateTracker.java +++ b/main/src/main/java/net/citizensnpcs/npc/skin/SkinUpdateTracker.java @@ -28,7 +28,6 @@ import com.google.common.collect.Sets; import net.citizensnpcs.Settings.Setting; import net.citizensnpcs.api.CitizensAPI; import net.citizensnpcs.api.npc.NPC; -import net.citizensnpcs.api.npc.NPCRegistry; import net.citizensnpcs.api.util.Messaging; import net.citizensnpcs.util.Util; @@ -41,7 +40,6 @@ public class SkinUpdateTracker { private final Map navigating = new WeakHashMap(25); private final Map playerTrackers = new HashMap( Math.max(128, Math.min(1024, Bukkit.getMaxPlayers() / 2))); - private final Map registries; private final NPCNavigationUpdater updater = new NPCNavigationUpdater(); /** @@ -50,11 +48,7 @@ public class SkinUpdateTracker { * @param registries * Map of other registries. */ - public SkinUpdateTracker(Map registries) { - Preconditions.checkNotNull(registries); - - this.registries = registries; - + public SkinUpdateTracker() { updater.runTaskTimer(CitizensAPI.getPlugin(), 1, 1); new NPCNavigationTracker().runTaskTimer(CitizensAPI.getPlugin(), 3, 7); } @@ -103,8 +97,7 @@ public class SkinUpdateTracker { } private Iterable getAllNPCs() { - return Iterables.filter(Iterables.concat(CitizensAPI.getNPCRegistry(), Iterables.concat(registries.values())), - Predicates.notNull()); + return Iterables.filter(Iterables.concat(CitizensAPI.getNPCRegistries()), Predicates.notNull()); } private List getNearbyNPCs(Player player, boolean reset, boolean checkFov) { diff --git a/main/src/main/java/net/citizensnpcs/trait/CommandTrait.java b/main/src/main/java/net/citizensnpcs/trait/CommandTrait.java index 26c09cef8..1019e59a3 100644 --- a/main/src/main/java/net/citizensnpcs/trait/CommandTrait.java +++ b/main/src/main/java/net/citizensnpcs/trait/CommandTrait.java @@ -258,9 +258,9 @@ public class CommandTrait extends Trait { : handIn; NPCCommandDispatchEvent event = new NPCCommandDispatchEvent(npc, player); Bukkit.getServer().getPluginManager().callEvent(event); - if (event.isCancelled()) { + if (event.isCancelled()) return; - } + Runnable task = new Runnable() { Boolean charged = null; diff --git a/main/src/main/java/net/citizensnpcs/trait/text/Text.java b/main/src/main/java/net/citizensnpcs/trait/text/Text.java index 6ad92a843..6772c6979 100644 --- a/main/src/main/java/net/citizensnpcs/trait/text/Text.java +++ b/main/src/main/java/net/citizensnpcs/trait/text/Text.java @@ -22,6 +22,7 @@ import net.citizensnpcs.api.CitizensAPI; import net.citizensnpcs.api.ai.speech.SpeechContext; import net.citizensnpcs.api.event.NPCRightClickEvent; import net.citizensnpcs.api.exception.NPCLoadException; +import net.citizensnpcs.api.persistence.Persist; import net.citizensnpcs.api.trait.Trait; import net.citizensnpcs.api.trait.TraitName; import net.citizensnpcs.api.util.DataKey; @@ -40,13 +41,20 @@ import net.citizensnpcs.util.Util; public class Text extends Trait implements Runnable, Listener { private final Map cooldowns = Maps.newHashMap(); private int currentIndex; + @Persist private int delay = -1; + @Persist(value = "talkitem") private String itemInHandPattern = "default"; private final Plugin plugin; + @Persist(value = "random-talker") private boolean randomTalker = Setting.DEFAULT_RANDOM_TALKER.asBoolean(); + @Persist private double range = Setting.DEFAULT_TALK_CLOSE_RANGE.asDouble(); + @Persist(value = "realistic-looking") private boolean realisticLooker = Setting.DEFAULT_REALISTIC_LOOKING.asBoolean(); + @Persist(value = "speech-bubbles") private boolean speechBubbles; + @Persist(value = "talk-close") private boolean talkClose = Setting.DEFAULT_TALK_CLOSE.asBoolean(); private final List text = new ArrayList(); @@ -139,14 +147,6 @@ public class Text extends Trait implements Runnable, Listener { if (text.isEmpty()) { populateDefaultText(); } - - talkClose = key.getBoolean("talk-close", talkClose); - realisticLooker = key.getBoolean("realistic-looking", realisticLooker); - randomTalker = key.getBoolean("random-talker", randomTalker); - range = key.getDouble("range", range); - delay = key.getInt("delay", delay); - speechBubbles = key.getBoolean("speech-bubbles", speechBubbles); - itemInHandPattern = key.getString("talkitem", itemInHandPattern); } @EventHandler @@ -185,13 +185,6 @@ public class Text extends Trait implements Runnable, Listener { @Override public void save(DataKey key) { - key.setInt("delay", delay); - key.setBoolean("talk-close", talkClose); - key.setBoolean("random-talker", randomTalker); - key.setBoolean("realistic-looking", realisticLooker); - key.setDouble("range", range); - key.setString("talkitem", itemInHandPattern); - key.setBoolean("speech-bubbles", speechBubbles); key.removeKey("text"); for (int i = 0; i < text.size(); i++) { key.setString("text." + String.valueOf(i), text.get(i)); @@ -224,7 +217,7 @@ public class Text extends Trait implements Runnable, Listener { if (speechBubbles) { HologramTrait trait = npc.getOrAddTrait(HologramTrait.class); - trait.addTemporaryLine(Placeholders.replace(text.get(index), player), + trait.addTemporaryLine(Placeholders.replace(text.get(index), player, npc), Setting.DEFAULT_TEXT_SPEECH_BUBBLE_DURATION.asTicks()); } else { npc.getDefaultSpeechController().speak(new SpeechContext(text.get(index), player)); @@ -324,5 +317,5 @@ public class Text extends Trait implements Runnable, Listener { return speechBubbles; } - private static Random RANDOM = Util.getFastRandom(); + private static final Random RANDOM = Util.getFastRandom(); } \ No newline at end of file