Update Luminol

This commit is contained in:
Helvetica Volubi
2026-01-21 21:37:37 +08:00
parent cf80fc6a86
commit a780b13fcc
19 changed files with 99 additions and 106 deletions
@@ -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
@@ -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
@@ -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<Tic
@@ -48,10 +48,10 @@ index b95d144dd479d339cc4b0f92cc4c3bade9af4927..097e5b6a14fd148c93ca3894295a4a6b
SaveOnCommand.register(this.dispatcher);
SetPlayerIdleTimeoutCommand.register(this.dispatcher);
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
index 491c78bffae2917f1f7f0b1fce0376a987319537..1600296f134c84ae8eee4e54f5ea54f19e6ed258 100644
index 0d572803c663738a525922c02dd4c65ac61e4cce..76098a4f44f8d82bebf832fa5e240adf25fbe80a 100644
--- a/net/minecraft/server/MinecraftServer.java
+++ b/net/minecraft/server/MinecraftServer.java
@@ -1658,6 +1658,11 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -1661,6 +1661,11 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
// Folia start - region threading
public void tickServer(long startTime, long scheduledEnd, long targetBuffer,
io.papermc.paper.threadedregions.TickRegions.TickRegionData region) {
@@ -1,11 +1,11 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Helvetica Volubi <suisuroru@blue-millennium.fun>
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<TickTa
@@ -5,10 +5,10 @@ Subject: [PATCH] Fix datapack command save function
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
index e40ce457fc046b3b244c67afa79e4f637cc73fde..0a11c9b42d55d1077d09bcbf73e1fc7736f230fb 100644
index 644c49730fc08a7c680f8114136db00ee8f81378..2359c5b49e4457cc36239289f203df16767a4341 100644
--- a/net/minecraft/server/MinecraftServer.java
+++ b/net/minecraft/server/MinecraftServer.java
@@ -2433,6 +2433,16 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -2436,6 +2436,16 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
return this.reloadResources(selectedIds, io.papermc.paper.event.server.ServerResourcesReloadedEvent.Cause.PLUGIN);
}
@@ -8,10 +8,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/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index 4fa29d777a56b3296ea5e5fb4b9cb3300a7dda31..9a3b6d20b149b0937b5bc23807e381a08ae03b0f 100644
index 2c140e4b5c818cbaedcdd3110794e30dd94dd8b4..3a174defc1e8d0d13ae006dd6c52712ed9469240 100644
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
@@ -3024,7 +3024,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -3030,7 +3030,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
// Spigot start
if (entity.getBukkitEntity() instanceof org.bukkit.inventory.InventoryHolder && (!(entity instanceof ServerPlayer) || entity.getRemovalReason() != Entity.RemovalReason.KILLED)) { // SPIGOT-6876: closeInventory clears death message
// Paper start - Fix merchant inventory not closing on entity removal
@@ -41,10 +41,10 @@ index 1281eadb2d0c5b4ce5e3afd51d8205f9a4ef011c..b1446dfb4689174ee9f55cec6080622e
if (count > 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();
@@ -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
@@ -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 {
@@ -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<TickTa
@@ -45,7 +45,7 @@ index 0a11c9b42d55d1077d09bcbf73e1fc7736f230fb..ca199e6334f39d8598ccc22ef5aca36e
public static <S extends MinecraftServer> S spin(Function<Thread, S> threadFunction) {
ca.spottedleaf.dataconverter.minecraft.datatypes.MCTypeRegistry.init(); // Paper - rewrite data converter system
AtomicReference<S> atomicReference = new AtomicReference<>();
@@ -1052,6 +1054,11 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -1050,6 +1052,11 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
// Folia end - region threading
public void stopServer() {
@@ -57,7 +57,7 @@ index 0a11c9b42d55d1077d09bcbf73e1fc7736f230fb..ca199e6334f39d8598ccc22ef5aca36e
// Folia start - region threading
// halt scheduler
// don't wait, we may be on a scheduler thread
@@ -1670,7 +1677,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -1673,7 +1680,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
int i = this.pauseWhenEmptySeconds() * 20;
this.removeDisabledPluginsBlockingSleep(); // Paper - API to allow/disallow tick sleeping
if (false && i > 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<TickTa
@@ -1806,6 +1813,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
this.isSaving = true;
if (playerSaveInterval > 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<TickTa
@@ -2026,6 +2034,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
public void tickConnection() {
this.getConnection().tick();
@@ -82,7 +82,7 @@ index 0a11c9b42d55d1077d09bcbf73e1fc7736f230fb..ca199e6334f39d8598ccc22ef5aca36e
}
private void synchronizeTime(ServerLevel level) {
@@ -3157,6 +3166,16 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -3160,6 +3169,16 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
return this.debugSubscribers;
}
@@ -255,7 +255,7 @@ index fdccb06c918d387e46c29ede7337159db8c5d9ca..4cd5c5659ac098c3b7ff95efb94b1987
}
}
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index 354647c41fadfdadcc9b1664ac3ccbf8d29571f4..f41cab482168ca7b0764b371533658374dc4cc3a 100644
index 87bb2715eb4c2fd41537e020ba7fa8cce1591a0f..1837ca833939b8c59b05c03313bec7b02bc85151 100644
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
@@ -220,6 +220,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -274,7 +274,7 @@ index 354647c41fadfdadcc9b1664ac3ccbf8d29571f4..f41cab482168ca7b0764b37153365837
}
// Folia start - region threading
@@ -2478,6 +2480,12 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -2490,6 +2492,12 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
return this.players;
}
@@ -287,7 +287,7 @@ index 354647c41fadfdadcc9b1664ac3ccbf8d29571f4..f41cab482168ca7b0764b37153365837
@Override
public void updatePOIOnBlockStateChange(BlockPos pos, BlockState oldState, BlockState newState) {
Optional<Holder<PoiType>> 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
@@ -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.
}
@@ -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<TickTa
@@ -1901,7 +1901,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
}
private ServerStatus.Players buildPlayerStatus() {
@@ -96,7 +96,7 @@ index ca199e6334f39d8598ccc22ef5aca36ecfbb4939..a32a32e19cfc07df86587cb8f7c7eabf
int maxPlayers = this.getMaxPlayers();
if (this.hidesOnlinePlayers()) {
return new ServerStatus.Players(maxPlayers, players.size(), List.of());
@@ -2107,7 +2107,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -2110,7 +2110,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@Override
public int getPlayerCount() {
@@ -105,7 +105,7 @@ index ca199e6334f39d8598ccc22ef5aca36ecfbb4939..a32a32e19cfc07df86587cb8f7c7eabf
}
public String[] getPlayerNames() {
@@ -2311,7 +2311,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -2314,7 +2314,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
} else {
int i = 0;
@@ -114,7 +114,7 @@ index ca199e6334f39d8598ccc22ef5aca36ecfbb4939..a32a32e19cfc07df86587cb8f7c7eabf
serverPlayer.getBukkitEntity().taskScheduler.schedule((ServerPlayer player) -> { // 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<TickTa
@@ -2499,7 +2499,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
if (Thread.currentThread() != this.serverThread) return; // Paper
// Paper start - we don't need to save everything, just advancements
// this.getPlayerList().saveAll();
@@ -123,7 +123,7 @@ index ca199e6334f39d8598ccc22ef5aca36ecfbb4939..a32a32e19cfc07df86587cb8f7c7eabf
player.getAdvancements().save();
}
// Paper end - we don't need to save everything, just advancements
@@ -2634,7 +2634,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -2637,7 +2637,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
PlayerList playerList = this.getPlayerList();
UserWhiteList whiteList = playerList.getWhiteList();
@@ -284,10 +284,10 @@ index 5a8cd3e6b448a4472092690cf589bca10b142126..158593b1a6384db635a1f224919b24c1
this.setListData(list);
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index f41cab482168ca7b0764b371533658374dc4cc3a..15a6a96e49e55570836cca13c897c4be35662877 100644
index 1837ca833939b8c59b05c03313bec7b02bc85151..a1279303993ffed6ef5ba4ec86668ad845596318 100644
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
@@ -2960,7 +2960,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -2972,7 +2972,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
if (entity instanceof ServerPlayer serverPlayer) {
ServerLevel.this.players.add(serverPlayer);
// Leaves start - skip
@@ -296,7 +296,7 @@ index f41cab482168ca7b0764b371533658374dc4cc3a..15a6a96e49e55570836cca13c897c4be
ServerLevel.this.realPlayers.add(serverPlayer);
}
// Leaves end - skip
@@ -3052,7 +3052,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -3058,7 +3058,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
if (entity instanceof ServerPlayer serverPlayer) {
ServerLevel.this.players.remove(serverPlayer);
// Leaves start - skip
@@ -306,7 +306,7 @@ index f41cab482168ca7b0764b371533658374dc4cc3a..15a6a96e49e55570836cca13c897c4be
}
// Leaves end - skip
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
index b88f669535f050605e3b5739501ef6d5caee4238..5e08d8b9c7f1869965be0ee5761bbc40f1e70300 100644
index 9eb7875fd3f2da2ded79397d275c968c0fd613ab..de8d0ad8555679e7814708046f1e93c6b9017c6d 100644
--- a/net/minecraft/server/level/ServerPlayer.java
+++ b/net/minecraft/server/level/ServerPlayer.java
@@ -202,7 +202,7 @@ import org.jspecify.annotations.Nullable;
@@ -46,10 +46,10 @@ index ab80a66646a7ebe2862221ac342b06c14fcfc734..7834f3da4d0ff4a5cdec46b023d73483
fillCrashReport(reportedException.getReport(), packetListener, packet);
return reportedException;
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
index a32a32e19cfc07df86587cb8f7c7eabff19d97cd..818078aee685f6c1c4e94f54377c20b63da3aec3 100644
index 72824013c313b7ada8dc86d9f2ff55a296fb6ac8..93b46fb72b74535cbff8eb9c56ee0cbf9052eafe 100644
--- a/net/minecraft/server/MinecraftServer.java
+++ b/net/minecraft/server/MinecraftServer.java
@@ -1977,8 +1977,17 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -1980,8 +1980,17 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
try {
profiler.startTimer(serverLevel.tickTimerId); try { // Folia - profiler
serverLevel.tick(hasTimeLeft, region); // Folia - region threading
@@ -68,10 +68,10 @@ index a32a32e19cfc07df86587cb8f7c7eabff19d97cd..818078aee685f6c1c4e94f54377c20b6
serverLevel.fillReportDetails(crashReport);
throw new ReportedException(crashReport);
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index 15a6a96e49e55570836cca13c897c4be35662877..68ec2a0bca780f7556873a3f17fbb2c19a946f70 100644
index a1279303993ffed6ef5ba4ec86668ad845596318..387709d4475eda2195f409a9f6d76706059341bd 100644
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
@@ -878,7 +878,20 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -894,7 +894,20 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
// Kaiiju end
profilerFiller.push("tick");
@@ -94,12 +94,12 @@ index 15a6a96e49e55570836cca13c897c4be35662877..68ec2a0bca780f7556873a3f17fbb2c1
}
}
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
index 5e08d8b9c7f1869965be0ee5761bbc40f1e70300..c74e9b421ac2afca5cd1f2cf93467eace2e94075 100644
index de8d0ad8555679e7814708046f1e93c6b9017c6d..8f994db8804d73a26f50d88fa19362096e0ffb36 100644
--- a/net/minecraft/server/level/ServerPlayer.java
+++ b/net/minecraft/server/level/ServerPlayer.java
@@ -1110,6 +1110,12 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
((org.bukkit.craftbukkit.CraftWorldBorder) this.getBukkitEntity().getWorldBorder()).getHandle().tick();
}
@@ -1108,6 +1108,12 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
// Folia - region threading - move to main tick loop where we can detect duplicates
// CraftBukkit end
+ // Leaves start - update suppression crash fix
+ } catch (org.leavesmc.leaves.util.UpdateSuppressionException exception) {
@@ -111,7 +111,7 @@ index 5e08d8b9c7f1869965be0ee5761bbc40f1e70300..c74e9b421ac2afca5cd1f2cf93467eac
CrashReport crashReport = CrashReport.forThrowable(var4, "Ticking player");
CrashReportCategory crashReportCategory = crashReport.addCategory("Player being ticked");
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 04ce4cb64e92b63437a216c0cb8318c7e17e23a0..7c2f7d5103caa0f6565d42affec260b1cfeee0e8 100644
index df4f5e724673edda7fe46a826a77d0365b40b1f7..90611f89bfd8e21e14e4b9095a0154a5f6972a4b 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -1444,9 +1444,19 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name
@@ -27,10 +27,10 @@ index 56e09b99c2901882483c5f2b3216bf0a11406e2e..1480bd04597001cd7c54e53ded46d7f7
this.wireHandler = new alternate.current.wire.WireHandler(world);
this.turbo = new io.papermc.paper.redstone.RedstoneWireTurbo((RedStoneWireBlock)Blocks.REDSTONE_WIRE);
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index 68ec2a0bca780f7556873a3f17fbb2c19a946f70..7f8774ef5a5875638273bb561a731b08a47c80b4 100644
index 387709d4475eda2195f409a9f6d76706059341bd..1f1dfc897dd826c2d14a9cb9db99c27e884c37a8 100644
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
@@ -911,12 +911,16 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -927,12 +927,16 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
// Paper - rewrite chunk system
profilerFiller.pop();
profilerFiller.push("debugSynchronizers");
@@ -97,10 +97,10 @@ index f4c9c551fc39bae38e283ccbbc3cd116f0536a64..db13211b24208d8addd3c210155bc244
NaturalSpawner.spawnForChunk(this.level, chunk, spawnState, spawnCategories);
}
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index 7f8774ef5a5875638273bb561a731b08a47c80b4..d91961c3eb8d964eb56845f0e2913f9de8f687aa 100644
index 1f1dfc897dd826c2d14a9cb9db99c27e884c37a8..e9a995ce1d8835c29d6c1eb331efcb5123ac5c38 100644
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
@@ -763,6 +763,11 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -765,6 +765,11 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
}
public void tick(BooleanSupplier hasTimeLeft, io.papermc.paper.threadedregions.TickRegions.TickRegionData region) { // Folia - regionised ticking
@@ -35,27 +35,20 @@ index fcdfd4f6de5e1c2d5e80c7f3d8cb0b33a62d257d..6eaa4e9bd1ecbfa531313ce1f470d55e
metrics.addCustomChart(new Metrics.DrilldownPie("java_version", () -> {
Map<String, Map<String, Integer>> 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
@@ -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<Player> 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(
@@ -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) {