Skip to content

Commit 88444dc

Browse files
committed
Fix another entity issue with Paper
Fixes #220
1 parent 4f5ab9e commit 88444dc

File tree

1 file changed

+18
-13
lines changed

1 file changed

+18
-13
lines changed

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

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -95,14 +95,14 @@ public static void updateEntity(Entity entity, List<Player> observers) throws Fi
9595
}
9696

9797
// Phew, finally there.
98-
Collection<?> trackedPlayers = (Collection<?>) FieldUtils.readField(trackedPlayersField, trackerEntry, false);
98+
Collection<?> trackedPlayers = getTrackedPlayers(trackedPlayersField, trackerEntry);
9999
List<Object> nmsPlayers = unwrapBukkit(observers);
100100

101101
// trackEntity.trackedPlayers.clear();
102102
trackedPlayers.removeAll(nmsPlayers);
103103

104104
// We have to rely on a NAME once again. Damn it.
105-
// TODO: Make sure this stays up to date with version changes - 1.9
105+
// TODO: Make sure this stays up to date with version changes - 1.8 - 1.10
106106
if (scanPlayersMethod == null) {
107107
scanPlayersMethod = trackerEntry.getClass().getMethod("scanPlayers", List.class);
108108
}
@@ -142,16 +142,7 @@ public static List<Player> getEntityTrackers(Entity entity) {
142142
trackedPlayersField = FuzzyReflection.fromObject(trackerEntry).getFieldByType("java\\.util\\..*");
143143
}
144144

145-
Collection<?> trackedPlayers = null;
146-
Object value = FieldUtils.readField(trackedPlayersField, trackerEntry, false);
147-
148-
if (value instanceof Collection) {
149-
trackedPlayers = (Collection<?>) value;
150-
} else if (value instanceof Map) { // PaperSpigot
151-
trackedPlayers = ((Map<?, ?>) value).keySet();
152-
} else { // Please, no more changes
153-
throw new IllegalStateException("trackedPlayers field was an unknown type: expected Set or Map, but got " + value.getClass());
154-
}
145+
Collection<?> trackedPlayers = getTrackedPlayers(trackedPlayersField, trackerEntry);
155146

156147
// Wrap every player - we also ensure that the underlying tracker list is immutable
157148
for (Object tracker : trackedPlayers) {
@@ -165,7 +156,21 @@ public static List<Player> getEntityTrackers(Entity entity) {
165156
throw new FieldAccessException("Security limitation prevented access to the list of tracked players.", e);
166157
}
167158
}
168-
159+
160+
// Damn you, Paper
161+
private static Collection<?> getTrackedPlayers(Field field, Object entry) throws IllegalAccessException {
162+
Object value = FieldUtils.readField(field, entry, false);
163+
164+
if (value instanceof Collection) {
165+
return (Collection<?>) value;
166+
} else if (value instanceof Map) {
167+
return ((Map<?, ?>) value).keySet();
168+
} else {
169+
// Please. No more changes.
170+
throw new IllegalStateException("trackedPlayers field was an unknown type: expected Collection or Map, but got " + value.getClass());
171+
}
172+
}
173+
169174
/**
170175
* Retrieve the entity tracker entry given a ID.
171176
* @param world - world server.

0 commit comments

Comments
 (0)