From fb6a193259f235fc2e22596d891e660314180157 Mon Sep 17 00:00:00 2001 From: NanaChiyo0721 Date: Fri, 17 Jul 2026 18:12:48 +0800 Subject: [PATCH] Fix frustum filtering tracker do not respect switch --- .../features/0074-Frustum-filtering-tracker.patch | 8 ++++---- .../optimizations/FrustumFilteringTrackerConfig.java | 4 ++++ .../java/io/nanachiyo0721/shiroha/utils/Culling.java | 10 ++++++++++ 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/shiroha-server/minecraft-patches/features/0074-Frustum-filtering-tracker.patch b/shiroha-server/minecraft-patches/features/0074-Frustum-filtering-tracker.patch index 4381098..6383a9b 100644 --- a/shiroha-server/minecraft-patches/features/0074-Frustum-filtering-tracker.patch +++ b/shiroha-server/minecraft-patches/features/0074-Frustum-filtering-tracker.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Frustum filtering tracker diff --git a/net/minecraft/server/level/ChunkMap.java b/net/minecraft/server/level/ChunkMap.java -index 849ad46b2941ebba91b428846b3b20d11ee5e1c9..3291d17bc176b306a792a1ca59254615b188ee9e 100644 +index 849ad46b2941ebba91b428846b3b20d11ee5e1c9..c4692448f52db9cf3968ed82df97506a9959a17a 100644 --- a/net/minecraft/server/level/ChunkMap.java +++ b/net/minecraft/server/level/ChunkMap.java @@ -932,6 +932,7 @@ public class ChunkMap extends SimpleRegionStorage implements ChunkHolder.PlayerP @@ -36,7 +36,7 @@ index 849ad46b2941ebba91b428846b3b20d11ee5e1c9..3291d17bc176b306a792a1ca59254615 + if (player.culling != null) { + player.culling.far((float) Math.sqrt(distanceSquared)); + -+ if (visibleToPlayer && !player.isSpectator() && distanceSquared > ((int)io.nanachiyo0721.shiroha.config.modules.optimizations.FrustumFilteringTrackerConfig.minForceVisibleDistance ^ 2)) { ++ if (visibleToPlayer && !player.isSpectator() && distanceSquared > (io.nanachiyo0721.shiroha.config.modules.optimizations.FrustumFilteringTrackerConfig.minForceVisibleDistance * io.nanachiyo0721.shiroha.config.modules.optimizations.FrustumFilteringTrackerConfig.minForceVisibleDistance)) { + visibleToPlayer = player.culling.isVisibleFor(this.entity.getBoundingBox()); + } + } @@ -45,14 +45,14 @@ index 849ad46b2941ebba91b428846b3b20d11ee5e1c9..3291d17bc176b306a792a1ca59254615 if (visibleToPlayer) { if (this.seenBy.add(player.connection)) { diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java -index e5e5e1da691dc71dc806d3b039ff02b1fa50eacf..81c5a042b288fb1208bd71239b16f65dd63e69d6 100644 +index e5e5e1da691dc71dc806d3b039ff02b1fa50eacf..6a314d934e476cf2579034324950961cf35bac84 100644 --- a/net/minecraft/world/entity/player/Player.java +++ b/net/minecraft/world/entity/player/Player.java @@ -186,6 +186,8 @@ public abstract class Player extends Avatar implements ContainerUser { } // CraftBukkit end -+ public io.nanachiyo0721.shiroha.utils.Culling culling = io.nanachiyo0721.shiroha.utils.Culling.newDefault(this); // Shiroha - Frustum filtering tracker ++ public io.nanachiyo0721.shiroha.utils.Culling culling = io.nanachiyo0721.shiroha.config.modules.optimizations.FrustumFilteringTrackerConfig.enabled ? io.nanachiyo0721.shiroha.utils.Culling.fromConfig(this) : null; // Shiroha - Frustum filtering tracker + public Player(final Level level, final GameProfile gameProfile) { super(EntityTypes.PLAYER, level); diff --git a/shiroha-server/src/main/java/io/nanachiyo0721/shiroha/config/modules/optimizations/FrustumFilteringTrackerConfig.java b/shiroha-server/src/main/java/io/nanachiyo0721/shiroha/config/modules/optimizations/FrustumFilteringTrackerConfig.java index 4093407..e0fb0f5 100644 --- a/shiroha-server/src/main/java/io/nanachiyo0721/shiroha/config/modules/optimizations/FrustumFilteringTrackerConfig.java +++ b/shiroha-server/src/main/java/io/nanachiyo0721/shiroha/config/modules/optimizations/FrustumFilteringTrackerConfig.java @@ -11,4 +11,8 @@ public class FrustumFilteringTrackerConfig implements IConfigModule { public static boolean enabled = false; @ConfigInfo(name = "min_force_visible_distance") public static double minForceVisibleDistance = 5.0D; + @ConfigInfo(name = "camera_fov") + public static double camera_fov = 90; + @ConfigInfo(name = "aspect") + public static double aspect = 1.0; } diff --git a/shiroha-server/src/main/java/io/nanachiyo0721/shiroha/utils/Culling.java b/shiroha-server/src/main/java/io/nanachiyo0721/shiroha/utils/Culling.java index ee79e13..bb5d741 100644 --- a/shiroha-server/src/main/java/io/nanachiyo0721/shiroha/utils/Culling.java +++ b/shiroha-server/src/main/java/io/nanachiyo0721/shiroha/utils/Culling.java @@ -1,5 +1,6 @@ package io.nanachiyo0721.shiroha.utils; +import io.nanachiyo0721.shiroha.config.modules.optimizations.FrustumFilteringTrackerConfig; import net.minecraft.world.entity.player.Player; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; @@ -20,6 +21,15 @@ public class Culling { private final Player player; private float[] planes; + public static Culling fromConfig(Player player) { + return new Builder() + .fov((float) Math.toRadians(FrustumFilteringTrackerConfig.camera_fov)) + .near(NEAR) + .aspect((float) FrustumFilteringTrackerConfig.aspect) + .far(FAR) + .build(player); + } + @Contract(value = "_ -> new", pure = true) public static @NonNull Culling newDefault(Player player) { return fromBuilder(new Builder(), player);