Skip to content

Commit 421db9f

Browse files
committed
Throw a more informative error when a trackerEntry is null
1 parent 51a84bb commit 421db9f

File tree

1 file changed

+9
-8
lines changed

1 file changed

+9
-8
lines changed

ProtocolLib/src/main/java/com/comphenix/protocol/injector/EntityUtilities.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -97,9 +97,12 @@ private static Collection<?> getCollection(Object value) {
9797
*/
9898
public static void updateEntity(Entity entity, List<Player> observers) throws FieldAccessException {
9999
try {
100-
//EntityTrackerEntry trackEntity = (EntityTrackerEntry) tracker.trackedEntities.get(entity.getEntityId());
100+
// Fix: Throw a more informative error
101101
Object trackerEntry = getEntityTrackerEntry(entity.getWorld(), entity.getEntityId());
102-
102+
if (trackerEntry == null) {
103+
throw new IllegalArgumentException("Cannot find entity trackers for " + entity + (entity.isDead() ? " - entity is dead." : "."));
104+
}
105+
103106
if (trackedPlayersField == null) {
104107
// This one is fairly easy
105108
trackedPlayersField = FuzzyReflection.fromObject(trackerEntry).getFieldByType("java\\.util\\..*");
@@ -109,15 +112,13 @@ public static void updateEntity(Entity entity, List<Player> observers) throws Fi
109112
Collection<?> trackedPlayers = getCollection(FieldUtils.readField(trackedPlayersField, trackerEntry, false));
110113
List<Object> nmsPlayers = unwrapBukkit(observers);
111114

112-
// trackEntity.trackedPlayers.clear();
113115
trackedPlayers.removeAll(nmsPlayers);
114116

115117
// We have to rely on a NAME once again. Damn it.
116118
if (scanPlayersMethod == null) {
117119
scanPlayersMethod = trackerEntry.getClass().getMethod("scanPlayers", List.class);
118120
}
119121

120-
//trackEntity.scanPlayers(server.players);
121122
scanPlayersMethod.invoke(trackerEntry, nmsPlayers);
122123

123124
} catch (IllegalArgumentException e) {
@@ -142,16 +143,16 @@ public static void updateEntity(Entity entity, List<Player> observers) throws Fi
142143
public static List<Player> getEntityTrackers(Entity entity) {
143144
try {
144145
List<Player> result = new ArrayList<Player>();
146+
145147
Object trackerEntry = getEntityTrackerEntry(entity.getWorld(), entity.getEntityId());
146-
147148
if (trackerEntry == null) {
148-
throw new IllegalArgumentException("Cannot find entity trackers for " + entity +
149-
(entity.isDead() ? " - entity is dead." : "."));
149+
throw new IllegalArgumentException("Cannot find entity trackers for " + entity + (entity.isDead() ? " - entity is dead." : "."));
150150
}
151+
151152
if (trackedPlayersField == null) {
152153
trackedPlayersField = FuzzyReflection.fromObject(trackerEntry).getFieldByType("java\\.util\\..*");
153154
}
154-
155+
155156
Collection<?> trackedPlayers = getCollection(FieldUtils.readField(trackedPlayersField, trackerEntry, false));
156157

157158
// Wrap every player - we also ensure that the underlying tracker list is immutable

0 commit comments

Comments
 (0)