EntityTrackerFixer/EntityTrackerFixer/src/net/minemora/entitytrackerfixer/v1_16_R3/tasks/CheckTask.java

64 lines
1.9 KiB
Java
Raw Normal View History

2020-11-16 05:30:36 +01:00
package net.minemora.entitytrackerfixer.v1_16_R3.tasks;
2020-08-25 18:50:57 +02:00
import java.util.HashSet;
import java.util.Set;
import org.bukkit.Bukkit;
import org.bukkit.World;
2020-11-16 05:30:36 +01:00
import org.bukkit.craftbukkit.v1_16_R3.CraftWorld;
import org.bukkit.craftbukkit.v1_16_R3.entity.CraftEntity;
2020-08-25 18:50:57 +02:00
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
2020-11-16 05:30:36 +01:00
import net.minecraft.server.v1_16_R3.ChunkProviderServer;
import net.minecraft.server.v1_16_R3.WorldServer;
2020-08-25 18:50:57 +02:00
import net.minemora.entitytrackerfixer.config.ConfigMain;
2020-11-16 05:30:36 +01:00
import net.minemora.entitytrackerfixer.v1_16_R3.NMSEntityTracker;
import net.minemora.entitytrackerfixer.v1_16_R3.entityTick.EntityTickManager;
2020-08-25 18:50:57 +02:00
public class CheckTask extends BukkitRunnable {
@Override
public void run() {
if(UntrackerTask.isRunning()) {
return;
}
if(ConfigMain.isEnableOnAllWorlds()) {
for(World world : Bukkit.getWorlds()) {
checkWorld(world.getName());
}
}
else {
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();
2020-11-16 05:30:36 +01:00
Set<net.minecraft.server.v1_16_R3.Entity> trackAgain = new HashSet<>();
2020-08-25 18:50:57 +02:00
int d = ConfigMain.getTrackingRange();
for(Player player : Bukkit.getWorld(worldName).getPlayers()) {
for(Entity ent : player.getNearbyEntities(d, d, d)) {
2020-11-16 05:30:36 +01:00
net.minecraft.server.v1_16_R3.Entity nms = ((CraftEntity)ent).getHandle();
2020-08-25 18:50:57 +02:00
if(cps.playerChunkMap.trackedEntities.containsKey(nms.getId()) || !nms.valid) {
continue;
}
trackAgain.add(nms);
}
}
NMSEntityTracker.trackEntities(cps, trackAgain);
if(ConfigMain.isDisableTickUntracked()) {
EntityTickManager.getInstance().enableTicking(trackAgain);
}
}
}