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);
|
selector = new NPCSelector(this);
|
||||||
|
|
||||||
Bukkit.getPluginManager().registerEvents(new EventListen(storedRegistries), this);
|
Bukkit.getPluginManager().registerEvents(new EventListen(), this);
|
||||||
Bukkit.getPluginManager().registerEvents(new Placeholders(), this);
|
Bukkit.getPluginManager().registerEvents(new Placeholders(), this);
|
||||||
Placeholders.registerNPCPlaceholder(Pattern.compile("command_[a-zA-Z_0-9]+"), (npc, sender, input) -> {
|
Placeholders.registerNPCPlaceholder(Pattern.compile("command_[a-zA-Z_0-9]+"), (npc, sender, input) -> {
|
||||||
npc = npc.hasTrait(ClickRedirectTrait.class) ? npc.getTraitNullable(ClickRedirectTrait.class).getNPC()
|
npc = npc.hasTrait(ClickRedirectTrait.class) ? npc.getTraitNullable(ClickRedirectTrait.class).getNPC()
|
||||||
|
|
|
@ -3,7 +3,6 @@ package net.citizensnpcs;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
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.PlayerCreateNPCEvent;
|
||||||
import net.citizensnpcs.api.event.SpawnReason;
|
import net.citizensnpcs.api.event.SpawnReason;
|
||||||
import net.citizensnpcs.api.npc.NPC;
|
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.Owner;
|
||||||
import net.citizensnpcs.api.trait.trait.PlayerFilter;
|
import net.citizensnpcs.api.trait.trait.PlayerFilter;
|
||||||
import net.citizensnpcs.api.util.Messaging;
|
import net.citizensnpcs.api.util.Messaging;
|
||||||
|
@ -121,13 +119,11 @@ import net.citizensnpcs.util.Util;
|
||||||
|
|
||||||
public class EventListen implements Listener {
|
public class EventListen implements Listener {
|
||||||
private Listener chunkEventListener;
|
private Listener chunkEventListener;
|
||||||
private final Map<String, NPCRegistry> registries;
|
|
||||||
private final SkinUpdateTracker skinUpdateTracker;
|
private final SkinUpdateTracker skinUpdateTracker;
|
||||||
private final ListMultimap<ChunkCoord, NPC> toRespawn = ArrayListMultimap.create(64, 4);
|
private final ListMultimap<ChunkCoord, NPC> toRespawn = ArrayListMultimap.create(64, 4);
|
||||||
|
|
||||||
EventListen(Map<String, NPCRegistry> registries) {
|
EventListen() {
|
||||||
this.registries = registries;
|
this.skinUpdateTracker = new SkinUpdateTracker();
|
||||||
this.skinUpdateTracker = new SkinUpdateTracker(registries);
|
|
||||||
try {
|
try {
|
||||||
Class.forName("org.bukkit.event.world.EntitiesLoadEvent");
|
Class.forName("org.bukkit.event.world.EntitiesLoadEvent");
|
||||||
Bukkit.getPluginManager().registerEvents(new Listener() {
|
Bukkit.getPluginManager().registerEvents(new Listener() {
|
||||||
|
@ -209,9 +205,7 @@ public class EventListen implements Listener {
|
||||||
}
|
}
|
||||||
|
|
||||||
private Iterable<NPC> getAllNPCs() {
|
private Iterable<NPC> getAllNPCs() {
|
||||||
return Iterables.filter(
|
return Iterables.filter(Iterables.concat(CitizensAPI.getNPCRegistries()), Predicates.notNull());
|
||||||
Iterables.<NPC> concat(CitizensAPI.getNPCRegistry(), Iterables.concat(registries.values())),
|
|
||||||
Predicates.notNull());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void loadNPCs(ChunkEvent event) {
|
void loadNPCs(ChunkEvent event) {
|
||||||
|
|
|
@ -3057,17 +3057,19 @@ public class NPCCommands {
|
||||||
|
|
||||||
@Command(
|
@Command(
|
||||||
aliases = { "npc" },
|
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",
|
desc = "Says a message from the NPC",
|
||||||
modifiers = { "speak" },
|
modifiers = { "speak" },
|
||||||
min = 2,
|
min = 2,
|
||||||
permission = "citizens.npc.speak")
|
permission = "citizens.npc.speak")
|
||||||
public void speak(CommandContext args, CommandSender sender, NPC npc, @Flag("type") String type,
|
public void speak(CommandContext args, CommandSender sender, NPC npc, @Flag("bubble") Duration bubbleDuration,
|
||||||
@Flag("target") String target, @Flag("range") Float range) throws CommandException {
|
@Flag("type") String type, @Flag("target") String target, @Flag("range") Float range)
|
||||||
|
throws CommandException {
|
||||||
String message = args.getJoinedStrings(1);
|
String message = args.getJoinedStrings(1);
|
||||||
|
|
||||||
SpeechContext context = new SpeechContext(message);
|
SpeechContext context = new SpeechContext(message);
|
||||||
|
|
||||||
|
Player playerRecipient = null;
|
||||||
if (target != null) {
|
if (target != null) {
|
||||||
if (target.matches("\\d+")) {
|
if (target.matches("\\d+")) {
|
||||||
NPC targetNPC = CitizensAPI.getNPCRegistry().getById(Integer.valueOf(args.getFlag("target")));
|
NPC targetNPC = CitizensAPI.getNPCRegistry().getById(Integer.valueOf(args.getFlag("target")));
|
||||||
|
@ -3077,10 +3079,17 @@ public class NPCCommands {
|
||||||
Player player = Bukkit.getPlayerExact(target);
|
Player player = Bukkit.getPlayerExact(target);
|
||||||
if (player != null) {
|
if (player != null) {
|
||||||
context.addRecipient(player);
|
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) {
|
if (range != null) {
|
||||||
npc.getEntity().getNearbyEntities(range, range, range).forEach(e -> {
|
npc.getEntity().getNearbyEntities(range, range, range).forEach(e -> {
|
||||||
if (!CitizensAPI.getNPCRegistry().isNPC(e)) {
|
if (!CitizensAPI.getNPCRegistry().isNPC(e)) {
|
||||||
|
|
|
@ -28,7 +28,6 @@ import com.google.common.collect.Sets;
|
||||||
import net.citizensnpcs.Settings.Setting;
|
import net.citizensnpcs.Settings.Setting;
|
||||||
import net.citizensnpcs.api.CitizensAPI;
|
import net.citizensnpcs.api.CitizensAPI;
|
||||||
import net.citizensnpcs.api.npc.NPC;
|
import net.citizensnpcs.api.npc.NPC;
|
||||||
import net.citizensnpcs.api.npc.NPCRegistry;
|
|
||||||
import net.citizensnpcs.api.util.Messaging;
|
import net.citizensnpcs.api.util.Messaging;
|
||||||
import net.citizensnpcs.util.Util;
|
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<SkinnableEntity, Void> navigating = new WeakHashMap<SkinnableEntity, Void>(25);
|
||||||
private final Map<UUID, PlayerTracker> playerTrackers = new HashMap<UUID, PlayerTracker>(
|
private final Map<UUID, PlayerTracker> playerTrackers = new HashMap<UUID, PlayerTracker>(
|
||||||
Math.max(128, Math.min(1024, Bukkit.getMaxPlayers() / 2)));
|
Math.max(128, Math.min(1024, Bukkit.getMaxPlayers() / 2)));
|
||||||
private final Map<String, NPCRegistry> registries;
|
|
||||||
private final NPCNavigationUpdater updater = new NPCNavigationUpdater();
|
private final NPCNavigationUpdater updater = new NPCNavigationUpdater();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -50,11 +48,7 @@ public class SkinUpdateTracker {
|
||||||
* @param registries
|
* @param registries
|
||||||
* Map of other registries.
|
* Map of other registries.
|
||||||
*/
|
*/
|
||||||
public SkinUpdateTracker(Map<String, NPCRegistry> registries) {
|
public SkinUpdateTracker() {
|
||||||
Preconditions.checkNotNull(registries);
|
|
||||||
|
|
||||||
this.registries = registries;
|
|
||||||
|
|
||||||
updater.runTaskTimer(CitizensAPI.getPlugin(), 1, 1);
|
updater.runTaskTimer(CitizensAPI.getPlugin(), 1, 1);
|
||||||
new NPCNavigationTracker().runTaskTimer(CitizensAPI.getPlugin(), 3, 7);
|
new NPCNavigationTracker().runTaskTimer(CitizensAPI.getPlugin(), 3, 7);
|
||||||
}
|
}
|
||||||
|
@ -103,8 +97,7 @@ public class SkinUpdateTracker {
|
||||||
}
|
}
|
||||||
|
|
||||||
private Iterable<NPC> getAllNPCs() {
|
private Iterable<NPC> getAllNPCs() {
|
||||||
return Iterables.filter(Iterables.concat(CitizensAPI.getNPCRegistry(), Iterables.concat(registries.values())),
|
return Iterables.filter(Iterables.concat(CitizensAPI.getNPCRegistries()), Predicates.notNull());
|
||||||
Predicates.notNull());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<SkinnableEntity> getNearbyNPCs(Player player, boolean reset, boolean checkFov) {
|
private List<SkinnableEntity> getNearbyNPCs(Player player, boolean reset, boolean checkFov) {
|
||||||
|
|
|
@ -258,9 +258,9 @@ public class CommandTrait extends Trait {
|
||||||
: handIn;
|
: handIn;
|
||||||
NPCCommandDispatchEvent event = new NPCCommandDispatchEvent(npc, player);
|
NPCCommandDispatchEvent event = new NPCCommandDispatchEvent(npc, player);
|
||||||
Bukkit.getServer().getPluginManager().callEvent(event);
|
Bukkit.getServer().getPluginManager().callEvent(event);
|
||||||
if (event.isCancelled()) {
|
if (event.isCancelled())
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
Runnable task = new Runnable() {
|
Runnable task = new Runnable() {
|
||||||
Boolean charged = null;
|
Boolean charged = null;
|
||||||
|
|
||||||
|
|
|
@ -22,6 +22,7 @@ import net.citizensnpcs.api.CitizensAPI;
|
||||||
import net.citizensnpcs.api.ai.speech.SpeechContext;
|
import net.citizensnpcs.api.ai.speech.SpeechContext;
|
||||||
import net.citizensnpcs.api.event.NPCRightClickEvent;
|
import net.citizensnpcs.api.event.NPCRightClickEvent;
|
||||||
import net.citizensnpcs.api.exception.NPCLoadException;
|
import net.citizensnpcs.api.exception.NPCLoadException;
|
||||||
|
import net.citizensnpcs.api.persistence.Persist;
|
||||||
import net.citizensnpcs.api.trait.Trait;
|
import net.citizensnpcs.api.trait.Trait;
|
||||||
import net.citizensnpcs.api.trait.TraitName;
|
import net.citizensnpcs.api.trait.TraitName;
|
||||||
import net.citizensnpcs.api.util.DataKey;
|
import net.citizensnpcs.api.util.DataKey;
|
||||||
|
@ -40,13 +41,20 @@ import net.citizensnpcs.util.Util;
|
||||||
public class Text extends Trait implements Runnable, Listener {
|
public class Text extends Trait implements Runnable, Listener {
|
||||||
private final Map<UUID, Long> cooldowns = Maps.newHashMap();
|
private final Map<UUID, Long> cooldowns = Maps.newHashMap();
|
||||||
private int currentIndex;
|
private int currentIndex;
|
||||||
|
@Persist
|
||||||
private int delay = -1;
|
private int delay = -1;
|
||||||
|
@Persist(value = "talkitem")
|
||||||
private String itemInHandPattern = "default";
|
private String itemInHandPattern = "default";
|
||||||
private final Plugin plugin;
|
private final Plugin plugin;
|
||||||
|
@Persist(value = "random-talker")
|
||||||
private boolean randomTalker = Setting.DEFAULT_RANDOM_TALKER.asBoolean();
|
private boolean randomTalker = Setting.DEFAULT_RANDOM_TALKER.asBoolean();
|
||||||
|
@Persist
|
||||||
private double range = Setting.DEFAULT_TALK_CLOSE_RANGE.asDouble();
|
private double range = Setting.DEFAULT_TALK_CLOSE_RANGE.asDouble();
|
||||||
|
@Persist(value = "realistic-looking")
|
||||||
private boolean realisticLooker = Setting.DEFAULT_REALISTIC_LOOKING.asBoolean();
|
private boolean realisticLooker = Setting.DEFAULT_REALISTIC_LOOKING.asBoolean();
|
||||||
|
@Persist(value = "speech-bubbles")
|
||||||
private boolean speechBubbles;
|
private boolean speechBubbles;
|
||||||
|
@Persist(value = "talk-close")
|
||||||
private boolean talkClose = Setting.DEFAULT_TALK_CLOSE.asBoolean();
|
private boolean talkClose = Setting.DEFAULT_TALK_CLOSE.asBoolean();
|
||||||
private final List<String> text = new ArrayList<String>();
|
private final List<String> text = new ArrayList<String>();
|
||||||
|
|
||||||
|
@ -139,14 +147,6 @@ public class Text extends Trait implements Runnable, Listener {
|
||||||
if (text.isEmpty()) {
|
if (text.isEmpty()) {
|
||||||
populateDefaultText();
|
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
|
@EventHandler
|
||||||
|
@ -185,13 +185,6 @@ public class Text extends Trait implements Runnable, Listener {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void save(DataKey key) {
|
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");
|
key.removeKey("text");
|
||||||
for (int i = 0; i < text.size(); i++) {
|
for (int i = 0; i < text.size(); i++) {
|
||||||
key.setString("text." + String.valueOf(i), text.get(i));
|
key.setString("text." + String.valueOf(i), text.get(i));
|
||||||
|
@ -224,7 +217,7 @@ public class Text extends Trait implements Runnable, Listener {
|
||||||
|
|
||||||
if (speechBubbles) {
|
if (speechBubbles) {
|
||||||
HologramTrait trait = npc.getOrAddTrait(HologramTrait.class);
|
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());
|
Setting.DEFAULT_TEXT_SPEECH_BUBBLE_DURATION.asTicks());
|
||||||
} else {
|
} else {
|
||||||
npc.getDefaultSpeechController().speak(new SpeechContext(text.get(index), player));
|
npc.getDefaultSpeechController().speak(new SpeechContext(text.get(index), player));
|
||||||
|
@ -324,5 +317,5 @@ public class Text extends Trait implements Runnable, Listener {
|
||||||
return speechBubbles;
|
return speechBubbles;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Random RANDOM = Util.getFastRandom();
|
private static final Random RANDOM = Util.getFastRandom();
|
||||||
}
|
}
|
Loading…
Reference in New Issue