2019-09-03 01:07:33 +02:00
|
|
|
package net.minemora.entitytrackerfixer;
|
|
|
|
|
|
|
|
import java.util.HashSet;
|
|
|
|
import java.util.Set;
|
|
|
|
|
|
|
|
import org.bukkit.Bukkit;
|
|
|
|
import org.bukkit.craftbukkit.v1_14_R1.CraftWorld;
|
2019-09-07 21:22:44 +02:00
|
|
|
import org.bukkit.craftbukkit.v1_14_R1.entity.CraftEntity;
|
2019-09-03 01:07:33 +02:00
|
|
|
import org.bukkit.entity.Entity;
|
|
|
|
import org.bukkit.entity.Player;
|
|
|
|
import org.bukkit.scheduler.BukkitRunnable;
|
|
|
|
|
|
|
|
import net.minecraft.server.v1_14_R1.ChunkProviderServer;
|
|
|
|
import net.minecraft.server.v1_14_R1.WorldServer;
|
|
|
|
import net.minemora.entitytrackerfixer.config.ConfigMain;
|
|
|
|
|
|
|
|
public class CheckTask extends BukkitRunnable {
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void run() {
|
|
|
|
if(UntrackerTask.isRunning()) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
for(String worldName : ConfigMain.getWorlds()) {
|
|
|
|
if(Bukkit.getWorld(worldName) == null) {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
checkWorld(worldName);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public void checkWorld(String worldName) {
|
|
|
|
WorldServer ws = ((CraftWorld)Bukkit.getWorld(worldName)).getHandle();
|
|
|
|
ChunkProviderServer cps = ws.getChunkProvider();
|
|
|
|
|
|
|
|
Set<net.minecraft.server.v1_14_R1.Entity> trackAgain = new HashSet<>();
|
|
|
|
|
2019-09-07 21:22:44 +02:00
|
|
|
int d = ConfigMain.getTrackingRange();
|
|
|
|
for(Player player : Bukkit.getWorld(worldName).getPlayers()) {
|
|
|
|
for(Entity ent : player.getNearbyEntities(d, d, d)) {
|
|
|
|
if(!cps.playerChunkMap.trackedEntities.containsKey(ent.getEntityId())) {
|
|
|
|
trackAgain.add(((CraftEntity)ent).getHandle());
|
2019-09-03 01:07:33 +02:00
|
|
|
}
|
|
|
|
}
|
2019-09-07 21:22:44 +02:00
|
|
|
}
|
2019-09-22 17:25:01 +02:00
|
|
|
NMSEntityTracker.trackEntities(cps, trackAgain);
|
2019-09-03 01:07:33 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|