@@ -97,9 +97,12 @@ private static Collection<?> getCollection(Object value) {
97
97
*/
98
98
public static void updateEntity (Entity entity , List <Player > observers ) throws FieldAccessException {
99
99
try {
100
- //EntityTrackerEntry trackEntity = (EntityTrackerEntry) tracker.trackedEntities.get(entity.getEntityId());
100
+ // Fix: Throw a more informative error
101
101
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
+
103
106
if (trackedPlayersField == null ) {
104
107
// This one is fairly easy
105
108
trackedPlayersField = FuzzyReflection .fromObject (trackerEntry ).getFieldByType ("java\\ .util\\ ..*" );
@@ -109,15 +112,13 @@ public static void updateEntity(Entity entity, List<Player> observers) throws Fi
109
112
Collection <?> trackedPlayers = getCollection (FieldUtils .readField (trackedPlayersField , trackerEntry , false ));
110
113
List <Object > nmsPlayers = unwrapBukkit (observers );
111
114
112
- // trackEntity.trackedPlayers.clear();
113
115
trackedPlayers .removeAll (nmsPlayers );
114
116
115
117
// We have to rely on a NAME once again. Damn it.
116
118
if (scanPlayersMethod == null ) {
117
119
scanPlayersMethod = trackerEntry .getClass ().getMethod ("scanPlayers" , List .class );
118
120
}
119
121
120
- //trackEntity.scanPlayers(server.players);
121
122
scanPlayersMethod .invoke (trackerEntry , nmsPlayers );
122
123
123
124
} catch (IllegalArgumentException e ) {
@@ -142,16 +143,16 @@ public static void updateEntity(Entity entity, List<Player> observers) throws Fi
142
143
public static List <Player > getEntityTrackers (Entity entity ) {
143
144
try {
144
145
List <Player > result = new ArrayList <Player >();
146
+
145
147
Object trackerEntry = getEntityTrackerEntry (entity .getWorld (), entity .getEntityId ());
146
-
147
148
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." : "." ));
150
150
}
151
+
151
152
if (trackedPlayersField == null ) {
152
153
trackedPlayersField = FuzzyReflection .fromObject (trackerEntry ).getFieldByType ("java\\ .util\\ ..*" );
153
154
}
154
-
155
+
155
156
Collection <?> trackedPlayers = getCollection (FieldUtils .readField (trackedPlayersField , trackerEntry , false ));
156
157
157
158
// Wrap every player - we also ensure that the underlying tracker list is immutable
0 commit comments