diff --git a/gradle.properties b/gradle.properties
index ee67f546..b3c991c9 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -2,7 +2,7 @@ group = cn.dreeam.leaf
mcVersion = 1.21
version = 1.21-R0.1-SNAPSHOT
-galeCommit = 4ef476e1ab498a1c69d4114c7b031b83b99b0e6e
+galeCommit = 65a5517ddefb8cb1a53f3d3c9984532526440f6f
org.gradle.caching = true
org.gradle.parallel = true
diff --git a/patches/api/0004-Purpur-API-Changes.patch b/patches/api/0004-Purpur-API-Changes.patch
index 5ce7caf3..3165b57c 100644
--- a/patches/api/0004-Purpur-API-Changes.patch
+++ b/patches/api/0004-Purpur-API-Changes.patch
@@ -6,7 +6,7 @@ Subject: [PATCH] Purpur API Changes
Original license: MIT
Original project: https://github.com/PurpurMC/Purpur
-Commit: 14136b85d13ca7235ad6e53a574aca392406deac
+Commit: 87cf9f15dc468169a0350d678bf1fdc036eeaf33
Patches below are removed in this patch:
Pufferfish-API-Changes.patch
diff --git a/patches/generated-api/0001-Purpur-generated-api-Changes.patch b/patches/generated-api/0001-Purpur-generated-api-Changes.patch
index f2ab88cc..11f06b50 100644
--- a/patches/generated-api/0001-Purpur-generated-api-Changes.patch
+++ b/patches/generated-api/0001-Purpur-generated-api-Changes.patch
@@ -6,7 +6,7 @@ Subject: [PATCH] Purpur generated-api Changes
Original license: MIT
Original project: https://github.com/PurpurMC/Purpur
-Commit: 14136b85d13ca7235ad6e53a574aca392406deac
+Commit: 87cf9f15dc468169a0350d678bf1fdc036eeaf33
diff --git a/com/destroystokyo/paper/entity/ai/VanillaGoal.java b/com/destroystokyo/paper/entity/ai/VanillaGoal.java
index 3add91218dd3f07052aa932f0503d1f10ac3799b..3e41a4141095bce989c75e989293deb3f47e8e6d 100644
diff --git a/patches/server/0001-Rebrand.patch b/patches/server/0001-Rebrand.patch
index f51584dc..53055572 100644
--- a/patches/server/0001-Rebrand.patch
+++ b/patches/server/0001-Rebrand.patch
@@ -149,19 +149,6 @@ index b24265573fdef5d9a964bcd76146f34542c420cf..aa25fd3ee043003f359b2c67a6d0f670
}
public SystemReport getSystemReport() {
-diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index d76d6a3b9ce126d588e5dca0fdc21059914d84f9..63d7678bf7eb847b3340b138a629cc93430d5540 100644
---- a/src/main/java/net/minecraft/server/MinecraftServer.java
-+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
-@@ -1019,7 +1019,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop.
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
-index cbe5bd9902fa948a9c928c75961a6525404708b5..ef3d830c08c508cebd158c29ecaba11ad510d354 100644
+index 8bca5e1165e09e219386a787eb36fabcd948a0e6..3f787ea97480fa987cc1fc8d64268d46723fe1dd 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
-@@ -734,6 +734,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
+@@ -725,6 +725,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
org.spigotmc.ActivationRange.activateEntities(this); // Spigot
this.timings.entityTick.startTiming(); // Spigot
this.entityTickList.forEach((entity) -> {
diff --git a/patches/server/0009-Purpur-Server-Changes.patch b/patches/server/0009-Purpur-Server-Changes.patch
index e57f5297..de0c44bc 100644
--- a/patches/server/0009-Purpur-Server-Changes.patch
+++ b/patches/server/0009-Purpur-Server-Changes.patch
@@ -8,7 +8,7 @@ TODO - Dreeam: Check Fix-pufferfish-issues.patch
Original license: MIT
Original project: https://github.com/PurpurMC/Purpur
-Commit: 14136b85d13ca7235ad6e53a574aca392406deac
+Commit: 87cf9f15dc468169a0350d678bf1fdc036eeaf33
Patches below are removed in this patch:
Brand changes in Rebrand.patch
@@ -699,7 +699,7 @@ index d2ea951c7e5899d0e2edb52064e35c23965c4230..b929842514a97ca993ead608d355a4af
Bootstrap.bootStrap();
Bootstrap.validate();
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index 208b9558d9019cd00f7ed270d2a36f9a28464e65..7f12e6fc9ff0c6f0e2659886f2cf1efb117f78d6 100644
+index 29c35af2dd3bbcc2527542d594316b9756c7c2a2..21d3c7cb818a5a61f5532b73f2b320665802ec0f 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -289,6 +289,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0; // Paper - Add EntityMoveEvent
net.minecraft.world.level.block.entity.HopperBlockEntity.skipHopperEvents = worldserver.paperConfig().hopper.disableMoveEvent || org.bukkit.event.inventory.InventoryMoveItemEvent.getHandlerList().getRegisteredListeners().length == 0; // Paper - Perf: Optimize Hoppers
worldserver.updateLagCompensationTick(); // Paper - lag compensation
@@ -1098,7 +1098,7 @@ index c80be65d190c85e7f0ea8233ebbbdbc1ea67f276..97e793c971614299504605aeb4f99cad
public ServerEntity(ServerLevel worldserver, Entity entity, int i, boolean flag, Consumer> consumer, Set trackedPlayers) {
this.trackedPlayers = trackedPlayers;
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
-index ef3d830c08c508cebd158c29ecaba11ad510d354..0e97393e90e239628782d52851c55a429bdce771 100644
+index 3f787ea97480fa987cc1fc8d64268d46723fe1dd..c4c5b6ce393f023117bd95d874be863a18984d3a 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -220,6 +220,8 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
@@ -1118,7 +1118,7 @@ index ef3d830c08c508cebd158c29ecaba11ad510d354..0e97393e90e239628782d52851c55a42
public LevelChunk getChunkIfLoaded(int x, int z) {
return this.chunkSource.getChunkAtIfLoadedImmediately(x, z); // Paper - Use getChunkIfLoadedImmediately
-@@ -553,7 +556,24 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
+@@ -544,7 +547,24 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
this.dragonParts = new Int2ObjectOpenHashMap();
this.tickTime = flag1;
this.server = minecraftserver;
@@ -1144,7 +1144,7 @@ index ef3d830c08c508cebd158c29ecaba11ad510d354..0e97393e90e239628782d52851c55a42
this.serverLevelData = iworlddataserver;
ChunkGenerator chunkgenerator = worlddimension.generator();
// CraftBukkit start
-@@ -624,6 +644,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
+@@ -615,6 +635,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
this.chunkTaskScheduler = new ca.spottedleaf.moonrise.patches.chunk_system.scheduling.ChunkTaskScheduler((ServerLevel)(Object)this, ca.spottedleaf.moonrise.common.util.MoonriseCommon.WORKER_POOL);
// Paper end - rewrite chunk system
this.getCraftServer().addWorld(this.getWorld()); // CraftBukkit
@@ -1152,7 +1152,7 @@ index ef3d830c08c508cebd158c29ecaba11ad510d354..0e97393e90e239628782d52851c55a42
}
// Paper start
-@@ -670,7 +691,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
+@@ -661,7 +682,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
int i = this.getGameRules().getInt(GameRules.RULE_PLAYERS_SLEEPING_PERCENTAGE);
long j;
@@ -1161,7 +1161,7 @@ index ef3d830c08c508cebd158c29ecaba11ad510d354..0e97393e90e239628782d52851c55a42
// CraftBukkit start
j = this.levelData.getDayTime() + 24000L;
TimeSkipEvent event = new TimeSkipEvent(this.getWorld(), TimeSkipEvent.SkipReason.NIGHT_SKIP, (j - j % 24000L) - this.getDayTime());
-@@ -792,6 +813,13 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
+@@ -783,6 +804,13 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
this.serverLevelData.setGameTime(i);
this.serverLevelData.getScheduledEvents().tick(this.server, i);
if (this.levelData.getGameRules().getBoolean(GameRules.RULE_DAYLIGHT)) {
@@ -1175,7 +1175,7 @@ index ef3d830c08c508cebd158c29ecaba11ad510d354..0e97393e90e239628782d52851c55a42
this.setDayTime(this.levelData.getDayTime() + 1L);
}
-@@ -800,8 +828,22 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
+@@ -791,8 +819,22 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
public void setDayTime(long timeOfDay) {
this.serverLevelData.setDayTime(timeOfDay);
@@ -1198,7 +1198,7 @@ index ef3d830c08c508cebd158c29ecaba11ad510d354..0e97393e90e239628782d52851c55a42
public void tickCustomSpawners(boolean spawnMonsters, boolean spawnAnimals) {
Iterator iterator = this.customSpawners.iterator();
-@@ -838,10 +880,18 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
+@@ -888,10 +930,18 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
boolean flag1 = this.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING) && this.random.nextDouble() < (double) difficultydamagescaler.getEffectiveDifficulty() * this.paperConfig().entities.spawning.skeletonHorseThunderSpawnChance.or(0.01D) && !this.getBlockState(blockposition.below()).is(Blocks.LIGHTNING_ROD); // Paper - Configurable spawn chances for skeleton horses
if (flag1) {
@@ -1219,7 +1219,7 @@ index ef3d830c08c508cebd158c29ecaba11ad510d354..0e97393e90e239628782d52851c55a42
entityhorseskeleton.setAge(0);
entityhorseskeleton.setPos((double) blockposition.getX(), (double) blockposition.getY(), (double) blockposition.getZ());
this.addFreshEntity(entityhorseskeleton, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.LIGHTNING); // CraftBukkit
-@@ -946,7 +996,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
+@@ -970,7 +1020,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
return holder.is(PoiTypes.LIGHTNING_ROD);
}, (blockposition1) -> {
return blockposition1.getY() == this.getHeight(Heightmap.Types.WORLD_SURFACE, blockposition1.getX(), blockposition1.getZ()) - 1;
@@ -1228,7 +1228,7 @@ index ef3d830c08c508cebd158c29ecaba11ad510d354..0e97393e90e239628782d52851c55a42
return optional.map((blockposition1) -> {
return blockposition1.above(1);
-@@ -995,11 +1045,27 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
+@@ -1019,11 +1069,27 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
if (this.canSleepThroughNights()) {
if (!this.getServer().isSingleplayer() || this.getServer().isPublished()) {
int i = this.getGameRules().getInt(GameRules.RULE_PLAYERS_SLEEPING_PERCENTAGE);
@@ -1257,7 +1257,7 @@ index ef3d830c08c508cebd158c29ecaba11ad510d354..0e97393e90e239628782d52851c55a42
ichatmutablecomponent = Component.translatable("sleep.players_sleeping", this.sleepStatus.amountSleeping(), this.sleepStatus.sleepersNeeded(i));
}
-@@ -1139,6 +1205,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
+@@ -1163,6 +1229,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
@VisibleForTesting
public void resetWeatherCycle() {
// CraftBukkit start
@@ -1265,7 +1265,7 @@ index ef3d830c08c508cebd158c29ecaba11ad510d354..0e97393e90e239628782d52851c55a42
this.serverLevelData.setRaining(false, org.bukkit.event.weather.WeatherChangeEvent.Cause.SLEEP); // Paper - Add cause to Weather/ThunderChangeEvents
// If we stop due to everyone sleeping we should reset the weather duration to some other random value.
// Not that everyone ever manages to get the whole server to sleep at the same time....
-@@ -1146,6 +1213,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
+@@ -1170,6 +1237,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
this.serverLevelData.setRainTime(0);
}
// CraftBukkit end
@@ -1273,7 +1273,7 @@ index ef3d830c08c508cebd158c29ecaba11ad510d354..0e97393e90e239628782d52851c55a42
this.serverLevelData.setThundering(false, org.bukkit.event.weather.ThunderChangeEvent.Cause.SLEEP); // Paper - Add cause to Weather/ThunderChangeEvents
// CraftBukkit start
// If we stop due to everyone sleeping we should reset the weather duration to some other random value.
-@@ -2555,7 +2623,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
+@@ -2608,7 +2676,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
// 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
@@ -1283,10 +1283,10 @@ index ef3d830c08c508cebd158c29ecaba11ad510d354..0e97393e90e239628782d52851c55a42
}
// Paper end - Fix merchant inventory not closing on entity removal
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
-index 3993b360455361acf6c49495283285992d71d927..250b23672ff509f9972ad6c91112d161b3068933 100644
+index 4a69885e173cebc8ab427e02145e1020282ea95d..5b645db318a73f352838d779e3be16ff866bf3f6 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
-@@ -302,6 +302,10 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
+@@ -303,6 +303,10 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
public com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper - PlayerNaturallySpawnCreaturesEvent
public @Nullable String clientBrandName = null; // Paper - Brand support
public org.bukkit.event.player.PlayerQuitEvent.QuitReason quitReason = null; // Paper - Add API for quit reason; there are a lot of changes to do if we change all methods leading to the event
@@ -1297,7 +1297,7 @@ index 3993b360455361acf6c49495283285992d71d927..250b23672ff509f9972ad6c91112d161
// Paper start - rewrite chunk system
private ca.spottedleaf.moonrise.patches.chunk_system.player.RegionizedPlayerChunkLoader.PlayerChunkLoaderData chunkLoader;
-@@ -601,6 +605,9 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
+@@ -602,6 +606,9 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
});
}
@@ -1307,7 +1307,7 @@ index 3993b360455361acf6c49495283285992d71d927..250b23672ff509f9972ad6c91112d161
}
@Override
-@@ -677,6 +684,9 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
+@@ -678,6 +685,9 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
});
}
@@ -1317,7 +1317,7 @@ index 3993b360455361acf6c49495283285992d71d927..250b23672ff509f9972ad6c91112d161
}
// CraftBukkit start - World fallback code, either respawn location or global spawn
-@@ -806,6 +816,15 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
+@@ -807,6 +817,15 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
this.trackEnteredOrExitedLavaOnVehicle();
this.updatePlayerAttributes();
this.advancements.flushDirty(this);
@@ -1333,7 +1333,7 @@ index 3993b360455361acf6c49495283285992d71d927..250b23672ff509f9972ad6c91112d161
}
private void updatePlayerAttributes() {
-@@ -1071,6 +1090,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
+@@ -1072,6 +1091,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
}));
PlayerTeam scoreboardteam = this.getTeam();
@@ -1341,7 +1341,7 @@ index 3993b360455361acf6c49495283285992d71d927..250b23672ff509f9972ad6c91112d161
if (scoreboardteam != null && scoreboardteam.getDeathMessageVisibility() != Team.Visibility.ALWAYS) {
if (scoreboardteam.getDeathMessageVisibility() == Team.Visibility.HIDE_FOR_OTHER_TEAMS) {
this.server.getPlayerList().broadcastSystemToTeam(this, ichatbasecomponent);
-@@ -1174,6 +1194,16 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
+@@ -1175,6 +1195,16 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
if (this.isInvulnerableTo(source)) {
return false;
} else {
@@ -1358,7 +1358,7 @@ index 3993b360455361acf6c49495283285992d71d927..250b23672ff509f9972ad6c91112d161
boolean flag = this.server.isDedicatedServer() && this.isPvpAllowed() && source.is(DamageTypeTags.IS_FALL);
if (!flag && this.spawnInvulnerableTime > 0 && !source.is(DamageTypeTags.BYPASSES_INVULNERABILITY)) {
-@@ -1401,6 +1431,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
+@@ -1402,6 +1432,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
worldserver1.removePlayerImmediately(this, Entity.RemovalReason.CHANGED_DIMENSION);
this.unsetRemoved();
// CraftBukkit end
@@ -1366,7 +1366,7 @@ index 3993b360455361acf6c49495283285992d71d927..250b23672ff509f9972ad6c91112d161
this.setServerLevel(worldserver);
this.connection.teleport(exit); // CraftBukkit - use internal teleport without event
this.connection.resetPosition();
-@@ -1504,7 +1535,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
+@@ -1505,7 +1536,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
return entitymonster.isPreventingPlayerRest(this);
});
@@ -1375,7 +1375,7 @@ index 3993b360455361acf6c49495283285992d71d927..250b23672ff509f9972ad6c91112d161
return Either.left(net.minecraft.world.entity.player.Player.BedSleepingProblem.NOT_SAFE);
}
}
-@@ -1544,7 +1575,19 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
+@@ -1545,7 +1576,19 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
});
if (!this.serverLevel().canSleepThroughNights()) {
@@ -1396,7 +1396,7 @@ index 3993b360455361acf6c49495283285992d71d927..250b23672ff509f9972ad6c91112d161
}
((ServerLevel) this.level()).updateSleepingPlayerList();
-@@ -1666,6 +1709,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
+@@ -1667,6 +1710,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
@Override
public void openTextEdit(SignBlockEntity sign, boolean front) {
@@ -1404,7 +1404,7 @@ index 3993b360455361acf6c49495283285992d71d927..250b23672ff509f9972ad6c91112d161
this.connection.send(new ClientboundBlockUpdatePacket(this.level(), sign.getBlockPos()));
this.connection.send(new ClientboundOpenSignEditorPacket(sign.getBlockPos(), front));
}
-@@ -2002,6 +2046,26 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
+@@ -2003,6 +2047,26 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
this.lastSentExp = -1; // CraftBukkit - Added to reset
}
@@ -1431,7 +1431,7 @@ index 3993b360455361acf6c49495283285992d71d927..250b23672ff509f9972ad6c91112d161
@Override
public void displayClientMessage(Component message, boolean overlay) {
this.sendSystemMessage(message, overlay);
-@@ -2342,8 +2406,68 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
+@@ -2343,8 +2407,68 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
public void resetLastActionTime() {
this.lastActionTime = Util.getMillis();
@@ -1500,7 +1500,7 @@ index 3993b360455361acf6c49495283285992d71d927..250b23672ff509f9972ad6c91112d161
public ServerStatsCounter getStats() {
return this.stats;
}
-@@ -2947,4 +3071,50 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
+@@ -2948,4 +3072,50 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
return (CraftPlayer) super.getBukkitEntity();
}
// CraftBukkit end
@@ -1886,7 +1886,7 @@ index 1d11d0388b9763a0e0e5f3398425dafa2bb01488..72cf1372a7e685b3ff4cc852c3d38f7d
}
} catch (AuthenticationUnavailableException authenticationunavailableexception) {
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
-index 28354aa3ed55f7a86c210f805b1aecb5ae06b466..811a0c7ed06ecba3d6b4cd5d45a81c2d483bc53b 100644
+index 503eafc89cbbd7286108eb2edf32af01d5e5c57d..e3cc24c2c7eb9cc8928fe300137eb9baac70e91f 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
@@ -494,6 +494,7 @@ public abstract class PlayerList {
@@ -1897,7 +1897,7 @@ index 28354aa3ed55f7a86c210f805b1aecb5ae06b466..811a0c7ed06ecba3d6b4cd5d45a81c2d
if (GaleGlobalConfiguration.get().logToConsole.playerLoginLocations) { // Gale - JettPack - make logging login location configurable
PlayerList.LOGGER.info("{}[{}] logged in with entity id {} at ([{}]{}, {}, {})", player.getName().getString(), s1, player.getId(), worldserver1.serverLevelData.getLevelName(), player.getX(), player.getY(), player.getZ());
// Gale start - JettPack - make logging login location configurable
-@@ -610,6 +611,7 @@ public abstract class PlayerList {
+@@ -611,6 +612,7 @@ public abstract class PlayerList {
}
public net.kyori.adventure.text.Component remove(ServerPlayer entityplayer, net.kyori.adventure.text.Component leaveMessage) {
// Paper end - Fix kick event leave message not being sent
@@ -1905,7 +1905,7 @@ index 28354aa3ed55f7a86c210f805b1aecb5ae06b466..811a0c7ed06ecba3d6b4cd5d45a81c2d
ServerLevel worldserver = entityplayer.serverLevel();
entityplayer.awardStat(Stats.LEAVE_GAME);
-@@ -766,7 +768,7 @@ public abstract class PlayerList {
+@@ -767,7 +769,7 @@ public abstract class PlayerList {
event.disallow(PlayerLoginEvent.Result.KICK_BANNED, io.papermc.paper.adventure.PaperAdventure.asAdventure(ichatmutablecomponent)); // Paper - Adventure
} else {
// return this.players.size() >= this.maxPlayers && !this.canBypassPlayerLimit(gameprofile) ? IChatBaseComponent.translatable("multiplayer.disconnect.server_full") : null;
@@ -1914,7 +1914,7 @@ index 28354aa3ed55f7a86c210f805b1aecb5ae06b466..811a0c7ed06ecba3d6b4cd5d45a81c2d
event.disallow(PlayerLoginEvent.Result.KICK_FULL, net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection().deserialize(org.spigotmc.SpigotConfig.serverFullMessage)); // Spigot // Paper - Adventure
}
}
-@@ -1078,6 +1080,20 @@ public abstract class PlayerList {
+@@ -1079,6 +1081,20 @@ public abstract class PlayerList {
}
// CraftBukkit end
@@ -1935,7 +1935,7 @@ index 28354aa3ed55f7a86c210f805b1aecb5ae06b466..811a0c7ed06ecba3d6b4cd5d45a81c2d
public void broadcastAll(Packet> packet, ResourceKey dimension) {
Iterator iterator = this.players.iterator();
-@@ -1181,6 +1197,7 @@ public abstract class PlayerList {
+@@ -1182,6 +1198,7 @@ public abstract class PlayerList {
} else {
b0 = (byte) (24 + permissionLevel);
}
@@ -1943,7 +1943,7 @@ index 28354aa3ed55f7a86c210f805b1aecb5ae06b466..811a0c7ed06ecba3d6b4cd5d45a81c2d
player.connection.send(new ClientboundEntityEventPacket(player, b0));
}
-@@ -1189,6 +1206,27 @@ public abstract class PlayerList {
+@@ -1190,6 +1207,27 @@ public abstract class PlayerList {
player.getBukkitEntity().recalculatePermissions(); // CraftBukkit
this.server.getCommands().sendCommands(player);
} // Paper - Add sendOpLevel API
@@ -14299,7 +14299,7 @@ index e314f36951e9ac15c57137e24fce8c410373130a..21dfb8e91c5427ac12133de2c05d923d
int i = aitemstack.length;
diff --git a/src/main/java/net/minecraft/world/item/enchantment/EnchantmentHelper.java b/src/main/java/net/minecraft/world/item/enchantment/EnchantmentHelper.java
-index fce49b17905ab97e691aa8499a5dfed67adf0c40..1abf54eeaad1b062f1465ee1a847bbfcba295665 100644
+index 986d0151aeeb2ce0f752c424c526fb0cc6849308..332500cb937f4a3eecb14e8daac44b33a15f9115 100644
--- a/src/main/java/net/minecraft/world/item/enchantment/EnchantmentHelper.java
+++ b/src/main/java/net/minecraft/world/item/enchantment/EnchantmentHelper.java
@@ -6,6 +6,7 @@ import it.unimi.dsi.fastutil.objects.Object2IntMap.Entry;
@@ -14495,7 +14495,7 @@ index d6e43a9b061a45c8e785ab93bafc8a9721fca7d0..8c79bbd7dde436915f1aeedef1b71379
// Paper start - collision optimisations
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
-index 336c96a331c893a81509672d9898669061d545bb..0d1a3ceae8e7a464bf2adf9c71ad22683aad772b 100644
+index 9da1b9e2afac5d6a82eeff66f685c032c19e0366..4a71075b673e2b9413d9797ddeeafc04d699ec5e 100644
--- a/src/main/java/net/minecraft/world/level/Level.java
+++ b/src/main/java/net/minecraft/world/level/Level.java
@@ -176,6 +176,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
@@ -14556,7 +14556,7 @@ index 336c96a331c893a81509672d9898669061d545bb..0d1a3ceae8e7a464bf2adf9c71ad2268
public CraftWorld getWorld() {
return this.world;
}
-@@ -654,6 +698,8 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
+@@ -698,6 +742,8 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName()); // Spigot
this.paperConfig = paperWorldConfigCreator.apply(this.spigotConfig); // Paper - create paper world config
this.galeConfig = galeWorldConfigCreator.apply(this.spigotConfig); // Gale - Gale configuration
@@ -14565,7 +14565,7 @@ index 336c96a331c893a81509672d9898669061d545bb..0d1a3ceae8e7a464bf2adf9c71ad2268
this.generator = gen;
this.world = new CraftWorld((ServerLevel) this, gen, biomeProvider, env);
-@@ -1990,4 +2036,13 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
+@@ -2034,4 +2080,13 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
return null;
}
// Paper end - optimize redstone (Alternate Current)
diff --git a/patches/server/0010-Fix-Pufferfish-and-Purpur-patches.patch b/patches/server/0010-Fix-Pufferfish-and-Purpur-patches.patch
index 99cc5d6d..ecdb2e7c 100644
--- a/patches/server/0010-Fix-Pufferfish-and-Purpur-patches.patch
+++ b/patches/server/0010-Fix-Pufferfish-and-Purpur-patches.patch
@@ -27,7 +27,7 @@ index e94224ed280247ee69dfdff8dc960f2b8729be33..5b9725a9a81c0850dc2809c150529e5f
for (Component component : formatProviders(spigotPlugins, sender)) { // Purpur
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index 7f12e6fc9ff0c6f0e2659886f2cf1efb117f78d6..ff2e76176e0c49aae4115d5c2f764dbf2926e33c 100644
+index 21d3c7cb818a5a61f5532b73f2b320665802ec0f..ab1ac64066f43a3c14f788760c12fc964a3cc60f 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -300,7 +300,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop S spin(Function serverFactory) {
AtomicReference atomicreference = new AtomicReference();
Thread thread = new io.papermc.paper.util.TickThread(() -> { // Paper - rewrite chunk system
-@@ -1045,6 +1047,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop implements ServerInfo, ChunkIOErrorReporter, CommandSource, AutoCloseable, ca.spottedleaf.moonrise.patches.chunk_system.server.ChunkSystemMinecraftServer { // Paper - rewrite chunk system
public static final int SERVER_THREAD_PRIORITY = Integer.getInteger("gale.thread.priority.server", -1); // Gale - server thread priority environment variable
-@@ -1038,7 +1036,6 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop {
return !this.canSleepForTickNoOversleep(); // Paper - move oversleep into full server tick
-@@ -1611,15 +1607,14 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop {
entityplayer.connection.suspendFlushing();
});
@@ -984,7 +984,7 @@ index e0ab4b524d5a0d4b3ddaba48b581a90adcfc1833..65d89562f96c20e20649c049370dca0e
// Paper start - Folia scheduler API
((io.papermc.paper.threadedregions.scheduler.FoliaGlobalRegionScheduler) Bukkit.getGlobalRegionScheduler()).tick();
getAllLevels().forEach(level -> {
-@@ -1754,20 +1742,15 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop {
entity.activatedPriorityReset = false; // Pufferfish - DAB
if (!entity.isRemoved()) {
-@@ -790,8 +779,6 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
+@@ -781,8 +770,6 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
}
}
});
@@ -1281,24 +1281,20 @@ index cb3e583ae2f5a7619455932ad1d8ee5c9e131ac1..86af09319462b58f2ec97caf7a1033b2
this.tickBlockEntities();
}
-@@ -916,7 +903,6 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
+@@ -966,12 +953,9 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
}
} // Paper - Option to disable ice and snow
- timings.chunkTicksBlocks.startTiming(); // Paper
if (randomTickSpeed > 0) {
- LevelChunkSection[] achunksection = chunk.getSections();
-
-@@ -946,8 +932,6 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
- }
- }
+ this.optimiseRandomTick(chunk, randomTickSpeed); // Paper - optimise random ticking
}
-
- timings.chunkTicksBlocks.stopTiming(); // Paper
}
@VisibleForTesting
-@@ -1276,31 +1260,21 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
+@@ -1300,31 +1284,21 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
currentlyTickingEntity.lazySet(entity);
}
// Paper end - log detailed entity tick information
@@ -1330,7 +1326,7 @@ index cb3e583ae2f5a7619455932ad1d8ee5c9e131ac1..86af09319462b58f2ec97caf7a1033b2
Iterator iterator = entity.getPassengers().iterator();
while (iterator.hasNext()) {
-@@ -1323,9 +1297,6 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
+@@ -1347,9 +1321,6 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
if (passenger instanceof Player || this.entityTickList.contains(passenger)) {
// Paper - EAR 2
final boolean isActive = org.spigotmc.ActivationRange.checkIfActive(passenger);
@@ -1340,7 +1336,7 @@ index cb3e583ae2f5a7619455932ad1d8ee5c9e131ac1..86af09319462b58f2ec97caf7a1033b2
passenger.setOldPosAndRot();
++passenger.tickCount;
-@@ -1347,8 +1318,6 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
+@@ -1371,8 +1342,6 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
this.tickPassenger(passenger, entity2);
}
@@ -1349,7 +1345,7 @@ index cb3e583ae2f5a7619455932ad1d8ee5c9e131ac1..86af09319462b58f2ec97caf7a1033b2
}
} else {
passenger.stopRiding();
-@@ -1370,7 +1339,6 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
+@@ -1423,7 +1392,6 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
if (!savingDisabled) {
org.bukkit.Bukkit.getPluginManager().callEvent(new org.bukkit.event.world.WorldSaveEvent(this.getWorld())); // CraftBukkit
@@ -1357,7 +1353,7 @@ index cb3e583ae2f5a7619455932ad1d8ee5c9e131ac1..86af09319462b58f2ec97caf7a1033b2
if (progressListener != null) {
progressListener.progressStartNoAbort(Component.translatable("menu.savingLevel"));
}
-@@ -1380,10 +1348,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
+@@ -1433,10 +1401,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
progressListener.progressStage(Component.translatable("menu.savingChunks"));
}
@@ -1369,7 +1365,7 @@ index cb3e583ae2f5a7619455932ad1d8ee5c9e131ac1..86af09319462b58f2ec97caf7a1033b2
}
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
-index 811a0c7ed06ecba3d6b4cd5d45a81c2d483bc53b..75728fe1e02cc7042e30d954bc913fefd107ef94 100644
+index e3cc24c2c7eb9cc8928fe300137eb9baac70e91f..d34e31c6f7591bfdd34a6f2fe9376a515f20c3b7 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
@@ -1,6 +1,5 @@
@@ -1379,13 +1375,17 @@ index 811a0c7ed06ecba3d6b4cd5d45a81c2d483bc53b..75728fe1e02cc7042e30d954bc913fef
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
-@@ -1283,11 +1282,9 @@ public abstract class PlayerList {
+@@ -1289,7 +1288,6 @@ public abstract class PlayerList {
- public void saveAll() {
+ public void saveAll(int interval) {
io.papermc.paper.util.MCUtil.ensureMain("Save Players" , () -> { // Paper - Ensure main
- MinecraftTimings.savePlayers.startTiming(); // Paper
+ int numSaved = 0;
+ long now = MinecraftServer.currentTick;
for (int i = 0; i < this.players.size(); ++i) {
- this.save(this.players.get(i));
+@@ -1300,7 +1298,6 @@ public abstract class PlayerList {
+ }
+ // Paper end - Incremental chunk and player saving
}
- MinecraftTimings.savePlayers.stopTiming(); // Paper
return null; }); // Paper - ensure main
@@ -1532,7 +1532,7 @@ index 85b4b24361e785acf75571ff98f924c00ae80748..ac67dd7a30616fe70f73426e332972b7
}
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
-index 0d1a3ceae8e7a464bf2adf9c71ad22683aad772b..d6cce299882833452ada600ddd2e164312442143 100644
+index 4a71075b673e2b9413d9797ddeeafc04d699ec5e..fd23063ef316d6f1930a565c601bdf5b72bcfda1 100644
--- a/src/main/java/net/minecraft/world/level/Level.java
+++ b/src/main/java/net/minecraft/world/level/Level.java
@@ -177,7 +177,6 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
@@ -1543,7 +1543,7 @@ index 0d1a3ceae8e7a464bf2adf9c71ad22683aad772b..d6cce299882833452ada600ddd2e1643
public static BlockPos lastPhysicsProblem; // Spigot
private org.spigotmc.TickLimiter entityLimiter;
private org.spigotmc.TickLimiter tileLimiter;
-@@ -782,7 +781,6 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
+@@ -826,7 +825,6 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
public void onBorderSetDamageSafeZOne(WorldBorder border, double safeZoneRadius) {}
});
// CraftBukkit end
@@ -1551,7 +1551,7 @@ index 0d1a3ceae8e7a464bf2adf9c71ad22683aad772b..d6cce299882833452ada600ddd2e1643
this.entityLimiter = new org.spigotmc.TickLimiter(this.spigotConfig.entityMaxTickTime);
this.tileLimiter = new org.spigotmc.TickLimiter(this.spigotConfig.tileMaxTickTime);
this.entityLookup = new ca.spottedleaf.moonrise.patches.chunk_system.level.entity.dfl.DefaultEntityLookup(this); // Paper - rewrite chunk system
-@@ -1385,15 +1383,12 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
+@@ -1429,15 +1427,12 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
}
protected void tickBlockEntities() {
@@ -1567,7 +1567,7 @@ index 0d1a3ceae8e7a464bf2adf9c71ad22683aad772b..d6cce299882833452ada600ddd2e1643
// Spigot start
// Iterator iterator = this.blockEntityTickers.iterator();
boolean flag = this.tickRateManager().runsNormally();
-@@ -1424,9 +1419,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
+@@ -1468,9 +1463,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
}
this.blockEntityTickers.removeAll(toRemove); // Paper - Fix MC-117075
@@ -1636,10 +1636,10 @@ index cd0e43f4c53a746dd6183a8406269f9b11ad3571..54657ac895fb2fa9c58910d5421f0082
private static final CraftPersistentDataTypeRegistry DATA_TYPE_REGISTRY = new CraftPersistentDataTypeRegistry();
public CraftPersistentDataContainer persistentDataContainer;
diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java
-index b07763aa7b3b92e24891b4ba346334ba8984ed67..db16be7db9d1df323f150dfd6f3d893b79d79838 100644
+index 4d04efcc4c902c1c108d142b9486d080aff7cd44..6b967b41160691a8429ec8a3f42469c63c609e75 100644
--- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java
+++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java
-@@ -644,7 +644,6 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p
+@@ -657,7 +657,6 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p
((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemServerLevel)this.level).moonrise$getChunkTaskScheduler().chunkHolderManager.getChunkHolder(this.locX, this.locZ).getEntityChunk().callEntitiesLoadEvent(); // Paper - rewrite chunk system
if (this.needsDecoration) {
@@ -1647,7 +1647,7 @@ index b07763aa7b3b92e24891b4ba346334ba8984ed67..db16be7db9d1df323f150dfd6f3d893b
this.needsDecoration = false;
java.util.Random random = new java.util.Random();
random.setSeed(this.level.getSeed());
-@@ -664,7 +663,6 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p
+@@ -677,7 +676,6 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p
}
}
server.getPluginManager().callEvent(new org.bukkit.event.world.ChunkPopulateEvent(bukkitChunk));
@@ -1655,7 +1655,7 @@ index b07763aa7b3b92e24891b4ba346334ba8984ed67..db16be7db9d1df323f150dfd6f3d893b
}
}
}
-@@ -1001,7 +999,6 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p
+@@ -1014,7 +1012,6 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p
if (LevelChunk.this.isTicking(blockposition)) {
try {
@@ -1663,7 +1663,7 @@ index b07763aa7b3b92e24891b4ba346334ba8984ed67..db16be7db9d1df323f150dfd6f3d893b
BlockState iblockdata = LevelChunk.this.getBlockState(blockposition);
if (this.blockEntity.getType().isValid(iblockdata)) {
-@@ -1024,14 +1021,9 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p
+@@ -1037,14 +1034,9 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p
net.minecraft.world.level.chunk.LevelChunk.this.level.getCraftServer().getPluginManager().callEvent(new com.destroystokyo.paper.event.server.ServerExceptionEvent(new com.destroystokyo.paper.exception.ServerInternalException(msg, throwable))); // Paper - ServerExceptionEvent
LevelChunk.this.removeBlockEntity(this.getPos());
// Paper end - Prevent block entity and entity crashes
diff --git a/patches/server/0026-Slice-Smooth-Teleports.patch b/patches/server/0026-Slice-Smooth-Teleports.patch
index c56438fe..2232ba1c 100644
--- a/patches/server/0026-Slice-Smooth-Teleports.patch
+++ b/patches/server/0026-Slice-Smooth-Teleports.patch
@@ -7,10 +7,10 @@ Original license: MIT
Original project: https://github.com/Cryptite/Slice
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
-index d573ae3fee994614bcc6c699bcbe8210874ca414..30f984553e823b3c928b0e2181baf5d2058c2d84 100644
+index 5b645db318a73f352838d779e3be16ff866bf3f6..000ee5bf7ef715511e4232d757e8360037bfe8f4 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
-@@ -306,6 +306,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
+@@ -307,6 +307,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
private boolean tpsBar = false; // Purpur
private boolean compassBar = false; // Purpur
private boolean ramBar = false; // Purpur
@@ -19,10 +19,10 @@ index d573ae3fee994614bcc6c699bcbe8210874ca414..30f984553e823b3c928b0e2181baf5d2
// Paper start - rewrite chunk system
private ca.spottedleaf.moonrise.patches.chunk_system.player.RegionizedPlayerChunkLoader.PlayerChunkLoaderData chunkLoader;
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
-index 75728fe1e02cc7042e30d954bc913fefd107ef94..5a46f2b5f2903adbb5410c509aac62a5af7dbcc9 100644
+index d34e31c6f7591bfdd34a6f2fe9376a515f20c3b7..442b5ccc446d0dfc69f2d2e88003a77647af78f6 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
-@@ -899,10 +899,10 @@ public abstract class PlayerList {
+@@ -900,10 +900,10 @@ public abstract class PlayerList {
ServerLevel worldserver1 = entityplayer1.serverLevel();
LevelData worlddata = worldserver1.getLevelData();
@@ -36,7 +36,7 @@ index 75728fe1e02cc7042e30d954bc913fefd107ef94..5a46f2b5f2903adbb5410c509aac62a5
entityplayer1.connection.send(new ClientboundChangeDifficultyPacket(worlddata.getDifficulty(), worlddata.isDifficultyLocked()));
entityplayer1.connection.send(new ClientboundSetExperiencePacket(entityplayer1.experienceProgress, entityplayer1.totalExperience, entityplayer1.experienceLevel));
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index 7a7a2acca5980ab3d79346f47e4153dd6c98939b..cf85b3af38258fa34e8f67d1f002a521cc59c81b 100644
+index ee1d4d83b856b9a7eba28a6f72256bb5dc33b67b..9325d2c676899fcedc360ea9183339c91af026dc 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -1361,6 +1361,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
diff --git a/patches/server/0029-Leaves-Protocol-Core.patch b/patches/server/0029-Leaves-Protocol-Core.patch
index 0d649049..a12c36f4 100644
--- a/patches/server/0029-Leaves-Protocol-Core.patch
+++ b/patches/server/0029-Leaves-Protocol-Core.patch
@@ -51,10 +51,10 @@ index 1967c43ee3a12e63365cc40ee6565307e2fd73cf..6e376d0db5321d8e9b6e0b54617ffd17
assert isValidPath(path);
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index 65d89562f96c20e20649c049370dca0ef3f059b5..36940bc192088233842d8fa7a37b84657552ceff 100644
+index 30f63049b254dd87df7d6bbb2415eb53503e05a5..e43250317c9373709ab5b7ba26bb85c75021604e 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
-@@ -1806,6 +1806,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop blockTicks;
private final LevelChunkTicks fluidTicks;
-@@ -93,7 +104,7 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p
+@@ -105,7 +116,7 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p
super(pos, upgradeData, world, net.minecraft.server.MinecraftServer.getServer().registryAccess().registryOrThrow(Registries.BIOME), inhabitedTime, sectionArrayInitializer, blendingData); // Paper - Anti-Xray - The world isn't ready yet, use server singleton for registry
this.tickersInLevel = Maps.newHashMap();
this.level = (ServerLevel) world; // CraftBukkit - type
@@ -70,7 +70,7 @@ index db16be7db9d1df323f150dfd6f3d893b79d79838..a71d4b363eec79c55267d97549c5c871
Heightmap.Types[] aheightmap_type = Heightmap.Types.values();
int j = aheightmap_type.length;
-@@ -219,9 +230,23 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p
+@@ -232,9 +243,23 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p
Level world = this.level;
if (world instanceof ServerLevel worldserver) {
@@ -97,7 +97,7 @@ index db16be7db9d1df323f150dfd6f3d893b79d79838..a71d4b363eec79c55267d97549c5c871
} else {
return super.getListenerRegistry(ySectionCoord);
}
-@@ -605,7 +630,7 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p
+@@ -618,7 +643,7 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p
}
private void removeGameEventListenerRegistry(int ySectionCoord) {
diff --git a/patches/server/0040-Reduce-canSee-work.patch b/patches/server/0040-Reduce-canSee-work.patch
index a3c5b4d2..f85de3fe 100644
--- a/patches/server/0040-Reduce-canSee-work.patch
+++ b/patches/server/0040-Reduce-canSee-work.patch
@@ -7,10 +7,10 @@ Co-authored by: Martijn Muijsers
Co-authored by: MachineBreaker
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
-index d6cce299882833452ada600ddd2e164312442143..3c01a14e08d6a401692cefef42796aaf89519889 100644
+index fd23063ef316d6f1930a565c601bdf5b72bcfda1..9b8f6dc0db7e409a2e403caa65f2b4fed863c04e 100644
--- a/src/main/java/net/minecraft/world/level/Level.java
+++ b/src/main/java/net/minecraft/world/level/Level.java
-@@ -810,17 +810,19 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
+@@ -854,17 +854,19 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
for (int i = 0, len = entities.size(); i < len; ++i) {
Entity entity = entities.get(i);
diff --git a/patches/server/0052-SparklyPaper-Skip-EntityScheduler-s-executeTick-chec.patch b/patches/server/0052-SparklyPaper-Skip-EntityScheduler-s-executeTick-chec.patch
index eb0b3441..ad315216 100644
--- a/patches/server/0052-SparklyPaper-Skip-EntityScheduler-s-executeTick-chec.patch
+++ b/patches/server/0052-SparklyPaper-Skip-EntityScheduler-s-executeTick-chec.patch
@@ -75,7 +75,7 @@ index 62484ebf4550b05182f693a3180bbac5d5fd906d..67800e426445060a8343e27a7452b8d7
throw new IllegalStateException("Ticking retired scheduler");
}
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index 36940bc192088233842d8fa7a37b84657552ceff..a6f1365bb72e9598ed2101b60d8774d236fd48e1 100644
+index e43250317c9373709ab5b7ba26bb85c75021604e..084651b2c911ce207fffd2a2c4ba788301376ebc 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -312,6 +312,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop S spin(Function serverFactory) {
AtomicReference atomicreference = new AtomicReference();
-@@ -1729,6 +1730,18 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop {
for (final Entity entity : level.moonrise$getEntityLookup().getAllCopy()) { // Paper - rewrite chunk system
if (entity.isRemoved()) {
-@@ -1740,6 +1753,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0 ? split[0] : "").replace(org.purpurmc.purpur.PurpurConfig.afkTabListPrefix, "");
String suffix = (split.length > 1 ? split[1] : "").replace(org.purpurmc.purpur.PurpurConfig.afkTabListSuffix, "");
if (afk) {
@@ -86,10 +86,10 @@ index e099fb784d4bc0b5820778c1bbc899d718739093..7d691af2d3e1baa046dd3ab2ba70f8cf
// CraftBukkit start - SPIGOT-7346: Prevent disconnected players from executing commands
if (this.player.hasDisconnected()) {
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
-index 47e640a8be96f5e415a1ec8655b4eb7c64604a99..7ec41f90aede76efd11aa7ea0aa5bf3abcbeda93 100644
+index 0d6236637b2fc27b2aa5d20fe404b6202e3fb012..79a5d3846c1e73614f4bc82447f96b7e71811cab 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
-@@ -614,6 +614,7 @@ public abstract class PlayerList {
+@@ -615,6 +615,7 @@ public abstract class PlayerList {
org.leavesmc.leaves.protocol.core.LeavesProtocolManager.handlePlayerLeave(entityplayer); // Leaves - protocol
// Paper end - Fix kick event leave message not being sent
org.purpurmc.purpur.task.BossBarTask.removeFromAll(entityplayer.getBukkitEntity()); // Purpur
diff --git a/patches/server/0063-Mirai-Configurable-chat-message-signatures.patch b/patches/server/0063-Mirai-Configurable-chat-message-signatures.patch
index 4ba28a16..d5789046 100644
--- a/patches/server/0063-Mirai-Configurable-chat-message-signatures.patch
+++ b/patches/server/0063-Mirai-Configurable-chat-message-signatures.patch
@@ -117,10 +117,10 @@ index ae0d0310d50f1ada082e045a58a24a43f8079da8..eea19f895588c51bce86f20b3ec505fd
if (packet == null || this.processedDisconnect) { // Spigot
return;
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
-index 7ec41f90aede76efd11aa7ea0aa5bf3abcbeda93..b665969cf7232a4bbc060c91b1cf802df3b0c908 100644
+index 79a5d3846c1e73614f4bc82447f96b7e71811cab..e8d44e6d5293e4b616597e0d63dda1f379c91a2d 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
-@@ -1473,7 +1473,7 @@ public abstract class PlayerList {
+@@ -1486,7 +1486,7 @@ public abstract class PlayerList {
// Paper end
boolean flag = this.verifyChatTrusted(message);
@@ -129,7 +129,7 @@ index 7ec41f90aede76efd11aa7ea0aa5bf3abcbeda93..b665969cf7232a4bbc060c91b1cf802d
OutgoingChatMessage outgoingchatmessage = OutgoingChatMessage.create(message);
boolean flag1 = false;
-@@ -1502,6 +1502,7 @@ public abstract class PlayerList {
+@@ -1515,6 +1515,7 @@ public abstract class PlayerList {
}
public boolean verifyChatTrusted(PlayerChatMessage message) { // Paper - private -> public
diff --git a/patches/server/0073-Configurable-connection-message.patch b/patches/server/0073-Configurable-connection-message.patch
index 44cd501d..5e123c73 100644
--- a/patches/server/0073-Configurable-connection-message.patch
+++ b/patches/server/0073-Configurable-connection-message.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Configurable connection message
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
-index b665969cf7232a4bbc060c91b1cf802df3b0c908..44b05a126360072f1966d7f0d2a822fd84ada921 100644
+index e8d44e6d5293e4b616597e0d63dda1f379c91a2d..e7d5610de6bda486e512f18bf0684686ed9c08df 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
@@ -26,6 +26,7 @@ import java.util.UUID;
@@ -34,7 +34,7 @@ index b665969cf7232a4bbc060c91b1cf802df3b0c908..44b05a126360072f1966d7f0d2a822fd
joinMessage = io.papermc.paper.adventure.PaperAdventure.asVanilla(jm); // Paper - Adventure
this.server.getPlayerList().broadcastSystemMessage(joinMessage, false); // Paper - Adventure
}
-@@ -625,7 +626,7 @@ public abstract class PlayerList {
+@@ -626,7 +627,7 @@ public abstract class PlayerList {
entityplayer.closeContainer(org.bukkit.event.inventory.InventoryCloseEvent.Reason.DISCONNECT); // Paper - Inventory close reason
}
@@ -43,7 +43,7 @@ index b665969cf7232a4bbc060c91b1cf802df3b0c908..44b05a126360072f1966d7f0d2a822fd
this.cserver.getPluginManager().callEvent(playerQuitEvent);
entityplayer.getBukkitEntity().disconnect(playerQuitEvent.getQuitMessage());
-@@ -1646,4 +1647,29 @@ public abstract class PlayerList {
+@@ -1659,4 +1660,29 @@ public abstract class PlayerList {
public boolean isAllowCommandsForAllPlayers() {
return this.allowCommandsForAllPlayers;
}
diff --git a/patches/server/0080-Fix-MC-119417.patch b/patches/server/0080-Fix-MC-119417.patch
index c44c13e2..73b9224c 100644
--- a/patches/server/0080-Fix-MC-119417.patch
+++ b/patches/server/0080-Fix-MC-119417.patch
@@ -6,10 +6,10 @@ Subject: [PATCH] Fix-MC-119417
Related MC issue: https://bugs.mojang.com/browse/MC-119417
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
-index 64463119621fb1aad30017e887c5111ddc518ff0..ce947e82fb5b635d4eb23a5274646275216c8908 100644
+index f02c1d7c583c326401ae93d16dbdd2bc075670c8..40f316214111365df3e15e72da77bcd6155964d0 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
-@@ -2258,6 +2258,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
+@@ -2259,6 +2259,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
this.connection.send(new ClientboundGameEventPacket(ClientboundGameEventPacket.CHANGE_GAME_MODE, (float) gameMode.getId()));
if (gameMode == GameType.SPECTATOR) {
this.removeEntitiesOnShoulder();