From cff7d959f436958b2908250fe53a9195d3b7e8a8 Mon Sep 17 00:00:00 2001 From: HaHaWTH <102713261+HaHaWTH@users.noreply.github.com> Date: Fri, 8 Nov 2024 02:01:24 +0800 Subject: [PATCH] Fix --- .../server/0119-Multithreaded-Tracker.patch | 4 +- ...patch => 0126-TT20-Lag-compensation.patch} | 2 +- ....patch => 0127-Asynchronous-locator.patch} | 4 +- ...28-Virtual-thread-for-chat-executor.patch} | 4 +- ...ckSort-in-NearestLivingEntitySensor.patch} | 0 ...uce-memory-footprint-of-CompoundTag.patch} | 0 ... 0131-Optimize-Entity-distanceToSqr.patch} | 0 ...e-snapshots-for-TileEntity-getOwner.patch} | 0 ...ault-don-t-use-blockstate-snapshots.patch} | 0 ... => 0134-Cache-tile-entity-position.patch} | 0 .../server/0134-TT20-Lag-compensation.patch | 216 ------------------ 11 files changed, 7 insertions(+), 223 deletions(-) rename patches/server/{0125-TT20-Lag-compensation.patch => 0126-TT20-Lag-compensation.patch} (98%) rename patches/server/{0126-Asynchronous-locator.patch => 0127-Asynchronous-locator.patch} (99%) rename patches/server/{0127-Virtual-thread-for-chat-executor.patch => 0128-Virtual-thread-for-chat-executor.patch} (94%) rename patches/server/{0128-Use-QuickSort-in-NearestLivingEntitySensor.patch => 0129-Use-QuickSort-in-NearestLivingEntitySensor.patch} (100%) rename patches/server/{0129-Further-reduce-memory-footprint-of-CompoundTag.patch => 0130-Further-reduce-memory-footprint-of-CompoundTag.patch} (100%) rename patches/server/{0130-Optimize-Entity-distanceToSqr.patch => 0131-Optimize-Entity-distanceToSqr.patch} (100%) rename patches/server/{0131-EMC-Don-t-use-snapshots-for-TileEntity-getOwner.patch => 0132-EMC-Don-t-use-snapshots-for-TileEntity-getOwner.patch} (100%) rename patches/server/{0132-EMC-Default-don-t-use-blockstate-snapshots.patch => 0133-EMC-Default-don-t-use-blockstate-snapshots.patch} (100%) rename patches/server/{0133-Cache-tile-entity-position.patch => 0134-Cache-tile-entity-position.patch} (100%) delete mode 100644 patches/server/0134-TT20-Lag-compensation.patch diff --git a/patches/server/0119-Multithreaded-Tracker.patch b/patches/server/0119-Multithreaded-Tracker.patch index 38d7848d..2e65976b 100644 --- a/patches/server/0119-Multithreaded-Tracker.patch +++ b/patches/server/0119-Multithreaded-Tracker.patch @@ -23,7 +23,7 @@ But it is still recommending to use those packet based, virtual entity based NPC plugins, e.g. ZNPC Plus, Adyeshach, Fancy NPC, etc. diff --git a/src/main/java/io/papermc/paper/plugin/manager/PaperEventManager.java b/src/main/java/io/papermc/paper/plugin/manager/PaperEventManager.java -index e42677bb004201efe1702779a78cc8d0ca05e80f..3fa04bad6f5263c626c22ef0a795947391e1e710 100644 +index e42677bb004201efe1702779a78cc8d0ca05e80f..6676be8304e9415099ed423d3315180cafebd928 100644 --- a/src/main/java/io/papermc/paper/plugin/manager/PaperEventManager.java +++ b/src/main/java/io/papermc/paper/plugin/manager/PaperEventManager.java @@ -42,6 +42,12 @@ class PaperEventManager { @@ -31,7 +31,7 @@ index e42677bb004201efe1702779a78cc8d0ca05e80f..3fa04bad6f5263c626c22ef0a7959473 throw new IllegalStateException(event.getEventName() + " may only be triggered asynchronously."); } else if (!event.isAsynchronous() && !this.server.isPrimaryThread() && !this.server.isStopping()) { + // Leaf start - Multithreaded tracker -+ if (org.dreeam.leaf.config.modules.async.MultithreadedTracker.enabled && Thread.currentThread() instanceof org.dreeam.leaf.async.tracker.MultithreadedTracker.MultithreadedTrackerThread) { ++ if (org.dreeam.leaf.config.modules.async.MultithreadedTracker.enabled) { + net.minecraft.server.MinecraftServer.getServer().scheduleOnMain(event::callEvent); + return; + } diff --git a/patches/server/0125-TT20-Lag-compensation.patch b/patches/server/0126-TT20-Lag-compensation.patch similarity index 98% rename from patches/server/0125-TT20-Lag-compensation.patch rename to patches/server/0126-TT20-Lag-compensation.patch index 9234aca0..44b3ea96 100644 --- a/patches/server/0125-TT20-Lag-compensation.patch +++ b/patches/server/0126-TT20-Lag-compensation.patch @@ -7,7 +7,7 @@ This patch was ported from project: https://github.com/snackbag/TT20 Project license: AGPL-3.0 diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 09e55f62b4cea5b058e04356252f4f56957646b8..279289e0c3dc65fed0ee4b2f5b0ef077ab433d5e 100644 +index 37c377761b45eefab39164a7e714e585a02a4447..f268001f7a821ad1d0db8a02de19e80cc951d0fd 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -1628,6 +1628,12 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop -Date: Mon, 1 Nov 2077 00:00:00 +0800 -Subject: [PATCH] TT20 Lag compensation - -This patch was ported from project: https://github.com/snackbag/TT20 -Project license: AGPL-3.0 - -diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 09e55f62b4cea5b058e04356252f4f56957646b8..279289e0c3dc65fed0ee4b2f5b0ef077ab433d5e 100644 ---- a/src/main/java/net/minecraft/server/MinecraftServer.java -+++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1628,6 +1628,12 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0 ? newTicks : 1; -+ else return newTicks; -+ } -+ -+ public static int tt20(int ticks, boolean limitZero) { -+ int newTicks = (int) Math.ceil(rawTT20(ticks)); -+ -+ if (limitZero) return newTicks > 0 ? newTicks : 1; -+ else return newTicks; -+ } -+ -+ public static double tt20(double ticks, boolean limitZero) { -+ double newTicks = rawTT20(ticks); -+ -+ if (limitZero) return newTicks > 0 ? newTicks : 1; -+ else return newTicks; -+ } -+ -+ public static double rawTT20(double ticks) { -+ return ticks == 0 ? 0 : ticks * TPSCalculator.getMostAccurateTPS() / TPSCalculator.MAX_TPS; -+ } -+ -+ public static class TPSCalculator { -+ public static Long lastTick; -+ public static Long currentTick; -+ private static double allMissedTicks = 0; -+ private static final List tpsHistory = Collections.synchronizedList(new DoubleArrayList()); -+ private static final int historyLimit = 40; -+ -+ public static final int MAX_TPS = 20; -+ public static final int FULL_TICK = 50; -+ -+ private TPSCalculator() {} -+ -+ public static void onTick() { -+ if (currentTick != null) { -+ lastTick = currentTick; -+ } -+ -+ currentTick = System.currentTimeMillis(); -+ addToHistory(getTPS()); -+ clearMissedTicks(); -+ missedTick(); -+ } -+ -+ private static void addToHistory(double tps) { -+ if (tpsHistory.size() >= historyLimit) { -+ tpsHistory.removeFirst(); -+ } -+ -+ tpsHistory.add(tps); -+ } -+ -+ public static long getMSPT() { -+ return currentTick - lastTick; -+ } -+ -+ public static double getAverageTPS() { -+ double sum = 0.0; -+ for (double value : tpsHistory) { -+ sum += value; -+ } -+ return tpsHistory.isEmpty() ? 0.1 : sum / tpsHistory.size(); -+ } -+ -+ public static double getTPS() { -+ if (lastTick == null) return -1; -+ if (getMSPT() <= 0) return 0.1; -+ -+ double tps = 1000 / (double) getMSPT(); -+ return tps > MAX_TPS ? MAX_TPS : tps; -+ } -+ -+ public static void missedTick() { -+ if (lastTick == null) return; -+ -+ long mspt = getMSPT() <= 0 ? 50 : getMSPT(); -+ double missedTicks = (mspt / (double) FULL_TICK) - 1; -+ allMissedTicks += missedTicks <= 0 ? 0 : missedTicks; -+ } -+ -+ public static double getMostAccurateTPS() { -+ return Math.min(getTPS(), getAverageTPS()); -+ } -+ -+ public double getAllMissedTicks() { -+ return allMissedTicks; -+ } -+ -+ public static int applicableMissedTicks() { -+ return (int) Math.floor(allMissedTicks); -+ } -+ -+ public static void clearMissedTicks() { -+ allMissedTicks -= applicableMissedTicks(); -+ } -+ -+ public void resetMissedTicks() { -+ allMissedTicks = 0; -+ } -+ } -+} -\ No newline at end of file