mirror of
https://github.com/CitizensDev/Citizens2.git
synced 2025-02-16 20:31:30 +01:00
Simplify getAllNPCs() implementation
This commit is contained in:
parent
7c0eb422a6
commit
28a3e0bf79
@ -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()
|
||||
|
@ -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<String, NPCRegistry> registries;
|
||||
private final SkinUpdateTracker skinUpdateTracker;
|
||||
private final ListMultimap<ChunkCoord, NPC> toRespawn = ArrayListMultimap.create(64, 4);
|
||||
|
||||
EventListen(Map<String, NPCRegistry> 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<NPC> getAllNPCs() {
|
||||
return Iterables.filter(
|
||||
Iterables.<NPC> concat(CitizensAPI.getNPCRegistry(), Iterables.concat(registries.values())),
|
||||
Predicates.notNull());
|
||||
return Iterables.filter(Iterables.concat(CitizensAPI.getNPCRegistries()), Predicates.notNull());
|
||||
}
|
||||
|
||||
void loadNPCs(ChunkEvent event) {
|
||||
|
@ -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)) {
|
||||
|
@ -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<SkinnableEntity, Void> navigating = new WeakHashMap<SkinnableEntity, Void>(25);
|
||||
private final Map<UUID, PlayerTracker> playerTrackers = new HashMap<UUID, PlayerTracker>(
|
||||
Math.max(128, Math.min(1024, Bukkit.getMaxPlayers() / 2)));
|
||||
private final Map<String, NPCRegistry> registries;
|
||||
private final NPCNavigationUpdater updater = new NPCNavigationUpdater();
|
||||
|
||||
/**
|
||||
@ -50,11 +48,7 @@ public class SkinUpdateTracker {
|
||||
* @param registries
|
||||
* Map of other registries.
|
||||
*/
|
||||
public SkinUpdateTracker(Map<String, NPCRegistry> 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<NPC> 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<SkinnableEntity> getNearbyNPCs(Player player, boolean reset, boolean checkFov) {
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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<UUID, Long> 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<String> text = new ArrayList<String>();
|
||||
|
||||
@ -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();
|
||||
}
|
Loading…
Reference in New Issue
Block a user