From a780b13fccb27f9a3e19dbcf5849c0f93c0e4454 Mon Sep 17 00:00:00 2001 From: Helvetica Volubi Date: Wed, 21 Jan 2026 21:37:37 +0800 Subject: [PATCH] Update Luminol --- gradle.properties | 2 +- ...-to-enable-cross-region-damage-trace.patch | 6 ++-- ...-config-to-enable-raytracing-tracker.patch | 4 +-- ...dd-config-to-enable-save-all-command.patch | 8 +++--- ...07-Add-config-to-enable-tick-command.patch | 28 +++++++++---------- ...9-Fix-datapack-command-save-function.patch | 4 +-- ...s-Configurable-trading-with-the-void.patch | 4 +-- .../0012-Leaves-Item-overstack-util.patch | 12 ++++---- .../0016-Leaves-Servux-Protocol.patch | 4 +-- .../0022-Spawn-invulnerable-time.patch | 4 +-- .../features/0023-Leaves-Fakeplayer.patch | 28 +++++++++---------- .../features/0027-Leaves-Jade-Protocol.patch | 8 +++--- .../features/0032-Leaves-Replay-Mod-API.patch | 20 ++++++------- ...eaves-Catch-update-suppression-crash.patch | 18 ++++++------ .../features/0036-Instant-Block-Updater.patch | 4 +-- .../0041-Global-Entities-Counter.patch | 4 +-- .../features/0001-Rebrand-to-Lophine.patch | 27 +++++++----------- .../0006-Leaves-Leaves-Fakeplayer.patch | 14 +++++----- .../features/0007-Leaves-Replay-Mod-API.patch | 6 ++-- 19 files changed, 99 insertions(+), 106 deletions(-) diff --git a/gradle.properties b/gradle.properties index 498182a..206fbf5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,7 +7,7 @@ apiVersion=1.21.11 release=1 # 0 for skip release, 1 for pre-release, 2 for release -luminolRef=1cdb77f7b9b6c816b7bbcb53f5a6caaa53a5bcce +luminolRef=5a709bb3fd9306d5804dd104d9a98f33e999cb3d org.gradle.configuration-cache=true org.gradle.caching=true diff --git a/lophine-server/minecraft-patches/features/0002-Add-config-to-enable-cross-region-damage-trace.patch b/lophine-server/minecraft-patches/features/0002-Add-config-to-enable-cross-region-damage-trace.patch index c3cdb9e..d24a5f8 100644 --- a/lophine-server/minecraft-patches/features/0002-Add-config-to-enable-cross-region-damage-trace.patch +++ b/lophine-server/minecraft-patches/features/0002-Add-config-to-enable-cross-region-damage-trace.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add config to enable cross region damage trace diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index 147cd8742196e52567625a1017f63d7a7e770e44..d17ad8bf49c4911e5939ad25c1822bb4bdd0d71c 100644 +index 94144dcf5f5a41f44be0f93de14a60e2124e91b7..b8a2afecf6effec43cc5d5bfdd38056a25e79c1d 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java -@@ -1447,6 +1447,13 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -1445,6 +1445,13 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc this.awardStat(Stats.ENTITY_KILLED_BY.get(killCredit.getType())); killCredit.awardKillScore(this, damageSource); this.createWitherRose(killCredit); @@ -22,7 +22,7 @@ index 147cd8742196e52567625a1017f63d7a7e770e44..d17ad8bf49c4911e5939ad25c1822bb4 } this.level().broadcastEntityEvent(this, EntityEvent.DEATH); -@@ -1470,6 +1477,24 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -1468,6 +1475,24 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc } // Leaves end - exp fix diff --git a/lophine-server/minecraft-patches/features/0003-Add-config-to-enable-raytracing-tracker.patch b/lophine-server/minecraft-patches/features/0003-Add-config-to-enable-raytracing-tracker.patch index f1d637a..5f83944 100644 --- a/lophine-server/minecraft-patches/features/0003-Add-config-to-enable-raytracing-tracker.patch +++ b/lophine-server/minecraft-patches/features/0003-Add-config-to-enable-raytracing-tracker.patch @@ -18,7 +18,7 @@ index bca2c5410aa543d2bb421e53893e9163508b3568..fdccb06c918d387e46c29ede7337159d double rangeY = level.paperConfig().entities.trackingRangeY.get(this.entity, -1); if (rangeY != -1) { diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index da6da815b7ca1270507d69dc563880c70523d094..b4ebc26ef54aefdb14fca1f958dc0156cb1df642 100644 +index e62a8d23736de03f18c615c7622414aac3dc8aef..8043b5f24e09e2c96afe14b5ab6978c0b85d744c 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java @@ -152,7 +152,7 @@ import org.jetbrains.annotations.Contract; @@ -30,7 +30,7 @@ index da6da815b7ca1270507d69dc563880c70523d094..b4ebc26ef54aefdb14fca1f958dc0156 // CraftBukkit start private static final int CURRENT_LEVEL = 2; static boolean isLevelAtLeast(ValueInput input, int level) { -@@ -6444,4 +6444,46 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name +@@ -6443,4 +6443,46 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name // Paper end - Expose entity id counter public boolean shouldTickHot() { return this.tickCount > 20 * 10 && this.isAlive(); } // KioCG diff --git a/lophine-server/minecraft-patches/features/0005-Add-config-to-enable-save-all-command.patch b/lophine-server/minecraft-patches/features/0005-Add-config-to-enable-save-all-command.patch index 572a158..65ec9d4 100644 --- a/lophine-server/minecraft-patches/features/0005-Add-config-to-enable-save-all-command.patch +++ b/lophine-server/minecraft-patches/features/0005-Add-config-to-enable-save-all-command.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add config to enable save-all command diff --git a/io/papermc/paper/threadedregions/RegionizedServer.java b/io/papermc/paper/threadedregions/RegionizedServer.java -index b3bc39ebe8d2f48d976de9cd4fcae46095523514..8d20f7e3d89c42e7b92bbaac5da85ac97fecc459 100644 +index 17108636a5728efe98a064001e00e3ca098b1f51..7748e9ac04fbd3f5259d92fc908d90889cba86c8 100644 --- a/io/papermc/paper/threadedregions/RegionizedServer.java +++ b/io/papermc/paper/threadedregions/RegionizedServer.java @@ -350,6 +350,8 @@ public final class RegionizedServer { @@ -18,7 +18,7 @@ index b3bc39ebe8d2f48d976de9cd4fcae46095523514..8d20f7e3d89c42e7b92bbaac5da85ac9 for (final ServerLevel world : this.worlds) { this.globalTick(world, tickCount); diff --git a/io/papermc/paper/threadedregions/TickRegions.java b/io/papermc/paper/threadedregions/TickRegions.java -index 44e59c373538e3ab19cb25cdcbd9b51b6ab86e21..68c9e32ba6cccbcecfb71058a4bfd5130b572fd0 100644 +index 02c004bc7f9a0203523ce4b27cd766d6bdc478c0..3d86e21198f2888422330b6f7c27712f40a6aabc 100644 --- a/io/papermc/paper/threadedregions/TickRegions.java +++ b/io/papermc/paper/threadedregions/TickRegions.java @@ -190,6 +190,8 @@ public final class TickRegions implements ThreadedRegionizer.RegionCallbacks -Date: Thu, 1 May 2025 22:43:08 +0800 +Date: Wed, 21 Jan 2026 21:28:21 +0800 Subject: [PATCH] Add config to enable tick command diff --git a/io/papermc/paper/threadedregions/RegionizedServer.java b/io/papermc/paper/threadedregions/RegionizedServer.java -index 8d20f7e3d89c42e7b92bbaac5da85ac97fecc459..f3be5b71abde2d9833e3b513845485d3030ef2c6 100644 +index 7748e9ac04fbd3f5259d92fc908d90889cba86c8..80b5d151e0dd6fa44794187875b4b80519839d81 100644 --- a/io/papermc/paper/threadedregions/RegionizedServer.java +++ b/io/papermc/paper/threadedregions/RegionizedServer.java @@ -332,6 +332,11 @@ public final class RegionizedServer { @@ -34,20 +34,20 @@ index 8d20f7e3d89c42e7b92bbaac5da85ac97fecc459..f3be5b71abde2d9833e3b513845485d3 // tick connections this.tickConnections(); -@@ -490,7 +502,7 @@ public final class RegionizedServer { +@@ -492,7 +504,7 @@ public final class RegionizedServer { } - private void tickTime(final ServerLevel world, final int tickCount) { + private void tickTime(final ServerLevel world, final long tickCount) { - if (world.tickTime) { + if ((!fun.bm.lophine.config.modules.experiment.CommandConfig.tick || world.tickRateManager().runsNormally()) && world.tickTime) { // Luminol - Add a config to enable tick command if (world.getGameRules().get(GameRules.ADVANCE_TIME)) { - world.setDayTime(world.levelData.getDayTime() + (long)tickCount); + world.setDayTime(world.levelData.getDayTime() + tickCount); } diff --git a/io/papermc/paper/threadedregions/TickRegionScheduler.java b/io/papermc/paper/threadedregions/TickRegionScheduler.java -index e3df94bfd26b118cb8a7bdece75d611aaf27c606..bae2385b725c0ce551768f22945393ccf6e1e432 100644 +index 0f4e8ee9438135e24e0f61a1390c59573b9e9c3f..65699d2ad66c686a8b7d1b951787ddd766800a94 100644 --- a/io/papermc/paper/threadedregions/TickRegionScheduler.java +++ b/io/papermc/paper/threadedregions/TickRegionScheduler.java -@@ -39,8 +39,8 @@ public final class TickRegionScheduler { +@@ -40,8 +40,8 @@ public final class TickRegionScheduler { } } @@ -58,14 +58,14 @@ index e3df94bfd26b118cb8a7bdece75d611aaf27c606..bae2385b725c0ce551768f22945393cc // Folia start - watchdog public static final FoliaWatchdogThread WATCHDOG_THREAD = new FoliaWatchdogThread(); static { -@@ -447,8 +447,23 @@ public final class TickRegionScheduler { +@@ -448,8 +448,23 @@ public final class TickRegionScheduler { final long cpuStart = MEASURE_CPU_TIME ? THREAD_MX_BEAN.getCurrentThreadCpuTime() : 0L; final long tickStart = System.nanoTime(); - // use max(), don't assume that tickStart >= scheduledStart -- final int tickCount = Math.max(1, this.tickSchedule.getPeriodsAhead(TIME_BETWEEN_TICKS, tickStart)); +- final long tickCount = Math.max(1L, this.tickSchedule.getPeriodsAhead(TIME_BETWEEN_TICKS, tickStart)); + // Luminol start - Add a config to enable tick command -+ final int tickCount; ++ final long tickCount; + if (fun.bm.lophine.config.modules.experiment.CommandConfig.tick) { + if (MinecraftServer.tickRateManager.isSprinting() && MinecraftServer.tickRateManager.checkShouldSprintThisTick()) { + TICK_RATE = net.minecraft.server.commands.TickCommand.MAX_TICKRATE; @@ -74,17 +74,17 @@ index e3df94bfd26b118cb8a7bdece75d611aaf27c606..bae2385b725c0ce551768f22945393cc + } else { + TICK_RATE = MinecraftServer.tickRateManager.tickrate(); + TIME_BETWEEN_TICKS = (long) (1_000_000_000L / TICK_RATE); -+ tickCount = Math.max(1, this.tickSchedule.getPeriodsAhead(TIME_BETWEEN_TICKS, tickStart)); ++ tickCount = Math.max(1L, this.tickSchedule.getPeriodsAhead(TIME_BETWEEN_TICKS, tickStart)); + } + } else { + // use max(), don't assume that tickStart >= scheduledStart -+ tickCount = Math.max(1, this.tickSchedule.getPeriodsAhead(TIME_BETWEEN_TICKS, tickStart)); ++ tickCount = Math.max(1L, this.tickSchedule.getPeriodsAhead(TIME_BETWEEN_TICKS, tickStart)); + } + // Luminol end - Add tick command support if (!this.tryMarkTicking()) { if (!this.cancelled.get()) { -@@ -497,6 +512,11 @@ public final class TickRegionScheduler { +@@ -498,6 +513,11 @@ public final class TickRegionScheduler { try { // next start isn't updated until the end of this tick this.tickRegion(tickCount, tickStart, scheduledEnd); @@ -114,7 +114,7 @@ index bd8d98aa813b575e83138e79726bd3143268913c..65f200381f486146ce8d893378f0591a TitleCommand.register(this.dispatcher, context); //TriggerCommand.register(this.dispatcher); // Folia - region threading - TODO later diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index 1600296f134c84ae8eee4e54f5ea54f19e6ed258..e40ce457fc046b3b244c67afa79e4f637cc73fde 100644 +index 76098a4f44f8d82bebf832fa5e240adf25fbe80a..644c49730fc08a7c680f8114136db00ee8f81378 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java @@ -270,7 +270,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop i) { source.sendFailure(Component.translatable("commands.give.failed.toomanyitems", i, itemStack.getDisplayName())); diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 8d0897df30a8563e48176f08d5bf523cf1563893..3a40cf4c559b134c67cad9fbbf986b15ed986558 100644 +index 1b24f0f6e26dedbf726c620908acaed49054a5f5..9a28127f0cbaf586aef416d0d15a791b309ad3af 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -3155,7 +3155,7 @@ public class ServerGamePacketListenerImpl +@@ -3161,7 +3161,7 @@ public class ServerGamePacketListenerImpl } else if (slot.mayPlace(cursor)) { if (ItemStack.isSameItemSameComponents(clickedItem, cursor)) { int toPlace = packet.buttonNum() == 0 ? cursor.getCount() : 1; @@ -53,7 +53,7 @@ index 8d0897df30a8563e48176f08d5bf523cf1563893..3a40cf4c559b134c67cad9fbbf986b15 toPlace = Math.min(toPlace, slot.container.getMaxStackSize() - clickedItem.getCount()); if (toPlace == 1) { action = InventoryAction.PLACE_ONE; -@@ -3191,7 +3191,7 @@ public class ServerGamePacketListenerImpl +@@ -3197,7 +3197,7 @@ public class ServerGamePacketListenerImpl } } else if (ItemStack.isSameItemSameComponents(cursor, clickedItem)) { if (clickedItem.getCount() >= 0) { @@ -62,7 +62,7 @@ index 8d0897df30a8563e48176f08d5bf523cf1563893..3a40cf4c559b134c67cad9fbbf986b15 // As of 1.5, this is result slots only action = InventoryAction.PICKUP_ALL; } -@@ -3408,6 +3408,7 @@ public class ServerGamePacketListenerImpl +@@ -3414,6 +3414,7 @@ public class ServerGamePacketListenerImpl this.player.containerMenu.broadcastFullState(); } else { this.player.containerMenu.broadcastChanges(); @@ -70,7 +70,7 @@ index 8d0897df30a8563e48176f08d5bf523cf1563893..3a40cf4c559b134c67cad9fbbf986b15 } if (packet.buttonNum() == Inventory.SLOT_OFFHAND && this.player.containerMenu != this.player.inventoryMenu) this.player.containerSynchronizer.sendOffHandSlotChange(); // Paper - update offhand data when the player is clicking in an inventory not their own as the sychronizer does not include offhand slots if (io.papermc.paper.configuration.GlobalConfiguration.get().unsupportedSettings.updateEquipmentOnPlayerActions) this.player.detectEquipmentUpdates(); // Paper - Force update attributes. -@@ -3519,7 +3520,7 @@ public class ServerGamePacketListenerImpl +@@ -3525,7 +3526,7 @@ public class ServerGamePacketListenerImpl } boolean flag1 = packet.slotNum() >= 1 && packet.slotNum() <= 45; @@ -79,7 +79,7 @@ index 8d0897df30a8563e48176f08d5bf523cf1563893..3a40cf4c559b134c67cad9fbbf986b15 if (flag || (flag1 && !ItemStack.matches(this.player.inventoryMenu.getSlot(packet.slotNum()).getItem(), packet.itemStack()))) { // Insist on valid slot // CraftBukkit start - Call click event org.bukkit.inventory.InventoryView inventory = this.player.inventoryMenu.getBukkitView(); -@@ -3561,6 +3562,7 @@ public class ServerGamePacketListenerImpl +@@ -3567,6 +3568,7 @@ public class ServerGamePacketListenerImpl this.player.inventoryMenu.getSlot(packet.slotNum()).setByPlayer(itemStack); this.player.inventoryMenu.setRemoteSlot(packet.slotNum(), itemStack); this.player.inventoryMenu.broadcastChanges(); diff --git a/lophine-server/minecraft-patches/features/0016-Leaves-Servux-Protocol.patch b/lophine-server/minecraft-patches/features/0016-Leaves-Servux-Protocol.patch index 842bd07..3441363 100644 --- a/lophine-server/minecraft-patches/features/0016-Leaves-Servux-Protocol.patch +++ b/lophine-server/minecraft-patches/features/0016-Leaves-Servux-Protocol.patch @@ -23,10 +23,10 @@ index 95f6b1cbd5e33151c326689bc72292ff38a48803..e1974bbebbd10b75ea02955d9ced198d + // Leaves end - servux } diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index 9a3b6d20b149b0937b5bc23807e381a08ae03b0f..354647c41fadfdadcc9b1664ac3ccbf8d29571f4 100644 +index 3a174defc1e8d0d13ae006dd6c52712ed9469240..87bb2715eb4c2fd41537e020ba7fa8cce1591a0f 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java -@@ -2451,6 +2451,8 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -2463,6 +2463,8 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe this.server.updateEffectiveRespawnData(); } // Paper end diff --git a/lophine-server/minecraft-patches/features/0022-Spawn-invulnerable-time.patch b/lophine-server/minecraft-patches/features/0022-Spawn-invulnerable-time.patch index 80e8b4b..e40b2ad 100644 --- a/lophine-server/minecraft-patches/features/0022-Spawn-invulnerable-time.patch +++ b/lophine-server/minecraft-patches/features/0022-Spawn-invulnerable-time.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Spawn invulnerable time diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index d17ad8bf49c4911e5939ad25c1822bb4bdd0d71c..8b1fd4a3ff2aa75230e045fed6653382fa8c8c4b 100644 +index b8a2afecf6effec43cc5d5bfdd38056a25e79c1d..bdd0cd4b52a75f2971da70a7a09a06bee3ec53b2 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java @@ -240,6 +240,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc @@ -24,7 +24,7 @@ index d17ad8bf49c4911e5939ad25c1822bb4bdd0d71c..8b1fd4a3ff2aa75230e045fed6653382 if (this.invulnerableTime > 0) { this.invulnerableTime--; } -@@ -1538,6 +1540,13 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -1536,6 +1538,13 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc if (this.isInvulnerableTo(level, damageSource)) { return false; } else { diff --git a/lophine-server/minecraft-patches/features/0023-Leaves-Fakeplayer.patch b/lophine-server/minecraft-patches/features/0023-Leaves-Fakeplayer.patch index 6b20264..9d091e5 100644 --- a/lophine-server/minecraft-patches/features/0023-Leaves-Fakeplayer.patch +++ b/lophine-server/minecraft-patches/features/0023-Leaves-Fakeplayer.patch @@ -33,7 +33,7 @@ index 9f444988d40208a1bfa9f147ef80489f81115e93..ab2fa0b86564622501238305714fff01 private boolean encrypted; private final java.util.concurrent.atomic.AtomicBoolean disconnectionHandled = new java.util.concurrent.atomic.AtomicBoolean(false); // Folia - region threading - may be called concurrently during configuration stage diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index 0a11c9b42d55d1077d09bcbf73e1fc7736f230fb..ca199e6334f39d8598ccc22ef5aca36ecfbb4939 100644 +index 2359c5b49e4457cc36239289f203df16767a4341..68c3b0496738ed4fcb02204c5c882fd722397648 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java @@ -425,6 +425,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop S spin(Function threadFunction) { ca.spottedleaf.dataconverter.minecraft.datatypes.MCTypeRegistry.init(); // Paper - rewrite data converter system AtomicReference atomicReference = new AtomicReference<>(); -@@ -1052,6 +1054,11 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0) { // Folia - region threading - this is complicated to implement, and even if done correctly is messy @@ -66,7 +66,7 @@ index 0a11c9b42d55d1077d09bcbf73e1fc7736f230fb..ca199e6334f39d8598ccc22ef5aca36e this.emptyTicks++; } else { this.emptyTicks = 0; -@@ -1803,6 +1810,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0) { this.playerList.saveAll(playerSaveInterval); @@ -74,7 +74,7 @@ index 0a11c9b42d55d1077d09bcbf73e1fc7736f230fb..ca199e6334f39d8598ccc22ef5aca36e } for (final ServerLevel level : (region == null ? this.getAllLevels() : Arrays.asList(region.world))) { // Folia - region threading if (level.paperConfig().chunks.autoSaveInterval.value() > 0) { -@@ -2023,6 +2031,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop> optional = PoiTypes.forState(oldState); -@@ -2951,6 +2959,11 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -2963,6 +2971,11 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe // ServerLevel.this.getChunkSource().addEntity(entity); // Paper - ignore and warn about illegal addEntity calls instead of crashing server; moved down below valid=true if (entity instanceof ServerPlayer serverPlayer) { ServerLevel.this.players.add(serverPlayer); @@ -299,7 +299,7 @@ index 354647c41fadfdadcc9b1664ac3ccbf8d29571f4..f41cab482168ca7b0764b37153365837 if (serverPlayer.isReceivingWaypoints()) { ServerLevel.this.getWaypointManager().addPlayer(serverPlayer); } -@@ -3038,6 +3051,11 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -3044,6 +3057,11 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe ServerLevel.this.getChunkSource().removeEntity(entity); if (entity instanceof ServerPlayer serverPlayer) { ServerLevel.this.players.remove(serverPlayer); @@ -312,7 +312,7 @@ index 354647c41fadfdadcc9b1664ac3ccbf8d29571f4..f41cab482168ca7b0764b37153365837 ServerLevel.this.updateSleepingPlayerList(); } diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index 8b1fd4a3ff2aa75230e045fed6653382fa8c8c4b..37b69d32357124e3ba1256beb428eb6581fec956 100644 +index bdd0cd4b52a75f2971da70a7a09a06bee3ec53b2..1794ea309bbc6f6a253a8fb5302ffef61ebd0bbb 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java @@ -227,7 +227,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc @@ -333,7 +333,7 @@ index 8b1fd4a3ff2aa75230e045fed6653382fa8c8c4b..37b69d32357124e3ba1256beb428eb65 private @Nullable Vec3 levitationStartPos; private int levitationStartTime; private boolean disconnected; -@@ -1497,7 +1497,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -1495,7 +1495,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc } // Luminol End - Cross Region Damage trace @@ -342,7 +342,7 @@ index 8b1fd4a3ff2aa75230e045fed6653382fa8c8c4b..37b69d32357124e3ba1256beb428eb65 AABB aabb = new AABB(this.blockPosition()).inflate(32.0, 10.0, 32.0); this.level() .getEntitiesOfClass(Mob.class, aabb, EntitySelector.NO_SPECTATORS) -@@ -2134,6 +2134,11 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -2132,6 +2132,11 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc this.lastSentHealth = -1.0F; this.lastSentFood = -1; this.teleportSpectators(teleportTransition, serverLevel); @@ -534,7 +534,7 @@ index bd1d4a832eec4c89a7f8bdd5d066b6074f206d81..d7224c2297eb5d580349da3b2770895f for (WaypointTransmitter waypointTransmitter : this.waypoints) { diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index b4ebc26ef54aefdb14fca1f958dc0156cb1df642..04ce4cb64e92b63437a216c0cb8318c7e17e23a0 100644 +index 8043b5f24e09e2c96afe14b5ab6978c0b85d744c..df4f5e724673edda7fe46a826a77d0365b40b1f7 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java @@ -1252,7 +1252,7 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name diff --git a/lophine-server/minecraft-patches/features/0027-Leaves-Jade-Protocol.patch b/lophine-server/minecraft-patches/features/0027-Leaves-Jade-Protocol.patch index a263508..d0a0fc0 100644 --- a/lophine-server/minecraft-patches/features/0027-Leaves-Jade-Protocol.patch +++ b/lophine-server/minecraft-patches/features/0027-Leaves-Jade-Protocol.patch @@ -9,10 +9,10 @@ As a part of : Leaves (https://github.com/LeavesMC/Leaves) Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index 37b69d32357124e3ba1256beb428eb6581fec956..b88f669535f050605e3b5739501ef6d5caee4238 100644 +index 1794ea309bbc6f6a253a8fb5302ffef61ebd0bbb..9eb7875fd3f2da2ded79397d275c968c0fd613ab 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java -@@ -1453,7 +1453,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -1451,7 +1451,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc } else if (fun.bm.lophine.config.modules.experiment.EntityDamageSourceTraceConfig.enabled) { final LivingEntity entitylivingnew = this.getKillCreditOrigin(); if (entitylivingnew != null) { @@ -22,10 +22,10 @@ index 37b69d32357124e3ba1256beb428eb6581fec956..b88f669535f050605e3b5739501ef6d5 // Luminol End - Cross Region Damage trace } diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index b44f0ac98d52616bc8405995180844a9af2210f9..5811504f350d18a55850af9d2ebcc2b31bac0d43 100644 +index 81ab622f74f9c66f335b868ff55917f8ad5755c0..4ce93776c34ae9714831212ff46dac541094d48f 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -3827,7 +3827,7 @@ public class ServerGamePacketListenerImpl +@@ -3833,7 +3833,7 @@ public class ServerGamePacketListenerImpl } else if (this.clientLoadedTimeoutTimer == 1) markClientLoaded(); // Paper - Add PlayerLoadedWorldEvent - decrement by calling #markClientLoaded which will set the value to 0 *and* call the event. } diff --git a/lophine-server/minecraft-patches/features/0032-Leaves-Replay-Mod-API.patch b/lophine-server/minecraft-patches/features/0032-Leaves-Replay-Mod-API.patch index df74697..af0d969 100644 --- a/lophine-server/minecraft-patches/features/0032-Leaves-Replay-Mod-API.patch +++ b/lophine-server/minecraft-patches/features/0032-Leaves-Replay-Mod-API.patch @@ -84,10 +84,10 @@ index af71e0e1eb1c93745f3e4954ecc8fbd2ad4808a3..f3829564681faff3ae8971ed90b947b4 players.add(serverPlayer1); if (players.size() >= resultLimit) { diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index ca199e6334f39d8598ccc22ef5aca36ecfbb4939..a32a32e19cfc07df86587cb8f7c7eabff19d97cd 100644 +index 68c3b0496738ed4fcb02204c5c882fd722397648..72824013c313b7ada8dc86d9f2ff55a296fb6ac8 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java -@@ -1898,7 +1898,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { // Folia - region threading // Paper start - Expand PlayerGameModeChangeEvent org.bukkit.event.player.PlayerGameModeChangeEvent event = player.setGameMode(gameMode, org.bukkit.event.player.PlayerGameModeChangeEvent.Cause.DEFAULT_GAMEMODE, null); // Folia - region threading -@@ -2496,7 +2496,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { Map> map = new HashMap<>(); diff --git a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java -index 22125dbe1765f930fe10fe420be1c275ec553139..d5b070d1a3d84e228960dacd614e0f1abe968e79 100644 +index 549ff74bfade5c1c13f7d6a4d5ec57a6ef36d7ee..4d097ce093d0df9146e7539f55f9bbf30d5eafc6 100644 --- a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java +++ b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java -@@ -35,7 +35,7 @@ public class PaperVersionFetcher implements VersionFetcher { - private static final Logger LOGGER = LogUtils.getClassLogger(); +@@ -40,8 +40,8 @@ public class PaperVersionFetcher implements VersionFetcher { + private static final ComponentLogger COMPONENT_LOGGER = ComponentLogger.logger(LogManager.getRootLogger().getName()); private static final int DISTANCE_ERROR = -1; private static final int DISTANCE_UNKNOWN = -2; -- private static final String DOWNLOAD_PAGE = "https://github.com/LuminolMC/Luminol"; //Luminol -+ private static final String DOWNLOAD_PAGE = "https://github.com/LuminolMC/Lophine"; //Luminol // Lophine - - @Override - public long getCacheTime() { -@@ -49,7 +49,7 @@ public class PaperVersionFetcher implements VersionFetcher { - if (build.buildNumber().isEmpty() && build.gitCommit().isEmpty()) { - updateMessage = text("You are running a development version without access to version information", color(0xFF5300)); - } else { -- updateMessage = getUpdateStatusMessage("LuminolMC/Luminol", build); // Folia // Luminol -+ updateMessage = getUpdateStatusMessage("LuminolMC/Lophine", build); // Folia // Luminol // Lophine - } - final @Nullable Component history = this.getHistory(); - +- private static final String DOWNLOAD_PAGE = "github.com/LuminolMC/Luminol"; // Luminol +- private static final String REPOSITORY = "LuminolMC/Luminol"; // Luminol ++ private static final String DOWNLOAD_PAGE = "github.com/LuminolMC/Lophine"; // Luminol // Lophine ++ private static final String REPOSITORY = "LuminolMCophine"; // Luminol // Lophine + private static final ServerBuildInfo BUILD_INFO = ServerBuildInfo.buildInfo(); + private static final String USER_AGENT = BUILD_INFO.brandName() + "/" + BUILD_INFO.asString(VERSION_SIMPLE) + " (https://papermc.io)"; + private static final Gson GSON = new Gson(); diff --git a/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java b/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java index 4ada790812957657d580cb748077c4961987d0cb..3a539df860305e777e85ed6dc72b5effe76734b4 100644 --- a/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java diff --git a/lophine-server/paper-patches/features/0006-Leaves-Leaves-Fakeplayer.patch b/lophine-server/paper-patches/features/0006-Leaves-Leaves-Fakeplayer.patch index 9bc890a..7d776ed 100644 --- a/lophine-server/paper-patches/features/0006-Leaves-Leaves-Fakeplayer.patch +++ b/lophine-server/paper-patches/features/0006-Leaves-Leaves-Fakeplayer.patch @@ -53,7 +53,7 @@ index 21d594a39d09b2d17f05c40ce5323d57949d0b0b..46859fc70795097366f02dba48fdaab8 if (nmsEntity.level() != this.getHandle().getLevel()) { throw new IllegalArgumentException(entity + " wasn't created with this world, you must create the entity with the world you want to add it to."); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 73e470e0c318568c2f2e82de4f8e170857a20c9a..401f977483b6e809b9b10c601900e35110ae7396 100644 +index dfcfc83474443638e30f87d54472e5a38947dfad..973f064fc5e089dc892d4b4077a807517fd199b5 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -305,6 +305,7 @@ public final class CraftServer implements Server { @@ -96,10 +96,10 @@ index 73e470e0c318568c2f2e82de4f8e170857a20c9a..401f977483b6e809b9b10c601900e351 /** * Gets the TPS from the region which owns the specified location, or {@code null} if no region owns diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index e653246b2f991dd5b0c4d755e0844763686275fc..3274a80dd49774ae65d0009c00078379eea15967 100644 +index dcd32c1e32fd67ec13bb7fca8af20aa665407594..b7f83e66227b5a1f5ad9b424e425eee118cc0692 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -@@ -250,7 +250,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -247,7 +247,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { @Override public int getPlayerCount() { @@ -108,7 +108,7 @@ index e653246b2f991dd5b0c4d755e0844763686275fc..3274a80dd49774ae65d0009c00078379 } @Override -@@ -1134,9 +1134,9 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -1121,9 +1121,9 @@ public class CraftWorld extends CraftRegionAccessor implements World { @Override public List getPlayers() { @@ -120,7 +120,7 @@ index e653246b2f991dd5b0c4d755e0844763686275fc..3274a80dd49774ae65d0009c00078379 HumanEntity bukkitEntity = human.getBukkitEntity(); if ((bukkitEntity != null) && (bukkitEntity instanceof Player)) { -@@ -1638,7 +1638,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -1622,7 +1622,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { public void playSound(final net.kyori.adventure.sound.Sound sound) { org.spigotmc.AsyncCatcher.catchOp("play sound"); // Paper final long seed = sound.seed().orElseGet(this.world.getRandom()::nextLong); @@ -129,7 +129,7 @@ index e653246b2f991dd5b0c4d755e0844763686275fc..3274a80dd49774ae65d0009c00078379 player.connection.send(io.papermc.paper.adventure.PaperAdventure.asSoundPacket(sound, player.getX(), player.getY(), player.getZ(), seed, null)); } } -@@ -1666,7 +1666,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -1650,7 +1650,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { org.spigotmc.AsyncCatcher.catchOp("play sound"); // Paper final long seed = sound.seed().orElseGet(this.getHandle().getRandom()::nextLong); if (emitter == net.kyori.adventure.sound.Sound.Emitter.self()) { @@ -138,7 +138,7 @@ index e653246b2f991dd5b0c4d755e0844763686275fc..3274a80dd49774ae65d0009c00078379 player.connection.send(io.papermc.paper.adventure.PaperAdventure.asSoundPacket(sound, player, seed, null)); } } else if (emitter instanceof CraftEntity craftEntity) { -@@ -1807,7 +1807,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -1791,7 +1791,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { Preconditions.checkArgument(particle.getDataType().isInstance(data), "data (%s) should be %s", data.getClass(), particle.getDataType()); } this.getHandle().sendParticlesSource( diff --git a/lophine-server/paper-patches/features/0007-Leaves-Replay-Mod-API.patch b/lophine-server/paper-patches/features/0007-Leaves-Replay-Mod-API.patch index 394f7e9..ee146c1 100644 --- a/lophine-server/paper-patches/features/0007-Leaves-Replay-Mod-API.patch +++ b/lophine-server/paper-patches/features/0007-Leaves-Replay-Mod-API.patch @@ -21,7 +21,7 @@ index e1f456b31ffda9370b63e51f343847d6f9f62263..8a0f85241cc1530aacccc8b6ea24b9de } // Leaves end - skip bot diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 401f977483b6e809b9b10c601900e35110ae7396..030a9cf9a95fcea1410e825df76f817f73d4db78 100644 +index 973f064fc5e089dc892d4b4077a807517fd199b5..06766a9058595aeee25e8fd3e3d01aeec2a55116 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -306,6 +306,7 @@ public final class CraftServer implements Server { @@ -66,10 +66,10 @@ index 6867064de52d810f1fd3869463ae27868ed0fb07..69a0de762cfde089e8aaa6e6be79a8c8 // Special case complex part, since there is no extra entity type for them if (entity instanceof EnderDragonPart complexPart) { diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index a8838e45dd7d44c25442c14d49b53583f9f2a2d2..effb56daac89b7cc3106ed4b394a6c583b654735 100644 +index 6e745c7ddf417ec2fdcf102edd6a592047b5f73e..2f59107642d43719159872d5df37107d8a1a5b97 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -2091,7 +2091,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa +@@ -2085,7 +2085,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa @Override public boolean canSee(Player player) {