From 6e46113429263845e59fbcfa228e114df1340ea0 Mon Sep 17 00:00:00 2001 From: NONPLAYT <76615486+NONPLAYT@users.noreply.github.com> Date: Sun, 13 Jul 2025 01:26:03 +0300 Subject: [PATCH] update culling worker --- .../java/dev/tr7zw/entityculling/CullTask.java | 16 ++-------------- .../org/bxteam/divinemc/config/DivineConfig.java | 12 ++++++++++-- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/divinemc-server/src/main/java/dev/tr7zw/entityculling/CullTask.java b/divinemc-server/src/main/java/dev/tr7zw/entityculling/CullTask.java index b1d5551..93cb42b 100644 --- a/divinemc-server/src/main/java/dev/tr7zw/entityculling/CullTask.java +++ b/divinemc-server/src/main/java/dev/tr7zw/entityculling/CullTask.java @@ -10,7 +10,7 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; import org.bxteam.divinemc.config.DivineConfig; -import org.bxteam.divinemc.spark.ThreadDumperRegistry; +import org.bxteam.divinemc.util.NamedAgnosticThreadFactory; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; @@ -33,19 +33,7 @@ public class CullTask implements Runnable { private final Vec3d aabbMin = new Vec3d(0, 0, 0); private final Vec3d aabbMax = new Vec3d(0, 0, 0); - private static final Executor backgroundWorker = Executors.newCachedThreadPool(task -> { - final TickThread worker = new TickThread("Raytrace Entity Tracker Thread") { - @Override - public void run() { - task.run(); - } - }; - - worker.setDaemon(true); - ThreadDumperRegistry.REGISTRY.add(worker.getName()); - - return worker; - }); + private static final Executor backgroundWorker = Executors.newFixedThreadPool(DivineConfig.MiscCategory.retThreads, new NamedAgnosticThreadFactory<>("Raytrace Entity Tracker Thread", TickThread::new, DivineConfig.MiscCategory.retThreadsPriority)); private final Executor worker; diff --git a/divinemc-server/src/main/java/org/bxteam/divinemc/config/DivineConfig.java b/divinemc-server/src/main/java/org/bxteam/divinemc/config/DivineConfig.java index 7fd8e16..27ba37f 100644 --- a/divinemc-server/src/main/java/org/bxteam/divinemc/config/DivineConfig.java +++ b/divinemc-server/src/main/java/org/bxteam/divinemc/config/DivineConfig.java @@ -612,6 +612,8 @@ public class DivineConfig { // Raytrace Entity Tracker @Experimental("Raytrace Entity Tracker") public static boolean retEnabled = false; + public static int retThreads = 2; + public static int retThreadsPriority = Thread.NORM_PRIORITY + 2; public static boolean retSkipMarkerArmorStands = true; public static int retCheckIntervalMs = 10; public static int retTracingDistance = 48; @@ -702,6 +704,12 @@ public class DivineConfig { private static void ret() { retEnabled = getBoolean(ConfigCategory.MISC.key("raytrace-entity-tracker.enabled"), retEnabled, "Raytrace Entity Tracker uses async ray-tracing to untrack entities players cannot see. Implementation of EntityCulling mod by tr7zw."); + retThreads = getInt(ConfigCategory.MISC.key("raytrace-entity-tracker.threads"), retThreads, + "The number of threads to use for raytrace entity tracker."); + retThreadsPriority = getInt(ConfigCategory.MISC.key("raytrace-entity-tracker.threads-priority"), retThreadsPriority, + "The priority of the threads used for raytrace entity tracker.", + "0 - lowest, 10 - highest, 5 - normal"); + retSkipMarkerArmorStands = getBoolean(ConfigCategory.MISC.key("raytrace-entity-tracker.skip-marker-armor-stands"), retSkipMarkerArmorStands, "Whether to skip tracing entities with marker armor stand"); retCheckIntervalMs = getInt(ConfigCategory.MISC.key("raytrace-entity-tracker.check-interval-ms"), retCheckIntervalMs, @@ -755,8 +763,8 @@ public class DivineConfig { private static void networkSettings() { optimizeNonFlushPacketSending = getBoolean(ConfigCategory.NETWORK.key("general.optimize-non-flush-packet-sending"), optimizeNonFlushPacketSending, "Optimizes non-flush packet sending by using Netty's lazyExecute method to avoid expensive thread wakeup calls when scheduling packet operations.", - "", - "NOTE: This option is NOT compatible with ProtocolLib and may cause issues with other plugins that modify packet handling!"); + "", + "NOTE: This option is NOT compatible with ProtocolLib and may cause issues with other plugins that modify packet handling!"); disableDisconnectSpam = getBoolean(ConfigCategory.NETWORK.key("general.disable-disconnect-spam"), disableDisconnectSpam, "Prevents players being disconnected by 'disconnect.spam' when sending too many chat packets"); dontRespondPingBeforeStart = getBoolean(ConfigCategory.NETWORK.key("general.dont-respond-ping-before-start"), dontRespondPingBeforeStart,