diff --git a/main/src/main/java/net/citizensnpcs/ProtocolLibListener.java b/main/src/main/java/net/citizensnpcs/ProtocolLibListener.java
index f3e82658c..a89ba6045 100644
--- a/main/src/main/java/net/citizensnpcs/ProtocolLibListener.java
+++ b/main/src/main/java/net/citizensnpcs/ProtocolLibListener.java
@@ -169,7 +169,24 @@ public class ProtocolLibListener implements Listener {
ListenerOptions.ASYNC) {
@Override
public void onPacketSending(PacketEvent event) {
- RotationTrait trait = rotationTraits.get(event.getPacket().getIntegers().readSafely(0));
+ Integer eid = null;
+ try {
+ eid = event.getPacket().getIntegers().readSafely(0);
+ if (eid == null)
+ return;
+ } catch (FieldAccessException | IllegalArgumentException ex) {
+ if (!LOGGED_ERROR) {
+ Messaging.severe(
+ "Error retrieving entity from ID: ProtocolLib error? Suppressing further exceptions unless debugging.");
+ ex.printStackTrace();
+ LOGGED_ERROR = true;
+ } else if (Messaging.isDebugging()) {
+ ex.printStackTrace();
+ }
+ return;
+ }
+
+ RotationTrait trait = rotationTraits.get(eid);
if (trait == null)
return;
diff --git a/main/src/main/java/net/citizensnpcs/Settings.java b/main/src/main/java/net/citizensnpcs/Settings.java
index 22cae89cb..c969fd7f5 100644
--- a/main/src/main/java/net/citizensnpcs/Settings.java
+++ b/main/src/main/java/net/citizensnpcs/Settings.java
@@ -109,7 +109,7 @@ public class Settings {
"The default MOVEMENT distance in blocks where the NPC will move to before considering a path finished
Note: this is different from the PATHFINDING distance which is specified by path-distance-margin",
"npc.pathfinding.default-distance-margin", 1),
DEFAULT_LOOK_CLOSE("Enable look close by default", "npc.default.look-close.enabled", false),
- DEFAULT_LOOK_CLOSE_RANGE("Default look close range in blocks", "npc.default.look-close.range", 5),
+ DEFAULT_LOOK_CLOSE_RANGE("Default look close range in blocks", "npc.default.look-close.range", 10),
DEFAULT_NPC_HOLOGRAM_LINE_HEIGHT("Default distance between hologram lines", "npc.hologram.default-line-height",
0.4D),
DEFAULT_NPC_LIMIT(
diff --git a/main/src/main/java/net/citizensnpcs/commands/NPCCommandSelector.java b/main/src/main/java/net/citizensnpcs/commands/NPCCommandSelector.java
index 9e2eac728..a16d2371d 100644
--- a/main/src/main/java/net/citizensnpcs/commands/NPCCommandSelector.java
+++ b/main/src/main/java/net/citizensnpcs/commands/NPCCommandSelector.java
@@ -12,6 +12,7 @@ import org.bukkit.conversations.NumericPrompt;
import org.bukkit.conversations.Prompt;
import com.google.common.collect.Lists;
+import com.google.common.primitives.Ints;
import net.citizensnpcs.api.CitizensAPI;
import net.citizensnpcs.api.command.CommandContext;
@@ -99,31 +100,31 @@ public class NPCCommandSelector extends NumericPrompt {
return;
} catch (IllegalArgumentException e) {
}
- try {
- int id = Integer.parseInt(raw);
+
+ Integer id = Ints.tryParse(raw);
+ if (id != null) {
callback.run(npcRegistry.getById(id));
return;
- } catch (NumberFormatException ex) {
- String name = args.getString(1);
- List possible = Lists.newArrayList();
- double range = -1;
- if (args.hasValueFlag("range")) {
- range = Math.abs(args.getFlagDouble("range"));
- }
- for (NPC test : npcRegistry) {
- if (test.getName().equalsIgnoreCase(name)) {
- if (range > 0 && test.isSpawned() && !Util.locationWithinRange(args.getSenderLocation(),
- test.getEntity().getLocation(), range))
- continue;
- possible.add(test);
- }
- }
- if (possible.size() == 1) {
- callback.run(possible.get(0));
- } else if (possible.size() > 1) {
- NPCCommandSelector.start(callback, (Conversable) sender, possible);
- return;
+ }
+ String name = args.getString(1);
+ List possible = Lists.newArrayList();
+ double range = -1;
+ if (args.hasValueFlag("range")) {
+ range = Math.abs(args.getFlagDouble("range"));
+ }
+
+ for (NPC test : npcRegistry) {
+ if (test.getName().equalsIgnoreCase(name)) {
+ if (range > 0 && test.isSpawned()
+ && !Util.locationWithinRange(args.getSenderLocation(), test.getEntity().getLocation(), range))
+ continue;
+ possible.add(test);
}
}
+ if (possible.size() == 1) {
+ callback.run(possible.get(0));
+ } else if (possible.size() > 1) {
+ NPCCommandSelector.start(callback, (Conversable) sender, possible);
+ }
}
}
diff --git a/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java b/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java
index 3fe7a3edc..38a9d02bc 100644
--- a/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java
+++ b/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java
@@ -1476,10 +1476,10 @@ public class NPCCommands {
Paginator paginator = new Paginator().header("NPCs").console(sender instanceof ConsoleCommandSender)
.enablePageSwitcher('/' + args.getRawCommand() + " --page $page");
for (int i = 0; i < npcs.size(); i++) {
- int id = npcs.get(i).getId();
- String line = StringHelper.wrap(id) + " " + npcs.get(i).getName() + " ([[tp]]) ([[tp]]) ([[summon]]) (-)";