From a039ea62a91a5cdc873c341fad30491d8d770df1 Mon Sep 17 00:00:00 2001 From: SashegDev Date: Wed, 30 Sep 2026 09:26:22 +0000 Subject: [PATCH] feat(delta): hook Display tracking budget through TrackingRange (no MC patch needed) --- .../java/me/sashegdev/delta/DeltaTracking.java | 18 ++++++++++++++++++ .../main/java/org/spigotmc/TrackingRange.java | 7 ++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/paper-server/src/main/java/me/sashegdev/delta/DeltaTracking.java b/paper-server/src/main/java/me/sashegdev/delta/DeltaTracking.java index f94887439..43430ab4c 100644 --- a/paper-server/src/main/java/me/sashegdev/delta/DeltaTracking.java +++ b/paper-server/src/main/java/me/sashegdev/delta/DeltaTracking.java @@ -18,6 +18,24 @@ public final class DeltaTracking { private DeltaTracking() { } + /** + * Клампит дальность трекинга Display-сущностей. + * Вызывается из {@code org.spigotmc.TrackingRange#getEntityTrackingRange}, + * который сам лежит в git-отслеживаемом исходнике Paper — поэтому патчить + * декомпилированный код Minecraft не требуется. + * + * @param range дальность из spigot.yml ({@code entity-tracking-range.display}) + * @return эффективную дальность + */ + public static int clampDisplayRange(final int range) { + final DeltaConfig cfg = delta(); + if (cfg == null || !cfg.displayTrackingRangeEnabled) { + return range; + } + final int configured = cfg.displayTrackingRange; + return configured <= 0 ? range : Math.min(range, configured); + } + /** * @return эффективную дальность трекинга с учётом Delta-конфига */ diff --git a/paper-server/src/main/java/org/spigotmc/TrackingRange.java b/paper-server/src/main/java/org/spigotmc/TrackingRange.java index 05db2aab7..4a71022b1 100644 --- a/paper-server/src/main/java/org/spigotmc/TrackingRange.java +++ b/paper-server/src/main/java/org/spigotmc/TrackingRange.java @@ -45,7 +45,12 @@ public final class TrackingRange { if (entity instanceof ItemFrame || entity instanceof Painting || entity instanceof ItemEntity || entity instanceof ExperienceOrb) { return config.miscTrackingRange; } else if (entity instanceof Display) { - return config.displayTrackingRange; + // 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