/** * Remove a entry in the IntHashMap using a fallback method. * @param key - the key of the mapping to remove. * @return The removed element. */ private Object removeFallback(int key) { Object old = get(key); invokeMethod(PUT_METHOD, key, null); return old; }
private static Object getEntityTrackerEntry(World world, int entityID) throws FieldAccessException, IllegalArgumentException { BukkitUnwrapper unwrapper = new BukkitUnwrapper(); Object worldServer = unwrapper.unwrapItem(world); if (entityTrackerField == null) entityTrackerField = FuzzyReflection.fromObject(worldServer). getFieldByType("tracker", MinecraftReflection.getEntityTrackerClass()); // Get the tracker Object tracker = null; try { tracker = FieldUtils.readField(entityTrackerField, worldServer, false); } catch (IllegalAccessException e) { throw new FieldAccessException("Cannot access 'tracker' field due to security limitations.", e); } // Looking for an IntHashMap in the tracker entry if (trackedEntitiesField == null) { trackedEntitiesField = FuzzyReflection.fromObject(tracker, false) .getFieldByType("trackedEntities", MinecraftReflection.getIntHashMapClass()); } // Read the map Object trackedEntities = null; try { trackedEntities = FieldUtils.readField(trackedEntitiesField, tracker, false); } catch (IllegalAccessException e) { throw new FieldAccessException("Cannot access 'trackedEntities' field due to security limitations.", e); } return WrappedIntHashMap.fromHandle(trackedEntities).get(entityID); }