Files
DeltaZern/paper-server/src/main/java/org/spigotmc/TrackingRange.java
T
SashegDev a039ea62a9
Build Delta / Build paperclip jar (push) Failing after 5m14s
feat(delta): hook Display tracking budget through TrackingRange (no MC patch needed)
2026-09-30 09:26:22 +00:00

63 lines
2.3 KiB
Java

package org.spigotmc;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.entity.Display;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.ExperienceOrb;
import net.minecraft.world.entity.decoration.ItemFrame;
import net.minecraft.world.entity.decoration.Painting;
import net.minecraft.world.entity.item.ItemEntity;
public final class TrackingRange {
private TrackingRange() {
}
/**
* Gets the range an entity should be 'tracked' by players and visible in
* the client.
*
* @param defaultRange Default range defined by Mojang
*/
public static int getEntityTrackingRange(final Entity entity, final int defaultRange) {
if (defaultRange == 0) {
return defaultRange;
}
final SpigotWorldConfig config = entity.level().spigotConfig;
if (entity instanceof ServerPlayer) {
return config.playerTrackingRange;
}
switch (entity.activationType) {
case RAIDER:
case MONSTER:
case FLYING_MONSTER:
return config.monsterTrackingRange;
case WATER:
case VILLAGER:
case ANIMAL:
return config.animalTrackingRange;
case MISC:
}
if (entity instanceof ItemFrame || entity instanceof Painting || entity instanceof ItemEntity || entity instanceof ExperienceOrb) {
return config.miscTrackingRange;
} else if (entity instanceof Display) {
// Delta start - optional Display range budget (paper-global.yml -> delta)
// Display entities have no physics, collision or gameplay meaning, so trimming
// their tracking range is safe: the client stops seeing them, server state
// stays correct. Off by default so stock Paper behaviour is unchanged.
return me.sashegdev.delta.DeltaTracking.clampDisplayRange(config.displayTrackingRange);
// Delta end
} else {
if (entity instanceof net.minecraft.world.entity.boss.enderdragon.EnderDragon) {
// Exempt ender dragon
return ((ServerLevel) entity.level()).getChunkSource().chunkMap.serverViewDistance;
}
return config.otherTrackingRange;
}
}
}