From b0dacad28da8a9234b53d30c8709a4b21ca5f0d2 Mon Sep 17 00:00:00 2001 From: Bacteriawa Date: Thu, 26 Jun 2025 00:17:11 +0800 Subject: [PATCH] Tidying up patches --- ...42-Purpur-Use-alternative-keep-alive.patch | 67 ------------- ...-SparklyPaper-Optimize-canSee-checks.patch | 21 ---- ...p-distanceToSqr-call-in-ServerEntity.patch | 30 ------ .../0045-Correct-player-respawn-place.patch | 45 --------- ...d-IllegalArgumentException-crash-fix.patch | 52 ---------- ...7-Force-disable-builtin-spark-plugin.patch | 98 ------------------- ...ue-around-entity-memory-typed-Global.patch | 86 ---------------- .../0049-Fix-creative-player-item-pick.patch | 27 ----- ...050-Fix-entity-portal-teleport-speed.patch | 67 ------------- ...051-Fix-off-tickregion-sync-teleport.patch | 43 -------- ...Fix-uncorrected-death-check-of-folia.patch | 20 ---- ...f-entity-was-moving-to-another-regio.patch | 55 ----------- ...folia-off-region-POI-accessing-issue.patch | 20 ---- ...creature-spawn-event-unless-some-plu.patch | 39 -------- .../features/0056-Cpu-affinity.patch | 36 ------- ...mporarily-fix-teleport-yam-and-pitch.patch | 21 ---- 16 files changed, 727 deletions(-) delete mode 100644 luminol-server/minecraft-patches/features/0042-Purpur-Use-alternative-keep-alive.patch delete mode 100644 luminol-server/minecraft-patches/features/0043-SparklyPaper-Optimize-canSee-checks.patch delete mode 100644 luminol-server/minecraft-patches/features/0044-SparklyPaper-Skip-distanceToSqr-call-in-ServerEntity.patch delete mode 100644 luminol-server/minecraft-patches/features/0045-Correct-player-respawn-place.patch delete mode 100644 luminol-server/minecraft-patches/features/0046-Command-IllegalArgumentException-crash-fix.patch delete mode 100644 luminol-server/minecraft-patches/features/0047-Force-disable-builtin-spark-plugin.patch delete mode 100644 luminol-server/minecraft-patches/features/0048-Fix-a-series-issue-around-entity-memory-typed-Global.patch delete mode 100644 luminol-server/minecraft-patches/features/0049-Fix-creative-player-item-pick.patch delete mode 100644 luminol-server/minecraft-patches/features/0050-Fix-entity-portal-teleport-speed.patch delete mode 100644 luminol-server/minecraft-patches/features/0051-Fix-off-tickregion-sync-teleport.patch delete mode 100644 luminol-server/minecraft-patches/features/0052-Fix-uncorrected-death-check-of-folia.patch delete mode 100644 luminol-server/minecraft-patches/features/0053-Teleport-async-if-entity-was-moving-to-another-regio.patch delete mode 100644 luminol-server/minecraft-patches/features/0054-Try-fixing-folia-off-region-POI-accessing-issue.patch delete mode 100644 luminol-server/minecraft-patches/features/0055-Do-not-fire-pre-creature-spawn-event-unless-some-plu.patch delete mode 100644 luminol-server/minecraft-patches/features/0056-Cpu-affinity.patch delete mode 100644 luminol-server/minecraft-patches/features/0057-Temporarily-fix-teleport-yam-and-pitch.patch diff --git a/luminol-server/minecraft-patches/features/0042-Purpur-Use-alternative-keep-alive.patch b/luminol-server/minecraft-patches/features/0042-Purpur-Use-alternative-keep-alive.patch deleted file mode 100644 index b7a609e..0000000 --- a/luminol-server/minecraft-patches/features/0042-Purpur-Use-alternative-keep-alive.patch +++ /dev/null @@ -1,67 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: MrHua269 -Date: Sun, 12 Jan 2025 11:43:15 +0800 -Subject: [PATCH] Purpur: Use alternative keep alive - -As part of: Purpur (https://github.com/PurpurMC/Purpur/blob/09f547de09fc5d886f18f6d99ff389289766ec9d/purpur-server/minecraft-patches/sources/net/minecraft/server/network/ServerCommonPacketListenerImpl.java.patch) -Licensed under: MIT (https://github.com/PurpurMC/Purpur/blob/09f547de09fc5d886f18f6d99ff389289766ec9d/LICENSE) - -diff --git a/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/net/minecraft/server/network/ServerCommonPacketListenerImpl.java -index 62b00aae7d31b79356dec44ce89cf9f2ce9c9bc2..a483d3001e05649ea332f17359218b6e21d9c527 100644 ---- a/net/minecraft/server/network/ServerCommonPacketListenerImpl.java -+++ b/net/minecraft/server/network/ServerCommonPacketListenerImpl.java -@@ -43,6 +43,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack - private long keepAliveChallenge; - private long closedListenerTime; - private boolean closed = false; -+ private it.unimi.dsi.fastutil.longs.LongList keepAlives = new it.unimi.dsi.fastutil.longs.LongArrayList(); // Purpur - private int latency; - private volatile boolean suspendFlushingOnServerThread = false; - // CraftBukkit start -@@ -132,6 +133,16 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack - - @Override - public void handleKeepAlive(ServerboundKeepAlivePacket packet) { -+ // Purpur start -+ if (me.earthme.luminol.config.modules.optimizations.PurpurAlternativeKeepaliveConfig.useAlternateKeepAlive) { -+ if (this.keepAlivePending && !keepAlives.isEmpty() && keepAlives.contains(packet.getId())) { -+ int ping = (int) (Util.getMillis() - packet.getId()); -+ this.latency = (this.latency * 3 + ping) / 4; -+ this.keepAlivePending = false; -+ keepAlives.clear(); // we got a valid response, lets roll with it and forget the rest -+ } -+ } else -+ // Purpur end - if (this.keepAlivePending && packet.getId() == this.keepAliveChallenge) { - int i = (int)(Util.getMillis() - this.keepAliveTime); - this.latency = (this.latency * 3 + i) / 4; -@@ -262,6 +273,21 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack - // Paper start - give clients a longer time to respond to pings as per pre 1.12.2 timings - // This should effectively place the keepalive handling back to "as it was" before 1.12.2 - final long elapsedTime = millis - this.keepAliveTime; -+ // Purpur start -+ if (me.earthme.luminol.config.modules.optimizations.PurpurAlternativeKeepaliveConfig.useAlternateKeepAlive) { -+ if (elapsedTime >= 1000L) { // 1 second -+ if (this.keepAlivePending && !this.processedDisconnect && keepAlives.size() * 1000L >= KEEPALIVE_LIMIT) { -+ LOGGER.warn("{} was kicked due to keepalive timeout!", this.player.getScoreboardName()); -+ this.disconnect(ServerCommonPacketListenerImpl.TIMEOUT_DISCONNECTION_MESSAGE, org.bukkit.event.player.PlayerKickEvent.Cause.TIMEOUT); -+ } else if (this.checkIfClosed(millis)) { -+ this.keepAlivePending = true; -+ this.keepAliveTime = millis; // hijack this field for 1 second intervals -+ this.keepAlives.add(millis); // currentTime is ID -+ this.send(new ClientboundKeepAlivePacket(millis)); -+ } -+ } -+ } else { -+ - if (!this.isSingleplayerOwner() && elapsedTime >= 15000L) { // use vanilla's 15000L between keep alive packets - if (this.keepAlivePending) { - if (!this.processedDisconnect && elapsedTime >= KEEPALIVE_LIMIT) { // check keepalive limit, don't fire if already disconnected -@@ -275,6 +301,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack - this.send(new ClientboundKeepAlivePacket(this.keepAliveChallenge)); - } - } -+ } // Purpur end - - Profiler.get().pop(); - } diff --git a/luminol-server/minecraft-patches/features/0043-SparklyPaper-Optimize-canSee-checks.patch b/luminol-server/minecraft-patches/features/0043-SparklyPaper-Optimize-canSee-checks.patch deleted file mode 100644 index 4941f93..0000000 --- a/luminol-server/minecraft-patches/features/0043-SparklyPaper-Optimize-canSee-checks.patch +++ /dev/null @@ -1,21 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: MrHua269 -Date: Sun, 12 Jan 2025 15:35:43 +0800 -Subject: [PATCH] SparklyPaper: Optimize canSee checks - -Co-authored by: MrPowerGamerBR -As part of: SparklyPaper (https://github.com/SparklyPower/SparklyPaper/blob/a69d3690472c9967772ffd4d4bd1f41403b7ea6f/sparklypaper-server/paper-patches/features/0005-Optimize-canSee-checks.patch) - -diff --git a/net/minecraft/server/level/ChunkMap.java b/net/minecraft/server/level/ChunkMap.java -index 4d603fafd07141a63db22f6e5a544fabbb6b9630..6868b915bf3deb85783a638d4441a15fea6da2dc 100644 ---- a/net/minecraft/server/level/ChunkMap.java -+++ b/net/minecraft/server/level/ChunkMap.java -@@ -1294,7 +1294,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider - } - // Folia end - region threading - // CraftBukkit start - respect vanish API -- if (flag && (!ca.spottedleaf.moonrise.common.util.TickThread.isTickThreadFor(player) || !player.getBukkitEntity().canSee(this.entity.getBukkitEntity()))) { // Paper - only consider hits // Folia - region threading -+ if (flag && (!ca.spottedleaf.moonrise.common.util.TickThread.isTickThreadFor(player) || !player.getBukkitEntity().canSeeChunkMapUpdatePlayer(this.entity.getBukkitEntity()))) { // Paper - only consider hits // Folia - region threading // SparklyPaper - optimize canSee checks - flag = false; - } - // CraftBukkit end diff --git a/luminol-server/minecraft-patches/features/0044-SparklyPaper-Skip-distanceToSqr-call-in-ServerEntity.patch b/luminol-server/minecraft-patches/features/0044-SparklyPaper-Skip-distanceToSqr-call-in-ServerEntity.patch deleted file mode 100644 index 393ab95..0000000 --- a/luminol-server/minecraft-patches/features/0044-SparklyPaper-Skip-distanceToSqr-call-in-ServerEntity.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: MrHua269 -Date: Sun, 12 Jan 2025 15:37:25 +0800 -Subject: [PATCH] SparklyPaper: Skip "distanceToSqr" call in - "ServerEntity#sendChanges" if the delta movement hasn't changed - -Co-authored by: MrPowerGamerBR -As part of: SparklyPaper (https://github.com/SparklyPower/SparklyPaper/blob/a69d3690472c9967772ffd4d4bd1f41403b7ea6f/sparklypaper-server/minecraft-patches/features/0002-Skip-distanceToSqr-call-in-ServerEntity-sendChanges-.patch) - -diff --git a/net/minecraft/server/level/ServerEntity.java b/net/minecraft/server/level/ServerEntity.java -index 2d4c68b01cc1508a1a4715a91316a7db80d4efa2..3a9293d5328ef0befa0b709169489b61a2266807 100644 ---- a/net/minecraft/server/level/ServerEntity.java -+++ b/net/minecraft/server/level/ServerEntity.java -@@ -209,6 +209,8 @@ public class ServerEntity { - - 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 - double d = deltaMovement.distanceToSqr(this.lastSentMovement); - if (d > 1.0E-7 || d > 0.0 && deltaMovement.lengthSqr() == 0.0) { - this.lastSentMovement = deltaMovement; -@@ -226,6 +228,7 @@ public class ServerEntity { - this.broadcast.accept(new ClientboundSetEntityMotionPacket(this.entity.getId(), this.lastSentMovement)); - } - } -+ } // SparklyPaper end - } - - if (packet != null) { diff --git a/luminol-server/minecraft-patches/features/0045-Correct-player-respawn-place.patch b/luminol-server/minecraft-patches/features/0045-Correct-player-respawn-place.patch deleted file mode 100644 index d648648..0000000 --- a/luminol-server/minecraft-patches/features/0045-Correct-player-respawn-place.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Helvetica Volubi -Date: Sat, 26 Apr 2025 21:47:45 +0800 -Subject: [PATCH] Correct player respawn place - - -diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index 1e55643f5c4a5f8b1e10216ff2967c4867658e2c..bc3768c920037343b4e8b39e01f287bbec490017 100644 ---- a/net/minecraft/server/level/ServerPlayer.java -+++ b/net/minecraft/server/level/ServerPlayer.java -@@ -502,8 +502,10 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc - double amountX = selectMaxX - selectMinX; - double amountZ = selectMaxZ - selectMinZ; - -- int selectX = amountX < 1.0 ? Mth.floor(worldBorder.getCenterX()) : (int)Mth.floor((amountX + 1.0) * random.nextDouble() + selectMinX); -- int selectZ = amountZ < 1.0 ? Mth.floor(worldBorder.getCenterZ()) : (int)Mth.floor((amountZ + 1.0) * random.nextDouble() + selectMinZ); -+ // Luminol start - Correct player respawn place -+ int selectX = amountX < 0.0 ? Mth.floor(worldBorder.getCenterX()) : (int)Mth.floor(amountX * random.nextDouble() + selectMinX); -+ int selectZ = amountZ < 0.0 ? Mth.floor(worldBorder.getCenterZ()) : (int)Mth.floor(amountZ * random.nextDouble() + selectMinZ); -+ // Luminol end - Correct player respawn place - - return new BlockPos(selectX, 0, selectZ); - } -@@ -514,10 +516,20 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc - } - - private static BlockPos findSpawnAround(ServerLevel world, ServerPlayer player, BlockPos selected) { -+ // Luminol start - Correct player respawn place -+ BlockPos inChunk; -+ inChunk = PlayerRespawnLogic.getOverworldRespawnPos(world, selected.getX(), selected.getZ()); -+ if (inChunk != null) { -+ AABB checkVolume = player.getBoundingBoxAt((double)inChunk.getX() + 0.5, (double)inChunk.getY(), (double)inChunk.getZ() + 0.5); -+ if (player.noCollisionNoLiquid(world, checkVolume)) { -+ return inChunk; -+ } -+ } -+ // Luminol end - Correct player respawn place - // try hard to find, so that we don't attempt another chunk load - for (int dz = -SPAWN_RADIUS_SELECTION_SEARCH; dz <= SPAWN_RADIUS_SELECTION_SEARCH; ++dz) { - for (int dx = -SPAWN_RADIUS_SELECTION_SEARCH; dx <= SPAWN_RADIUS_SELECTION_SEARCH; ++dx) { -- BlockPos inChunk = PlayerRespawnLogic.getOverworldRespawnPos(world, selected.getX() + dx, selected.getZ() + dz); -+ inChunk = PlayerRespawnLogic.getOverworldRespawnPos(world, selected.getX() + dx, selected.getZ() + dz); // Luminol - Correct player respawn place - if (inChunk == null) { - continue; - } diff --git a/luminol-server/minecraft-patches/features/0046-Command-IllegalArgumentException-crash-fix.patch b/luminol-server/minecraft-patches/features/0046-Command-IllegalArgumentException-crash-fix.patch deleted file mode 100644 index 05954a7..0000000 --- a/luminol-server/minecraft-patches/features/0046-Command-IllegalArgumentException-crash-fix.patch +++ /dev/null @@ -1,52 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Helvetica Volubi -Date: Sat, 24 May 2025 04:04:42 +0800 -Subject: [PATCH] Command IllegalArgumentException crash fix - - -diff --git a/net/minecraft/server/commands/FillCommand.java b/net/minecraft/server/commands/FillCommand.java -index 7665bff921eda626c0f1498a4ca03b62483d10ed..350adc15b06f2405137c2c753cbb673541df61fb 100644 ---- a/net/minecraft/server/commands/FillCommand.java -+++ b/net/minecraft/server/commands/FillCommand.java -@@ -248,6 +248,10 @@ public class FillCommand { - // Folia start - region threading - } catch (CommandSyntaxException ex) { - sendMessage(source, ex); -+ // Luminol Start - Server crash fix -+ } catch (IllegalArgumentException ex) { -+ net.minecraft.server.commands.SetBlockCommand.processIAE(source, ex); -+ // Luminol End - Server crash fix - }}); return 0; // Folia end - region threading - } - } -diff --git a/net/minecraft/server/commands/SetBlockCommand.java b/net/minecraft/server/commands/SetBlockCommand.java -index 07cff4e1e7af98cf3ead1f255557c1a994072610..34cc1906bfb49501bb2b3477bc99429e05cbb0f6 100644 ---- a/net/minecraft/server/commands/SetBlockCommand.java -+++ b/net/minecraft/server/commands/SetBlockCommand.java -@@ -102,6 +102,15 @@ public class SetBlockCommand { - } - // Folia end - region threading - -+ // Luminol Start - Server crash fix -+ public static void processIAE(CommandSourceStack src, IllegalArgumentException ex) { -+ Component hoverText = Component.translatable("command.failed") -+ .withStyle(style -> style.withHoverEvent(new net.minecraft.network.chat.HoverEvent.ShowText(Component.literal(ex.getMessage())))); -+ src.sendFailure(hoverText); -+ com.mojang.logging.LogUtils.getLogger().error(ex.getMessage(), ex); -+ } -+ // Luminol end - Server crash fix -+ - private static int setBlock( - CommandSourceStack source, BlockPos pos, BlockInput block, SetBlockCommand.Mode mode, @Nullable Predicate filter, boolean strict - ) throws CommandSyntaxException { -@@ -139,6 +148,10 @@ public class SetBlockCommand { - // Folia start - region threading - } catch (CommandSyntaxException ex) { - sendMessage(source, ex); -+ // Luminol Start - Server crash fix -+ } catch (IllegalArgumentException ex) { -+ processIAE(source, ex); -+ // Luminol End - Server crash fix - } - }); - return 1; diff --git a/luminol-server/minecraft-patches/features/0047-Force-disable-builtin-spark-plugin.patch b/luminol-server/minecraft-patches/features/0047-Force-disable-builtin-spark-plugin.patch deleted file mode 100644 index 131b441..0000000 --- a/luminol-server/minecraft-patches/features/0047-Force-disable-builtin-spark-plugin.patch +++ /dev/null @@ -1,98 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: MrHua269 -Date: Sun, 12 Jan 2025 11:00:49 +0800 -Subject: [PATCH] Force disable builtin spark plugin - -The spark passed down from paper has some memory leaking issue, so we fully removed it from the code to prevent that memory leaking issue. - -diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index b545b14a5142d31cc15cd4ed647e7985012b9c10..2061e8004c56a3173954d04697d42cb6fca9edc4 100644 ---- a/net/minecraft/server/MinecraftServer.java -+++ b/net/minecraft/server/MinecraftServer.java -@@ -783,8 +783,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop= i) { -- this.server.spark.tickStart(); // Paper - spark -+ if (false) this.server.spark.tickStart(); // Paper - spark // Luminol - Force disable builtin spark - if (this.emptyTicks == i) { - LOGGER.info("Server empty for {} seconds, pausing", this.pauseWhileEmptySeconds()); - this.autoSave(); -@@ -1612,7 +1612,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop -Date: Sat, 8 Mar 2025 09:55:40 +0800 -Subject: [PATCH] Fix a series issue around entity memory typed GlobalPos and - WalkTarget - -Fixes the issue remained by the memory cleaning fix due to that there is a little complex relationship in these memories, and we need to manual patch them - -diff --git a/net/minecraft/world/entity/ai/behavior/BehaviorUtils.java b/net/minecraft/world/entity/ai/behavior/BehaviorUtils.java -index 2664d72c3b6906d0505df2e63c0e5075eba9461b..f03c3c512ea48c2a89eebae62484922d28e4f831 100644 ---- a/net/minecraft/world/entity/ai/behavior/BehaviorUtils.java -+++ b/net/minecraft/world/entity/ai/behavior/BehaviorUtils.java -@@ -69,6 +69,11 @@ public class BehaviorUtils { - } - - public static void setWalkAndLookTargetMemories(LivingEntity entity, PositionTracker positionTracker, float speedModifier, int closeEnoughDist) { -+ // Luminol - Do not set walk target if target position is out of current tick region -+ if (!ca.spottedleaf.moonrise.common.util.TickThread.isTickThreadFor(entity.level(), positionTracker.currentBlockPosition())) { -+ return; -+ } -+ // Luminol end - WalkTarget walkTarget = new WalkTarget(positionTracker, speedModifier, closeEnoughDist); - entity.getBrain().setMemory(MemoryModuleType.LOOK_TARGET, positionTracker); - entity.getBrain().setMemory(MemoryModuleType.WALK_TARGET, walkTarget); -diff --git a/net/minecraft/world/entity/ai/behavior/SleepInBed.java b/net/minecraft/world/entity/ai/behavior/SleepInBed.java -index bc6a5cacd67d46e0beb97adf30d98c1034be1a44..dd35eef062c36a409b6d3e701664db504c4c7631 100644 ---- a/net/minecraft/world/entity/ai/behavior/SleepInBed.java -+++ b/net/minecraft/world/entity/ai/behavior/SleepInBed.java -@@ -42,6 +42,12 @@ public class SleepInBed extends Behavior { - } - } - -+ // Luminol - Prevent off-tick-region chunk operations -+ final net.minecraft.world.level.Level currentLevel = owner.level(); -+ if (!ca.spottedleaf.moonrise.common.util.TickThread.isTickThreadFor(currentLevel, globalPos.pos())) { -+ return false; -+ } -+ // Luminol -end - BlockState blockState = level.getBlockStateIfLoaded(globalPos.pos()); // Paper - Prevent sync chunk loads when villagers try to find beds - if (blockState == null) { return false; } // Paper - Prevent sync chunk loads when villagers try to find beds - return globalPos.pos().closerToCenterThan(owner.position(), 2.0) && blockState.is(BlockTags.BEDS) && !blockState.getValue(BedBlock.OCCUPIED); -diff --git a/net/minecraft/world/entity/animal/allay/AllayAi.java b/net/minecraft/world/entity/animal/allay/AllayAi.java -index 36a9887f8be04c5c3fda6d926d819a9e5b2a79f2..5681592bdeb050d875c4c5d0dfaf6e015beb1c74 100644 ---- a/net/minecraft/world/entity/animal/allay/AllayAi.java -+++ b/net/minecraft/world/entity/animal/allay/AllayAi.java -@@ -114,6 +114,17 @@ public class AllayAi { - Optional memory = brain.getMemory(MemoryModuleType.LIKED_NOTEBLOCK_POSITION); - if (memory.isPresent()) { - GlobalPos globalPos = memory.get(); -+ // Luminol start - Do not like item if they were out of current tickregion -+ final Level targetLevel = entity.level().getServer().getLevel(globalPos.dimension()); -+ final BlockPos targetPos = globalPos.pos(); -+ -+ // thread checks -+ if (!ca.spottedleaf.moonrise.common.util.TickThread.isTickThreadFor(targetLevel, targetPos)) { -+ brain.eraseMemory(MemoryModuleType.LIKED_NOTEBLOCK_POSITION); // The memory value is not being belong to current tick region anymore -+ return Optional.empty(); -+ } -+ // Luminol end -+ - if (shouldDepositItemsAtLikedNoteblock(entity, brain, globalPos)) { - return Optional.of(new BlockPosTracker(globalPos.pos().above())); - } -diff --git a/net/minecraft/world/entity/animal/sniffer/Sniffer.java b/net/minecraft/world/entity/animal/sniffer/Sniffer.java -index 6a9f31c1f39cc14ad7b5ae3af85908bc7a4caae4..34fea93dddfe0b947eb2517dd083ca842d19a0c6 100644 ---- a/net/minecraft/world/entity/animal/sniffer/Sniffer.java -+++ b/net/minecraft/world/entity/animal/sniffer/Sniffer.java -@@ -268,7 +268,17 @@ public class Sniffer extends Animal { - - private boolean canDig(BlockPos pos) { - return this.level().getBlockState(pos).is(BlockTags.SNIFFER_DIGGABLE_BLOCK) -- && this.getExploredPositions().noneMatch(globalPos -> GlobalPos.of(this.level().dimension(), pos).equals(globalPos)) -+ && this.getExploredPositions().noneMatch(globalPos -> { // Luminol start - Do not pathfind out of tickregion -+ // thread checks -+ final Level targetLevel = net.minecraft.server.MinecraftServer.getServer().getLevel(globalPos.dimension()); -+ final BlockPos targetPos = globalPos.pos(); -+ -+ if (!ca.spottedleaf.moonrise.common.util.TickThread.isTickThreadFor(targetLevel, targetPos)) { -+ return false; -+ } -+ -+ return GlobalPos.of(this.level().dimension(), pos).equals(globalPos); // Original logic -+ }) // Luminol end - && Optional.ofNullable(this.getNavigation().createPath(pos, 1)).map(Path::canReach).orElse(false); - } - diff --git a/luminol-server/minecraft-patches/features/0049-Fix-creative-player-item-pick.patch b/luminol-server/minecraft-patches/features/0049-Fix-creative-player-item-pick.patch deleted file mode 100644 index 75e5827..0000000 --- a/luminol-server/minecraft-patches/features/0049-Fix-creative-player-item-pick.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Helvetica Volubi -Date: Sat, 10 May 2025 19:46:16 +0800 -Subject: [PATCH] Fix creative player item pick - - -diff --git a/net/minecraft/world/entity/item/ItemEntity.java b/net/minecraft/world/entity/item/ItemEntity.java -index a596813c3cbacb1a4be86d41be01e8850fc6799c..244996de73d75e812e27aa896cd3875a14179b74 100644 ---- a/net/minecraft/world/entity/item/ItemEntity.java -+++ b/net/minecraft/world/entity/item/ItemEntity.java -@@ -409,7 +409,15 @@ public class ItemEntity extends Entity implements TraceableEntity { - Item item1 = item.getItem(); - int count = item.getCount(); - // CraftBukkit start - fire PlayerPickupItemEvent -- int canHold = entity.getInventory().canHold(item); -+ // Luminol start - Fix creative item picking -+ int canHold; -+ if (entity instanceof net.minecraft.server.level.ServerPlayer -+ && ((net.minecraft.server.level.ServerPlayer) entity).gameMode.getGameModeForPlayer().equals(net.minecraft.world.level.GameType.CREATIVE)) { -+ canHold = count; -+ } else { -+ canHold = entity.getInventory().canHold(item); -+ } -+ // Luminol end - int remaining = count - canHold; - boolean flyAtPlayer = false; // Paper - diff --git a/luminol-server/minecraft-patches/features/0050-Fix-entity-portal-teleport-speed.patch b/luminol-server/minecraft-patches/features/0050-Fix-entity-portal-teleport-speed.patch deleted file mode 100644 index 7891848..0000000 --- a/luminol-server/minecraft-patches/features/0050-Fix-entity-portal-teleport-speed.patch +++ /dev/null @@ -1,67 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Helvetica Volubi -Date: Sun, 27 Apr 2025 14:26:01 +0800 -Subject: [PATCH] Fix entity portal-teleport speed - - -diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index 7b7c72f14ae966ef142d68615b2f88ba42a079f5..87377bba2ebdc0eba5b7b212d971994c35ca0b62 100644 ---- a/net/minecraft/server/level/ServerLevel.java -+++ b/net/minecraft/server/level/ServerLevel.java -@@ -1364,7 +1364,27 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe - if (levelChunk != null) levelChunk.getChunkHot().startTicking(); try { // KioCG - try { - // Folia end - profiler -+ // Luminol start - Entity portal-teleport speed fix - if (isActive) { // Paper - EAR 2 -+ if (!(entity instanceof Player) && entity.teleportTickType == 2) { // Luminol - after portal compensate tick -+ entity.tick(); -+ entity.tick(); -+ entity.teleportTickType = 0; -+ if (!ca.spottedleaf.moonrise.common.util.TickThread.isTickThreadFor(entity)) { -+ return; -+ } -+ if (entity.handlePortal()) { -+ return; -+ } -+ } else if (!(entity instanceof Player) && entity.teleportTickType == 1) { // Luminol - portal teleport only -+ entity.teleportTickType++; -+ if (!ca.spottedleaf.moonrise.common.util.TickThread.isTickThreadFor(entity)) { -+ return; -+ } -+ if (entity.handlePortal()) { -+ return; -+ } -+ } else { - entity.tick(); - // Folia start - region threading - if (!ca.spottedleaf.moonrise.common.util.TickThread.isTickThreadFor(entity)) { -@@ -1375,6 +1395,8 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe - // portalled - return; - } -+ } -+ // Luminol end - Entity portal-teleport speed fix - // Folia end - region threading - } else {entity.inactiveTick();} // Paper - EAR 2 - profilerFiller.pop(); -diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index aa86dbe204cf5acee7b43880b62e39bec613d094..fdf9c1b7a2b0a476cc69bdc8032748660bb97ea2 100644 ---- a/net/minecraft/world/entity/Entity.java -+++ b/net/minecraft/world/entity/Entity.java -@@ -371,6 +371,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess - public long activatedTick = Integer.MIN_VALUE; - public boolean isTemporarilyActive; - public long activatedImmunityTick = Integer.MIN_VALUE; -+ public int teleportTickType = 0;// Luminol - Entity portal-teleport speed fix - - public void inactiveTick() { - } -@@ -3422,6 +3423,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess - } else { - if (this.portalProcess == null || !this.portalProcess.isSamePortal(portal)) { - this.portalProcess = new PortalProcessor(portal, pos.immutable()); -+ this.teleportTickType = 1; // Luminol - Entity portal-teleport speed fix - } else if (!this.portalProcess.isInsidePortalThisTick()) { - this.portalProcess.updateEntryPosition(pos.immutable()); - this.portalProcess.setAsInsidePortalThisTick(true); diff --git a/luminol-server/minecraft-patches/features/0051-Fix-off-tickregion-sync-teleport.patch b/luminol-server/minecraft-patches/features/0051-Fix-off-tickregion-sync-teleport.patch deleted file mode 100644 index 0149800..0000000 --- a/luminol-server/minecraft-patches/features/0051-Fix-off-tickregion-sync-teleport.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: MrHua269 -Date: Thu, 24 Apr 2025 23:11:13 +0800 -Subject: [PATCH] Fix off tickregion sync teleport - -Folis's teleportAsync implementation has some checks missing during the sync teleportation checks, if we are teleport to the edge of the tickregion, it is still asserting that we are in the same tickregion and moved us directly, but there is actually some logics is already touching the stuff out of current tickregion.So we added some new edge checks to the sync teleportation checks which will check the tickregion belonging in a shape of cycle which is in min(entity's bounding box + simulate distance, 6) of radius to fix that issue - -diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index fdf9c1b7a2b0a476cc69bdc8032748660bb97ea2..e09900a8c586cd7cb817c00a5f564b10d3797cb4 100644 ---- a/net/minecraft/world/entity/Entity.java -+++ b/net/minecraft/world/entity/Entity.java -@@ -4226,6 +4226,21 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess - this.resetStoredPositions(); - } - -+ // Luminol start - Fix sync teleport issue -+ private boolean checkNearbyTickRegions(int destX, int destZ) { -+ // Dumb end gateway search the chunks in radius of 5 chunks, so we need keep 6(5+1) by default check radius -+ int sizeBx = Math.min(6, (int) (this.bb.maxX - this.bb.minX) + this.level.getCraftServer().getSimulationDistance()); -+ int sizeBz = Math.min(6, (int) (this.bb.maxZ - this.bb.minZ) + this.level.getCraftServer().getSimulationDistance()); -+ -+ // check tick thread around these area -+ return ca.spottedleaf.moonrise.common.util.TickThread.isTickThreadFor(this.level, -+ (destX >> 4) - sizeBx, -+ (destZ >> 4) - sizeBz, -+ (destX >> 4) + sizeBx, -+ (destZ >> 4) + sizeBz); -+ } -+ // Luminol end -+ - protected final void transform(TeleportTransition telpeort) { - PositionMoveRotation move = PositionMoveRotation.calculateAbsolute( - PositionMoveRotation.of(this), PositionMoveRotation.of(telpeort), telpeort.relatives() -@@ -4348,7 +4363,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess - // check for same region - if (destination == this.level()) { - Vec3 currPos = this.position(); -- if ( -+ // Luminol - Prevent entity sync teleported to the edge of tickregion -+ if (this.checkNearbyTickRegions((int) pos.x, (int) pos.z) && // Luminol - Fix sync teleport issue - destination.regioniser.getRegionAtUnsynchronised( - ca.spottedleaf.moonrise.common.util.CoordinateUtils.getChunkX(currPos), ca.spottedleaf.moonrise.common.util.CoordinateUtils.getChunkZ(currPos) - ) == destination.regioniser.getRegionAtUnsynchronised( diff --git a/luminol-server/minecraft-patches/features/0052-Fix-uncorrected-death-check-of-folia.patch b/luminol-server/minecraft-patches/features/0052-Fix-uncorrected-death-check-of-folia.patch deleted file mode 100644 index 1149982..0000000 --- a/luminol-server/minecraft-patches/features/0052-Fix-uncorrected-death-check-of-folia.patch +++ /dev/null @@ -1,20 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: MrHua269 -Date: Tue, 11 Feb 2025 13:34:47 +0800 -Subject: [PATCH] Fix uncorrected death check of folia - -In the new mc version, mojang changed some checks in A.C.M(AbstractContainerMenu) and there is a new death check of player which will be executed when player dead.But on folia, player entity cannot be discarded unless they disconnected from the server, so there is an obvious bug that when player dead, the logic depend on that dead check will not be executed correctly because the check logic is still asserting the player is alive by checking if the player is discarded, which caused some exploits can save items in the crafting slots(with InventoryTweaks turned on in meteor client) when keepInventory is set to false - -diff --git a/net/minecraft/world/inventory/AbstractContainerMenu.java b/net/minecraft/world/inventory/AbstractContainerMenu.java -index f4548edae77eb86e54ba499acbb20613fd60d7bd..852b4381985ed167b05881f068e9542c31cdaf23 100644 ---- a/net/minecraft/world/inventory/AbstractContainerMenu.java -+++ b/net/minecraft/world/inventory/AbstractContainerMenu.java -@@ -690,7 +690,7 @@ public abstract class AbstractContainerMenu { - } - - private static void dropOrPlaceInInventory(Player player, ItemStack stack) { -- boolean flag = player.isRemoved() && player.getRemovalReason() != Entity.RemovalReason.CHANGED_DIMENSION; -+ boolean flag = !player.isAlive(); //player.isRemoved() && player.getRemovalReason() != Entity.RemovalReason.CHANGED_DIMENSION; // Luminol - Fix uncorrected death check of folia - boolean flag1 = player instanceof ServerPlayer serverPlayer && serverPlayer.hasDisconnected(); - if (flag || flag1) { - player.drop(stack, false); diff --git a/luminol-server/minecraft-patches/features/0053-Teleport-async-if-entity-was-moving-to-another-regio.patch b/luminol-server/minecraft-patches/features/0053-Teleport-async-if-entity-was-moving-to-another-regio.patch deleted file mode 100644 index aa50c4b..0000000 --- a/luminol-server/minecraft-patches/features/0053-Teleport-async-if-entity-was-moving-to-another-regio.patch +++ /dev/null @@ -1,55 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: MrHua269 -Date: Sun, 12 Jan 2025 10:53:41 +0800 -Subject: [PATCH] Teleport async if entity was moving to another region at once - -On folia, entity usually cannot move out of the tickregion, but sometimes it actually does(like some end pearl gun that can shoot an end pearl to the block faraway than 10000 blocks even more). To fix this, we added a temporary fix which teleport these entities to the destination instead running its move logics so that we could ensure anything is under control.But one thing need to consider is that teleportAsync is actually calling halfway of the entity tick and there is still something running when teleportAsync called, which is actually modified the entity in another thread, so there is still need an improvement - -diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index e09900a8c586cd7cb817c00a5f564b10d3797cb4..ac40e423ff497ebdfde61e5561d02ed9017b1c00 100644 ---- a/net/minecraft/world/entity/Entity.java -+++ b/net/minecraft/world/entity/Entity.java -@@ -1110,6 +1110,10 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess - - private boolean boundingBoxChanged = false; // Gale - VMP - skip entity move if movement is zero - -+ //Luminol start - Fix large pos moving -+ private volatile boolean preventMoving = false; -+ //Luminol end -+ - public void move(MoverType type, Vec3 movement) { - // Gale start - VMP - skip entity move if movement is zero - if (!this.boundingBoxChanged && movement.equals(Vec3.ZERO)) { -@@ -1125,6 +1129,32 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess - this.moveStartZ = this.getZ(); - this.moveVector = movement; - } -+ //Luminol start - Fix high position moving -+ if (me.earthme.luminol.config.modules.fixes.FoliaEntityMovingFixConfig.enabled && ca.spottedleaf.moonrise.common.util.TickThread.isTickThread()){ //Except the threads because it may be called by the chunk system worker thread -+ var finalPosition = movement.add(this.position); -+ if (this.preventMoving || Double.isNaN(finalPosition.x) || Double.isNaN(finalPosition.y) || Double.isNaN(finalPosition.z)){ -+ return; -+ } -+ -+ if (!ca.spottedleaf.moonrise.common.util.TickThread.isTickThreadFor(((ServerLevel) this.level),finalPosition)){ -+ this.preventMoving = true; -+ this.teleportAsync( -+ (ServerLevel) this.level(), -+ finalPosition, -+ this.getYRot(), this.getXRot(), -+ null, org.bukkit.event.player.PlayerTeleportEvent.TeleportCause.UNKNOWN, -+ Entity.TELEPORT_FLAG_LOAD_CHUNK | Entity.TELEPORT_FLAG_TELEPORT_PASSENGERS, -+ result -> { -+ this.preventMoving = false; -+ } -+ ); -+ if (me.earthme.luminol.config.modules.fixes.FoliaEntityMovingFixConfig.warnOnDetected){ -+ MinecraftServer.LOGGER.warn("Entity {} with entityId {} has tried moving to another region!",this.type.getCategory().getName(),this.getId()); -+ } -+ return; -+ } -+ } -+ //Luminol end - try { - // Paper end - detailed watchdog information - if (this.noPhysics) { diff --git a/luminol-server/minecraft-patches/features/0054-Try-fixing-folia-off-region-POI-accessing-issue.patch b/luminol-server/minecraft-patches/features/0054-Try-fixing-folia-off-region-POI-accessing-issue.patch deleted file mode 100644 index 53c9f52..0000000 --- a/luminol-server/minecraft-patches/features/0054-Try-fixing-folia-off-region-POI-accessing-issue.patch +++ /dev/null @@ -1,20 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: MrHua269 -Date: Sun, 12 Jan 2025 10:56:59 +0800 -Subject: [PATCH] Try fixing folia off region POI accessing issue - -Folia's POIManager sometimes is trying getting the POI record that doesn't belong to current tickregion which is causing some off-main-thread exceptions thrown, so we need to replace the logic with corrected one - -diff --git a/net/minecraft/world/entity/ai/village/poi/PoiManager.java b/net/minecraft/world/entity/ai/village/poi/PoiManager.java -index c10810bf00d75f459c3c6a9415c1e09f0519d50e..3adafa43367cd6648ecbccb92ba5bd509740d5a4 100644 ---- a/net/minecraft/world/entity/ai/village/poi/PoiManager.java -+++ b/net/minecraft/world/entity/ai/village/poi/PoiManager.java -@@ -212,7 +212,7 @@ public class PoiManager extends SectionStorage im - - public Stream getInSquare(Predicate> typePredicate, BlockPos pos, int distance, PoiManager.Occupancy status) { - int i = Math.floorDiv(distance, 16) + 1; -- return ChunkPos.rangeClosed(new ChunkPos(pos), i).flatMap(chunkPos -> this.getInChunk(typePredicate, chunkPos, status)).filter(poiRecord -> { -+ return ChunkPos.rangeClosed(new ChunkPos(pos), i).filter(cpos -> me.earthme.luminol.config.modules.fixes.FoliaPOIAccessOffRegionFixConfig.enabled ? ca.spottedleaf.moonrise.common.util.TickThread.isTickThreadFor(this.world,cpos) : true).flatMap(chunkPos -> this.getInChunk(typePredicate, chunkPos, status)).filter(poiRecord -> { // Luminol - Fix off region POI access - BlockPos pos1 = poiRecord.getPos(); - return Math.abs(pos1.getX() - pos.getX()) <= distance && Math.abs(pos1.getZ() - pos.getZ()) <= distance; - }); diff --git a/luminol-server/minecraft-patches/features/0055-Do-not-fire-pre-creature-spawn-event-unless-some-plu.patch b/luminol-server/minecraft-patches/features/0055-Do-not-fire-pre-creature-spawn-event-unless-some-plu.patch deleted file mode 100644 index aa601ab..0000000 --- a/luminol-server/minecraft-patches/features/0055-Do-not-fire-pre-creature-spawn-event-unless-some-plu.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: MrHua269 -Date: Sun, 15 Jun 2025 16:58:05 +0800 -Subject: [PATCH] Do not fire pre creature spawn event unless some plugin is - listening it - - -diff --git a/net/minecraft/world/level/NaturalSpawner.java b/net/minecraft/world/level/NaturalSpawner.java -index f324a74a191d3fe3e270556d07c4543ec34e0195..2fb36cba4cda3f7b84efae9cba6bed2394fb0457 100644 ---- a/net/minecraft/world/level/NaturalSpawner.java -+++ b/net/minecraft/world/level/NaturalSpawner.java -@@ -360,16 +360,18 @@ public final class NaturalSpawner { - ) { - EntityType entityType = data.type(); - // Paper start - PreCreatureSpawnEvent -- com.destroystokyo.paper.event.entity.PreCreatureSpawnEvent event = new com.destroystokyo.paper.event.entity.PreCreatureSpawnEvent( -- org.bukkit.craftbukkit.util.CraftLocation.toBukkit(pos, level), -- org.bukkit.craftbukkit.entity.CraftEntityType.minecraftToBukkit(entityType), org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.NATURAL -- ); -- if (!event.callEvent()) { -- if (event.shouldAbortSpawn()) { -- return PreSpawnStatus.ABORT; -+ if (com.destroystokyo.paper.event.entity.PreCreatureSpawnEvent.getHandlerList().getRegisteredListeners().length != 0) { // Luminol - Do not fire pre creature spawn event unless some plugin is listening it -+ com.destroystokyo.paper.event.entity.PreCreatureSpawnEvent event = new com.destroystokyo.paper.event.entity.PreCreatureSpawnEvent( -+ org.bukkit.craftbukkit.util.CraftLocation.toBukkit(pos, level), -+ org.bukkit.craftbukkit.entity.CraftEntityType.minecraftToBukkit(entityType), org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.NATURAL -+ ); -+ if (!event.callEvent()) { -+ if (event.shouldAbortSpawn()) { -+ return PreSpawnStatus.ABORT; -+ } -+ return PreSpawnStatus.CANCELLED; - } -- return PreSpawnStatus.CANCELLED; -- } -+ } // Luminol - Do not fire pre creature spawn event unless some plugin is listening it - final boolean success = entityType.getCategory() != MobCategory.MISC - // Paper end - PreCreatureSpawnEvent - && ( diff --git a/luminol-server/minecraft-patches/features/0056-Cpu-affinity.patch b/luminol-server/minecraft-patches/features/0056-Cpu-affinity.patch deleted file mode 100644 index e243076..0000000 --- a/luminol-server/minecraft-patches/features/0056-Cpu-affinity.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: HaHaWTH <102713261+HaHaWTH@users.noreply.github.com> -Date: Tue, 9 Nov 2077 00:00:00 +0800 -Subject: [PATCH] Cpu affinity - - -diff --git a/io/papermc/paper/threadedregions/TickRegionScheduler.java b/io/papermc/paper/threadedregions/TickRegionScheduler.java -index fa6b8d756195c1b430cc11214a901bd42eebc98d..0357792de0ed8ec9058d1847c8b45c33ff365af6 100644 ---- a/io/papermc/paper/threadedregions/TickRegionScheduler.java -+++ b/io/papermc/paper/threadedregions/TickRegionScheduler.java -@@ -49,6 +49,25 @@ public final class TickRegionScheduler { - - @Override - public Thread newThread(final Runnable run) { -+ // Luminol start - cpu affinity -+ if (me.earthme.luminol.config.modules.misc.CpuAffinityConfig.cpuAffinityEnabled) { -+ Runnable affinityRunnable = new Runnable() { -+ private boolean affinitySet = false; -+ -+ @Override -+ public void run() { -+ if (!this.affinitySet) { -+ this.affinitySet = true; -+ net.openhft.affinity.Affinity.setAffinity(me.earthme.luminol.config.modules.misc.CpuAffinityConfig.tickRegionAffinityBitSet); -+ } -+ run.run(); -+ } -+ }; -+ final Thread ret = new TickThreadRunner(affinityRunnable, "Region Scheduler Thread #" + this.idGenerator.getAndIncrement()); -+ ret.setUncaughtExceptionHandler(TickRegionScheduler.this::uncaughtException); -+ return ret; -+ } -+ // Luminol end - cpu affinity - final Thread ret = new TickThreadRunner(run, "Region Scheduler Thread #" + this.idGenerator.getAndIncrement()); - ret.setUncaughtExceptionHandler(TickRegionScheduler.this::uncaughtException); - return ret; diff --git a/luminol-server/minecraft-patches/features/0057-Temporarily-fix-teleport-yam-and-pitch.patch b/luminol-server/minecraft-patches/features/0057-Temporarily-fix-teleport-yam-and-pitch.patch deleted file mode 100644 index 747811b..0000000 --- a/luminol-server/minecraft-patches/features/0057-Temporarily-fix-teleport-yam-and-pitch.patch +++ /dev/null @@ -1,21 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Helvetica Volubi -Date: Wed, 18 Jun 2025 23:46:20 +0800 -Subject: [PATCH] Temporarily fix teleport yam and pitch - - -diff --git a/net/minecraft/server/commands/TeleportCommand.java b/net/minecraft/server/commands/TeleportCommand.java -index 178a67b24095af02e7f75e8d80abdfc7b462639a..ebb16cf81e3b8f26df72e7f63a86938f7a402f24 100644 ---- a/net/minecraft/server/commands/TeleportCommand.java -+++ b/net/minecraft/server/commands/TeleportCommand.java -@@ -283,8 +283,8 @@ public class TeleportCommand { - if (true) { - ServerLevel worldFinal = level; - Vec3 posFinal = new Vec3(x, y, z); -- Float yawFinal = Float.valueOf(f); -- Float pitchFinal = Float.valueOf(f1); -+ Float yawFinal = Float.valueOf(f + target.getYRot()); -+ Float pitchFinal = Float.valueOf(f1 + target.getXRot()); - target.getBukkitEntity().taskScheduler.schedule((Entity nmsEntity) -> { - nmsEntity.unRide(); - nmsEntity.teleportAsync(