From 3b6ce17b1f490cfd14a3488f9389233d59ca0107 Mon Sep 17 00:00:00 2001 From: Creeam <102713261+HaHaWTH@users.noreply.github.com> Date: Tue, 11 Feb 2025 08:03:00 -0800 Subject: [PATCH] Dont throw in async thread & Clean up (#222) * Dont throw in async thread * Fix typo --- .../0047-Cache-player-profileResult.patch | 8 ++--- ...082-Dont-send-useless-entity-packets.patch | 30 ++++++++----------- .../features/0084-Multithreaded-Tracker.patch | 4 +-- .../leaf/async/path/AsyncPathProcessor.java | 3 +- 4 files changed, 19 insertions(+), 26 deletions(-) diff --git a/leaf-server/minecraft-patches/features/0047-Cache-player-profileResult.patch b/leaf-server/minecraft-patches/features/0047-Cache-player-profileResult.patch index b0cc2bd2..22f7af70 100644 --- a/leaf-server/minecraft-patches/features/0047-Cache-player-profileResult.patch +++ b/leaf-server/minecraft-patches/features/0047-Cache-player-profileResult.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Cache player profileResult diff --git a/net/minecraft/server/network/ServerLoginPacketListenerImpl.java b/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -index 069477e524a28b20a0289221858bdc802704a890..595cfb31dd2c026ef9946429608c2c7497bf9de0 100644 +index 069477e524a28b20a0289221858bdc802704a890..21ecbbdd97204477dadd2ade1d93f64cf91c7dfe 100644 --- a/net/minecraft/server/network/ServerLoginPacketListenerImpl.java +++ b/net/minecraft/server/network/ServerLoginPacketListenerImpl.java @@ -71,6 +71,11 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, @@ -13,7 +13,7 @@ index 069477e524a28b20a0289221858bdc802704a890..595cfb31dd2c026ef9946429608c2c74 public boolean iKnowThisMayNotBeTheBestIdeaButPleaseDisableUsernameValidation = false; // Paper - username validation overriding private int velocityLoginMessageId = -1; // Paper - Add Velocity IP Forwarding Support + // Leaf start - Cache player profileResult -+ private static final com.github.benmanes.caffeine.cache.Cache playerProfileResultCahce = com.github.benmanes.caffeine.cache.Caffeine.newBuilder() ++ private static final com.github.benmanes.caffeine.cache.Cache playerProfileResultCache = com.github.benmanes.caffeine.cache.Caffeine.newBuilder() + .expireAfterWrite(org.dreeam.leaf.config.modules.misc.Cache.cachePlayerProfileResultTimeout, java.util.concurrent.TimeUnit.MINUTES) + .build(); + // Leaf end - Cache player profileResult @@ -30,13 +30,13 @@ index 069477e524a28b20a0289221858bdc802704a890..595cfb31dd2c026ef9946429608c2c74 + // Leaf start - Cache player profileResult + ProfileResult profileResult; + if (org.dreeam.leaf.config.modules.misc.Cache.cachePlayerProfileResult) { -+ profileResult = playerProfileResultCahce.getIfPresent(string1); ++ profileResult = playerProfileResultCache.getIfPresent(string1); + + if (profileResult == null) { + profileResult = ServerLoginPacketListenerImpl.this.server + .getSessionService() + .hasJoinedServer(string1, string, this.getAddress()); -+ playerProfileResultCahce.put(string1, profileResult); ++ playerProfileResultCache.put(string1, profileResult); + } + } else { + profileResult = ServerLoginPacketListenerImpl.this.server diff --git a/leaf-server/minecraft-patches/features/0082-Dont-send-useless-entity-packets.patch b/leaf-server/minecraft-patches/features/0082-Dont-send-useless-entity-packets.patch index 944c6ccd..b24fe9d6 100644 --- a/leaf-server/minecraft-patches/features/0082-Dont-send-useless-entity-packets.patch +++ b/leaf-server/minecraft-patches/features/0082-Dont-send-useless-entity-packets.patch @@ -9,7 +9,7 @@ Original license: MIT Original project: https://github.com/PurpurMC/Purpur diff --git a/net/minecraft/server/level/ServerEntity.java b/net/minecraft/server/level/ServerEntity.java -index ddf2a5e2cfeaa666a081dd857d6a6003d65d0e00..1b9e34574fb5b8955fa37795baebf588fdaeca2a 100644 +index ddf2a5e2cfeaa666a081dd857d6a6003d65d0e00..d8298c7925e3bcea07ead4d438478cc51abcfa16 100644 --- a/net/minecraft/server/level/ServerEntity.java +++ b/net/minecraft/server/level/ServerEntity.java @@ -199,6 +199,8 @@ public class ServerEntity { @@ -21,28 +21,22 @@ index ddf2a5e2cfeaa666a081dd857d6a6003d65d0e00..1b9e34574fb5b8955fa37795baebf588 if (this.entity.hasImpulse || this.trackDelta || this.entity instanceof LivingEntity && ((LivingEntity)this.entity).isFallFlying()) { Vec3 deltaMovement = this.entity.getDeltaMovement(); if (deltaMovement != this.lastSentMovement) { // SparklyPaper start - skip distanceToSqr call in ServerEntity#sendChanges if the delta movement hasn't changed -@@ -275,6 +277,27 @@ public class ServerEntity { +@@ -275,6 +277,21 @@ public class ServerEntity { } } + // Purpur start + private boolean isUselessMoveEntityPacket(@Nullable Packet packet) { -+ if (packet instanceof ClientboundMoveEntityPacket moveEntityPacket) { -+ switch (packet) { -+ case ClientboundMoveEntityPacket.Pos ignored -> { -+ return moveEntityPacket.getXa() == 0 && moveEntityPacket.getYa() == 0 && moveEntityPacket.getZa() == 0; -+ } -+ case ClientboundMoveEntityPacket.PosRot ignored -> { -+ return moveEntityPacket.getXa() == 0 && moveEntityPacket.getYa() == 0 && moveEntityPacket.getZa() == 0 && moveEntityPacket.getyRot() == 0 && moveEntityPacket.getxRot() == 0; -+ } -+ case ClientboundMoveEntityPacket.Rot ignored -> { -+ return moveEntityPacket.getyRot() == 0 && moveEntityPacket.getxRot() == 0; -+ } -+ default -> { -+ } -+ } -+ } -+ return false; ++ if (!(packet instanceof ClientboundMoveEntityPacket moveEntityPacket)) return false; ++ return switch (packet) { ++ case ClientboundMoveEntityPacket.Pos ignored -> ++ moveEntityPacket.getXa() == 0 && moveEntityPacket.getYa() == 0 && moveEntityPacket.getZa() == 0; ++ case ClientboundMoveEntityPacket.PosRot ignored -> ++ moveEntityPacket.getXa() == 0 && moveEntityPacket.getYa() == 0 && moveEntityPacket.getZa() == 0 && moveEntityPacket.getyRot() == 0 && moveEntityPacket.getxRot() == 0; ++ case ClientboundMoveEntityPacket.Rot ignored -> ++ moveEntityPacket.getyRot() == 0 && moveEntityPacket.getxRot() == 0; ++ default -> false; ++ }; + } + // Purpur end + diff --git a/leaf-server/minecraft-patches/features/0084-Multithreaded-Tracker.patch b/leaf-server/minecraft-patches/features/0084-Multithreaded-Tracker.patch index 035b9cca..004a52b9 100644 --- a/leaf-server/minecraft-patches/features/0084-Multithreaded-Tracker.patch +++ b/leaf-server/minecraft-patches/features/0084-Multithreaded-Tracker.patch @@ -164,7 +164,7 @@ index f106373ef3ac4a8685c2939c9e8361688a285913..51ae390c68e7a3aa193329cc3bc47ca6 public boolean visible = true; diff --git a/net/minecraft/server/level/ServerEntity.java b/net/minecraft/server/level/ServerEntity.java -index 1b9e34574fb5b8955fa37795baebf588fdaeca2a..2cca2c7b826dc64c0642751fda006f65e80befc1 100644 +index d8298c7925e3bcea07ead4d438478cc51abcfa16..75670751064add901c2628d53d8028350f966c5d 100644 --- a/net/minecraft/server/level/ServerEntity.java +++ b/net/minecraft/server/level/ServerEntity.java @@ -110,8 +110,16 @@ public class ServerEntity { @@ -186,7 +186,7 @@ index 1b9e34574fb5b8955fa37795baebf588fdaeca2a..2cca2c7b826dc64c0642751fda006f65 } } ); -@@ -441,12 +449,15 @@ public class ServerEntity { +@@ -435,12 +443,15 @@ public class ServerEntity { if (this.entity instanceof LivingEntity) { Set attributesToSync = ((LivingEntity)this.entity).getAttributes().getAttributesToSync(); if (!attributesToSync.isEmpty()) { diff --git a/leaf-server/src/main/java/org/dreeam/leaf/async/path/AsyncPathProcessor.java b/leaf-server/src/main/java/org/dreeam/leaf/async/path/AsyncPathProcessor.java index f9881486..af0f16a8 100644 --- a/leaf-server/src/main/java/org/dreeam/leaf/async/path/AsyncPathProcessor.java +++ b/leaf-server/src/main/java/org/dreeam/leaf/async/path/AsyncPathProcessor.java @@ -1,6 +1,5 @@ package org.dreeam.leaf.async.path; -import com.destroystokyo.paper.util.SneakyThrow; import com.google.common.util.concurrent.ThreadFactoryBuilder; import net.minecraft.server.MinecraftServer; @@ -71,7 +70,7 @@ public class AsyncPathProcessor { .exceptionally(throwable -> { if (throwable instanceof TimeoutException e) { LOGGER.warn("Async Pathfinding process timed out", e); - } else SneakyThrow.sneaky(throwable); + } else LOGGER.warn("Error occurred while processing async path", throwable); return null; }); }