EntityTrackerFixer/EntityTrackerFixer/src/net/minemora/entitytrackerfixer/v1_16_R3/NMSEntityTracker.java

49 lines
1.7 KiB
Java
Raw Normal View History

2020-11-16 05:30:36 +01:00
package net.minemora.entitytrackerfixer.v1_16_R3;
2020-06-26 19:52:17 +02:00
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Set;
2020-11-16 05:30:36 +01:00
import net.minecraft.server.v1_16_R3.ChunkProviderServer;
import net.minecraft.server.v1_16_R3.PlayerChunkMap;
2020-06-26 19:52:17 +02:00
import net.minemora.entitytrackerfixer.util.ReflectionUtils;
public final class NMSEntityTracker {
private static Method addEntityMethod;
private static Method removeEntityMethod;
static {
try {
addEntityMethod = ReflectionUtils.getPrivateMethod(PlayerChunkMap.class, "addEntity",
2020-11-16 05:30:36 +01:00
new Class[] {net.minecraft.server.v1_16_R3.Entity.class});
2020-06-26 19:52:17 +02:00
removeEntityMethod = ReflectionUtils.getPrivateMethod(PlayerChunkMap.class, "removeEntity",
2020-11-16 05:30:36 +01:00
new Class[] {net.minecraft.server.v1_16_R3.Entity.class});
2020-06-26 19:52:17 +02:00
} catch (NoSuchMethodException | SecurityException | IllegalArgumentException e) {
e.printStackTrace();
}
}
private NMSEntityTracker() {}
2020-11-16 05:30:36 +01:00
public static void trackEntities(ChunkProviderServer cps, Set<net.minecraft.server.v1_16_R3.Entity> trackList) {
2020-06-26 19:52:17 +02:00
try {
2020-11-16 05:30:36 +01:00
for(net.minecraft.server.v1_16_R3.Entity entity : trackList) {
2020-06-26 19:52:17 +02:00
addEntityMethod.invoke(cps.playerChunkMap, entity);
}
} catch (SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
e.printStackTrace();
}
}
2020-11-16 05:30:36 +01:00
public static void untrackEntities(ChunkProviderServer cps, Set<net.minecraft.server.v1_16_R3.Entity> untrackList) {
2020-06-26 19:52:17 +02:00
try {
2020-11-16 05:30:36 +01:00
for(net.minecraft.server.v1_16_R3.Entity entity : untrackList) {
2020-06-26 19:52:17 +02:00
removeEntityMethod.invoke(cps.playerChunkMap, entity);
}
} catch (SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
e.printStackTrace();
}
}
}