diff --git a/build.gradle.kts b/build.gradle.kts index 483892c7..277ba20f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,8 +1,15 @@ +import io.papermc.paperweight.tasks.BaseTask +import io.papermc.paperweight.util.* +import java.io.ByteArrayOutputStream +import java.nio.file.Path +import java.util.regex.Pattern +import kotlin.io.path.* + plugins { java `maven-publish` id("com.github.johnrengelman.shadow") version "8.1.1" apply false - id("io.papermc.paperweight.patcher") version "1.5.10" + id("io.papermc.paperweight.patcher") version "1.5.11" } repositories { @@ -54,7 +61,7 @@ subprojects { paperweight { serverProject.set(project(":leaves-server")) - remapRepo.set("https://maven.fabricmc.net/") + remapRepo.set("https://maven.fabricmc.net/") decompileRepo.set("https://files.minecraftforge.net/maven/") usePaperUpstream(providers.gradleProperty("paperRef")) { @@ -67,3 +74,16 @@ paperweight { } } } + +if (providers.gradleProperty("updatingMinecraft").getOrElse("false").toBoolean()) { + + tasks.withType().configureEach { + val dir = layout.projectDirectory.dir("patches/unapplied") + if (dir.path.isDirectory()) { + extraPatchDir = dir + } + } + tasks.withType().configureEach { + filterPatches = false + } +} diff --git a/gradle.properties b/gradle.properties index 90422603..00b7cc74 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,8 +1,9 @@ group=top.leavesmc.leaves -version=1.20.2-R0.1-SNAPSHOT +version=1.20.4-R0.1-SNAPSHOT -mcVersion=1.20.2 -packageVersion=1_20_R2 +mcVersion=1.20.4 +packageVersion=1_20_R3 org.gradle.jvmargs=-Xmx2G -paperRef=931781c220b98dde0159c9a3c8dce06c3b2b1e13 -preVersion=false +paperRef=b42a1da8737895f4fcacfae9b4d49a96b1445972 +preVersion=true +updatingMinecraft=true \ No newline at end of file diff --git a/patches/api/0001-Leaves-Server-Config.patch b/patches/api/0001-Leaves-Server-Config.patch index 0071bfe6..92b7c709 100644 --- a/patches/api/0001-Leaves-Server-Config.patch +++ b/patches/api/0001-Leaves-Server-Config.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Leaves Server Config diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index d0c634629aa0b6bac0da93655dd86ad3aea0ce30..1fc734c2898fc3d3b89b58284d56a0cff68794c4 100644 +index f1fa97d12f97baf97beb92ca0719cf3cf906b225..119429ff7b4b7c3313b9affdd1adb25ae814f089 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java @@ -2189,6 +2189,14 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi diff --git a/patches/api/0003-Add-fakeplayer-api.patch b/patches/api/0003-Add-fakeplayer-api.patch index 61ba90bf..56a11aee 100644 --- a/patches/api/0003-Add-fakeplayer-api.patch +++ b/patches/api/0003-Add-fakeplayer-api.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add fakeplayer api diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java -index 884902cb7f86c0b56594ccafc7d05c6c7a23ab53..b7dadd622a1845bb1b56ee7ca135119d31bed2d9 100644 +index 4863d9f21f0a0f11974be85360edc587ffd7eab3..f54403c29005b891377577a36aa79af1365adc31 100644 --- a/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java @@ -58,6 +58,7 @@ import org.jetbrains.annotations.Contract; @@ -35,7 +35,7 @@ index 884902cb7f86c0b56594ccafc7d05c6c7a23ab53..b7dadd622a1845bb1b56ee7ca135119d public static Server.Spigot spigot() { return server.spigot(); diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index 1fc734c2898fc3d3b89b58284d56a0cff68794c4..50c9e22183c796838dd66cfabbc4befe7e00785b 100644 +index 119429ff7b4b7c3313b9affdd1adb25ae814f089..7171f1b4729bf28e6c528c2f1036018a5ffcc895 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java @@ -58,6 +58,7 @@ import org.bukkit.util.CachedServerIcon; diff --git a/patches/api/0010-Replay-Mod-API.patch b/patches/api/0010-Replay-Mod-API.patch index 6eb30f10..9f2fd817 100644 --- a/patches/api/0010-Replay-Mod-API.patch +++ b/patches/api/0010-Replay-Mod-API.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Replay Mod API diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java -index b7dadd622a1845bb1b56ee7ca135119d31bed2d9..4d211b9d21efcc344224a46b5fcb11e01abab7ad 100644 +index f54403c29005b891377577a36aa79af1365adc31..15f18b4961effe78645e54d0b0cc8c530a807a68 100644 --- a/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java @@ -59,6 +59,7 @@ import org.jetbrains.annotations.NotNull; @@ -29,7 +29,7 @@ index b7dadd622a1845bb1b56ee7ca135119d31bed2d9..4d211b9d21efcc344224a46b5fcb11e0 @NotNull public static Server.Spigot spigot() { diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index 50c9e22183c796838dd66cfabbc4befe7e00785b..1d7e461b43dd24a8f15f37107e0ba4f331057308 100644 +index 7171f1b4729bf28e6c528c2f1036018a5ffcc895..bb02f2e08597cd9362a587b1c9b442393cc19d54 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java @@ -59,6 +59,7 @@ import org.jetbrains.annotations.Contract; diff --git a/patches/server/0001-Build-changes.patch b/patches/server/0001-Build-changes.patch index 43806d6c..5fb4490d 100644 --- a/patches/server/0001-Build-changes.patch +++ b/patches/server/0001-Build-changes.patch @@ -5,28 +5,30 @@ Subject: [PATCH] Build changes diff --git a/build.gradle.kts b/build.gradle.kts -index 64479f0a892d6847f987d844efe282a6080d607b..9109ec2f462ea8becae3dbe92a3bb36e8de6263e 100644 +index 170a915098f09ace226648da342a04c5c7583d11..9dd0f8b3e4042bdd3adcb2ec59fdbe9629d0915f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts -@@ -13,8 +13,12 @@ configurations.named(log4jPlugins.compileClasspathConfigurationName) { - val alsoShade: Configuration by configurations.creating +@@ -26,9 +26,13 @@ repositories { + } dependencies { +- extraRuntime(platform("net.kyori:adventure-bom:4.15.0-SNAPSHOT")) - implementation(project(":paper-api")) - implementation(project(":paper-mojangapi")) -+ implementation(project(":leaves-api")) // Leaves ++ extraRuntime(platform("net.kyori:adventure-bom:4.15.0-SNAPSHOT")) ++ implementation(project(":leaves-api")) // Leaves + // Leaves start -+ implementation("io.papermc.paper:paper-mojangapi:1.20.2-R0.1-SNAPSHOT") { ++ implementation("io.papermc.paper:paper-mojangapi:1.20.4-R0.1-SNAPSHOT") { + exclude("io.papermc.paper", "paper-api") + } + // Leaves end // Paper start implementation("org.jline:jline-terminal-jansi:3.21.0") implementation("net.minecrell:terminalconsoleappender:1.3.0") -@@ -58,19 +62,29 @@ dependencies { +@@ -72,19 +76,29 @@ dependencies { } - val craftbukkitPackageVersion = "1_20_R2" // Paper + val craftbukkitPackageVersion = "1_20_R3" // Paper + +// Leaves start - hide irrelevant compilation warnings +tasks.withType { @@ -55,7 +57,7 @@ index 64479f0a892d6847f987d844efe282a6080d607b..9109ec2f462ea8becae3dbe92a3bb36e "Implementation-Vendor" to date, // Paper "Specification-Title" to "Bukkit", "Specification-Version" to project.version, -@@ -154,7 +168,7 @@ fun TaskContainer.registerRunTask( +@@ -168,7 +182,7 @@ fun TaskContainer.registerRunTask( name: String, block: JavaExec.() -> Unit ): TaskProvider = register(name) { @@ -153,10 +155,10 @@ index 4b002e8b75d117b726b0de274a76d3596fce015b..9ce4d3d96d2d5fbde1f0af599209c6c5 } } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 8f31413c939cc2b0454ad3d9a1b618dbae449d00..8ac996335015e5d494886f29921c4c3362659daa 100644 +index 34f19ac897a30c0c4e3ab406013fcca1c8b7db93..8a4de5d230679889c8ef8388f09c662b74759a6e 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1697,7 +1697,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop, String> taskNameCache = new MapMaker().weakKeys().makeMap(); @@ -172,8 +170,8 @@ index e6452bb4f29bf32600dbf8654365826600189bb5..00000000000000000000000000000000 - return Timings.ofSafe("## Packet - " + packet.getClass().getName(), packetProcessTimer); - } - -- public static Timing getCommandFunctionTiming(CommandFunction function) { -- return Timings.ofSafe("Command Function - " + function.getId()); +- public static Timing getCommandFunctionTiming(CommandFunction function) { +- return Timings.ofSafe("Command Function - " + function.id()); - } - - public static void processConfig(GlobalConfiguration.Timings config) { @@ -844,30 +842,13 @@ index dab211c458311869c61779305580a1c7da830f71..193a527c8ebd3b8772820883046de7e9 @Override diff --git a/src/main/java/net/minecraft/commands/CommandFunction.java b/src/main/java/net/minecraft/commands/CommandFunction.java -index 956cddf5d975b91619316b9b6779cf51575cfc0a..0e460de37ac2ae8accbd0d3da73faac6cd7df8e0 100644 ---- a/src/main/java/net/minecraft/commands/CommandFunction.java -+++ b/src/main/java/net/minecraft/commands/CommandFunction.java -@@ -32,15 +32,6 @@ import net.minecraft.server.ServerFunctionManager; - public class CommandFunction { - private final CommandFunction.Entry[] entries; - final ResourceLocation id; -- // Paper start -- public co.aikar.timings.Timing timing; -- public co.aikar.timings.Timing getTiming() { -- if (timing == null) { -- timing = co.aikar.timings.MinecraftTimings.getCommandFunctionTiming(this); -- } -- return timing; -- } -- // Paper end - - public CommandFunction(ResourceLocation id, CommandFunction.Entry[] elements) { - this.id = id; +new file mode 100644 +index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/main/java/net/minecraft/network/protocol/PacketUtils.java b/src/main/java/net/minecraft/network/protocol/PacketUtils.java -index 9a49f5271ec1d9de17632bfffe8309cb1ba0d8b1..8055ebf912ea595b6c70c6e6fcda14f3b2516077 100644 +index c5c734b9eb80d1cdf0e9fd8a043f2b6d1f4cbffe..de9a8ba5317d6e5ae682a2376c8d04512a0b0936 100644 --- a/src/main/java/net/minecraft/network/protocol/PacketUtils.java +++ b/src/main/java/net/minecraft/network/protocol/PacketUtils.java -@@ -48,8 +48,7 @@ public class PacketUtils { +@@ -49,8 +49,7 @@ public class PacketUtils { try { // Paper - detailed watchdog information if (MinecraftServer.getServer().hasStopped() || (listener instanceof ServerCommonPacketListenerImpl && ((ServerCommonPacketListenerImpl) listener).processedDisconnect)) return; // CraftBukkit, MC-142590 if (listener.shouldHandleMessage(packet)) { @@ -876,9 +857,9 @@ index 9a49f5271ec1d9de17632bfffe8309cb1ba0d8b1..8055ebf912ea595b6c70c6e6fcda14f3 + try { packet.handle(listener); } catch (Exception exception) { - if (exception instanceof ReportedException) { + label25: diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 8ac996335015e5d494886f29921c4c3362659daa..1a375701b6ba43825af59f1dcc966633459adf29 100644 +index 8a4de5d230679889c8ef8388f09c662b74759a6e..a67ddd1ca3f18e6754dd52d9f34e5d2e850760e0 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -3,9 +3,6 @@ package net.minecraft.server; @@ -891,23 +872,7 @@ index 8ac996335015e5d494886f29921c4c3362659daa..1a375701b6ba43825af59f1dcc966633 import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; -@@ -86,7 +83,6 @@ import net.minecraft.server.level.ServerChunkCache; - import net.minecraft.server.level.ServerLevel; - import net.minecraft.server.level.ServerPlayer; - import net.minecraft.server.level.ServerPlayerGameMode; --import net.minecraft.server.level.TicketType; - import net.minecraft.server.level.progress.ChunkProgressListener; - import net.minecraft.server.level.progress.ChunkProgressListenerFactory; - import net.minecraft.server.network.ServerConnectionListener; -@@ -109,7 +105,6 @@ import net.minecraft.util.NativeModuleLister; - import net.minecraft.util.ProgressListener; - import net.minecraft.util.RandomSource; - import net.minecraft.util.SignatureValidator; --import net.minecraft.util.Unit; - import net.minecraft.util.datafix.DataFixers; - import net.minecraft.util.profiling.EmptyProfileResults; - import net.minecraft.util.profiling.ProfileResults; -@@ -188,8 +183,6 @@ import org.bukkit.craftbukkit.Main; +@@ -189,8 +186,6 @@ import org.bukkit.craftbukkit.Main; import org.bukkit.event.server.ServerLoadEvent; // CraftBukkit end @@ -916,7 +881,7 @@ index 8ac996335015e5d494886f29921c4c3362659daa..1a375701b6ba43825af59f1dcc966633 public abstract class MinecraftServer extends ReentrantBlockableEventLoop implements ServerInfo, CommandSource, AutoCloseable { private static MinecraftServer SERVER; // Paper -@@ -924,7 +917,6 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { - return !this.canOversleep(); - }); -- isOversleep = false;MinecraftTimings.serverOversleep.stopTiming(); -+ isOversleep = false; - // Paper end - new com.destroystokyo.paper.event.server.ServerTickStartEvent(this.tickCount+1).callEvent(); // Paper - -@@ -1406,9 +1397,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { - entityplayer.connection.suspendFlushing(); - }); -- MinecraftTimings.bukkitSchedulerTimer.startTiming(); // Spigot // Paper - this.server.getScheduler().mainThreadHeartbeat(this.tickCount); // CraftBukkit -- MinecraftTimings.bukkitSchedulerTimer.stopTiming(); // Spigot // Paper - // Paper start - Folia scheduler API - ((io.papermc.paper.threadedregions.scheduler.FoliaGlobalRegionScheduler) Bukkit.getGlobalRegionScheduler()).tick(); - getAllLevels().forEach(level -> { -@@ -1485,21 +1471,16 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { + return !this.canOversleep(); + }); +- isOversleep = false;MinecraftTimings.serverOversleep.stopTiming(); ++ isOversleep = false; + // Paper end + new com.destroystokyo.paper.event.server.ServerTickStartEvent(this.tickCount+1).callEvent(); // Paper + +@@ -1546,9 +1534,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { + entityplayer.connection.suspendFlushing(); + }); +- MinecraftTimings.bukkitSchedulerTimer.startTiming(); // Spigot // Paper + this.server.getScheduler().mainThreadHeartbeat(this.tickCount); // CraftBukkit +- MinecraftTimings.bukkitSchedulerTimer.stopTiming(); // Spigot // Paper + // Paper start - Folia scheduler API + ((io.papermc.paper.threadedregions.scheduler.FoliaGlobalRegionScheduler) Bukkit.getGlobalRegionScheduler()).tick(); + getAllLevels().forEach(level -> { +@@ -1654,21 +1637,16 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { return ichunkaccess1; -@@ -447,17 +445,13 @@ public class ServerChunkCache extends ChunkSource { +@@ -445,17 +443,13 @@ public class ServerChunkCache extends ChunkSource { public void save(boolean flush) { this.runDistanceManagerUpdates(); @@ -1355,7 +1307,7 @@ index 8c33a12ca879c46893150d6adfb8aa4d397c6b4c..a8df45f925546dc584e32a4038eebc42 } // Paper end -@@ -487,22 +481,16 @@ public class ServerChunkCache extends ChunkSource { +@@ -485,23 +479,17 @@ public class ServerChunkCache extends ChunkSource { @Override public void tick(BooleanSupplier shouldKeepTicking, boolean tickChunks) { this.level.getProfiler().push("purge"); @@ -1369,6 +1321,7 @@ index 8c33a12ca879c46893150d6adfb8aa4d397c6b4c..a8df45f925546dc584e32a4038eebc42 this.chunkMap.level.playerChunkLoader.tick(); // Paper - replace player chunk loader - this is mostly required to account for view distance changes this.tickChunks(); - this.level.timings.chunks.stopTiming(); // Paper - timings + this.chunkMap.tick(); } - this.level.timings.doChunkUnload.startTiming(); // Spigot @@ -1378,38 +1331,42 @@ index 8c33a12ca879c46893150d6adfb8aa4d397c6b4c..a8df45f925546dc584e32a4038eebc42 this.level.getProfiler().pop(); this.clearCache(); } -@@ -525,7 +513,6 @@ public class ServerChunkCache extends ChunkSource { - boolean flag1 = this.level.ticksPerSpawnCategory.getLong(org.bukkit.entity.SpawnCategory.ANIMAL) != 0L && worlddata.getGameTime() % this.level.ticksPerSpawnCategory.getLong(org.bukkit.entity.SpawnCategory.ANIMAL) == 0L; // CraftBukkit +@@ -516,7 +504,6 @@ public class ServerChunkCache extends ChunkSource { - gameprofilerfiller.push("naturalSpawnCount"); -- this.level.timings.countNaturalMobs.startTiming(); // Paper - timings - int l = this.distanceManager.getNaturalSpawnChunkCount(); - // Paper start - per player mob spawning - NaturalSpawner.SpawnState spawnercreature_d; // moved down -@@ -549,13 +536,11 @@ public class ServerChunkCache extends ChunkSource { - spawnercreature_d = NaturalSpawner.createState(l, this.level.getAllEntities(), this::getFullChunk, !this.level.paperConfig().entities.spawning.perPlayerMobSpawns ? new LocalMobCapCalculator(this.chunkMap) : null, false); - } - // Paper end -- this.level.timings.countNaturalMobs.stopTiming(); // Paper - timings + gameprofilerfiller.push("pollingChunks"); + gameprofilerfiller.push("filteringLoadedChunks"); +- if (this.level.getServer().tickRateManager().runsNormally()) this.level.timings.chunkTicks.startTiming(); // Paper - this.lastSpawnState = spawnercreature_d; - gameprofilerfiller.popPush("filteringLoadedChunks"); - // Paper - optimise chunk tick iteration - // Paper - optimise chunk tick iteration -- this.level.timings.chunkTicks.startTiming(); // Paper + // Paper start - optimise chunk tick iteration + ChunkMap playerChunkMap = this.chunkMap; +@@ -556,7 +543,6 @@ public class ServerChunkCache extends ChunkSource { - // Paper - optimise chunk tick iteration - -@@ -661,17 +646,12 @@ public class ServerChunkCache extends ChunkSource { + if (this.level.getServer().tickRateManager().runsNormally()) { + gameprofilerfiller.popPush("naturalSpawnCount"); +- this.level.timings.countNaturalMobs.startTiming(); // Paper - timings + int k = this.distanceManager.getNaturalSpawnChunkCount(); + // Paper start - per player mob spawning + int naturalSpawnChunkCount = k; +@@ -581,7 +567,6 @@ public class ServerChunkCache extends ChunkSource { + spawnercreature_d = NaturalSpawner.createState(naturalSpawnChunkCount, this.level.getAllEntities(), this::getFullChunk, !this.level.paperConfig().entities.spawning.perPlayerMobSpawns ? new LocalMobCapCalculator(this.chunkMap) : null, false); + } + // Paper end +- this.level.timings.countNaturalMobs.stopTiming(); // Paper - timings + + this.lastSpawnState = spawnercreature_d; + gameprofilerfiller.popPush("spawnAndTick"); +@@ -688,19 +673,14 @@ public class ServerChunkCache extends ChunkSource { + } + } + // Paper end - optimise chunk tick iteration +- this.level.timings.chunkTicks.stopTiming(); // Paper + + gameprofilerfiller.popPush("customSpawners"); + if (flag) { +- try (co.aikar.timings.Timing ignored = this.level.timings.miscMobSpawning.startTiming()) { // Paper - timings + this.level.tickCustomSpawners(this.spawnEnemies, this.spawnFriendlies); +- } // Paper - timings } - } - // Paper end - optimise chunk tick iteration -- this.level.timings.chunkTicks.stopTiming(); // Paper - gameprofilerfiller.popPush("customSpawners"); - if (flag2) { -- try (co.aikar.timings.Timing ignored = this.level.timings.miscMobSpawning.startTiming()) { // Paper - timings - this.level.tickCustomSpawners(this.spawnEnemies, this.spawnFriendlies); -- } // Paper - timings } gameprofilerfiller.popPush("broadcast"); @@ -1418,7 +1375,7 @@ index 8c33a12ca879c46893150d6adfb8aa4d397c6b4c..a8df45f925546dc584e32a4038eebc42 // Paper start - optimise chunk tick iteration if (!this.chunkMap.needsChangeBroadcasting.isEmpty()) { it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet copy = this.chunkMap.needsChangeBroadcasting.clone(); -@@ -685,8 +665,6 @@ public class ServerChunkCache extends ChunkSource { +@@ -714,8 +694,6 @@ public class ServerChunkCache extends ChunkSource { } } // Paper end - optimise chunk tick iteration @@ -1426,9 +1383,9 @@ index 8c33a12ca879c46893150d6adfb8aa4d397c6b4c..a8df45f925546dc584e32a4038eebc42 - // Paper - optimise chunk tick iteration gameprofilerfiller.pop(); gameprofilerfiller.pop(); - this.chunkMap.tick(); + } diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index c88d5b9125f6ee43bf2be60fd1745d836f271b78..c3291b40ed73790a94db34efd683cfa2ca831989 100644 +index b78a9628a88f2a495ef6de74446a02a14d41a1f6..bfd670484fc58f8b6edd8d6d1065fe808bc777e4 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -1,7 +1,6 @@ @@ -1439,70 +1396,48 @@ index c88d5b9125f6ee43bf2be60fd1745d836f271b78..c3291b40ed73790a94db34efd683cfa2 import com.google.common.collect.Lists; import com.mojang.datafixers.DataFixer; import com.mojang.datafixers.util.Pair; -@@ -132,12 +131,10 @@ import net.minecraft.world.level.chunk.storage.EntityStorage; - import net.minecraft.world.level.dimension.BuiltinDimensionTypes; - import net.minecraft.world.level.dimension.LevelStem; - import net.minecraft.world.level.dimension.end.EndDragonFight; --import net.minecraft.world.level.entity.EntityPersistentStorage; - import net.minecraft.world.level.entity.EntityTickList; - import net.minecraft.world.level.entity.EntityTypeTest; - import net.minecraft.world.level.entity.LevelCallback; - import net.minecraft.world.level.entity.LevelEntityGetter; --import net.minecraft.world.level.entity.PersistentEntitySectionManager; - import net.minecraft.world.level.gameevent.DynamicGameEventListener; - import net.minecraft.world.level.gameevent.GameEvent; - import net.minecraft.world.level.gameevent.GameEventDispatcher; -@@ -168,12 +165,10 @@ import org.bukkit.Location; - import org.bukkit.WeatherType; - import org.bukkit.craftbukkit.event.CraftEventFactory; - import org.bukkit.craftbukkit.generator.CustomWorldChunkManager; --import org.bukkit.craftbukkit.util.CraftNamespacedKey; - import org.bukkit.craftbukkit.util.WorldUUID; - import org.bukkit.event.entity.CreatureSpawnEvent; - import org.bukkit.event.server.MapInitializeEvent; - import org.bukkit.event.weather.LightningStrikeEvent; --import org.bukkit.event.world.GenericGameEvent; - import org.bukkit.event.world.TimeSkipEvent; - // CraftBukkit end - import it.unimi.dsi.fastutil.ints.IntArrayList; // Paper -@@ -835,7 +830,6 @@ public class ServerLevel extends Level implements WorldGenLevel { - this.updateSkyBrightness(); - this.tickTime(); +@@ -846,7 +845,6 @@ public class ServerLevel extends Level implements WorldGenLevel { + } + gameprofilerfiller.popPush("tickPending"); - this.timings.scheduledBlocks.startTiming(); // Paper - if (!this.isDebug()) { + if (!this.isDebug() && flag) { j = this.getGameTime(); gameprofilerfiller.push("blockTicks"); -@@ -844,20 +838,13 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -855,24 +853,17 @@ public class ServerLevel extends Level implements WorldGenLevel { this.fluidTicks.tick(j, 65536, this::tickFluid); gameprofilerfiller.pop(); } - this.timings.scheduledBlocks.stopTiming(); // Paper gameprofilerfiller.popPush("raid"); -- this.timings.raids.startTiming(); // Paper - timings - this.raids.tick(); -- this.timings.raids.stopTiming(); // Paper - timings + if (flag) { +- this.timings.raids.startTiming(); // Paper - timings + this.raids.tick(); +- this.timings.raids.stopTiming(); // Paper - timings + } + gameprofilerfiller.popPush("chunkSource"); - this.timings.chunkProviderTick.startTiming(); // Paper - timings this.getChunkSource().tick(shouldKeepTicking, true); - this.timings.chunkProviderTick.stopTiming(); // Paper - timings gameprofilerfiller.popPush("blockEvents"); -- this.timings.doSounds.startTiming(); // Spigot - this.runBlockEvents(); -- this.timings.doSounds.stopTiming(); // Spigot - this.handlingTick = false; - gameprofilerfiller.pop(); - boolean flag = true || !this.players.isEmpty() || !this.getForcedChunks().isEmpty(); // CraftBukkit - this prevents entity cleanup, other issues on servers with no players -@@ -868,7 +855,6 @@ public class ServerLevel extends Level implements WorldGenLevel { + if (flag) { +- this.timings.doSounds.startTiming(); // Spigot + this.runBlockEvents(); +- this.timings.doSounds.stopTiming(); // Spigot + } - if (flag || this.emptyTime++ < 300) { + this.handlingTick = false; +@@ -885,7 +876,6 @@ public class ServerLevel extends Level implements WorldGenLevel { + + if (flag1 || this.emptyTime++ < 300) { gameprofilerfiller.push("entities"); - this.timings.tickEntities.startTiming(); // Spigot - if (this.dragonFight != null) { + if (this.dragonFight != null && flag) { gameprofilerfiller.push("dragonFight"); this.dragonFight.tick(); -@@ -876,7 +862,6 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -893,7 +883,6 @@ public class ServerLevel extends Level implements WorldGenLevel { } org.spigotmc.ActivationRange.activateEntities(this); // Spigot @@ -1510,7 +1445,7 @@ index c88d5b9125f6ee43bf2be60fd1745d836f271b78..c3291b40ed73790a94db34efd683cfa2 this.entityTickList.forEach((entity) -> { if (!entity.isRemoved()) { if (false && this.shouldDiscardEntity(entity)) { // CraftBukkit - We prevent spawning in general, so this butchering is not needed -@@ -903,8 +888,6 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -920,8 +909,6 @@ public class ServerLevel extends Level implements WorldGenLevel { } } }); @@ -1519,15 +1454,15 @@ index c88d5b9125f6ee43bf2be60fd1745d836f271b78..c3291b40ed73790a94db34efd683cfa2 gameprofilerfiller.pop(); this.tickBlockEntities(); } -@@ -1016,7 +999,6 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1034,7 +1021,6 @@ public class ServerLevel extends Level implements WorldGenLevel { + } // Paper - // Paper start - optimise random block ticking gameprofilerfiller.popPush("tickBlocks"); - timings.chunkTicksBlocks.startTiming(); // Paper if (randomTickSpeed > 0) { + // Paper start - optimize random block ticking LevelChunkSection[] sections = chunk.getSections(); - final int minSection = io.papermc.paper.util.WorldUtil.getMinSection(this); -@@ -1049,7 +1031,6 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1068,7 +1054,6 @@ public class ServerLevel extends Level implements WorldGenLevel { } // Paper end - optimise random block ticking @@ -1535,7 +1470,7 @@ index c88d5b9125f6ee43bf2be60fd1745d836f271b78..c3291b40ed73790a94db34efd683cfa2 gameprofilerfiller.pop(); } -@@ -1357,9 +1338,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1381,9 +1366,7 @@ public class ServerLevel extends Level implements WorldGenLevel { currentlyTickingEntity.lazySet(entity); } // Paper end - log detailed entity tick information @@ -1545,7 +1480,7 @@ index c88d5b9125f6ee43bf2be60fd1745d836f271b78..c3291b40ed73790a94db34efd683cfa2 /*if (!org.spigotmc.ActivationRange.checkIfActive(entity)) { // Paper - comment out - EAR 2, reimplement below entity.tickCount++; timer = entity.getType().inactiveTickTimer.startTiming(); try { // Paper - timings -@@ -1368,11 +1347,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1392,11 +1375,7 @@ public class ServerLevel extends Level implements WorldGenLevel { return; }*/ // Paper - comment out EAR 2 // Spigot end @@ -1557,7 +1492,7 @@ index c88d5b9125f6ee43bf2be60fd1745d836f271b78..c3291b40ed73790a94db34efd683cfa2 entity.setOldPosAndRot(); ProfilerFiller gameprofilerfiller = this.getProfiler(); -@@ -1382,12 +1357,10 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1406,12 +1385,10 @@ public class ServerLevel extends Level implements WorldGenLevel { }); gameprofilerfiller.incrementCounter("tickNonPassenger"); if (isActive) { // Paper - EAR 2 @@ -1570,7 +1505,7 @@ index c88d5b9125f6ee43bf2be60fd1745d836f271b78..c3291b40ed73790a94db34efd683cfa2 Iterator iterator = entity.getPassengers().iterator(); while (iterator.hasNext()) { -@@ -1410,8 +1383,6 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1434,8 +1411,6 @@ public class ServerLevel extends Level implements WorldGenLevel { if (passenger instanceof Player || this.entityTickList.contains(passenger)) { // Paper - EAR 2 final boolean isActive = org.spigotmc.ActivationRange.checkIfActive(passenger); @@ -1579,7 +1514,7 @@ index c88d5b9125f6ee43bf2be60fd1745d836f271b78..c3291b40ed73790a94db34efd683cfa2 // Paper end passenger.setOldPosAndRot(); ++passenger.tickCount; -@@ -1440,8 +1411,6 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1464,8 +1439,6 @@ public class ServerLevel extends Level implements WorldGenLevel { this.tickPassenger(passenger, entity2); } @@ -1588,7 +1523,7 @@ index c88d5b9125f6ee43bf2be60fd1745d836f271b78..c3291b40ed73790a94db34efd683cfa2 } } else { passenger.stopRiding(); -@@ -1461,26 +1430,22 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1485,26 +1458,22 @@ public class ServerLevel extends Level implements WorldGenLevel { org.bukkit.Bukkit.getPluginManager().callEvent(new org.bukkit.event.world.WorldSaveEvent(getWorld())); } @@ -1627,7 +1562,7 @@ index c88d5b9125f6ee43bf2be60fd1745d836f271b78..c3291b40ed73790a94db34efd683cfa2 } // Paper end -@@ -1494,7 +1459,6 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1518,7 +1487,6 @@ public class ServerLevel extends Level implements WorldGenLevel { if (!savingDisabled) { org.bukkit.Bukkit.getPluginManager().callEvent(new org.bukkit.event.world.WorldSaveEvent(this.getWorld())); // CraftBukkit @@ -1635,7 +1570,7 @@ index c88d5b9125f6ee43bf2be60fd1745d836f271b78..c3291b40ed73790a94db34efd683cfa2 if (progressListener != null) { progressListener.progressStartNoAbort(Component.translatable("menu.savingLevel")); } -@@ -1504,11 +1468,8 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1528,11 +1496,8 @@ public class ServerLevel extends Level implements WorldGenLevel { progressListener.progressStage(Component.translatable("menu.savingChunks")); } @@ -1648,10 +1583,10 @@ index c88d5b9125f6ee43bf2be60fd1745d836f271b78..c3291b40ed73790a94db34efd683cfa2 } else if (close) { chunkproviderserver.close(false); } // Paper - rewrite chunk system diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 65bb221993147a558995b36fb835f7b82e0eb4bd..fb5f3745dd9435aa20b159caf8a3d0d53b0de340 100644 +index 9073db9ad3627633f46314ae936d584fa400a9ce..b0455f7afc1b35102ec85d3c8557433946fe5cf3 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2389,7 +2389,6 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2391,7 +2391,6 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl public void handleCommand(String s) { // Paper - private -> public org.spigotmc.AsyncCatcher.catchOp("Command Dispatched Async: " + s); // Paper - Add async catcher @@ -1659,7 +1594,7 @@ index 65bb221993147a558995b36fb835f7b82e0eb4bd..fb5f3745dd9435aa20b159caf8a3d0d5 if ( org.spigotmc.SpigotConfig.logCommands ) // Spigot this.LOGGER.info(this.player.getScoreboardName() + " issued server command: " + s); -@@ -2399,20 +2398,14 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2401,20 +2400,14 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl this.cserver.getPluginManager().callEvent(event); if (event.isCancelled()) { @@ -1682,7 +1617,7 @@ index 65bb221993147a558995b36fb835f7b82e0eb4bd..fb5f3745dd9435aa20b159caf8a3d0d5 } // CraftBukkit end diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 33abcf12b4426572b74ca4c813e4392c823494bc..733170a3666e74bd87f6a50fda2d00529a08c55f 100644 +index a35638a92479b90afa89cf201fc45b49c9e767f3..cd4e8facc10796fbb68141994b7fed5ca379f1a4 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 @@ @@ -1692,7 +1627,7 @@ index 33abcf12b4426572b74ca4c813e4392c823494bc..733170a3666e74bd87f6a50fda2d0052 import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; -@@ -1232,7 +1231,6 @@ public abstract class PlayerList { +@@ -1230,7 +1229,6 @@ public abstract class PlayerList { public void saveAll(int interval) { io.papermc.paper.util.MCUtil.ensureMain("Save Players" , () -> { // Paper - Ensure main @@ -1700,7 +1635,7 @@ index 33abcf12b4426572b74ca4c813e4392c823494bc..733170a3666e74bd87f6a50fda2d0052 int numSaved = 0; long now = MinecraftServer.currentTick; for (int i = 0; i < this.players.size(); ++i) { -@@ -1243,7 +1241,6 @@ public abstract class PlayerList { +@@ -1241,7 +1239,6 @@ public abstract class PlayerList { } // Paper end } @@ -1709,10 +1644,10 @@ index 33abcf12b4426572b74ca4c813e4392c823494bc..733170a3666e74bd87f6a50fda2d0052 } diff --git a/src/main/java/net/minecraft/world/entity/EntityType.java b/src/main/java/net/minecraft/world/entity/EntityType.java -index 73871f456a85bda1e51f54986d0e61fb629822e8..7dbb55953ce9fb489c8a6706bc8a64fd3fe0e2a3 100644 +index 940b8d0b89d7e55c938aefbe80ee71b0db3dacb8..068a22bd9ee64ed153b7eedbfad9252adf87cb89 100644 --- a/src/main/java/net/minecraft/world/entity/EntityType.java +++ b/src/main/java/net/minecraft/world/entity/EntityType.java -@@ -327,10 +327,6 @@ public class EntityType implements FeatureElement, EntityTypeT +@@ -331,10 +331,6 @@ public class EntityType implements FeatureElement, EntityTypeT this(factory, spawnGroup, saveable, summonable, fireImmune, spawnableFarFromPlayer, canSpawnInside, dimensions, maxTrackDistance, trackTickInterval, requiredFeatures, "custom"); } public EntityType(EntityType.EntityFactory factory, MobCategory spawnGroup, boolean saveable, boolean summonable, boolean fireImmune, boolean spawnableFarFromPlayer, ImmutableSet canSpawnInside, EntityDimensions dimensions, int maxTrackDistance, int trackTickInterval, FeatureFlagSet requiredFeatures, String id) { @@ -1723,7 +1658,7 @@ index 73871f456a85bda1e51f54986d0e61fb629822e8..7dbb55953ce9fb489c8a6706bc8a64fd // Paper end this.builtInRegistryHolder = BuiltInRegistries.ENTITY_TYPE.createIntrusiveHolder(this); this.factory = factory; -@@ -685,12 +681,6 @@ public class EntityType implements FeatureElement, EntityTypeT +@@ -689,12 +685,6 @@ public class EntityType implements FeatureElement, EntityTypeT return this.updateInterval; } @@ -1737,7 +1672,7 @@ index 73871f456a85bda1e51f54986d0e61fb629822e8..7dbb55953ce9fb489c8a6706bc8a64fd return this != EntityType.PLAYER && this != EntityType.LLAMA_SPIT && this != EntityType.WITHER && this != EntityType.BAT && this != EntityType.ITEM_FRAME && this != EntityType.GLOW_ITEM_FRAME && this != EntityType.LEASH_KNOT && this != EntityType.PAINTING && this != EntityType.END_CRYSTAL && this != EntityType.EVOKER_FANGS; } diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 87134e57a57df0fceda903e35d22f3f2de31adf3..aab9cc7bb9913f30161a78bfdf7e0258a5cabedf 100644 +index 45b1a182acf6b2aef40b714d31ca125d8f74619a..ae1ffb1bc4535f393f40be60571446f66c7ebe16 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -142,7 +142,6 @@ import org.bukkit.event.entity.EntityTeleportEvent; @@ -1824,7 +1759,7 @@ index fcdb9bde8e1605e30dde3e580491522d4b62cdc0..b68c69a7ab71926ecf478d8daa5ec5ac } diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 2354a0e5d15e9be633d9fe3a1a9feefe7b9b7782..b197d4c4a031c020e3994190f0c298809aef35a0 100644 +index 0b56e5f7f18fc4286992af22d402205b771165a3..d1f19c87d6112e7ab9afa5c2e6d6ec529b351d24 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -1,10 +1,7 @@ @@ -1846,15 +1781,15 @@ index 2354a0e5d15e9be633d9fe3a1a9feefe7b9b7782..b197d4c4a031c020e3994190f0c29880 import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Holder; -@@ -36,7 +32,6 @@ import net.minecraft.server.level.FullChunkStatus; - import net.minecraft.server.level.ServerLevel; +@@ -38,7 +34,6 @@ import net.minecraft.server.level.ServerLevel; import net.minecraft.sounds.SoundEvent; + import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; -import net.minecraft.util.AbortableIterationConsumer; import net.minecraft.util.Mth; import net.minecraft.util.RandomSource; import net.minecraft.util.profiling.ProfilerFiller; -@@ -44,8 +39,6 @@ import net.minecraft.world.DifficultyInstance; +@@ -47,8 +42,6 @@ import net.minecraft.world.TickRateManager; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.damagesource.DamageSources; import net.minecraft.world.entity.Entity; @@ -1863,7 +1798,7 @@ index 2354a0e5d15e9be633d9fe3a1a9feefe7b9b7782..b197d4c4a031c020e3994190f0c29880 import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; -@@ -91,17 +84,14 @@ import net.minecraft.network.protocol.game.ClientboundSetBorderSizePacket; +@@ -94,17 +87,14 @@ import net.minecraft.network.protocol.game.ClientboundSetBorderSizePacket; import net.minecraft.network.protocol.game.ClientboundSetBorderWarningDelayPacket; import net.minecraft.network.protocol.game.ClientboundSetBorderWarningDistancePacket; import org.bukkit.Bukkit; @@ -1881,7 +1816,7 @@ index 2354a0e5d15e9be633d9fe3a1a9feefe7b9b7782..b197d4c4a031c020e3994190f0c29880 // CraftBukkit end public abstract class Level implements LevelAccessor, AutoCloseable { -@@ -176,7 +166,6 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -179,7 +169,6 @@ public abstract class Level implements LevelAccessor, AutoCloseable { // Paper end public final com.destroystokyo.paper.antixray.ChunkPacketBlockController chunkPacketBlockController; // Paper - Anti-Xray @@ -1889,7 +1824,7 @@ index 2354a0e5d15e9be633d9fe3a1a9feefe7b9b7782..b197d4c4a031c020e3994190f0c29880 public static BlockPos lastPhysicsProblem; // Spigot private org.spigotmc.TickLimiter entityLimiter; private org.spigotmc.TickLimiter tileLimiter; -@@ -292,7 +281,6 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -295,7 +284,6 @@ public abstract class Level implements LevelAccessor, AutoCloseable { public void onBorderSetDamageSafeZOne(WorldBorder border, double safeZoneRadius) {} }); // CraftBukkit end @@ -1897,7 +1832,7 @@ index 2354a0e5d15e9be633d9fe3a1a9feefe7b9b7782..b197d4c4a031c020e3994190f0c29880 this.keepSpawnInMemory = this.paperConfig().spawn.keepSpawnLoaded; // Paper this.entityLimiter = new org.spigotmc.TickLimiter(this.spigotConfig.entityMaxTickTime); this.tileLimiter = new org.spigotmc.TickLimiter(this.spigotConfig.tileMaxTickTime); -@@ -1256,15 +1244,12 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1265,15 +1253,12 @@ public abstract class Level implements LevelAccessor, AutoCloseable { ProfilerFiller gameprofilerfiller = this.getProfiler(); gameprofilerfiller.push("blockEntities"); @@ -1911,9 +1846,9 @@ index 2354a0e5d15e9be633d9fe3a1a9feefe7b9b7782..b197d4c4a031c020e3994190f0c29880 - this.timings.tileEntityTick.startTiming(); // Spigot // Spigot start - // Iterator iterator = this.blockEntityTickers.iterator(); - int tilesThisCycle = 0; -@@ -1297,9 +1282,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { + // Iterator iterator = this.blockEntityTickers.iterator(); + boolean flag = this.tickRateManager().runsNormally(); +@@ -1308,9 +1293,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } this.blockEntityTickers.removeAll(toRemove); @@ -1944,10 +1879,10 @@ index 3cdddda9c0618e95288b81b975d499c8dd30c05f..aec5396b7dea8ba45f82f487719d42a1 } diff --git a/src/main/java/net/minecraft/world/level/block/Block.java b/src/main/java/net/minecraft/world/level/block/Block.java -index d4cbff18adb62073a1dceb189043789620af6877..3ed0c227e1df184a84ecf1bdde9c598fabc329c7 100644 +index 4d50dd92a7f3187ee1d8edb926e7c273c8156549..a0c43e8c65b6ab78b24d1514dace8d1d7ae56bd1 100644 --- a/src/main/java/net/minecraft/world/level/block/Block.java +++ b/src/main/java/net/minecraft/world/level/block/Block.java -@@ -101,13 +101,6 @@ public class Block extends BlockBehaviour implements ItemLike { +@@ -103,13 +103,6 @@ public class Block extends BlockBehaviour implements ItemLike { this != Blocks.STRUCTURE_BLOCK && this != Blocks.JIGSAW; } @@ -2019,7 +1954,7 @@ index fa170cc1ce7011d201295b89718292d696c7fc24..6b47cd3dfd0b7a9fc670522d8591e2f4 } } diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java -index 3c53be7f4cd162b8f7b808431ad36e7289e1aeb5..6ba8a91ba676d371c286014d1474e949108c8dee 100644 +index 0815d354bbcb3ce2e263690f71f32c320fe3d1d2..e815dc2a36343925150c3bcb3a0ef6fded1bc955 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java @@ -343,8 +343,8 @@ public class Main { @@ -2156,11 +2091,11 @@ index ea26d9464644b5217879b8c21b4da28e57708dcb..e4868e83cd7883408c598f2dcc3f9f4e long getCreatedAt() { diff --git a/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java b/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java -index 891f850ea99dac1433f3e395e26be14c8abf2bfb..b1a3b4d7577a8abb5582a0123c972e0a60ee7840 100644 +index b3e1adeb932da9b3bed16acd94e2f16da48a7c72..e9798517b9211c50a20ea5c69603aab35f614f02 100644 --- a/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java +++ b/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java @@ -115,16 +115,9 @@ public final class CraftScoreboardManager implements ScoreboardManager { - public void getScoreboardScores(ObjectiveCriteria criteria, String name, Consumer consumer) { + public void forAllObjectives(ObjectiveCriteria criteria, ScoreHolder holder, Consumer consumer) { // Paper start - add timings for scoreboard search // plugins leaking scoreboards will make this very expensive, let server owners debug it easily - co.aikar.timings.MinecraftTimings.scoreboardScoreSearch.startTimingIfSync(); @@ -2168,7 +2103,7 @@ index 891f850ea99dac1433f3e395e26be14c8abf2bfb..b1a3b4d7577a8abb5582a0123c972e0a - // Paper end - add timings for scoreboard search for (CraftScoreboard scoreboard : this.scoreboards) { Scoreboard board = scoreboard.board; - board.forAllObjectives(criteria, name, (score) -> consumer.accept(score)); + board.forAllObjectives(criteria, holder, (score) -> consumer.accept(score)); } - } finally { // Paper start - add timings for scoreboard search - co.aikar.timings.MinecraftTimings.scoreboardScoreSearch.stopTimingIfSync(); @@ -2177,10 +2112,10 @@ index 891f850ea99dac1433f3e395e26be14c8abf2bfb..b1a3b4d7577a8abb5582a0123c972e0a } } diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -index 548c77592a3520e8053483644eba805079a14f1a..02341fc8d2877a1f057567b3ea287938139e4a91 100644 +index ec2396f0e5d62b10450eaa7239a8c5479638b3c3..995ae8f2f76bf0255d7eac4190c5b961bfb17f24 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -@@ -214,7 +214,6 @@ public final class CraftMagicNumbers implements UnsafeValues { +@@ -212,7 +212,6 @@ public final class CraftMagicNumbers implements UnsafeValues { // Paper start @Override public void reportTimings() { diff --git a/patches/server/0003-Leaves-Server-Utils.patch b/patches/server/0003-Leaves-Server-Utils.patch index d6a49e72..4deae525 100644 --- a/patches/server/0003-Leaves-Server-Utils.patch +++ b/patches/server/0003-Leaves-Server-Utils.patch @@ -31,10 +31,10 @@ index 46954db7ecd35ac4018fdf476df7c8020d7ce6c8..044c51ebb058fc36074fd178929e3279 public PlayerAreaMap() { super(); diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index fece91254b10b59474056aa730fd420f90cd7bec..2f18ce5769a39aeecaf36b6f7419aee9fac3bc32 100644 +index 9abe817ae202edaa2d88cd59ae5c7db0b1c634be..a260235364b7acaac5ffa28234400ee907a4889b 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -417,6 +417,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -422,6 +422,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S private UUID originWorld; public boolean freezeLocked = false; // Paper - Freeze Tick Lock API public boolean collidingWithWorldBorder; // Paper @@ -42,15 +42,15 @@ index fece91254b10b59474056aa730fd420f90cd7bec..2f18ce5769a39aeecaf36b6f7419aee9 public boolean fixedPose = false; // Paper public void setOrigin(@javax.annotation.Nonnull Location location) { -@@ -2455,6 +2456,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { - nbt.putBoolean("Paper.FreezeLock", true); +@@ -2478,6 +2479,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S + nbttagcompound.putBoolean("Paper.FreezeLock", true); } // Paper end -+ nbt.put("Leaves.Data", leavesData); // Leaves - leaves ex data - return nbt; ++ nbttagcompound.put("Leaves.Data", leavesData); // Leaves - leaves ex data + return nbttagcompound; } catch (Throwable throwable) { CrashReport crashreport = CrashReport.forThrowable(throwable, "Saving entity NBT"); -@@ -2602,6 +2604,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -2625,6 +2627,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S freezeLocked = nbt.getBoolean("Paper.FreezeLock"); } // Paper end @@ -62,7 +62,7 @@ index fece91254b10b59474056aa730fd420f90cd7bec..2f18ce5769a39aeecaf36b6f7419aee9 } catch (Throwable throwable) { CrashReport crashreport = CrashReport.forThrowable(throwable, "Loading entity NBT"); -@@ -4874,4 +4881,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -4916,4 +4923,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S return ((net.minecraft.server.level.ServerChunkCache) level.getChunkSource()).isPositionTicking(this); } // Paper end diff --git a/patches/server/0005-Leaves-Server-Config-And-Command.patch b/patches/server/0005-Leaves-Server-Config-And-Command.patch index 7b32ce67..a9f246f6 100644 --- a/patches/server/0005-Leaves-Server-Config-And-Command.patch +++ b/patches/server/0005-Leaves-Server-Config-And-Command.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Leaves Server Config And Command diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 1a375701b6ba43825af59f1dcc966633459adf29..d6f913b7bc79d2ffaa994b60d4a8252a296d852c 100644 +index a67ddd1ca3f18e6754dd52d9f34e5d2e850760e0..fe547d04abece42bdc0d0897e2d3f2e6c190c455 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1095,6 +1095,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop resourcekey, RegistryAccess iregistrycustom, Holder holder, Supplier supplier, boolean flag, boolean flag1, long i, int j, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.function.Function paperWorldConfigCreator, java.util.concurrent.Executor executor) { // Paper - Async-Anti-Xray - Pass executor this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName()); // Spigot this.paperConfig = paperWorldConfigCreator.apply(this.spigotConfig); // Paper @@ -68,10 +68,10 @@ index b197d4c4a031c020e3994190f0c298809aef35a0..8ba39643a843a1df9bb22e5949cbee9e this.world = new CraftWorld((ServerLevel) this, gen, biomeProvider, env); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index dc60dda029bd28dac7b31e2998d178e7f1453a81..a250171851caa2dea909869c2e58b814133ba291 100644 +index 057b5fd0fd4f5dc2340cd80f316703edc1f88cae..04d9a1838f1c47c83eb94ea85e46d689c83a679a 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1041,6 +1041,7 @@ public final class CraftServer implements Server { +@@ -1036,6 +1036,7 @@ public final class CraftServer implements Server { org.spigotmc.SpigotConfig.init((File) this.console.options.valueOf("spigot-settings")); // Spigot this.console.paperConfigurations.reloadConfigs(this.console); @@ -79,7 +79,7 @@ index dc60dda029bd28dac7b31e2998d178e7f1453a81..a250171851caa2dea909869c2e58b814 for (ServerLevel world : this.console.getAllLevels()) { // world.serverLevelData.setDifficulty(config.difficulty); // Paper - per level difficulty world.setSpawnSettings(world.serverLevelData.getDifficulty() != Difficulty.PEACEFUL && config.spawnMonsters, config.spawnAnimals); // Paper - per level difficulty (from MinecraftServer#setDifficulty(ServerLevel, Difficulty, boolean)) -@@ -1056,6 +1057,7 @@ public final class CraftServer implements Server { +@@ -1051,6 +1052,7 @@ public final class CraftServer implements Server { } } world.spigotConfig.init(); // Spigot @@ -87,7 +87,7 @@ index dc60dda029bd28dac7b31e2998d178e7f1453a81..a250171851caa2dea909869c2e58b814 } Plugin[] pluginClone = pluginManager.getPlugins().clone(); // Paper -@@ -1071,6 +1073,7 @@ public final class CraftServer implements Server { +@@ -1066,6 +1068,7 @@ public final class CraftServer implements Server { this.reloadData(); org.spigotmc.SpigotConfig.registerCommands(); // Spigot io.papermc.paper.command.PaperCommands.registerCommands(this.console); // Paper @@ -95,7 +95,7 @@ index dc60dda029bd28dac7b31e2998d178e7f1453a81..a250171851caa2dea909869c2e58b814 this.overrideAllCommandBlockCommands = this.commandsConfiguration.getStringList("command-block-overrides").contains("*"); this.ignoreVanillaPermissions = this.commandsConfiguration.getBoolean("ignore-vanilla-permissions"); -@@ -2977,6 +2980,14 @@ public final class CraftServer implements Server { +@@ -3009,6 +3012,14 @@ public final class CraftServer implements Server { { return CraftServer.this.console.paperConfigurations.createLegacyObject(CraftServer.this.console); } @@ -111,7 +111,7 @@ index dc60dda029bd28dac7b31e2998d178e7f1453a81..a250171851caa2dea909869c2e58b814 @Override public void restart() { diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java -index 6ba8a91ba676d371c286014d1474e949108c8dee..4169d2458f168da300946a2a64f192d3063fded6 100644 +index e815dc2a36343925150c3bcb3a0ef6fded1bc955..afe922d39eeacc7916862a3287a9e97e22813dab 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java @@ -166,6 +166,14 @@ public class Main { diff --git a/patches/server/0006-Leaves-Protocol-Core.patch b/patches/server/0006-Leaves-Protocol-Core.patch index fc9eeb99..142e78d3 100644 --- a/patches/server/0006-Leaves-Protocol-Core.patch +++ b/patches/server/0006-Leaves-Protocol-Core.patch @@ -23,10 +23,10 @@ index af86f752c33a2990405fea058b7c41c437ba9d46..bada9fae1e7178162429e1f5a1608b9c } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index d6f913b7bc79d2ffaa994b60d4a8252a296d852c..19a49358826c9fe39aeaf89348dc07b228d737c2 100644 +index fe547d04abece42bdc0d0897e2d3f2e6c190c455..eb376bf0cb055fb3ddb05e5a0ff8602a0108f772 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1562,6 +1562,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop this.getY() > v)) { diff --git a/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java b/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java -index 41d7cff39fc37955877668337689b4b26cd8c7cf..5e0e8afa553a8dcd87dfc10a595ba10c2b3da7df 100644 +index c82ebcac07033d887af499f81520982fbe5ed4f1..ef38de1c64f067250c12cceca24f68ef3a8feb74 100644 --- a/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java +++ b/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java -@@ -53,12 +53,19 @@ public class EndPortalBlock extends BaseEntityBlock { +@@ -61,12 +61,19 @@ public class EndPortalBlock extends BaseEntityBlock { // return; // CraftBukkit - always fire event in case plugins wish to change it } diff --git a/patches/server/0008-Fix-trading-with-the-void.patch b/patches/server/0008-Fix-trading-with-the-void.patch index 33007f91..e1d28eba 100644 --- a/patches/server/0008-Fix-trading-with-the-void.patch +++ b/patches/server/0008-Fix-trading-with-the-void.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Fix trading with the void diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 47bf04c95163149063d1828a02d0d86dde5fab01..379cbb8e5e0b4e990bbe71aa67c890344df7b25c 100644 +index bfd670484fc58f8b6edd8d6d1065fe808bc777e4..5a864a2ac7549a01663b221624bee919947d2696 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -2754,11 +2754,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -2804,11 +2804,7 @@ public class ServerLevel extends Level implements WorldGenLevel { // Spigot end // Spigot Start if (entity.getBukkitEntity() instanceof org.bukkit.inventory.InventoryHolder && (!(entity instanceof ServerPlayer) || entity.getRemovalReason() != Entity.RemovalReason.KILLED)) { // SPIGOT-6876: closeInventory clears death message diff --git a/patches/server/0009-Make-snowball-and-egg-can-knockback-player.patch b/patches/server/0009-Make-snowball-and-egg-can-knockback-player.patch index ba54e97c..adf82023 100644 --- a/patches/server/0009-Make-snowball-and-egg-can-knockback-player.patch +++ b/patches/server/0009-Make-snowball-and-egg-can-knockback-player.patch @@ -30,7 +30,7 @@ index 718e120c9768cf716b32d3d652f53f1dda925168..21f5c59e7e01ffefdb077d1aa9853935 @Override diff --git a/src/main/java/net/minecraft/world/entity/projectile/ThrownEgg.java b/src/main/java/net/minecraft/world/entity/projectile/ThrownEgg.java -index 588e5ac6fc9b2d12be3bb80bc3fe50d81470c441..e79d994bb855626e740e23de564f73924a1f5098 100644 +index b64ecadae45c2126b92963ac8d118dde76126ddd..04ef5989f108c164b6fafeaa40822471a2d25480 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/ThrownEgg.java +++ b/src/main/java/net/minecraft/world/entity/projectile/ThrownEgg.java @@ -45,7 +45,14 @@ public class ThrownEgg extends ThrowableItemProjectile { diff --git a/patches/server/0010-Fakeplayer-support.patch b/patches/server/0010-Fakeplayer-support.patch index c3b2040d..79e2c5a3 100644 --- a/patches/server/0010-Fakeplayer-support.patch +++ b/patches/server/0010-Fakeplayer-support.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Fakeplayer support diff --git a/src/main/java/net/minecraft/advancements/critereon/SimpleCriterionTrigger.java b/src/main/java/net/minecraft/advancements/critereon/SimpleCriterionTrigger.java -index 997ddf7cd0051ba67e9c4ef7da39481649303791..1e0618a12842a0250c6d095e7c1d0e73a2beaabe 100644 +index 31fa6a0cb00139bfcb71f4fd30da8b736bf491f2..1ad8b58fc3e97026173727fd4bb847823942a474 100644 --- a/src/main/java/net/minecraft/advancements/critereon/SimpleCriterionTrigger.java +++ b/src/main/java/net/minecraft/advancements/critereon/SimpleCriterionTrigger.java -@@ -51,6 +51,7 @@ public abstract class SimpleCriterionTrigger predicate) { @@ -36,10 +36,10 @@ index c0ea20dcee8bb293df96bc6ee019e50ad6b383fd..f265b3b3736de5ff3bc1b52146d11f92 if (this.packetListener != null) { throw new IllegalStateException("Listener already set"); diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 19a49358826c9fe39aeaf89348dc07b228d737c2..fed5c2cd5bbd390e6cbf61420fdc8d7b9cab96a5 100644 +index eb376bf0cb055fb3ddb05e5a0ff8602a0108f772..37af0a508cfe56f23be806d2d4100d890ad5e7ec 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -121,6 +121,7 @@ import net.minecraft.util.profiling.metrics.storage.MetricsPersister; +@@ -123,6 +123,7 @@ import net.minecraft.util.profiling.metrics.storage.MetricsPersister; import net.minecraft.util.thread.ReentrantBlockableEventLoop; import net.minecraft.world.Difficulty; import net.minecraft.world.RandomSequences; @@ -47,7 +47,7 @@ index 19a49358826c9fe39aeaf89348dc07b228d737c2..fed5c2cd5bbd390e6cbf61420fdc8d7b import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.ai.village.VillageSiege; import net.minecraft.world.entity.npc.CatSpawner; -@@ -617,6 +618,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop loot = new java.util.ArrayList<>(this.getInventory().getContainerSize()); // Paper boolean keepInventory = this.level().getGameRules().getBoolean(GameRules.RULE_KEEPINVENTORY) || this.isSpectator(); @@ -164,7 +164,7 @@ index 907c8f15f5247f9972c6677ff0f9e1aa22764a04..cbf1acaae2707c42f0574ff1766957c3 for (ItemStack item : this.getInventory().getContents()) { if (!item.isEmpty() && !EnchantmentHelper.hasVanishingCurse(item)) { loot.add(new DefaultDrop(item, stack -> this.drop(stack, true, false))); // Paper - drop function taken from Inventory#dropAll -@@ -1267,6 +1271,13 @@ public class ServerPlayer extends Player { +@@ -1271,6 +1275,13 @@ public class ServerPlayer extends Player { this.lastSentHealth = -1.0F; this.lastSentFood = -1; @@ -179,12 +179,12 @@ index 907c8f15f5247f9972c6677ff0f9e1aa22764a04..cbf1acaae2707c42f0574ff1766957c3 PlayerChangedWorldEvent changeEvent = new PlayerChangedWorldEvent(this.getBukkitEntity(), worldserver1.getWorld()); this.level().getCraftServer().getPluginManager().callEvent(changeEvent); diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index fb5f3745dd9435aa20b159caf8a3d0d53b0de340..47f6d557df3e1f91603b0d4343f8f4e27db63326 100644 +index b0455f7afc1b35102ec85d3c8557433946fe5cf3..e018fb8d2649e1e07289f12421ac0ddcf05e1c72 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -298,7 +298,13 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl - this.lastSeenMessages = new LastSeenMessagesValidator(20); - this.messageSignatureCache = MessageSignatureCache.createDefault(); + public ServerGamePacketListenerImpl(MinecraftServer server, Connection connection, ServerPlayer player, CommonListenerCookie clientData) { + super(server, connection, clientData, player); // CraftBukkit this.chunkSender = new PlayerChunkSender(connection.isMemoryConnection()); - connection.setListener(this); + // Leaves start - fakeplayer @@ -198,34 +198,19 @@ index fb5f3745dd9435aa20b159caf8a3d0d53b0de340..47f6d557df3e1f91603b0d4343f8f4e2 player.connection = this; player.getTextFilter().join(); diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index afbe41b671073232614a1de246bea30ea2a26929..dea28bf8e1c0f67f13cc51d9e2cc6da69ad7fcb1 100644 +index 937c4aefc5f24cbfe3f9c9fce3cfb2f40db5675b..81c09a9686731953787b56c3c8a20543418941a4 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -101,6 +101,7 @@ import net.minecraft.world.scores.Objective; - import net.minecraft.world.scores.PlayerTeam; - import net.minecraft.world.scores.Scoreboard; // Paper - import net.minecraft.world.scores.Team; -+import top.leavesmc.leaves.bot.ServerBot; - import org.slf4j.Logger; - - // CraftBukkit start -@@ -110,7 +111,6 @@ import org.bukkit.Location; - import org.bukkit.craftbukkit.CraftServer; - import org.bukkit.craftbukkit.CraftWorld; - import org.bukkit.craftbukkit.entity.CraftPlayer; --import org.bukkit.craftbukkit.util.CraftChatMessage; - import org.bukkit.craftbukkit.util.CraftLocation; - import org.bukkit.entity.Player; - import org.bukkit.event.player.PlayerChangedWorldEvent; -@@ -119,7 +119,6 @@ import org.bukkit.event.player.PlayerLoginEvent; - import org.bukkit.event.player.PlayerQuitEvent; - import org.bukkit.event.player.PlayerRespawnEvent; - import org.bukkit.event.player.PlayerRespawnEvent.RespawnReason; --import org.bukkit.event.player.PlayerSpawnChangeEvent; +@@ -120,6 +120,8 @@ import org.bukkit.event.player.PlayerRespawnEvent.RespawnReason; + import org.bukkit.event.player.PlayerSpawnChangeEvent; // CraftBukkit end ++import top.leavesmc.leaves.bot.ServerBot; ++ public abstract class PlayerList { -@@ -350,6 +349,21 @@ public abstract class PlayerList { + + public static final File USERBANLIST_FILE = new File("banned-players.json"); +@@ -348,6 +350,21 @@ public abstract class PlayerList { top.leavesmc.leaves.protocol.core.LeavesProtocolManager.handlePlayerJoin(player); // Leaves - protocol @@ -247,13 +232,13 @@ index afbe41b671073232614a1de246bea30ea2a26929..dea28bf8e1c0f67f13cc51d9e2cc6da6 final net.kyori.adventure.text.Component jm = playerJoinEvent.joinMessage(); if (jm != null && !jm.equals(net.kyori.adventure.text.Component.empty())) { // Paper - Adventure -@@ -1002,6 +1016,13 @@ public abstract class PlayerList { +@@ -1000,6 +1017,13 @@ public abstract class PlayerList { } // Paper end + // Leaves start - bot support + if (top.leavesmc.leaves.LeavesConfig.fakeplayerSupport) { -+ top.leavesmc.leaves.bot.ServerBot.getBots().forEach(bot1 -> ++ ServerBot.getBots().forEach(bot1 -> + bot1.sendFakeDataIfNeed(entityplayer1, true)); // Leaves - render bot + } + // Leaves end - bot support @@ -261,7 +246,7 @@ index afbe41b671073232614a1de246bea30ea2a26929..dea28bf8e1c0f67f13cc51d9e2cc6da6 // CraftBukkit end return entityplayer1; } -@@ -1112,11 +1133,16 @@ public abstract class PlayerList { +@@ -1110,11 +1134,16 @@ public abstract class PlayerList { } public String[] getPlayerNamesArray() { @@ -279,7 +264,7 @@ index afbe41b671073232614a1de246bea30ea2a26929..dea28bf8e1c0f67f13cc51d9e2cc6da6 return astring; } -@@ -1593,4 +1619,16 @@ public abstract class PlayerList { +@@ -1593,4 +1622,16 @@ public abstract class PlayerList { public boolean isAllowCheatsForAllPlayers() { return this.allowCheatsForAllPlayers; } @@ -297,10 +282,10 @@ index afbe41b671073232614a1de246bea30ea2a26929..dea28bf8e1c0f67f13cc51d9e2cc6da6 + // Leaves end - fakeplayer support } diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index d4e22baadc9e58ccc0b59ae36b2266730bb0ead8..ab1117bbc095e5935bba5e23c6232e7ec122cd1e 100644 +index ab66958a734ff303f25e62fec21f1b250aeec5ab..741b090e46a34e9c7711ddebf06c12316b5ad7de 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -1416,7 +1416,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -1421,7 +1421,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S return offsetFactor; } @@ -323,7 +308,7 @@ index a2093158e57d5f43c4afa66386481b82b3c4c3c4..35672105a000d87c7fe82eb65456d891 private int timeUntilHooked; private float fishAngle; diff --git a/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java b/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java -index 82f18790b9dc55b039ae03600a80a46d56a87521..29d215c23dca6a6226f1c2254a0df5946485ab48 100644 +index 8fd82051bba33b4703e4d99fff886b63a319a5ba..1a1736fe28014aca767aa9efdcba378be3adc8ea 100644 --- a/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java +++ b/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java @@ -406,6 +406,8 @@ public abstract class AbstractContainerMenu { @@ -335,7 +320,7 @@ index 82f18790b9dc55b039ae03600a80a46d56a87521..29d215c23dca6a6226f1c2254a0df594 if (actionType == ClickType.QUICK_CRAFT) { int i1 = this.quickcraftStatus; -@@ -676,6 +678,23 @@ public abstract class AbstractContainerMenu { +@@ -680,6 +682,23 @@ public abstract class AbstractContainerMenu { } @@ -376,10 +361,10 @@ index dfeb3e336e06ef01f5401a362755030db942bb07..c51413bf02b3572a05f09d2f0d02493d if (randomsource.nextInt(j) >= world.paperConfig().entities.behavior.playerInsomniaStartTicks) { // Paper BlockPos blockposition1 = blockposition.above(20 + randomsource.nextInt(15)).east(-10 + randomsource.nextInt(21)).south(-10 + randomsource.nextInt(21)); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 914248c017711165541a2e246cb4f61bb8267d3a..b76d078606b9c8486c1cbff240fd45e69eb9e58d 100644 +index 8fa5e507214b79573506c987a7060013dbf5ac2e..a36b234f884e2aae88a29fae872aeef662b27712 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -264,6 +264,7 @@ import org.yaml.snakeyaml.constructor.SafeConstructor; +@@ -265,6 +265,7 @@ import org.yaml.snakeyaml.constructor.SafeConstructor; import org.yaml.snakeyaml.error.MarkedYAMLException; import net.md_5.bungee.api.chat.BaseComponent; // Spigot @@ -387,7 +372,7 @@ index 914248c017711165541a2e246cb4f61bb8267d3a..b76d078606b9c8486c1cbff240fd45e6 import javax.annotation.Nullable; // Paper import javax.annotation.Nonnull; // Paper -@@ -309,6 +310,7 @@ public final class CraftServer implements Server { +@@ -310,6 +311,7 @@ public final class CraftServer implements Server { public static Exception excessiveVelEx; // Paper - Velocity warnings private final io.papermc.paper.logging.SysoutCatcher sysoutCatcher = new io.papermc.paper.logging.SysoutCatcher(); // Paper private final CraftPotionBrewer potionBrewer = new CraftPotionBrewer(); // Paper @@ -395,7 +380,7 @@ index 914248c017711165541a2e246cb4f61bb8267d3a..b76d078606b9c8486c1cbff240fd45e6 // Paper start - Folia region threading API private final io.papermc.paper.threadedregions.scheduler.FallbackRegionScheduler regionizedScheduler = new io.papermc.paper.threadedregions.scheduler.FallbackRegionScheduler(); -@@ -3209,4 +3211,11 @@ public final class CraftServer implements Server { +@@ -3241,4 +3243,11 @@ public final class CraftServer implements Server { } // Paper end @@ -408,10 +393,10 @@ index 914248c017711165541a2e246cb4f61bb8267d3a..b76d078606b9c8486c1cbff240fd45e6 + // Leaves end - Bot API } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index 9f843b89dc20b91bf7243facee8486d525e4a1b3..22e22234473c601bf674f42efa81a6920c0fb344 100644 +index aa4dbf91cf6da329fdcacbde98bb870eb48e8f5c..801ee163a71ab2afd822c7f17bf45573c0fd83f5 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -@@ -194,6 +194,8 @@ import org.bukkit.plugin.Plugin; +@@ -199,6 +199,8 @@ import org.bukkit.plugin.Plugin; import org.bukkit.util.BoundingBox; import org.bukkit.util.NumberConversions; import org.bukkit.util.Vector; @@ -420,7 +405,7 @@ index 9f843b89dc20b91bf7243facee8486d525e4a1b3..22e22234473c601bf674f42efa81a692 import net.md_5.bungee.api.chat.BaseComponent; // Spigot -@@ -231,7 +233,12 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { +@@ -236,7 +238,12 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { if (entity instanceof LivingEntity) { // Players if (entity instanceof net.minecraft.world.entity.player.Player) { @@ -986,10 +971,10 @@ index 0000000000000000000000000000000000000000..c3f114fba0759221b5fea0ccc4862f05 +} diff --git a/src/main/java/top/leavesmc/leaves/bot/BotUtil.java b/src/main/java/top/leavesmc/leaves/bot/BotUtil.java new file mode 100644 -index 0000000000000000000000000000000000000000..be3a40e3100ec838cf8de6437cc6b1b0c454bc68 +index 0000000000000000000000000000000000000000..b0ad5ed3d2a179001312733b780dd532d3b4a001 --- /dev/null +++ b/src/main/java/top/leavesmc/leaves/bot/BotUtil.java -@@ -0,0 +1,182 @@ +@@ -0,0 +1,183 @@ +package top.leavesmc.leaves.bot; + +import com.google.common.base.Charsets; @@ -999,6 +984,7 @@ index 0000000000000000000000000000000000000000..be3a40e3100ec838cf8de6437cc6b1b0 +import net.minecraft.core.NonNullList; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.ListTag; ++import net.minecraft.nbt.NbtAccounter; +import net.minecraft.nbt.NbtIo; +import net.minecraft.server.MinecraftServer; +import net.minecraft.world.entity.EquipmentSlot; @@ -1113,7 +1099,7 @@ index 0000000000000000000000000000000000000000..be3a40e3100ec838cf8de6437cc6b1b0 + file.delete(); + } + file.createNewFile(); -+ NbtIo.writeCompressed(invnbt, file); ++ NbtIo.writeCompressed(invnbt, file.toPath()); + } catch (IOException e) { + e.printStackTrace(); + } @@ -1139,7 +1125,7 @@ index 0000000000000000000000000000000000000000..be3a40e3100ec838cf8de6437cc6b1b0 + File file = MinecraftServer.getServer().getWorldPath(LevelResource.ROOT).resolve("fakeplayer/" + getBotUUID(state) + ".dat").toFile(); + if (file.exists()) { + try { -+ CompoundTag nbt = NbtIo.readCompressed(file); ++ CompoundTag nbt = NbtIo.readCompressed(file.toPath(), NbtAccounter.unlimitedHeap()); + inv = nbt.getList("Inventory", 10); + } catch (IOException e) { + e.printStackTrace(); diff --git a/patches/server/0012-Redstone-Shears-Wrench.patch b/patches/server/0012-Redstone-Shears-Wrench.patch index 5da29f93..992cd336 100644 --- a/patches/server/0012-Redstone-Shears-Wrench.patch +++ b/patches/server/0012-Redstone-Shears-Wrench.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Redstone Shears Wrench diff --git a/src/main/java/net/minecraft/world/item/ShearsItem.java b/src/main/java/net/minecraft/world/item/ShearsItem.java -index a6ebb08a8f9681fd3a35de5d0e268f320e31ce1a..7c3c3a28a95c58caa83e283cdbb472b2499a8f7b 100644 +index 88156fa7722baa2738b908bfcd648bca371c533f..8206f105f80355fcc9061886215103bb480ab4a1 100644 --- a/src/main/java/net/minecraft/world/item/ShearsItem.java +++ b/src/main/java/net/minecraft/world/item/ShearsItem.java @@ -1,7 +1,9 @@ diff --git a/patches/server/0013-Add-isShrink-to-EntityResurrectEvent.patch b/patches/server/0013-Add-isShrink-to-EntityResurrectEvent.patch index 87f4191b..a397de3f 100644 --- a/patches/server/0013-Add-isShrink-to-EntityResurrectEvent.patch +++ b/patches/server/0013-Add-isShrink-to-EntityResurrectEvent.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add isShrink to EntityResurrectEvent diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index aab9cc7bb9913f30161a78bfdf7e0258a5cabedf..a03d8f8e6d025f997993a41e2a06f700aa1a1874 100644 +index ae1ffb1bc4535f393f40be60571446f66c7ebe16..09cbe3db4b412176377a101e080523bafe39b916 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -1613,12 +1613,12 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1612,12 +1612,12 @@ public abstract class LivingEntity extends Entity implements Attackable { } org.bukkit.inventory.EquipmentSlot handSlot = (hand != null) ? org.bukkit.craftbukkit.CraftEquipmentSlot.getHand(hand) : null; @@ -23,7 +23,7 @@ index aab9cc7bb9913f30161a78bfdf7e0258a5cabedf..a03d8f8e6d025f997993a41e2a06f700 itemstack1.shrink(1); } if (itemstack != null && this instanceof ServerPlayer) { -@@ -4539,3 +4539,4 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -4543,3 +4543,4 @@ public abstract class LivingEntity extends Entity implements Attackable { } } diff --git a/patches/server/0014-Budding-Amethyst-can-push-by-piston.patch b/patches/server/0014-Budding-Amethyst-can-push-by-piston.patch index ef7a5146..5a5e7fc6 100644 --- a/patches/server/0014-Budding-Amethyst-can-push-by-piston.patch +++ b/patches/server/0014-Budding-Amethyst-can-push-by-piston.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Budding Amethyst can push by piston diff --git a/src/main/java/net/minecraft/world/level/block/Block.java b/src/main/java/net/minecraft/world/level/block/Block.java -index 3ed0c227e1df184a84ecf1bdde9c598fabc329c7..065fbac30d22ec45cd3f5b66599c8500ae5c278d 100644 +index a0c43e8c65b6ab78b24d1514dace8d1d7ae56bd1..3d8b39cfc50de89fda4d221ea27743508691857c 100644 --- a/src/main/java/net/minecraft/world/level/block/Block.java +++ b/src/main/java/net/minecraft/world/level/block/Block.java -@@ -586,6 +586,12 @@ public class Block extends BlockBehaviour implements ItemLike { +@@ -594,6 +594,12 @@ public class Block extends BlockBehaviour implements ItemLike { } // Spigot end @@ -22,10 +22,10 @@ index 3ed0c227e1df184a84ecf1bdde9c598fabc329c7..065fbac30d22ec45cd3f5b66599c8500 private final BlockState first; diff --git a/src/main/java/net/minecraft/world/level/block/BuddingAmethystBlock.java b/src/main/java/net/minecraft/world/level/block/BuddingAmethystBlock.java -index 2548244c089dff583c8c424dcaa5504caedf3f10..e53624d9f2372fceab44bd1c881a6f3cf5862b8c 100644 +index ee24eac5e37a2fd0c8c37365ea10d03749beb9a7..915b148e8bf5bdf6364253cf81e01b87f420d598 100644 --- a/src/main/java/net/minecraft/world/level/block/BuddingAmethystBlock.java +++ b/src/main/java/net/minecraft/world/level/block/BuddingAmethystBlock.java -@@ -53,4 +53,11 @@ public class BuddingAmethystBlock extends AmethystBlock { +@@ -60,4 +60,11 @@ public class BuddingAmethystBlock extends AmethystBlock { public static boolean canClusterGrowAtState(BlockState state) { return state.isAir() || state.is(Blocks.WATER) && state.getFluidState().getAmount() == 8; } @@ -38,10 +38,10 @@ index 2548244c089dff583c8c424dcaa5504caedf3f10..e53624d9f2372fceab44bd1c881a6f3c + // Leaves end - budding amethyst can push by piston } diff --git a/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java b/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java -index e6a4a5898ffdcb2aa2bc01371a6d7dbc06d610ce..22eae4a483b437c75082d889d4ea2904bf2093fc 100644 +index 3ab8b99837b1d1faea722c598b0228b2780be8b1..3ece300f5e5d470138b54b19b3ad082504831185 100644 --- a/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java +++ b/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java -@@ -1090,7 +1090,7 @@ public abstract class BlockBehaviour implements FeatureElement { +@@ -1157,7 +1157,7 @@ public abstract class BlockBehaviour implements FeatureElement { } public PushReaction getPistonPushReaction() { diff --git a/patches/server/0015-Spectator-dont-get-Advancement.patch b/patches/server/0015-Spectator-dont-get-Advancement.patch index 969242a5..7428bc5e 100644 --- a/patches/server/0015-Spectator-dont-get-Advancement.patch +++ b/patches/server/0015-Spectator-dont-get-Advancement.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Spectator dont get Advancement diff --git a/src/main/java/net/minecraft/server/PlayerAdvancements.java b/src/main/java/net/minecraft/server/PlayerAdvancements.java -index 870a9c94885c983cd7a557b76cb4dbace6564b8a..fbd602b5219c0eeefea36dbaca7aae10d483a152 100644 +index 2694f899241ad8ce06d3bcba78550af5626561ce..f941e7add46e690e21d39111bed520df9156f154 100644 --- a/src/main/java/net/minecraft/server/PlayerAdvancements.java +++ b/src/main/java/net/minecraft/server/PlayerAdvancements.java -@@ -46,6 +46,7 @@ import net.minecraft.server.level.ServerPlayer; +@@ -45,6 +45,7 @@ import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.players.PlayerList; import net.minecraft.util.datafix.DataFixTypes; import net.minecraft.world.level.GameRules; @@ -16,7 +16,7 @@ index 870a9c94885c983cd7a557b76cb4dbace6564b8a..fbd602b5219c0eeefea36dbaca7aae10 import org.slf4j.Logger; public class PlayerAdvancements { -@@ -227,6 +228,11 @@ public class PlayerAdvancements { +@@ -226,6 +227,11 @@ public class PlayerAdvancements { return false; } // Leaves end - bot can't get advancement diff --git a/patches/server/0016-Stick-can-change-ArmorStand-arm-status.patch b/patches/server/0016-Stick-can-change-ArmorStand-arm-status.patch index dc976907..5148efea 100644 --- a/patches/server/0016-Stick-can-change-ArmorStand-arm-status.patch +++ b/patches/server/0016-Stick-can-change-ArmorStand-arm-status.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Stick can change ArmorStand arm status diff --git a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java -index 1c7702a5c888846f93f8f80d3b854a26c11499be..6609f4309c2d6fac14b56dd75963d868a464c44c 100644 +index 1e86e86b0a100a5d14aee10b60e70c32d2733660..18e9ee9e0c986b1174ff9529b198a839df12825f 100644 --- a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java +++ b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java @@ -386,6 +386,12 @@ public class ArmorStand extends LivingEntity { diff --git a/patches/server/0017-Fix-tripwire-update.patch b/patches/server/0017-Fix-tripwire-update.patch index 874d46e1..22218315 100644 --- a/patches/server/0017-Fix-tripwire-update.patch +++ b/patches/server/0017-Fix-tripwire-update.patch @@ -5,15 +5,14 @@ Subject: [PATCH] Fix tripwire update diff --git a/src/main/java/net/minecraft/world/level/block/TripWireHookBlock.java b/src/main/java/net/minecraft/world/level/block/TripWireHookBlock.java -index 004dce26ff073f1de52a84cd425c4f60fdab5e50..22d42186973e8f0bf664c5fae261c40af2836173 100644 +index a3cef4ac925d09ad8789a59b46df134cf25c282a..319ecf3d72f08630f905389df370e29d3c1a03fb 100644 --- a/src/main/java/net/minecraft/world/level/block/TripWireHookBlock.java +++ b/src/main/java/net/minecraft/world/level/block/TripWireHookBlock.java -@@ -147,7 +147,7 @@ public class TripWireHookBlock extends Block { - boolean flag7 = (Boolean) iblockdata2.getValue(TripWireBlock.POWERED); +@@ -162,7 +162,6 @@ public class TripWireHookBlock extends Block { + boolean flag7 = (Boolean) iblockdata2.getValue(TripWireBlock.POWERED); - flag5 |= flag6 && flag7; -- if (k != i || !tripWireBeingRemoved || !flag6) // Paper - don't update the tripwire again if being removed and not disarmed -+ if (k != i || true || !flag6) // Paper - don't update the tripwire again if being removed and not disarmed // Leaves - no! always update it - aiblockdata[k] = iblockdata2; - if (k == i) { - world.scheduleTick(pos, (Block) this, 10); + flag5 |= flag6 && flag7; +- if (k != i || !tripWireBeingRemoved || !flag6) // Paper - don't update the tripwire again if being removed and not disarmed + aiblockdata[k] = iblockdata2; + if (k == i) { + world.scheduleTick(pos, block, 10); diff --git a/patches/server/0018-No-chat-sign.patch b/patches/server/0018-No-chat-sign.patch index 1d204b9f..60633021 100644 --- a/patches/server/0018-No-chat-sign.patch +++ b/patches/server/0018-No-chat-sign.patch @@ -41,23 +41,15 @@ index 72a8aa676836fcb3b4578689d16af65e18f55bbe..47a06936a4727c6209a7ad0fb8fb1099 public MessageSignature get(String argumentName) { for(ArgumentSignatures.Entry entry : this.entries) { diff --git a/src/main/java/net/minecraft/network/FriendlyByteBuf.java b/src/main/java/net/minecraft/network/FriendlyByteBuf.java -index 2e395962b555bef0ce1a98e1d768e7738f011535..62558d52fc55e8a7430c2a30783223d11dc0792c 100644 +index ff794499df6a2b65db2ca5956d2b98317592057f..5f3fb560a64fdcf7d6be449316c8defbb8d2bb8d 100644 --- a/src/main/java/net/minecraft/network/FriendlyByteBuf.java +++ b/src/main/java/net/minecraft/network/FriendlyByteBuf.java -@@ -65,6 +65,7 @@ import net.minecraft.nbt.NbtIo; - import net.minecraft.nbt.Tag; - import net.minecraft.network.chat.Component; - import net.minecraft.network.chat.MutableComponent; -+import net.minecraft.network.protocol.status.ServerStatus; - import net.minecraft.resources.ResourceKey; - import net.minecraft.resources.ResourceLocation; - import net.minecraft.util.Crypt; -@@ -137,6 +138,16 @@ public class FriendlyByteBuf extends ByteBuf { +@@ -138,6 +138,16 @@ public class FriendlyByteBuf extends ByteBuf { public void writeJsonWithCodec(Codec codec, T value) { DataResult dataresult = codec.encodeStart(JsonOps.INSTANCE, value); + // Leaves start - no chat sign -+ if (codec == ServerStatus.CODEC) { ++ if (codec == net.minecraft.network.protocol.status.ServerStatus.CODEC) { + JsonElement element = Util.getOrThrow(dataresult, string -> new EncoderException("Failed to encode: " + string + " " + value)); + element.getAsJsonObject().addProperty("preventsChatReports", top.leavesmc.leaves.LeavesConfig.noChatSign); + @@ -110,20 +102,20 @@ index 9d6db4a378036559efab91c8b7dcf2a6b0c2cce6..2c349dc502ce275a8215766933f4855f } } diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java -index 76592ce972f8fa508ee22a7b572759e55082e6ee..9576e2ffffa7eea64ab631aed43225719f3a7483 100644 +index fd89dfb3f2ceab015b74d7e3a061973e590cedd5..4b13af14fcbe1925f9d3104d95ebbfbc596cfb3c 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java -@@ -642,7 +642,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface +@@ -643,7 +643,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface // Paper start - fix secure profile with proxy online mode return dedicatedserverproperties.enforceSecureProfile && io.papermc.paper.configuration.GlobalConfiguration.get().proxies.isProxyOnlineMode() -- && this.services.profileKeySignatureValidator() != null; -+ && this.services.profileKeySignatureValidator() != null && !top.leavesmc.leaves.LeavesConfig.noChatSign; // Leaves - No Secure profile; +- && this.services.canValidateProfileKeys(); ++ && this.services.canValidateProfileKeys() && !top.leavesmc.leaves.LeavesConfig.noChatSign; // Paper end } diff --git a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java -index 0374cfb97e08496451d2f1d570c5fbc005f0215d..8812c99c0d89d379eac1ea0af28bd9c78f2cf537 100644 +index cfecb021de2f32fbe7d49332c5df763cd7cf0529..8cf3cce4a1824919d6687e555f4f5136120dbbcf 100644 --- a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java @@ -226,10 +226,27 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack @@ -155,10 +147,10 @@ index 0374cfb97e08496451d2f1d570c5fbc005f0215d..8812c99c0d89d379eac1ea0af28bd9c7 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 dea28bf8e1c0f67f13cc51d9e2cc6da69ad7fcb1..eebe80d8374b42d03b4658a0a04deafb96b06ace 100644 +index 81c09a9686731953787b56c3c8a20543418941a4..59270faed37229de11291e8259f292ad43e790c5 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -1480,7 +1480,7 @@ public abstract class PlayerList { +@@ -1483,7 +1483,7 @@ public abstract class PlayerList { } public boolean verifyChatTrusted(PlayerChatMessage message) { // Paper - private -> public diff --git a/patches/server/0022-Fix-Paper-6045-block-goal-shouldn-t-load-chunks.patch b/patches/server/0022-Fix-Paper-6045-block-goal-shouldn-t-load-chunks.patch index 33922a42..ac4d8672 100644 --- a/patches/server/0022-Fix-Paper-6045-block-goal-shouldn-t-load-chunks.patch +++ b/patches/server/0022-Fix-Paper-6045-block-goal-shouldn-t-load-chunks.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Fix Paper#6045, block goal shouldn't load chunks This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish) diff --git a/src/main/java/net/minecraft/world/entity/ai/goal/MoveToBlockGoal.java b/src/main/java/net/minecraft/world/entity/ai/goal/MoveToBlockGoal.java -index 34f319ad09276c6f68dde449c79351de0d7d86f5..bbca34e70b1ee88ac77b0d8e319eedbffae3effb 100644 +index 4bbc36404b396500df0d9db380cf223b5897662e..2dda876b01b34f26337f53f2b3b6a2a1110bd96a 100644 --- a/src/main/java/net/minecraft/world/entity/ai/goal/MoveToBlockGoal.java +++ b/src/main/java/net/minecraft/world/entity/ai/goal/MoveToBlockGoal.java @@ -119,6 +119,7 @@ public abstract class MoveToBlockGoal extends Goal { diff --git a/patches/server/0023-Optimize-entity-coordinate-key.patch b/patches/server/0023-Optimize-entity-coordinate-key.patch index 49278d0c..7611624e 100644 --- a/patches/server/0023-Optimize-entity-coordinate-key.patch +++ b/patches/server/0023-Optimize-entity-coordinate-key.patch @@ -25,10 +25,10 @@ index 8240bb085b619f257f8c0a25775e0b15068e440f..5af6b3ce20afa75e1510fb70c2382045 public static long getCoordinateKey(final ChunkPos pair) { diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 167ac5d96c8abd67b8dc987560e792837348cae4..ff506cd04cda5b01c0c62bdec3de10adfca9f3c8 100644 +index 741b090e46a34e9c7711ddebf06c12316b5ad7de..94de127e75688b6e5fa5660eb853140438258083 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -306,7 +306,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -307,7 +307,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S public double yo; public double zo; private Vec3 position; diff --git a/patches/server/0024-Optimize-suffocation.patch b/patches/server/0024-Optimize-suffocation.patch index a85fe583..720ad1ca 100644 --- a/patches/server/0024-Optimize-suffocation.patch +++ b/patches/server/0024-Optimize-suffocation.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Optimize suffocation This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish) diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 086558a8476ba40fa4ce1a6d4ee48d67afbdbd63..9ffd7203b2f5f7b0a240f84056ab5af7aa0860b4 100644 +index 09cbe3db4b412176377a101e080523bafe39b916..4819a159f0b0dd6a2c58be59dc22f7e77daee57e 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -413,7 +413,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -412,7 +412,7 @@ public abstract class LivingEntity extends Entity implements Attackable { boolean flag = this instanceof net.minecraft.world.entity.player.Player; if (!this.level().isClientSide) { @@ -18,7 +18,7 @@ index 086558a8476ba40fa4ce1a6d4ee48d67afbdbd63..9ffd7203b2f5f7b0a240f84056ab5af7 this.hurt(this.damageSources().inWall(), 1.0F); } else if (flag && !this.level().getWorldBorder().isWithinBounds(this.getBoundingBox())) { double d0 = this.level().getWorldBorder().getDistanceToBorder(this) + this.level().getWorldBorder().getDamageSafeZone(); -@@ -1408,6 +1408,15 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1407,6 +1407,15 @@ public abstract class LivingEntity extends Entity implements Attackable { return this.getHealth() <= 0.0F; } diff --git a/patches/server/0025-Only-check-for-spooky-season-once-an-hour.patch b/patches/server/0025-Only-check-for-spooky-season-once-an-hour.patch index 774d2bd9..916fca4c 100644 --- a/patches/server/0025-Only-check-for-spooky-season-once-an-hour.patch +++ b/patches/server/0025-Only-check-for-spooky-season-once-an-hour.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Only check for spooky season once an hour This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish) diff --git a/src/main/java/net/minecraft/world/entity/ambient/Bat.java b/src/main/java/net/minecraft/world/entity/ambient/Bat.java -index 5beaa849a250ea005733250ad3edfa8382224667..f124d17106edc490e90376bbbaba6912f0579d16 100644 +index 6b614818b14ecfc8fc82b523eeb7e21fdf9bf1ba..0cb018795bc3f76d6a5afa4da591322d6bb5475f 100644 --- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java +++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java -@@ -237,13 +237,30 @@ public class Bat extends AmbientCreature { +@@ -241,13 +241,30 @@ public class Bat extends AmbientCreature { } } diff --git a/patches/server/0026-Move-ThreadUnsafeRandom-Initialization.patch b/patches/server/0026-Move-ThreadUnsafeRandom-Initialization.patch index b06d4242..9eb21308 100644 --- a/patches/server/0026-Move-ThreadUnsafeRandom-Initialization.patch +++ b/patches/server/0026-Move-ThreadUnsafeRandom-Initialization.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Move ThreadUnsafeRandom Initialization This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish) diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index bb75a3d6b57c6523a95b11436ebc7577218264a0..244cf1e0b1f767a41f0a863e77b58c66ee3ff71f 100644 +index 5a864a2ac7549a01663b221624bee919947d2696..eacc88d49f1c4158eb60a7b4425134fa827a6381 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -945,7 +945,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -966,7 +966,7 @@ public class ServerLevel extends Level implements WorldGenLevel { } // Paper start - optimise random block ticking private final BlockPos.MutableBlockPos chunkTickMutablePosition = new BlockPos.MutableBlockPos(); @@ -19,10 +19,10 @@ index bb75a3d6b57c6523a95b11436ebc7577218264a0..244cf1e0b1f767a41f0a863e77b58c66 public void tickChunk(LevelChunk chunk, int randomTickSpeed) { diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 219f4c7368ce6b805f3f4cffd8e3f65b1590f7ed..b84bb2d3fa53ca66df2e0978596064f1df8e09dd 100644 +index 1c4a75b556be384807cbc26e7ee8b580412eebf3..bd78938cbba3932ad740e3bd3c1507d2b952dafa 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -200,6 +200,8 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -203,6 +203,8 @@ public abstract class Level implements LevelAccessor, AutoCloseable { public abstract ResourceKey getTypeKey(); @@ -31,7 +31,7 @@ index 219f4c7368ce6b805f3f4cffd8e3f65b1590f7ed..b84bb2d3fa53ca66df2e0978596064f1 protected Level(WritableLevelData worlddatamutable, ResourceKey resourcekey, RegistryAccess iregistrycustom, Holder holder, Supplier supplier, boolean flag, boolean flag1, long i, int j, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.function.Function paperWorldConfigCreator, java.util.concurrent.Executor executor) { // Paper - Async-Anti-Xray - Pass executor this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName()); // Spigot this.paperConfig = paperWorldConfigCreator.apply(this.spigotConfig); // Paper -@@ -293,6 +295,12 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -296,6 +298,12 @@ public abstract class Level implements LevelAccessor, AutoCloseable { // Paper end - optimise collisions } diff --git a/patches/server/0027-Optimize-random-calls-in-chunk-ticking.patch b/patches/server/0027-Optimize-random-calls-in-chunk-ticking.patch index 33a93959..1fdbaa57 100644 --- a/patches/server/0027-Optimize-random-calls-in-chunk-ticking.patch +++ b/patches/server/0027-Optimize-random-calls-in-chunk-ticking.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Optimize random calls in chunk ticking This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish) diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -index a8df45f925546dc584e32a4038eebc42e9caf07e..19aec4b735a25592ae173dcb63110d6dce0381e7 100644 +index 1f07d7cc8e15d54bc7841454aa47c8e51d77ea86..8a3e55b3a79a174a2a55f38d39ed4b8ba29b8763 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -@@ -509,6 +509,11 @@ public class ServerChunkCache extends ChunkSource { +@@ -503,6 +503,11 @@ public class ServerChunkCache extends ChunkSource { ProfilerFiller gameprofilerfiller = this.level.getProfiler(); gameprofilerfiller.push("pollingChunks"); @@ -18,14 +18,14 @@ index a8df45f925546dc584e32a4038eebc42e9caf07e..19aec4b735a25592ae173dcb63110d6d + this.level.resetIceAndSnowTick(); + } + // Leaves end - reset ice & snow tick random - int k = this.level.getGameRules().getInt(GameRules.RULE_RANDOMTICKING); - boolean flag1 = this.level.ticksPerSpawnCategory.getLong(org.bukkit.entity.SpawnCategory.ANIMAL) != 0L && worlddata.getGameTime() % this.level.ticksPerSpawnCategory.getLong(org.bukkit.entity.SpawnCategory.ANIMAL) == 0L; // CraftBukkit + gameprofilerfiller.push("filteringLoadedChunks"); + // Paper start - optimise chunk tick iteration diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 9cd0a6e5080a73264ec5f379e3bce7679647bba9..dd7d27ab88b35ac4203bf48bc987dfe3205fa529 100644 +index eacc88d49f1c4158eb60a7b4425134fa827a6381..62745cdb8cb2d153621dc5e4c8ebd2cbd5fc7c08 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -948,6 +948,13 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -969,6 +969,13 @@ public class ServerLevel extends Level implements WorldGenLevel { // private final io.papermc.paper.util.math.ThreadUnsafeRandom randomTickRandom = new io.papermc.paper.util.math.ThreadUnsafeRandom(this.random.nextLong()); // Leaves - moved to super // Paper end @@ -39,7 +39,7 @@ index 9cd0a6e5080a73264ec5f379e3bce7679647bba9..dd7d27ab88b35ac4203bf48bc987dfe3 public void tickChunk(LevelChunk chunk, int randomTickSpeed) { ChunkPos chunkcoordintpair = chunk.getPos(); boolean flag = this.isRaining(); -@@ -958,7 +965,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -979,7 +986,7 @@ public class ServerLevel extends Level implements WorldGenLevel { gameprofilerfiller.push("thunder"); final BlockPos.MutableBlockPos blockposition = this.chunkTickMutablePosition; // Paper - use mutable to reduce allocation rate, final to force compile fail on change diff --git a/patches/server/0030-Config-to-disable-method-profiler.patch b/patches/server/0030-Config-to-disable-method-profiler.patch index 0743cb7e..39b43a2b 100644 --- a/patches/server/0030-Config-to-disable-method-profiler.patch +++ b/patches/server/0030-Config-to-disable-method-profiler.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Config to disable method profiler This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish) diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 8e9f72fe364bc4ad51d7a235531af09df5cdcfa9..3f4b4d905ff440eaf4a66b10ad85933c0b07dc58 100644 +index 37af0a508cfe56f23be806d2d4100d890ad5e7ec..89a50e07bc79cb0d5353f5a06fa037f3942c5940 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -2251,6 +2251,11 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop tag, double speed) { @@ -35,7 +35,7 @@ index 0231259e691d342ad8cb1306e9d35b4296a6148f..c201b92d04a48b8330182db6b0d9a0fd double d1 = 0.0D; boolean flag = this.isPushedByFluid(); boolean flag1 = false; -@@ -4359,38 +4361,123 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -4401,38 +4403,123 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S int k1 = 0; BlockPos.MutableBlockPos blockposition_mutableblockposition = new BlockPos.MutableBlockPos(); diff --git a/patches/server/0040-Reduce-chunk-loading-lookups.patch b/patches/server/0040-Reduce-chunk-loading-lookups.patch index 50bc886e..b09cad7a 100644 --- a/patches/server/0040-Reduce-chunk-loading-lookups.patch +++ b/patches/server/0040-Reduce-chunk-loading-lookups.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Reduce chunk loading & lookups This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish) diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -index b0a97679157a18a3c623ce3b2ae315789772c254..a8867058fb09fd4c6b965b91d5f406b2a1b7035a 100644 +index bd5996eef2d946e9d7765b6b315bc5951158810e..a6da5165ac20e01a9162b216cddf7b0dc040b5a9 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java @@ -333,11 +333,28 @@ public class EnderMan extends Monster implements NeutralMob { diff --git a/patches/server/0041-PCA-sync-protocol.patch b/patches/server/0041-PCA-sync-protocol.patch index 0e6d975c..909905cb 100644 --- a/patches/server/0041-PCA-sync-protocol.patch +++ b/patches/server/0041-PCA-sync-protocol.patch @@ -6,7 +6,7 @@ Subject: [PATCH] PCA sync protocol This patch is Powered by plusls-carpet-addition(https://github.com/plusls/plusls-carpet-addition) diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java -index 09e9c0e55c789f03a4b64136f28154bd114db6f5..39a9737c8e50eb729fff9956ee1b7fa34a17d589 100644 +index 63bbb5723f587788a65cc1cdac4cea94d96f254b..3e3b5fae4a3eca360a1f091aa165e5d71c344c9b 100644 --- a/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java +++ b/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java @@ -373,6 +373,11 @@ public abstract class AbstractHorse extends Animal implements ContainerListener, @@ -22,7 +22,7 @@ index 09e9c0e55c789f03a4b64136f28154bd114db6f5..39a9737c8e50eb729fff9956ee1b7fa3 this.updateContainerEquipment(); diff --git a/src/main/java/net/minecraft/world/entity/npc/AbstractVillager.java b/src/main/java/net/minecraft/world/entity/npc/AbstractVillager.java -index 5119d070dbb04f5a4f9c2def526e33e15ca8573f..e585eca535ceb2ed28334bc3c6949fcb4881a364 100644 +index 5a591c439c5cef6b7e7e6f836ab813cb4f29b08c..17cc25b6fbc85c9e0023be7e9d857b2d76f6e58c 100644 --- a/src/main/java/net/minecraft/world/entity/npc/AbstractVillager.java +++ b/src/main/java/net/minecraft/world/entity/npc/AbstractVillager.java @@ -64,6 +64,15 @@ public abstract class AbstractVillager extends AgeableMob implements InventoryCa @@ -42,7 +42,7 @@ index 5119d070dbb04f5a4f9c2def526e33e15ca8573f..e585eca535ceb2ed28334bc3c6949fcb @Override diff --git a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java -index 272095d7a09ab41227d741172735f66fd2798ce1..f6acbef804a50c58f4298ebeae4fdbebaf129e1c 100644 +index 6d23c39e4eadf23616080d6d08672e13b5d3c37d..f86384ba4e5b5ffd26dd64e41a9af8a3f3a8da49 100644 --- a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java +++ b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java @@ -129,7 +129,13 @@ public abstract class AbstractMinecartContainer extends AbstractMinecart impleme @@ -103,7 +103,7 @@ index 416aa989ebb18a8741cc9d605a1180ab830f6643..213bc3c11ff4ed9bc761e8153aa669d1 protected Component getDefaultName() { return Component.translatable("container.barrel"); diff --git a/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java -index 41c9f074203915c31c1ae7a160ce509c13383f84..4c9e84dcd154a4306659ef41ab40127ea8452835 100644 +index dfd364ac4b7551a13c4c6c100b5e62c0dfb10595..5b6d31c1045ed777376af775378bec5b3ef92fc7 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java @@ -4,6 +4,7 @@ import com.google.common.collect.Lists; @@ -248,7 +248,7 @@ index 881379681c39230a00b3a1f11cd87498984396c7..e01eb2025458cf311348c58a15308540 protected Component getDefaultName() { return Component.translatable("container.dispenser"); diff --git a/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java -index 1d9b23c6e458caddc2c738164e6c079cd85d3ce9..88ae3b334e35ac9d0ca4238b5da3c3af1f421bd4 100644 +index d4dcf7fe26474ae07374e7761d823bc5c8b54f97..8e1201d91bac88c043de5dfdc003d20b2647af9a 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java @@ -129,6 +129,16 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen diff --git a/patches/server/0042-BBOR-Protocol.patch b/patches/server/0042-BBOR-Protocol.patch index 41b2d03e..3ecc33b1 100644 --- a/patches/server/0042-BBOR-Protocol.patch +++ b/patches/server/0042-BBOR-Protocol.patch @@ -5,10 +5,10 @@ Subject: [PATCH] BBOR Protocol diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index eebe80d8374b42d03b4658a0a04deafb96b06ace..fe9110a92b690c2d3d8da171216129da20462984 100644 +index 59270faed37229de11291e8259f292ad43e790c5..f1fc9282e6b1072e5c866828e0a05332490e9360 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -1614,6 +1614,7 @@ public abstract class PlayerList { +@@ -1617,6 +1617,7 @@ public abstract class PlayerList { entityplayer.getRecipeBook().sendInitialRecipeBook(entityplayer); } diff --git a/patches/server/0043-InstantBlockUpdater-Reintroduced.patch b/patches/server/0043-InstantBlockUpdater-Reintroduced.patch index dfc506f4..3898ac6d 100644 --- a/patches/server/0043-InstantBlockUpdater-Reintroduced.patch +++ b/patches/server/0043-InstantBlockUpdater-Reintroduced.patch @@ -6,10 +6,10 @@ Subject: [PATCH] InstantBlockUpdater Reintroduced This patch is Powered by Carpet-TIS-Addition(https://github.com/plusls/Carpet-TIS-Addition) diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 35063fa42e9ec1d963d94b2c714b82ac30d1f67b..cb62c2b8b6cdd628037b67a58b3fbf7e5f1d0284 100644 +index 5dea0118e5dd49cdefd22e4386c6a3fc189cd84b..614c37b11f7820bedc576fce74829c1950ed7756 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -67,6 +67,7 @@ import net.minecraft.world.level.lighting.LevelLightEngine; +@@ -70,6 +70,7 @@ import net.minecraft.world.level.lighting.LevelLightEngine; import net.minecraft.world.level.material.FluidState; import net.minecraft.world.level.material.Fluids; import net.minecraft.world.level.redstone.CollectingNeighborUpdater; @@ -17,7 +17,7 @@ index 35063fa42e9ec1d963d94b2c714b82ac30d1f67b..cb62c2b8b6cdd628037b67a58b3fbf7e import net.minecraft.world.level.redstone.NeighborUpdater; import net.minecraft.world.level.saveddata.maps.MapItemSavedData; import net.minecraft.world.level.storage.LevelData; -@@ -246,7 +247,13 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -249,7 +250,13 @@ public abstract class Level implements LevelAccessor, AutoCloseable { this.thread = Thread.currentThread(); this.biomeManager = new BiomeManager(this, i); this.isDebug = flag1; diff --git a/patches/server/0045-Jade-Protocol.patch b/patches/server/0045-Jade-Protocol.patch index 09d57126..53b980aa 100644 --- a/patches/server/0045-Jade-Protocol.patch +++ b/patches/server/0045-Jade-Protocol.patch @@ -20,7 +20,7 @@ index 4aeab90e778629c355189dfe79c39c4b21f5f5ac..fe8c9b7e7956837829b4fe3eb449b2c0 diff --git a/src/main/java/top/leavesmc/leaves/protocol/JadeProtocol.java b/src/main/java/top/leavesmc/leaves/protocol/JadeProtocol.java new file mode 100644 -index 0000000000000000000000000000000000000000..b0af99ba7bc27c27890b78cb6c370fa0c86e16f8 +index 0000000000000000000000000000000000000000..03c4ed0135a8e570723726a402556e37d11308c4 --- /dev/null +++ b/src/main/java/top/leavesmc/leaves/protocol/JadeProtocol.java @@ -0,0 +1,622 @@ @@ -235,7 +235,7 @@ index 0000000000000000000000000000000000000000..b0af99ba7bc27c27890b78cb6c370fa0 + })); + tileDataProviders.register(JukeboxBlockEntity.class, ((data, player, world, object, showDetails) -> { + if (object instanceof JukeboxBlockEntity jukebox) { -+ ItemStack stack = jukebox.getFirstItem(); ++ ItemStack stack = jukebox.getTheItem(); + if (!stack.isEmpty()) { + data.put("Record", stack.save(new CompoundTag())); + } diff --git a/patches/server/0046-Alternative-block-placement-Protocol.patch b/patches/server/0046-Alternative-block-placement-Protocol.patch index cd01d56c..4e7d6322 100644 --- a/patches/server/0046-Alternative-block-placement-Protocol.patch +++ b/patches/server/0046-Alternative-block-placement-Protocol.patch @@ -44,10 +44,10 @@ index 88072259a9de205db428351c5c9f6114e199e402..e641360a3e82cb03393b856fa545d6b0 if (iblockdata2 != null && this.canPlace(world, iblockdata2, blockposition)) { iblockdata1 = iblockdata2; diff --git a/src/main/java/net/minecraft/world/level/block/Block.java b/src/main/java/net/minecraft/world/level/block/Block.java -index 065fbac30d22ec45cd3f5b66599c8500ae5c278d..9a970c6aff2f5f2edbad600156493a7c1f28e620 100644 +index 3d8b39cfc50de89fda4d221ea27743508691857c..d38e7894239db17b6a00a6e6316643fbc990d496 100644 --- a/src/main/java/net/minecraft/world/level/block/Block.java +++ b/src/main/java/net/minecraft/world/level/block/Block.java -@@ -404,6 +404,33 @@ public class Block extends BlockBehaviour implements ItemLike { +@@ -411,6 +411,33 @@ public class Block extends BlockBehaviour implements ItemLike { public void stepOn(Level world, BlockPos pos, BlockState state, Entity entity) {} diff --git a/patches/server/0047-Player-operation-limiter.patch b/patches/server/0047-Player-operation-limiter.patch index fb5e0758..dbbc33b0 100644 --- a/patches/server/0047-Player-operation-limiter.patch +++ b/patches/server/0047-Player-operation-limiter.patch @@ -6,11 +6,11 @@ Subject: [PATCH] Player operation limiter This patch is Powered by plusls-carpet-addition(https://github.com/plusls/plusls-carpet-addition) diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index cbf1acaae2707c42f0574ff1766957c32da4d90a..3aaf711182ad26e33c26b29ef1b51b9050233b3d 100644 +index 5ae4f2a4138611ef4428719f27b991612cb962e8..7ba1067382a53740e82480db9ce2ba48f28beb92 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -274,6 +274,10 @@ public class ServerPlayer extends Player { - public PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper +@@ -281,6 +281,10 @@ public class ServerPlayer extends Player { + public com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper public @Nullable String clientBrandName = null; // Paper - Brand name public org.bukkit.event.player.PlayerQuitEvent.QuitReason quitReason = null; // Paper - there are a lot of changes to do if we change all methods leading to the event + // Leaves start - player operation limiter @@ -20,7 +20,7 @@ index cbf1acaae2707c42f0574ff1766957c32da4d90a..3aaf711182ad26e33c26b29ef1b51b90 // Paper start - replace player chunk loader private final java.util.concurrent.atomic.AtomicReference viewDistances = new java.util.concurrent.atomic.AtomicReference<>(new io.papermc.paper.chunk.system.RegionizedPlayerChunkLoader.ViewDistances(-1, -1, -1)); -@@ -715,6 +719,7 @@ public class ServerPlayer extends Player { +@@ -722,6 +726,7 @@ public class ServerPlayer extends Player { this.joining = false; } // CraftBukkit end @@ -28,7 +28,7 @@ index cbf1acaae2707c42f0574ff1766957c32da4d90a..3aaf711182ad26e33c26b29ef1b51b90 this.gameMode.tick(); this.wardenSpawnTracker.tick(); --this.spawnInvulnerableTime; -@@ -2664,5 +2669,32 @@ public class ServerPlayer extends Player { +@@ -2765,5 +2770,32 @@ public class ServerPlayer extends Player { public CraftPlayer getBukkitEntity() { return (CraftPlayer) super.getBukkitEntity(); } @@ -62,7 +62,7 @@ index cbf1acaae2707c42f0574ff1766957c32da4d90a..3aaf711182ad26e33c26b29ef1b51b90 // CraftBukkit end } diff --git a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java -index 3706e94108f68a16fea63e734f3e3b6871dcb0b8..58586b97d3bdb6f5e40fc9c487ba82d57c17a20c 100644 +index 58f972832c39a27a8ccd606f9144e1c54adbf6f3..b2aae4463f2d0fc6ae03bbb9a63c5b8f08d67d43 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java @@ -44,6 +44,7 @@ import org.bukkit.event.Event; diff --git a/patches/server/0049-Stackable-ShulkerBoxes.patch b/patches/server/0049-Stackable-ShulkerBoxes.patch index 60558645..2ec364b7 100644 --- a/patches/server/0049-Stackable-ShulkerBoxes.patch +++ b/patches/server/0049-Stackable-ShulkerBoxes.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Stackable ShulkerBoxes This patch is Powered by fabric-carpet(https://github.com/gnembon/fabric-carpet) and plusls-carpet-addition(https://github.com/plusls/plusls-carpet-addition) diff --git a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java -index eb0351aa12eebcefab1d1d14641fc3c60cbbcab8..e2f3044ce964f0da9df83b8a302316d2438384e7 100644 +index a39db702063887cf530f272deaf4f334047cc7d4..1b6cd8276c6bda2832f6447a2cceb75f11e6811a 100644 --- a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java +++ b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java @@ -14,10 +14,12 @@ import net.minecraft.world.entity.Entity; @@ -30,7 +30,7 @@ index eb0351aa12eebcefab1d1d14641fc3c60cbbcab8..e2f3044ce964f0da9df83b8a302316d2 import org.bukkit.event.entity.EntityPickupItemEvent; import org.bukkit.event.player.PlayerPickupItemEvent; // CraftBukkit end -@@ -71,6 +74,13 @@ public class ItemEntity extends Entity implements TraceableEntity { +@@ -73,6 +76,13 @@ public class ItemEntity extends Entity implements TraceableEntity { this.setDeltaMovement(this.random.nextDouble() * 0.2D - 0.1D, 0.2D, this.random.nextDouble() * 0.2D - 0.1D); this.setItem(stack); // Paper end @@ -44,7 +44,7 @@ index eb0351aa12eebcefab1d1d14641fc3c60cbbcab8..e2f3044ce964f0da9df83b8a302316d2 } public ItemEntity(Level world, double x, double y, double z, ItemStack stack, double velocityX, double velocityY, double velocityZ) { -@@ -289,10 +299,49 @@ public class ItemEntity extends Entity implements TraceableEntity { +@@ -307,10 +317,49 @@ public class ItemEntity extends Entity implements TraceableEntity { private boolean isMergable() { ItemStack itemstack = this.getItem(); @@ -132,21 +132,10 @@ index 41cb0d1efd81b7754b68c89af289c1260779c08b..75a26684dc892f96e9209ef77709d1b4 if (this.add(i, stack.split(j)) && notifiesClient && this.player instanceof ServerPlayer) { ((ServerPlayer) this.player).connection.send(new ClientboundContainerSetSlotPacket(-2, 0, i, this.getItem(i))); diff --git a/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java b/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java -index bc734baa18eb12b499bca2c0fc6b8d8960b3ba26..0c87b9a7ef04fbe500a3c903099c2349dd449438 100644 +index 1a1736fe28014aca767aa9efdcba378be3adc8ea..62586df674570a7762e8a2118a16918643c7dd59 100644 --- a/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java +++ b/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java -@@ -30,8 +30,10 @@ import net.minecraft.world.entity.SlotAccess; - import net.minecraft.world.entity.player.Inventory; - import net.minecraft.world.entity.player.Player; - import net.minecraft.world.flag.FeatureFlagSet; -+import net.minecraft.world.item.BlockItem; - import net.minecraft.world.item.ItemStack; - import net.minecraft.world.level.block.Block; -+import net.minecraft.world.level.block.ShulkerBoxBlock; - import net.minecraft.world.level.block.entity.BlockEntity; - import org.slf4j.Logger; - -@@ -456,7 +458,7 @@ public abstract class AbstractContainerMenu { +@@ -456,7 +456,7 @@ public abstract class AbstractContainerMenu { if (slot1 != null && AbstractContainerMenu.canItemQuickReplace(slot1, itemstack2, true) && slot1.mayPlace(itemstack2) && (this.quickcraftType == 2 || itemstack2.getCount() >= this.quickcraftSlots.size()) && this.canDragTo(slot1)) { int j1 = slot1.hasItem() ? slot1.getItem().getCount() : 0; @@ -155,7 +144,7 @@ index bc734baa18eb12b499bca2c0fc6b8d8960b3ba26..0c87b9a7ef04fbe500a3c903099c2349 int l1 = Math.min(AbstractContainerMenu.getQuickCraftPlaceCount(this.quickcraftSlots, this.quickcraftType, itemstack1) + j1, k1); l -= l1 - j1; -@@ -575,7 +577,7 @@ public abstract class AbstractContainerMenu { +@@ -575,7 +575,7 @@ public abstract class AbstractContainerMenu { slot.setByPlayer(itemstack3); } } else if (ItemStack.isSameItemSameTags(itemstack, itemstack3)) { @@ -164,34 +153,32 @@ index bc734baa18eb12b499bca2c0fc6b8d8960b3ba26..0c87b9a7ef04fbe500a3c903099c2349 optional1.ifPresent((itemstack4) -> { itemstack3.grow(itemstack4.getCount()); -@@ -642,7 +644,7 @@ public abstract class AbstractContainerMenu { - slot2 = (Slot) this.slots.get(slotIndex); - if (slot2.hasItem()) { - itemstack1 = slot2.getItem(); -- this.setCarried(itemstack1.copyWithCount(itemstack1.getMaxStackSize())); -+ this.setCarried(itemstack1.copyWithCount(top.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(itemstack1))); // Leaves - stackable shulker boxes - } - } else if (actionType == ClickType.THROW && this.getCarried().isEmpty() && slotIndex >= 0) { - slot2 = (Slot) this.slots.get(slotIndex); -@@ -657,14 +659,14 @@ public abstract class AbstractContainerMenu { - j2 = button == 0 ? 1 : -1; +@@ -645,7 +645,7 @@ public abstract class AbstractContainerMenu { + slot2 = (Slot) this.slots.get(slotIndex); + if (slot2.hasItem()) { + itemstack1 = slot2.getItem(); +- this.setCarried(itemstack1.copyWithCount(itemstack1.getMaxStackSize())); ++ this.setCarried(itemstack1.copyWithCount(top.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(itemstack1))); // Leaves - stackable shulker boxes + } + } else if (actionType == ClickType.THROW && this.getCarried().isEmpty() && slotIndex >= 0) { + slot2 = (Slot) this.slots.get(slotIndex); +@@ -660,13 +660,13 @@ public abstract class AbstractContainerMenu { + j2 = button == 0 ? 1 : -1; - for (i2 = 0; i2 < 2; ++i2) { -- for (int k2 = l; k2 >= 0 && k2 < this.slots.size() && itemstack1.getCount() < itemstack1.getMaxStackSize(); k2 += j2) { -+ for (int k2 = l; k2 >= 0 && k2 < this.slots.size() && itemstack1.getCount() < top.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(itemstack1); k2 += j2) { // Leaves - stackable shulker boxes - Slot slot3 = (Slot) this.slots.get(k2); + for (i2 = 0; i2 < 2; ++i2) { +- for (int k2 = l; k2 >= 0 && k2 < this.slots.size() && itemstack1.getCount() < itemstack1.getMaxStackSize(); k2 += j2) { ++ for (int k2 = l; k2 >= 0 && k2 < this.slots.size() && itemstack1.getCount() < top.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(itemstack1); k2 += j2) { // Leaves - stackable shulker boxes + Slot slot3 = (Slot) this.slots.get(k2); - if (slot3.hasItem() && AbstractContainerMenu.canItemQuickReplace(slot3, itemstack1, true) && slot3.mayPickup(player) && this.canTakeItemForPickAll(itemstack1, slot3)) { - ItemStack itemstack4 = slot3.getItem(); + if (slot3.hasItem() && AbstractContainerMenu.canItemQuickReplace(slot3, itemstack1, true) && slot3.mayPickup(player) && this.canTakeItemForPickAll(itemstack1, slot3)) { + ItemStack itemstack5 = slot3.getItem(); -- if (i2 != 0 || itemstack4.getCount() != itemstack4.getMaxStackSize()) { -- ItemStack itemstack5 = slot3.safeTake(itemstack4.getCount(), itemstack1.getMaxStackSize() - itemstack1.getCount(), player); -+ if (i2 != 0 || itemstack4.getCount() != top.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(itemstack4)) { // Leaves - stackable shulker boxes -+ ItemStack itemstack5 = slot3.safeTake(itemstack4.getCount(), top.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(itemstack1) - itemstack1.getCount(), player); // Leaves - stackable shulker boxes +- if (i2 != 0 || itemstack5.getCount() != itemstack5.getMaxStackSize()) { ++ if (i2 != 0 || itemstack5.getCount() != top.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(itemstack5)) { + ItemStack itemstack6 = slot3.safeTake(itemstack5.getCount(), itemstack1.getMaxStackSize() - itemstack1.getCount(), player); - itemstack1.grow(itemstack5.getCount()); - } -@@ -801,7 +803,7 @@ public abstract class AbstractContainerMenu { + itemstack1.grow(itemstack6.getCount()); +@@ -805,7 +805,7 @@ public abstract class AbstractContainerMenu { Slot slot; ItemStack itemstack1; @@ -200,7 +187,7 @@ index bc734baa18eb12b499bca2c0fc6b8d8960b3ba26..0c87b9a7ef04fbe500a3c903099c2349 while (!stack.isEmpty()) { if (fromLast) { if (k < startIndex) { -@@ -821,16 +823,18 @@ public abstract class AbstractContainerMenu { +@@ -825,16 +825,18 @@ public abstract class AbstractContainerMenu { if (!itemstack1.isEmpty() && ItemStack.isSameItemSameTags(stack, itemstack1)) { int l = itemstack1.getCount() + stack.getCount(); @@ -224,7 +211,7 @@ index bc734baa18eb12b499bca2c0fc6b8d8960b3ba26..0c87b9a7ef04fbe500a3c903099c2349 slot.setChanged(); } // Paper diff --git a/src/main/java/net/minecraft/world/inventory/Slot.java b/src/main/java/net/minecraft/world/inventory/Slot.java -index a43b85b82fc83d0e5e3fd589bede0b279927a989..4e68e77180df7929d8993f049fc73c90f0158a2c 100644 +index e2fd415b69e0213688561e9a19aec2cdcd267211..bb99bdd45efdb52323429565a4e13c07f5ab6d44 100644 --- a/src/main/java/net/minecraft/world/inventory/Slot.java +++ b/src/main/java/net/minecraft/world/inventory/Slot.java @@ -77,7 +77,7 @@ public class Slot { @@ -237,21 +224,13 @@ index a43b85b82fc83d0e5e3fd589bede0b279927a989..4e68e77180df7929d8993f049fc73c90 @Nullable diff --git a/src/main/java/net/minecraft/world/level/block/AbstractCauldronBlock.java b/src/main/java/net/minecraft/world/level/block/AbstractCauldronBlock.java -index 47468086c1cae252aa99c55b0065f225357dee62..bca757ea05403fe46f5bf0dfa75561b8b124622d 100644 +index 5780d349f968ea3d05cf569b63531f8e76884827..d30af75de7d146b6bf49814b0eabae94e57682f5 100644 --- a/src/main/java/net/minecraft/world/level/block/AbstractCauldronBlock.java +++ b/src/main/java/net/minecraft/world/level/block/AbstractCauldronBlock.java -@@ -9,6 +9,7 @@ import net.minecraft.world.InteractionHand; - import net.minecraft.world.InteractionResult; - import net.minecraft.world.entity.Entity; - import net.minecraft.world.entity.player.Player; -+import net.minecraft.world.item.BlockItem; - import net.minecraft.world.item.Item; - import net.minecraft.world.item.ItemStack; - import net.minecraft.world.level.BlockGetter; -@@ -51,9 +52,27 @@ public abstract class AbstractCauldronBlock extends Block { +@@ -53,9 +53,27 @@ public abstract class AbstractCauldronBlock extends Block { public InteractionResult use(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) { ItemStack itemStack = player.getItemInHand(hand); - CauldronInteraction cauldronInteraction = this.interactions.get(itemStack.getItem()); + CauldronInteraction cauldronInteraction = this.interactions.map().get(itemStack.getItem()); - return cauldronInteraction.interact(state, world, pos, player, hand, itemStack); + return wrapInteractor(cauldronInteraction, state, world, pos, player, hand, itemStack); // Leaves - stackable shulker boxes } @@ -259,14 +238,14 @@ index 47468086c1cae252aa99c55b0065f225357dee62..bca757ea05403fe46f5bf0dfa75561b8 + // Leaves start - stackable shulker boxes + private InteractionResult wrapInteractor(CauldronInteraction cauldronBehavior, BlockState blockState, Level world, BlockPos blockPos, Player playerEntity, InteractionHand hand, ItemStack itemStack) { + int count = -1; -+ if (top.leavesmc.leaves.LeavesConfig.shulkerBoxStackSize > 1 && itemStack.getItem() instanceof BlockItem bi && ++ if (top.leavesmc.leaves.LeavesConfig.shulkerBoxStackSize > 1 && itemStack.getItem() instanceof net.minecraft.world.item.BlockItem bi && + bi.getBlock() instanceof ShulkerBoxBlock) { + count = itemStack.getCount(); + } + InteractionResult result = cauldronBehavior.interact(blockState, world, blockPos, playerEntity, hand, itemStack); + if (count > 0 && result.consumesAction()) { + ItemStack current = playerEntity.getItemInHand(hand); -+ if (current.getItem() instanceof BlockItem bi && bi.getBlock() instanceof ShulkerBoxBlock) { ++ if (current.getItem() instanceof net.minecraft.world.item.BlockItem bi && bi.getBlock() instanceof ShulkerBoxBlock) { + current.setCount(count); + } + } @@ -278,7 +257,7 @@ index 47468086c1cae252aa99c55b0065f225357dee62..bca757ea05403fe46f5bf0dfa75561b8 public VoxelShape getShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) { return SHAPE; diff --git a/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java -index 88ae3b334e35ac9d0ca4238b5da3c3af1f421bd4..9310444c04608a0015844eafa872f24c8baedf4d 100644 +index 8e1201d91bac88c043de5dfdc003d20b2647af9a..5fabdda079ebcb0e5d119f3e60f7447d88dd2707 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java @@ -733,9 +733,9 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen diff --git a/patches/server/0051-MC-Technical-Survival-Mode.patch b/patches/server/0051-MC-Technical-Survival-Mode.patch index 66fcfeb8..157fca00 100644 --- a/patches/server/0051-MC-Technical-Survival-Mode.patch +++ b/patches/server/0051-MC-Technical-Survival-Mode.patch @@ -31,10 +31,10 @@ index fa1c0aee8c3a4d0868482cf5c703bbfd08e09874..8b0feb7f0d008e5b8a5294a014a0cd9b throw new RuntimeException("Could not reload paper configuration files", ex); } diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index fd39cbd4e3fad04cc0441aff5142891964c7c76f..a95b794553074a8c446a55f56862ccf7c5d6c261 100644 +index c78515de20c53c5c3b6727bee4972020ab23007b..653de62cf785bd6a3a6f2ea5cd657dcc351d090e 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -2694,7 +2694,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -2743,7 +2743,7 @@ public class ServerLevel extends Level implements WorldGenLevel { public void onTickingEnd(Entity entity) { ServerLevel.this.entityTickList.remove(entity); // Paper start - Reset pearls when they stop being ticked @@ -57,10 +57,10 @@ index ffc5b68c4246a7111845230a75552bb15875a209..990cdebf1b9e64a5001c71411e64f681 || ((ServerLevel) this.level()).getDragonFight() == null || ((ServerLevel) this.level()).getDragonFight().respawnStage == null diff --git a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java -index 4ce3e69970dd9eb251d0538a2d233ca30e9e5e47..25a01ca42b8f2f0590965edbeca9c1f95cd66420 100644 +index c3e47426382296d650fa00ce0bc1a82bf23c7877..1d3764c2278a5daf1cfddf28c6ae78dd8809d4ff 100644 --- a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java +++ b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java -@@ -63,7 +63,7 @@ public class PrimedTnt extends Entity implements TraceableEntity { +@@ -71,7 +71,7 @@ public class PrimedTnt extends Entity implements TraceableEntity { @Override public void tick() { @@ -70,10 +70,10 @@ index 4ce3e69970dd9eb251d0538a2d233ca30e9e5e47..25a01ca42b8f2f0590965edbeca9c1f9 this.setDeltaMovement(this.getDeltaMovement().add(0.0D, -0.04D, 0.0D)); } diff --git a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java -index a90317100d32974e481e14476843f66997a2cf3a..34029cdf229ef8f78ddb0c8a2e5e0542628848d8 100644 +index 2f058cec80c6ef7a5a5ca065dc6c9fe353c521de..bda52c1afdcc5a3410f31179dec2f1989d02f6e9 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java +++ b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java -@@ -122,7 +122,7 @@ public abstract class Projectile extends Entity implements TraceableEntity { +@@ -119,7 +119,7 @@ public abstract class Projectile extends Entity implements TraceableEntity { if (nbt.hasUUID("Owner")) { this.ownerUUID = nbt.getUUID("Owner"); this.cachedOwner = null; diff --git a/patches/server/0052-Return-nether-portal-fix.patch b/patches/server/0052-Return-nether-portal-fix.patch index 003c8740..72d6dfa9 100644 --- a/patches/server/0052-Return-nether-portal-fix.patch +++ b/patches/server/0052-Return-nether-portal-fix.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Return nether portal fix This patch is powered by NetherPortalFix(https://github.com/TwelveIterationMods/NetherPortalFix) diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 3aaf711182ad26e33c26b29ef1b51b9050233b3d..0b6cd28cbaa65a391dfe190f8934befcff696ed5 100644 +index 7ba1067382a53740e82480db9ce2ba48f28beb92..b60f13f552b5bccf01e1c9e0bfc1e82013ad31a9 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -180,6 +180,7 @@ import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; +@@ -186,6 +186,7 @@ import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.event.player.PlayerToggleSneakEvent; import org.bukkit.inventory.MainHand; import top.leavesmc.leaves.bot.ServerBot; @@ -17,7 +17,7 @@ index 3aaf711182ad26e33c26b29ef1b51b9050233b3d..0b6cd28cbaa65a391dfe190f8934befc // CraftBukkit end public class ServerPlayer extends Player { -@@ -1287,6 +1288,24 @@ public class ServerPlayer extends Player { +@@ -1291,6 +1292,24 @@ public class ServerPlayer extends Player { PlayerChangedWorldEvent changeEvent = new PlayerChangedWorldEvent(this.getBukkitEntity(), worldserver1.getWorld()); this.level().getCraftServer().getPluginManager().callEvent(changeEvent); // CraftBukkit end @@ -42,7 +42,7 @@ index 3aaf711182ad26e33c26b29ef1b51b9050233b3d..0b6cd28cbaa65a391dfe190f8934befc } // Paper start if (this.isBlocking()) { -@@ -1339,6 +1358,30 @@ public class ServerPlayer extends Player { +@@ -1343,6 +1362,30 @@ public class ServerPlayer extends Player { protected Optional getExitPortal(ServerLevel worldserver, BlockPos blockposition, boolean flag, WorldBorder worldborder, int searchRadius, boolean canCreatePortal, int createRadius) { // CraftBukkit Optional optional = super.getExitPortal(worldserver, blockposition, flag, worldborder, searchRadius, canCreatePortal, createRadius); // CraftBukkit @@ -74,28 +74,18 @@ index 3aaf711182ad26e33c26b29ef1b51b9050233b3d..0b6cd28cbaa65a391dfe190f8934befc return optional; } else { diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index fe9110a92b690c2d3d8da171216129da20462984..70c2ee8b98afdf8006273511f70dbd8ad81b473a 100644 +index f1fc9282e6b1072e5c866828e0a05332490e9360..24dd15c15ba8a2953c158e38f0453b1ab4f5aa18 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -24,6 +24,8 @@ import java.util.UUID; - import java.util.function.Function; - import java.util.function.Predicate; - import javax.annotation.Nullable; -+ -+import net.minecraft.BlockUtil; - import net.minecraft.ChatFormatting; - import net.minecraft.FileUtil; - import net.minecraft.commands.CommandSourceStack; -@@ -121,6 +123,8 @@ import org.bukkit.event.player.PlayerRespawnEvent; - import org.bukkit.event.player.PlayerRespawnEvent.RespawnReason; +@@ -121,6 +121,7 @@ import org.bukkit.event.player.PlayerSpawnChangeEvent; // CraftBukkit end + import top.leavesmc.leaves.bot.ServerBot; +import top.leavesmc.leaves.util.ReturnPortalManager; // Leaves - return portal fix -+ + public abstract class PlayerList { - public static final File USERBANLIST_FILE = new File("banned-players.json"); -@@ -1003,6 +1007,24 @@ public abstract class PlayerList { +@@ -1004,6 +1005,24 @@ public abstract class PlayerList { if (fromWorld != location.getWorld()) { PlayerChangedWorldEvent event = new PlayerChangedWorldEvent(entityplayer.getBukkitEntity(), fromWorld); this.server.server.getPluginManager().callEvent(event); @@ -108,7 +98,7 @@ index fe9110a92b690c2d3d8da171216129da20462984..70c2ee8b98afdf8006273511f70dbd8a + if (!((fromDim != OVERWORLD || toDim != THE_NETHER) && (fromDim != THE_NETHER || toDim != OVERWORLD))) { + BlockPos lastPos = entityplayer1.lastPos; + if (lastPos != null) { -+ BlockUtil.FoundRectangle fromPortal = ReturnPortalManager.findPortalAt(entityplayer1, fromDim, lastPos); ++ net.minecraft.BlockUtil.FoundRectangle fromPortal = ReturnPortalManager.findPortalAt(entityplayer1, fromDim, lastPos); + BlockPos toPos = entityplayer1.blockPosition(); + if (fromPortal != null) { + ReturnPortalManager.storeReturnPortal(entityplayer1, toDim, toPos, fromPortal); @@ -121,10 +111,10 @@ index fe9110a92b690c2d3d8da171216129da20462984..70c2ee8b98afdf8006273511f70dbd8a // Save player file again if they were disconnected diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index e27b95e71342dc3dc2e7274fb8cf0c41629f3426..eea0eb67b3f74574d8dcd8cad30394f3a49cb2cd 100644 +index 67bb1b03f2cf0a77f12e70e790cc3bb78ca233c1..c5be586d14751991c95626adb76d7a99612f7daa 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -241,7 +241,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -240,7 +240,7 @@ public abstract class LivingEntity extends Entity implements Attackable { protected ItemStack useItem; protected int useItemRemaining; protected int fallFlyTicks; diff --git a/patches/server/0054-Xaero-Map-Protocol.patch b/patches/server/0054-Xaero-Map-Protocol.patch index 687a5ad8..60b14a14 100644 --- a/patches/server/0054-Xaero-Map-Protocol.patch +++ b/patches/server/0054-Xaero-Map-Protocol.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Xaero Map Protocol diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 70c2ee8b98afdf8006273511f70dbd8ad81b473a..683691fa61d02be951a0f759b1983ce9c5cd3863 100644 +index 24dd15c15ba8a2953c158e38f0453b1ab4f5aa18..2818f21777560f271379884e0cf3ef26bd99196a 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -1319,6 +1319,7 @@ public abstract class PlayerList { +@@ -1317,6 +1317,7 @@ public abstract class PlayerList { player.connection.send(new ClientboundInitializeBorderPacket(worldborder)); player.connection.send(new ClientboundSetTimePacket(world.getGameTime(), world.getDayTime(), world.getGameRules().getBoolean(GameRules.RULE_DAYLIGHT))); player.connection.send(new ClientboundSetDefaultSpawnPositionPacket(world.getSharedSpawnPos(), world.getSharedSpawnAngle())); diff --git a/patches/server/0055-Leaves-Extra-Yggdrasil-Service.patch b/patches/server/0055-Leaves-Extra-Yggdrasil-Service.patch index 9c0d5590..5bee6b18 100644 --- a/patches/server/0055-Leaves-Extra-Yggdrasil-Service.patch +++ b/patches/server/0055-Leaves-Extra-Yggdrasil-Service.patch @@ -18,10 +18,10 @@ index 48e774677edf17d4a99ae9ed23d1b371dab41abb..21409ff86db65c00d92bff9eae8bdeb3 public PaperAuthenticationService(Proxy proxy) { super(proxy); diff --git a/src/main/java/com/mojang/authlib/yggdrasil/YggdrasilMinecraftSessionService.java b/src/main/java/com/mojang/authlib/yggdrasil/YggdrasilMinecraftSessionService.java -index f1e7c7f0fa1d6a8f61de4215eabc121ab2a0b67f..91e07f127361bd573ccd59f37fcba93b300c289a 100644 +index bfc1e27c37689c1fbb927404a7176780a439a057..bc8ab50ef1390a2c51110a89dc43db58215396a9 100644 --- a/src/main/java/com/mojang/authlib/yggdrasil/YggdrasilMinecraftSessionService.java +++ b/src/main/java/com/mojang/authlib/yggdrasil/YggdrasilMinecraftSessionService.java -@@ -44,7 +44,7 @@ import java.util.stream.Collectors; +@@ -46,7 +46,7 @@ import java.util.stream.Collectors; public class YggdrasilMinecraftSessionService implements MinecraftSessionService { private static final Logger LOGGER = LoggerFactory.getLogger(YggdrasilMinecraftSessionService.class); @@ -31,10 +31,10 @@ index f1e7c7f0fa1d6a8f61de4215eabc121ab2a0b67f..91e07f127361bd573ccd59f37fcba93b private final String baseUrl; private final URL joinUrl; diff --git a/src/main/java/net/minecraft/server/Main.java b/src/main/java/net/minecraft/server/Main.java -index ec268189b19b6fa5c4521f96ce211a531db35ec5..24376290ac1d5f5e140ff06b23f9711b38de362e 100644 +index 7573c12a77797146c51ef2dfe4b2a636df45e21a..458c69eee97a5284b8e7658450cbac32a52137fe 100644 --- a/src/main/java/net/minecraft/server/Main.java +++ b/src/main/java/net/minecraft/server/Main.java -@@ -201,7 +201,7 @@ public class Main { +@@ -198,7 +198,7 @@ public class Main { file = new File(bukkitConfiguration.getString("settings.world-container", ".")); } // Paper end - fix SPIGOT-5824 @@ -44,18 +44,18 @@ index ec268189b19b6fa5c4521f96ce211a531db35ec5..24376290ac1d5f5e140ff06b23f9711b String s = (String) Optional.ofNullable((String) optionset.valueOf("world")).orElse(dedicatedserversettings.getProperties().levelName); LevelStorageSource convertable = LevelStorageSource.createDefault(file.toPath()); diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 3f4b4d905ff440eaf4a66b10ad85933c0b07dc58..7dec27260fce938f5d1e5c437f564ed9cee575f3 100644 +index 89a50e07bc79cb0d5353f5a06fa037f3942c5940..760b1fb833fea279062965002686b57f967a5eaf 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -253,7 +253,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop public private long lastServerStatus; public final Thread serverThread; - private long nextTickTime; + private long nextTickTimeNanos; diff --git a/src/main/java/top/leavesmc/leaves/LeavesConfig.java b/src/main/java/top/leavesmc/leaves/LeavesConfig.java index ac3642af48056698686d0784bb483f99d3f84fa3..50403436dbe22328c7099c1d04b2a87d4f55aab6 100644 --- a/src/main/java/top/leavesmc/leaves/LeavesConfig.java diff --git a/patches/server/0056-Use-vanilla-random-config.patch b/patches/server/0056-Use-vanilla-random-config.patch index 344820db..9d255fd4 100644 --- a/patches/server/0056-Use-vanilla-random-config.patch +++ b/patches/server/0056-Use-vanilla-random-config.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Use vanilla random config diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 759ee77818ea2916ea8c217be8ed26338f662861..4073424b4a2eb2f48540ee196598bac423695ad6 100644 +index 2d9af0ad73e718fe387dc0df1984c83a962319f3..4c703438c091171df4bd673b6b732d07490e9cc5 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -543,7 +543,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -548,7 +548,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S this.bb = Entity.INITIAL_AABB; this.stuckSpeedMultiplier = Vec3.ZERO; this.nextStep = 1.0F; @@ -18,10 +18,10 @@ index 759ee77818ea2916ea8c217be8ed26338f662861..4073424b4a2eb2f48540ee196598bac4 this.fluidHeight = new Object2DoubleArrayMap(2); this.fluidOnEyes = new HashSet(); diff --git a/src/main/java/net/minecraft/world/entity/animal/Bee.java b/src/main/java/net/minecraft/world/entity/animal/Bee.java -index 9a7956befc346e1b58f064213800fd099a052fc6..d508448c7627c4cef90a30b471252841b7e20fa1 100644 +index a87a34b0c4c8e5d0cf079025c230b1434c919b54..c56dd96ab35dae5331e9cec4bc27cdb78c1741fc 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Bee.java +++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java -@@ -1029,7 +1029,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -1036,7 +1036,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { BeeGoToHiveGoal() { super(); @@ -44,10 +44,10 @@ index f60c4cd0543fd5d50fa7e2c1a9e8381227adb540..8c9c694744951dc11b9f8828f27e4d4a } diff --git a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java -index e2f3044ce964f0da9df83b8a302316d2438384e7..5eb9d599e2f6e61adb34c991fe9008859633fdfc 100644 +index 1b6cd8276c6bda2832f6447a2cceb75f11e6811a..c8abafdfc2bd09429fe0a509b1afa1579d5d75b6 100644 --- a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java +++ b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java -@@ -71,7 +71,13 @@ public class ItemEntity extends Entity implements TraceableEntity { +@@ -73,7 +73,13 @@ public class ItemEntity extends Entity implements TraceableEntity { // Paper start - don't use world random in entity constructor this(EntityType.ITEM, world); this.setPos(x, y, z); @@ -63,10 +63,10 @@ index e2f3044ce964f0da9df83b8a302316d2438384e7..5eb9d599e2f6e61adb34c991fe900885 // Paper end // Leaves start - stackable shulker boxes diff --git a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java -index 25a01ca42b8f2f0590965edbeca9c1f95cd66420..e66b138370ceae2ea16c48a17d0a3d8209fe9b55 100644 +index 1d3764c2278a5daf1cfddf28c6ae78dd8809d4ff..8c96f1ad6b6de5f42b275f08ad47ce8d8f7aea49 100644 --- a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java +++ b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java -@@ -36,7 +36,7 @@ public class PrimedTnt extends Entity implements TraceableEntity { +@@ -43,7 +43,7 @@ public class PrimedTnt extends Entity implements TraceableEntity { public PrimedTnt(Level world, double x, double y, double z, @Nullable LivingEntity igniter) { this(EntityType.TNT, world); this.setPos(x, y, z); diff --git a/patches/server/0057-Fix-update-suppression-crash.patch b/patches/server/0057-Fix-update-suppression-crash.patch index 19b7dcac..03b9192a 100644 --- a/patches/server/0057-Fix-update-suppression-crash.patch +++ b/patches/server/0057-Fix-update-suppression-crash.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Fix update suppression crash diff --git a/src/main/java/net/minecraft/network/protocol/PacketUtils.java b/src/main/java/net/minecraft/network/protocol/PacketUtils.java -index 8055ebf912ea595b6c70c6e6fcda14f3b2516077..f666ae4df36ed57368082e47786ab6ba4148d9c7 100644 +index de9a8ba5317d6e5ae682a2376c8d04512a0b0936..c2c399be2d8d0d58ab43b36926ba9c45962ac322 100644 --- a/src/main/java/net/minecraft/network/protocol/PacketUtils.java +++ b/src/main/java/net/minecraft/network/protocol/PacketUtils.java -@@ -50,6 +50,10 @@ public class PacketUtils { +@@ -51,6 +51,10 @@ public class PacketUtils { if (listener.shouldHandleMessage(packet)) { try { packet.handle(listener); @@ -17,13 +17,13 @@ index 8055ebf912ea595b6c70c6e6fcda14f3b2516077..f666ae4df36ed57368082e47786ab6ba + top.leavesmc.leaves.LeavesLogger.LOGGER.info(exception.getMessage()); + // Leaves start - update suppression crash fix } catch (Exception exception) { - if (exception instanceof ReportedException) { - ReportedException reportedexception = (ReportedException) exception; + label25: + { diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 7dec27260fce938f5d1e5c437f564ed9cee575f3..8c0b428ef004d87be0748584ae6a0557d43bc946 100644 +index 760b1fb833fea279062965002686b57f967a5eaf..b22327cbda661538fbf1c9f32de6449d6039f04f 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1529,7 +1529,13 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0; } // CraftBukkit end diff --git a/patches/server/0060-Syncmatica-Protocol.patch b/patches/server/0060-Syncmatica-Protocol.patch index 63e99efe..3ed7d5de 100644 --- a/patches/server/0060-Syncmatica-Protocol.patch +++ b/patches/server/0060-Syncmatica-Protocol.patch @@ -6,18 +6,18 @@ Subject: [PATCH] Syncmatica Protocol This patch is Powered by Syncmatica(https://github.com/End-Tech/syncmatica) diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 79a236ec2b7e9bab6c9a6c25b3b9f08152891c34..5fe844179c66204ec3eacc1bbfe6128af205b86f 100644 +index e018fb8d2649e1e07289f12421ac0ddcf05e1c72..0ebedd4f2e37b7f07cc4f3e32aaa7e79204f3440 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -310,6 +310,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl - player.getTextFilter().join(); - this.signedMessageDecoder = server.enforceSecureProfile() ? SignedMessageChain.Decoder.REJECT_ALL : SignedMessageChain.Decoder.unsigned(player.getUUID()); +@@ -313,6 +313,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl + Objects.requireNonNull(server); + this.signedMessageDecoder = SignedMessageChain.Decoder.unsigned(uuid, server::enforceSecureProfile); this.chatMessageChain = new FutureChain(server.chatExecutor); // CraftBukkit - async chat + this.exchangeTarget = new top.leavesmc.leaves.protocol.syncmatica.exchange.ExchangeTarget(this); // Leaves - Syncmatica Protocol } // CraftBukkit start - add fields -@@ -329,6 +330,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -332,6 +333,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl private boolean hasMoved; // Spigot // CraftBukkit end diff --git a/patches/server/0061-Disable-distance-check-for-UseItemOnPacket.patch b/patches/server/0061-Disable-distance-check-for-UseItemOnPacket.patch index 434af6ff..a3aad73a 100644 --- a/patches/server/0061-Disable-distance-check-for-UseItemOnPacket.patch +++ b/patches/server/0061-Disable-distance-check-for-UseItemOnPacket.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Disable distance check for UseItemOnPacket diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index d3ef269f89f220379fc84bbab92dd8333d054c3c..aa35917f6d5c6c37f5c62bd220ccd0b04b264d73 100644 +index 0ebedd4f2e37b7f07cc4f3e32aaa7e79204f3440..ab2f40d35baddb0c850a427a5ae226eb3898bf3f 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -1905,7 +1905,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1932,7 +1932,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl Vec3 vec3d2 = vec3d.subtract(vec3d1); double d0 = 1.0000001D; diff --git a/patches/server/0062-No-feather-falling-trample.patch b/patches/server/0062-No-feather-falling-trample.patch index b7088e14..8abe5648 100644 --- a/patches/server/0062-No-feather-falling-trample.patch +++ b/patches/server/0062-No-feather-falling-trample.patch @@ -5,10 +5,10 @@ Subject: [PATCH] No feather falling trample diff --git a/src/main/java/net/minecraft/world/level/block/FarmBlock.java b/src/main/java/net/minecraft/world/level/block/FarmBlock.java -index 502dcba14da9d3dcefc61fdc349a4e1e1d94b478..9828ab37ba2ae1e6e1f4b46d021061e0924cf3c7 100644 +index 59bbdead2ebd8965d222540c7243dde051bbcc4b..3eaa46b60aa8f4fcdbfa54dbcf1e051ec2eda140 100644 --- a/src/main/java/net/minecraft/world/level/block/FarmBlock.java +++ b/src/main/java/net/minecraft/world/level/block/FarmBlock.java -@@ -104,6 +104,13 @@ public class FarmBlock extends Block { +@@ -111,6 +111,13 @@ public class FarmBlock extends Block { public void fallOn(Level world, BlockState state, BlockPos pos, Entity entity, float fallDistance) { super.fallOn(world, state, pos, entity, fallDistance); // CraftBukkit - moved here as game rules / events shouldn't affect fall damage. if (!world.isClientSide && world.random.nextFloat() < fallDistance - 0.5F && entity instanceof LivingEntity && (entity instanceof Player || world.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) && entity.getBbWidth() * entity.getBbWidth() * entity.getBbHeight() > 0.512F) { diff --git a/patches/server/0064-Redstone-wire-dont-connect-if-on-trapdoor.patch b/patches/server/0064-Redstone-wire-dont-connect-if-on-trapdoor.patch index a07270a1..e694d4ac 100644 --- a/patches/server/0064-Redstone-wire-dont-connect-if-on-trapdoor.patch +++ b/patches/server/0064-Redstone-wire-dont-connect-if-on-trapdoor.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Redstone wire dont connect if on trapdoor diff --git a/src/main/java/net/minecraft/world/level/block/RedStoneWireBlock.java b/src/main/java/net/minecraft/world/level/block/RedStoneWireBlock.java -index 2b054439b7a763d5a3fbb5dbfe197cb9a9a3525c..9f56f20032ff590bc3ce82f74c26095cde79a549 100644 +index 507be06ad51b7a212e28d3ca6680e0e4b00f4233..36984ff7b8ffa253cf5279f89b056cf976f186bd 100644 --- a/src/main/java/net/minecraft/world/level/block/RedStoneWireBlock.java +++ b/src/main/java/net/minecraft/world/level/block/RedStoneWireBlock.java -@@ -226,7 +226,7 @@ public class RedStoneWireBlock extends Block { +@@ -233,7 +233,7 @@ public class RedStoneWireBlock extends Block { BlockState iblockdata = world.getBlockState(blockposition1); if (flag) { diff --git a/patches/server/0065-Disable-check-out-of-order-command.patch b/patches/server/0065-Disable-check-out-of-order-command.patch index bc1848b5..06845a6f 100644 --- a/patches/server/0065-Disable-check-out-of-order-command.patch +++ b/patches/server/0065-Disable-check-out-of-order-command.patch @@ -1,19 +1,19 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: violetc <58360096+s-yh-china@users.noreply.github.com> -Date: Thu, 15 Jun 2023 18:01:51 +0800 +Date: Sun, 10 Dec 2023 13:13:14 +0800 Subject: [PATCH] Disable check out-of-order command -diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index aa35917f6d5c6c37f5c62bd220ccd0b04b264d73..454fd5f449d19660aec50e4b76152cbf272b572b 100644 ---- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2248,7 +2248,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl - } - - private Optional tryHandleChat(String message, Instant timestamp, LastSeenMessages.Update acknowledgment) { -- if (!this.updateChatOrder(timestamp)) { -+ if (!top.leavesmc.leaves.LeavesConfig.disableCheckOutOfOrderCommand && !this.updateChatOrder(timestamp)) { // Leaves - disable check to support Velocity - ServerGamePacketListenerImpl.LOGGER.warn("{} sent out-of-order chat: '{}': {} > {}", this.player.getName().getString(), message, this.lastChatTimeStamp.get().getEpochSecond(), timestamp.getEpochSecond()); // Paper - this.server.scheduleOnMain(() -> { // Paper - push to main - this.disconnect(Component.translatable("multiplayer.disconnect.out_of_order_chat"), org.bukkit.event.player.PlayerKickEvent.Cause.OUT_OF_ORDER_CHAT); // Paper - kick event causes +diff --git a/src/main/java/net/minecraft/network/chat/SignedMessageChain.java b/src/main/java/net/minecraft/network/chat/SignedMessageChain.java +index 85a8a687b1568a56e3e646b37ef78b562c1b8a82..90eb8e13c9ef9b966c6abf5a56f69f44a296e969 100644 +--- a/src/main/java/net/minecraft/network/chat/SignedMessageChain.java ++++ b/src/main/java/net/minecraft/network/chat/SignedMessageChain.java +@@ -38,7 +38,7 @@ public class SignedMessageChain { + throw new SignedMessageChain.DecodeException(Component.translatable("chat.disabled.chain_broken"), false); // Paper - diff on change (if disconnects, need a new kick event cause) + } else if (playerPublicKey.data().hasExpired()) { + throw new SignedMessageChain.DecodeException(Component.translatable("chat.disabled.expiredProfileKey", org.bukkit.event.player.PlayerKickEvent.Cause.EXPIRED_PROFILE_PUBLIC_KEY), false); // Paper - kick event causes +- } else if (body.timeStamp().isBefore(this.lastTimeStamp)) { ++ } else if (body.timeStamp().isBefore(this.lastTimeStamp) && !top.leavesmc.leaves.LeavesConfig.disableCheckOutOfOrderCommand) { // Leaves - disable check to support Velocity + throw new SignedMessageChain.DecodeException(Component.translatable("multiplayer.disconnect.out_of_order_chat", org.bukkit.event.player.PlayerKickEvent.Cause.OUT_OF_ORDER_CHAT), true); // Paper - kick event causes + } else { + this.lastTimeStamp = body.timeStamp(); diff --git a/patches/server/0066-Despawn-enderman-with-block.patch b/patches/server/0066-Despawn-enderman-with-block.patch index 95b2a679..172fd839 100644 --- a/patches/server/0066-Despawn-enderman-with-block.patch +++ b/patches/server/0066-Despawn-enderman-with-block.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Despawn enderman with block diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -index a8867058fb09fd4c6b965b91d5f406b2a1b7035a..acc18cbd9e2b81857dba23fb198d5afbf8e218a4 100644 +index a6da5165ac20e01a9162b216cddf7b0dc040b5a9..602340221cbba4a9edc155800b2a9188b8f7d522 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java @@ -486,7 +486,7 @@ public class EnderMan extends Monster implements NeutralMob { diff --git a/patches/server/0068-Creative-fly-no-clip.patch b/patches/server/0068-Creative-fly-no-clip.patch index f3b39ee4..be774768 100644 --- a/patches/server/0068-Creative-fly-no-clip.patch +++ b/patches/server/0068-Creative-fly-no-clip.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Creative fly no clip diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index d58b4c0dbe651b5068212e5f14dce3164ee520f5..4aa241f2ef7f27e9c9cf5ea3bbb1c4b389ce887c 100644 +index 7f3466340891b4409d1399ebeb2ca865d77841cd..1f87de025be6f29339c5e472cd37d5b97c145764 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -243,8 +243,8 @@ public abstract class Player extends LivingEntity { +@@ -238,8 +238,8 @@ public abstract class Player extends LivingEntity { @Override public void tick() { @@ -28,7 +28,7 @@ index d58b4c0dbe651b5068212e5f14dce3164ee520f5..4aa241f2ef7f27e9c9cf5ea3bbb1c4b3 if (this.canPlayerFitWithinBlocksAndEntitiesWhen(Pose.CROUCHING)) { entitypose1 = Pose.CROUCHING; } else { -@@ -581,7 +581,7 @@ public abstract class Player extends LivingEntity { +@@ -576,7 +576,7 @@ public abstract class Player extends LivingEntity { } this.bob += (f - this.bob) * 0.4F; @@ -37,7 +37,7 @@ index d58b4c0dbe651b5068212e5f14dce3164ee520f5..4aa241f2ef7f27e9c9cf5ea3bbb1c4b3 AABB axisalignedbb; if (this.isPassenger() && !this.getVehicle().isRemoved()) { -@@ -2136,6 +2136,12 @@ public abstract class Player extends LivingEntity { +@@ -2051,6 +2051,12 @@ public abstract class Player extends LivingEntity { @Override public abstract boolean isSpectator(); @@ -64,7 +64,7 @@ index 5c311270a39f6b4996c8b58822d24556c67adc41..cb40179236952edcc1678a58a5886b19 } } diff --git a/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java -index 1ec80f9c901dff1c9f29befa5a8e3c3f6f37aaf7..f26e5626c0823c041eeb388cbcd78e5293d2f0ff 100644 +index 7491e075baebc7d412d35593bb844b200e304447..e5c4deb9a921b90b7e0760955e90e815db95d3a1 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java @@ -18,6 +18,7 @@ import net.minecraft.util.Mth; diff --git a/patches/server/0073-Elytra-aeronautics-no-chunk-load.patch b/patches/server/0073-Elytra-aeronautics-no-chunk-load.patch index b512375c..3bdd8207 100644 --- a/patches/server/0073-Elytra-aeronautics-no-chunk-load.patch +++ b/patches/server/0073-Elytra-aeronautics-no-chunk-load.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Elytra aeronautics no chunk load diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index 255c6508d7b507dc9b23c5910f872c2fa97c7c50..55cdb8e23b91ad68ad128c664ddad5b2cd734423 100644 +index e82fd89dc613381e5ed8079b96901b338a8b5aa5..ea617a5695db07d58f9115d85a06e6c07c47953e 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java @@ -150,7 +150,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider @@ -45,10 +45,10 @@ index 255c6508d7b507dc9b23c5910f872c2fa97c7c50..55cdb8e23b91ad68ad128c664ddad5b2 SectionPos sectionposition = player.getLastSectionPos(); diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 13185dfaf91b1029f4091d4754b03b88fcc00f22..f311111b91543288588be584dbbd7bb833df0eca 100644 +index ab2f40d35baddb0c850a427a5ae226eb3898bf3f..6ecfad2ef86a6d2cd280c847e159977285999134 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -540,7 +540,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -543,7 +543,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl speed *= 2f; // TODO: Get the speed of the vehicle instead of the player // Paper start - Prevent moving into unloaded chunks @@ -58,10 +58,10 @@ index 13185dfaf91b1029f4091d4754b03b88fcc00f22..f311111b91543288588be584dbbd7bb8 !worldserver.areChunksLoadedForMove(entity.getBoundingBox().expandTowards(new Vec3(toX, toY, toZ).subtract(entity.position()))) )) { diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 4073424b4a2eb2f48540ee196598bac423695ad6..00cc1bfec7578f2118d38ef275e92a0c01ecdecc 100644 +index 4c703438c091171df4bd673b6b732d07490e9cc5..9752b4205b5d3047b29fc7e98233f4f601826a57 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -1064,7 +1064,13 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -1069,7 +1069,13 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S return; } } @@ -76,7 +76,7 @@ index 4073424b4a2eb2f48540ee196598bac423695ad6..00cc1bfec7578f2118d38ef275e92a0c this.level().getProfiler().push("move"); if (this.stuckSpeedMultiplier.lengthSqr() > 1.0E-7D) { movement = movement.multiply(this.stuckSpeedMultiplier); -@@ -2003,6 +2009,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -2008,6 +2014,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S this.yo = y; this.zo = d4; this.setPos(d3, y, d4); @@ -85,10 +85,10 @@ index 4073424b4a2eb2f48540ee196598bac423695ad6..00cc1bfec7578f2118d38ef275e92a0c } diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index 78e39714759ef2fc8495d1c9de9e11b5bb364002..608bc9b00661dcacc9ac87adc364c2acd9e74450 100644 +index 1f87de025be6f29339c5e472cd37d5b97c145764..ebe913516d93adbf611197f610cf16b33cca99ec 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -188,6 +188,7 @@ public abstract class Player extends LivingEntity { +@@ -183,6 +183,7 @@ public abstract class Player extends LivingEntity { public boolean affectsSpawning = true; public net.kyori.adventure.util.TriState flyingFallDamage = net.kyori.adventure.util.TriState.NOT_SET; // Paper end diff --git a/patches/server/0074-Fix-Paper-9372.patch b/patches/server/0074-Fix-Paper-9372.patch index 439f0195..e42a23e5 100644 --- a/patches/server/0074-Fix-Paper-9372.patch +++ b/patches/server/0074-Fix-Paper-9372.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Fix Paper#9372 This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish) diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 0b6cd28cbaa65a391dfe190f8934befcff696ed5..21aa07c96ebc7f760ecf8fa62da7dc6738c2cf93 100644 +index b60f13f552b5bccf01e1c9e0bfc1e82013ad31a9..700613bf12bb1b1c23bc33f335edb553edb2c630 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -1258,6 +1258,7 @@ public class ServerPlayer extends Player { +@@ -1262,6 +1262,7 @@ public class ServerPlayer extends Player { this.setServerLevel(worldserver); this.connection.teleport(exit); // CraftBukkit - use internal teleport without event this.connection.resetPosition(); @@ -17,7 +17,7 @@ index 0b6cd28cbaa65a391dfe190f8934befcff696ed5..21aa07c96ebc7f760ecf8fa62da7dc67 worldserver.addDuringPortalTeleport(this); worldserver1.getProfiler().pop(); this.triggerDimensionChangeTriggers(worldserver1); -@@ -1974,6 +1975,7 @@ public class ServerPlayer extends Player { +@@ -2075,6 +2076,7 @@ public class ServerPlayer extends Player { public void moveTo(double x, double y, double z) { super.moveTo(x, y, z); this.connection.resetPosition(); @@ -25,7 +25,7 @@ index 0b6cd28cbaa65a391dfe190f8934befcff696ed5..21aa07c96ebc7f760ecf8fa62da7dc67 } @Override -@@ -2220,6 +2222,7 @@ public class ServerPlayer extends Player { +@@ -2321,6 +2323,7 @@ public class ServerPlayer extends Player { this.connection.send(new ClientboundSetCameraPacket(this.camera)); this.connection.resetPosition(); @@ -33,7 +33,7 @@ index 0b6cd28cbaa65a391dfe190f8934befcff696ed5..21aa07c96ebc7f760ecf8fa62da7dc67 } } -@@ -2659,6 +2662,7 @@ public class ServerPlayer extends Player { +@@ -2760,6 +2763,7 @@ public class ServerPlayer extends Player { public void forceSetPositionRotation(double x, double y, double z, float yaw, float pitch) { this.moveTo(x, y, z, yaw, pitch); this.connection.resetPosition(); diff --git a/patches/server/0075-Cache-ignite-odds.patch b/patches/server/0075-Cache-ignite-odds.patch index 0461e2aa..f617c87e 100644 --- a/patches/server/0075-Cache-ignite-odds.patch +++ b/patches/server/0075-Cache-ignite-odds.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Cache ignite odds diff --git a/src/main/java/net/minecraft/world/level/block/FireBlock.java b/src/main/java/net/minecraft/world/level/block/FireBlock.java -index 4002e0fffb60556e7af1aeff71b4be244f02b0f5..8fc696d806aa3f4af313f145397ec497e186def2 100644 +index 8c0db5219ff30bdfae61b4b9f6033c8e28d21ee1..227434f1800f6716c20dc284f98045a86edd4d09 100644 --- a/src/main/java/net/minecraft/world/level/block/FireBlock.java +++ b/src/main/java/net/minecraft/world/level/block/FireBlock.java -@@ -214,6 +214,7 @@ public class FireBlock extends BaseFireBlock { +@@ -221,6 +221,7 @@ public class FireBlock extends BaseFireBlock { this.trySpread(world, pos.south(), 300 + k, random, i, pos); // CraftBukkit end BlockPos.MutableBlockPos blockposition_mutableblockposition = new BlockPos.MutableBlockPos(); @@ -16,7 +16,7 @@ index 4002e0fffb60556e7af1aeff71b4be244f02b0f5..8fc696d806aa3f4af313f145397ec497 for (int l = -1; l <= 1; ++l) { for (int i1 = -1; i1 <= 1; ++i1) { -@@ -226,7 +227,7 @@ public class FireBlock extends BaseFireBlock { +@@ -233,7 +234,7 @@ public class FireBlock extends BaseFireBlock { } blockposition_mutableblockposition.setWithOffset(pos, l, j1, i1); @@ -25,7 +25,7 @@ index 4002e0fffb60556e7af1aeff71b4be244f02b0f5..8fc696d806aa3f4af313f145397ec497 if (l1 > 0) { int i2 = (l1 + 40 + world.getDifficulty().getId() * 7) / (i + 30); -@@ -338,6 +339,11 @@ public class FireBlock extends BaseFireBlock { +@@ -345,6 +346,11 @@ public class FireBlock extends BaseFireBlock { } private int getIgniteOdds(LevelReader world, BlockPos pos) { @@ -37,7 +37,7 @@ index 4002e0fffb60556e7af1aeff71b4be244f02b0f5..8fc696d806aa3f4af313f145397ec497 if (!world.isEmptyBlock(pos)) { return 0; } else { -@@ -346,10 +352,20 @@ public class FireBlock extends BaseFireBlock { +@@ -353,10 +359,20 @@ public class FireBlock extends BaseFireBlock { int j = aenumdirection.length; for (int k = 0; k < j; ++k) { diff --git a/patches/server/0076-Lava-riptide.patch b/patches/server/0076-Lava-riptide.patch index 690c6b77..50e75ee4 100644 --- a/patches/server/0076-Lava-riptide.patch +++ b/patches/server/0076-Lava-riptide.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Lava riptide diff --git a/src/main/java/net/minecraft/world/item/TridentItem.java b/src/main/java/net/minecraft/world/item/TridentItem.java -index 8078f127ff4b6e0aafb5804b9c02e237f79445b5..801f066878d6ffe5dabe01d20513db9022b323ec 100644 +index 5fab851b319847035fb1eefd0ab999de3ccc2cd8..272a509aea654c76628915d61b7d57b888e34e93 100644 --- a/src/main/java/net/minecraft/world/item/TridentItem.java +++ b/src/main/java/net/minecraft/world/item/TridentItem.java @@ -66,7 +66,7 @@ public class TridentItem extends Item implements Vanishable { @@ -17,7 +17,7 @@ index 8078f127ff4b6e0aafb5804b9c02e237f79445b5..801f066878d6ffe5dabe01d20513db90 if (!world.isClientSide) { // CraftBukkit - moved down /* -@@ -162,7 +162,7 @@ public class TridentItem extends Item implements Vanishable { +@@ -163,7 +163,7 @@ public class TridentItem extends Item implements Vanishable { if (itemstack.getDamageValue() >= itemstack.getMaxDamage() - 1) { return InteractionResultHolder.fail(itemstack); diff --git a/patches/server/0077-No-block-update-command.patch b/patches/server/0077-No-block-update-command.patch index d947864f..855c92a3 100644 --- a/patches/server/0077-No-block-update-command.patch +++ b/patches/server/0077-No-block-update-command.patch @@ -5,10 +5,10 @@ Subject: [PATCH] No block update command diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index a95b794553074a8c446a55f56862ccf7c5d6c261..7e5712f0fffe2a8606c47bdfe4bfa5191aaf5bfc 100644 +index 653de62cf785bd6a3a6f2ea5cd657dcc351d090e..49bed177db75c73f09dfd6b48dc88ae3432f5e84 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -2482,6 +2482,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -2521,6 +2521,7 @@ public class ServerLevel extends Level implements WorldGenLevel { @Override public void blockUpdated(BlockPos pos, Block block) { @@ -17,10 +17,10 @@ index a95b794553074a8c446a55f56862ccf7c5d6c261..7e5712f0fffe2a8606c47bdfe4bfa519 // CraftBukkit start if (this.populating) { diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java -index d0f7baa80cb7d0883304abe2ed990c258a0d92b6..a314d3aa9b2cf22bc34ac54ba1552138ad39191a 100644 +index de277d61b718fe07a87d75a2547bb1c7f8553aa1..fdfbca595e5bff701bf6d9dd7990d67fbb16795f 100644 --- a/src/main/java/net/minecraft/world/item/ItemStack.java +++ b/src/main/java/net/minecraft/world/item/ItemStack.java -@@ -461,7 +461,7 @@ public final class ItemStack { +@@ -482,7 +482,7 @@ public final class ItemStack { net.minecraft.world.level.block.state.BlockState block = world.getBlockState(newblockposition); if (!(block.getBlock() instanceof BaseEntityBlock)) { // Containers get placed automatically diff --git a/patches/server/0079-Container-open-passthrough.patch b/patches/server/0079-Container-open-passthrough.patch index 1c359267..05d7beb3 100644 --- a/patches/server/0079-Container-open-passthrough.patch +++ b/patches/server/0079-Container-open-passthrough.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Container open passthrough diff --git a/src/main/java/net/minecraft/world/level/block/SignBlock.java b/src/main/java/net/minecraft/world/level/block/SignBlock.java -index 614777d15bcf4141a89d0a0f7bd880526c668ffd..a9dc9431fab1cbb45119e61be6d7689a34247ed0 100644 +index ade170b4c76ad4a36eb2fba831d438642c096205..872f50bdf238ff6cf3d327b3858323a84fcb777d 100644 --- a/src/main/java/net/minecraft/world/level/block/SignBlock.java +++ b/src/main/java/net/minecraft/world/level/block/SignBlock.java -@@ -114,6 +114,25 @@ public abstract class SignBlock extends BaseEntityBlock implements SimpleWaterlo +@@ -117,6 +117,25 @@ public abstract class SignBlock extends BaseEntityBlock implements SimpleWaterlo return InteractionResult.SUCCESS; } else if (flag2) { return InteractionResult.SUCCESS; diff --git a/patches/server/0081-Bladeren-mspt-sync-protocol.patch b/patches/server/0081-Bladeren-mspt-sync-protocol.patch index 5c5285ab..169d34e3 100644 --- a/patches/server/0081-Bladeren-mspt-sync-protocol.patch +++ b/patches/server/0081-Bladeren-mspt-sync-protocol.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Bladeren mspt sync protocol diff --git a/src/main/java/top/leavesmc/leaves/protocol/bladeren/MsptSyncProtocol.java b/src/main/java/top/leavesmc/leaves/protocol/bladeren/MsptSyncProtocol.java new file mode 100644 -index 0000000000000000000000000000000000000000..3250965ac6e7beca255643a8b15f887c2835316a +index 0000000000000000000000000000000000000000..cf909f22f0860e6f56a86510dfcbd949a4c1fc32 --- /dev/null +++ b/src/main/java/top/leavesmc/leaves/protocol/bladeren/MsptSyncProtocol.java @@ -0,0 +1,73 @@ @@ -67,7 +67,7 @@ index 0000000000000000000000000000000000000000..3250965ac6e7beca255643a8b15f887c + + MinecraftServer server = MinecraftServer.getServer(); + if (server.getTickCount() % LeavesConfig.msptSyncTickInterval == 0) { -+ double mspt = Arrays.stream(server.tickTimes).average().getAsDouble() * 1.0E-6D; ++ double mspt = Arrays.stream(server.getTickTimesNanos()).average().getAsDouble() * 1.0E-6D; + double tps = 1000.0D / Math.max(mspt, 50); + players.forEach(player -> ProtocolUtils.sendPayloadPacket(player, MSPT_SYNC, buf -> { + buf.writeDouble(mspt); diff --git a/patches/server/0082-SIMD-support.patch b/patches/server/0082-SIMD-support.patch index 334c4883..adf49da0 100644 --- a/patches/server/0082-SIMD-support.patch +++ b/patches/server/0082-SIMD-support.patch @@ -5,10 +5,10 @@ Subject: [PATCH] SIMD support diff --git a/build.gradle.kts b/build.gradle.kts -index e3ef85b9556b93453d6e4b07a3416ffa3f1029a0..879f8163d820cfe5b0581e80622f530587748127 100644 +index 9dd0f8b3e4042bdd3adcb2ec59fdbe9629d0915f..eb7f6bda9fb38dd100d24fb92fce77b93974d874 100644 --- a/build.gradle.kts +++ b/build.gradle.kts -@@ -69,6 +69,7 @@ tasks.withType { +@@ -83,6 +83,7 @@ tasks.withType { compilerArgs.add("-Xlint:-module") compilerArgs.add("-Xlint:-removal") compilerArgs.add("-Xlint:-dep-ann") @@ -16,7 +16,7 @@ index e3ef85b9556b93453d6e4b07a3416ffa3f1029a0..879f8163d820cfe5b0581e80622f5305 } // Leaves end - hide irrelevant compilation warnings -@@ -193,6 +194,8 @@ fun TaskContainer.registerRunTask( +@@ -207,6 +208,8 @@ fun TaskContainer.registerRunTask( minHeapSize = "${memoryGb}G" maxHeapSize = "${memoryGb}G" diff --git a/patches/server/0083-Dont-respond-ping-before-start-fully.patch b/patches/server/0083-Dont-respond-ping-before-start-fully.patch index 3a2d3e01..56b907ba 100644 --- a/patches/server/0083-Dont-respond-ping-before-start-fully.patch +++ b/patches/server/0083-Dont-respond-ping-before-start-fully.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Dont respond ping before start fully This patch is Powered by Gale(https://github.com/GaleMC/Gale) diff --git a/src/main/java/net/minecraft/server/network/ServerStatusPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerStatusPacketListenerImpl.java -index 2c13147bc063a09bb7907d6f90c3a1e811a09eb1..b6332639468dbfc3086f100809fdb3d471867d12 100644 +index e5006e7672ba79ed4bcf2c4173c5a9ed4c68395b..06093105d58db26ae4b7dac80bce659995eeaf0f 100644 --- a/src/main/java/net/minecraft/server/network/ServerStatusPacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerStatusPacketListenerImpl.java @@ -153,6 +153,12 @@ public class ServerStatusPacketListenerImpl implements ServerStatusPacketListene diff --git a/patches/server/0085-Optimize-world-generation-chunk-and-block-access.patch b/patches/server/0085-Optimize-world-generation-chunk-and-block-access.patch index c1ce2e14..cedd949b 100644 --- a/patches/server/0085-Optimize-world-generation-chunk-and-block-access.patch +++ b/patches/server/0085-Optimize-world-generation-chunk-and-block-access.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Optimize world generation chunk and block access This patch is Powered by Gale(https://github.com/GaleMC/Gale) diff --git a/src/main/java/net/minecraft/server/level/WorldGenRegion.java b/src/main/java/net/minecraft/server/level/WorldGenRegion.java -index 50ed7cfe1ecef6d075ba484804827cec83ba2bf2..933569818700d19ed1e18b6550584aa3f432dd31 100644 +index 14a5492428eac823a295ef3746d0aca6fbdab4ec..bd1b75907d9fd9726ce513b9e0d84abfa5ed9ae9 100644 --- a/src/main/java/net/minecraft/server/level/WorldGenRegion.java +++ b/src/main/java/net/minecraft/server/level/WorldGenRegion.java @@ -83,6 +83,10 @@ public class WorldGenRegion implements WorldGenLevel { diff --git a/patches/server/0090-Cache-BlockStatePairKey-hash.patch b/patches/server/0090-Cache-BlockStatePairKey-hash.patch index 6cc48628..c85eff8c 100644 --- a/patches/server/0090-Cache-BlockStatePairKey-hash.patch +++ b/patches/server/0090-Cache-BlockStatePairKey-hash.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Cache BlockStatePairKey hash This patch is Powered by Gale(https://github.com/GaleMC/Gale) diff --git a/src/main/java/net/minecraft/world/level/block/Block.java b/src/main/java/net/minecraft/world/level/block/Block.java -index 9a970c6aff2f5f2edbad600156493a7c1f28e620..671a2f0f6f4abe7915644598185092a4ad9106fa 100644 +index d38e7894239db17b6a00a6e6316643fbc990d496..478dcee61e4cb5e0691ce52a3be2e307f6d4af64 100644 --- a/src/main/java/net/minecraft/world/level/block/Block.java +++ b/src/main/java/net/minecraft/world/level/block/Block.java -@@ -624,11 +624,18 @@ public class Block extends BlockBehaviour implements ItemLike { +@@ -632,11 +632,18 @@ public class Block extends BlockBehaviour implements ItemLike { private final BlockState first; private final BlockState second; private final Direction direction; @@ -28,7 +28,7 @@ index 9a970c6aff2f5f2edbad600156493a7c1f28e620..671a2f0f6f4abe7915644598185092a4 } public boolean equals(Object object) { -@@ -644,11 +651,17 @@ public class Block extends BlockBehaviour implements ItemLike { +@@ -652,11 +659,17 @@ public class Block extends BlockBehaviour implements ItemLike { } public int hashCode() { diff --git a/patches/server/0093-Reduce-array-allocations.patch b/patches/server/0093-Reduce-array-allocations.patch index 7e42ab7b..7907a827 100644 --- a/patches/server/0093-Reduce-array-allocations.patch +++ b/patches/server/0093-Reduce-array-allocations.patch @@ -142,7 +142,7 @@ index 06648f9751fd8a322d0809ffebf6a544596ee1a4..40e957a4364c8017072dcd81fcb7cf2c @Override diff --git a/src/main/java/net/minecraft/nbt/CompoundTag.java b/src/main/java/net/minecraft/nbt/CompoundTag.java -index 84fc2adf591f02a14862f7c1cd645c2efde55c3d..8a601f7d10ea985b2383a5be31c0ba8596a16d7b 100644 +index e464ada187fd1f15efef29a0e5033aeb0c688059..31ae491fdac6e27a3569c8c421cc49e7eab5d4b5 100644 --- a/src/main/java/net/minecraft/nbt/CompoundTag.java +++ b/src/main/java/net/minecraft/nbt/CompoundTag.java @@ -17,6 +17,7 @@ import javax.annotation.Nullable; @@ -153,7 +153,7 @@ index 84fc2adf591f02a14862f7c1cd645c2efde55c3d..8a601f7d10ea985b2383a5be31c0ba85 public class CompoundTag implements Tag { public static final Codec CODEC = Codec.PASSTHROUGH.comapFlatMap((dynamic) -> { -@@ -416,7 +417,7 @@ public class CompoundTag implements Tag { +@@ -420,7 +421,7 @@ public class CompoundTag implements Tag { throw new ReportedException(this.createReport(key, ByteArrayTag.TYPE, var3)); } @@ -162,7 +162,7 @@ index 84fc2adf591f02a14862f7c1cd645c2efde55c3d..8a601f7d10ea985b2383a5be31c0ba85 } public int[] getIntArray(String key) { -@@ -428,7 +429,7 @@ public class CompoundTag implements Tag { +@@ -432,7 +433,7 @@ public class CompoundTag implements Tag { throw new ReportedException(this.createReport(key, IntArrayTag.TYPE, var3)); } @@ -171,7 +171,7 @@ index 84fc2adf591f02a14862f7c1cd645c2efde55c3d..8a601f7d10ea985b2383a5be31c0ba85 } public long[] getLongArray(String key) { -@@ -440,7 +441,7 @@ public class CompoundTag implements Tag { +@@ -444,7 +445,7 @@ public class CompoundTag implements Tag { throw new ReportedException(this.createReport(key, LongArrayTag.TYPE, var3)); } @@ -227,10 +227,10 @@ index b0517b9483a8cfd74997f89efdc0d8559b80ae4a..e7cfc98aa6dc19c5adad4c797ae7292a for (int j = 0; j < i; ++j) { diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 7e5712f0fffe2a8606c47bdfe4bfa5191aaf5bfc..3579766177a5ad627fef0ba27948e962d1140415 100644 +index 49bed177db75c73f09dfd6b48dc88ae3432f5e84..4b3c4e8b404ee8fca48ceb333438a1ecb70c5cb3 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -172,6 +172,7 @@ import org.bukkit.event.weather.LightningStrikeEvent; +@@ -178,6 +178,7 @@ import org.bukkit.event.world.GenericGameEvent; import org.bukkit.event.world.TimeSkipEvent; // CraftBukkit end import it.unimi.dsi.fastutil.ints.IntArrayList; // Paper @@ -238,16 +238,16 @@ index 7e5712f0fffe2a8606c47bdfe4bfa5191aaf5bfc..3579766177a5ad627fef0ba27948e962 public class ServerLevel extends Level implements WorldGenLevel { -@@ -1047,7 +1048,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1070,7 +1071,7 @@ public class ServerLevel extends Level implements WorldGenLevel { BlockPos blockposition2 = blockposition.set(j + randomX, randomY, k + randomZ); BlockState iblockdata = com.destroystokyo.paper.util.maplist.IBlockDataList.getBlockDataFromRaw(raw); - iblockdata.randomTick(this, blockposition2, this.randomTickRandom); + iblockdata.randomTick(this, blockposition2.immutable(), this.randomTickRandom); // Leaves - reduce array allocations - // We drop the fluid tick since LAVA is ALREADY TICKED by the above method (See LiquidBlock). - // TODO CHECK ON UPDATE (ping the Canadian) } -@@ -1348,7 +1349,7 @@ public class ServerLevel extends Level implements WorldGenLevel { + // We drop the fluid tick since LAVA is ALREADY TICKED by the above method (See LiquidBlock). + // TODO CHECK ON UPDATE (ping the Canadian) +@@ -1376,7 +1377,7 @@ public class ServerLevel extends Level implements WorldGenLevel { public static List getCurrentlyTickingEntities() { Entity ticking = currentlyTickingEntity.get(); @@ -257,10 +257,10 @@ index 7e5712f0fffe2a8606c47bdfe4bfa5191aaf5bfc..3579766177a5ad627fef0ba27948e962 return ret; } diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 55e9f1e3124ee1c876ed37cf291df77ac0ee596c..afbefe01fe7b4a129d8bd471658d5ee64507477e 100644 +index 6ecfad2ef86a6d2cd280c847e159977285999134..9e1e99a5afa972527d036a32339b571816b325fe 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -239,6 +239,7 @@ import org.bukkit.inventory.EquipmentSlot; +@@ -243,6 +243,7 @@ import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.InventoryView; import org.bukkit.inventory.SmithingInventory; // CraftBukkit end @@ -268,7 +268,7 @@ index 55e9f1e3124ee1c876ed37cf291df77ac0ee596c..afbefe01fe7b4a129d8bd471658d5ee6 public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl implements ServerGamePacketListener, ServerPlayerConnection, TickablePacketListener { -@@ -780,13 +781,13 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -783,13 +784,13 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl // PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel()); // Paper - run this async // CraftBukkit start if (this.chatSpamTickCount.addAndGet(io.papermc.paper.configuration.GlobalConfiguration.get().spamLimiter.tabSpamIncrement) > io.papermc.paper.configuration.GlobalConfiguration.get().spamLimiter.tabSpamLimit && !this.server.getPlayerList().isOp(this.player.getGameProfile())) { // Paper start - split and make configurable @@ -284,7 +284,7 @@ index 55e9f1e3124ee1c876ed37cf291df77ac0ee596c..afbefe01fe7b4a129d8bd471658d5ee6 return; } // Paper end -@@ -3200,7 +3201,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -3202,7 +3203,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl // Paper start if (!org.bukkit.Bukkit.isPrimaryThread()) { if (this.recipeSpamPackets.addAndGet(io.papermc.paper.configuration.GlobalConfiguration.get().spamLimiter.recipeSpamIncrement) > io.papermc.paper.configuration.GlobalConfiguration.get().spamLimiter.recipeSpamLimit) { @@ -294,10 +294,10 @@ index 55e9f1e3124ee1c876ed37cf291df77ac0ee596c..afbefe01fe7b4a129d8bd471658d5ee6 } } diff --git a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -index 1c4f272219e68373eaae93fc5ea9af7d8f3fd6f9..e6834c3388cba6d014871efb3ab2b9538ca18c3f 100644 +index 89b3184be952fd0803520dd0f717f3acfc3cb496..adf510f28ce9a9c83821e23e0e46dfc32659c6a7 100644 --- a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -@@ -43,6 +43,7 @@ import org.bukkit.craftbukkit.util.Waitable; +@@ -44,6 +44,7 @@ import org.bukkit.craftbukkit.util.Waitable; import org.bukkit.event.player.AsyncPlayerPreLoginEvent; import org.bukkit.event.player.PlayerPreLoginEvent; // CraftBukkit end @@ -305,20 +305,18 @@ index 1c4f272219e68373eaae93fc5ea9af7d8f3fd6f9..e6834c3388cba6d014871efb3ab2b953 public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, TickablePacketListener { -@@ -157,8 +158,10 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, +@@ -138,8 +139,8 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, @Override public void handleHello(ServerboundHelloPacket packet) { - Validate.validState(this.state == ServerLoginPacketListenerImpl.State.HELLO, "Unexpected hello packet", new Object[0]); -- Validate.validState(ServerLoginPacketListenerImpl.isValidUsername(packet.name()), "Invalid characters in username", new Object[0]); -+ // Gale start - JettPack - reduce array allocations -+ Validate.validState(this.state == ServerLoginPacketListenerImpl.State.HELLO, "Unexpected hello packet", ArrayConstants.emptyObjectArray); -+ Validate.validState(ServerLoginPacketListenerImpl.isValidUsername(packet.name()), "Invalid characters in username", ArrayConstants.emptyObjectArray); -+ // Gale end - JettPack - reduce array allocations - // Paper start - validate usernames - if (io.papermc.paper.configuration.GlobalConfiguration.get().proxies.isProxyOnlineMode() && io.papermc.paper.configuration.GlobalConfiguration.get().unsupportedSettings.performUsernameValidation) { - if (!this.iKnowThisMayNotBeTheBestIdeaButPleaseDisableUsernameValidation && !validateUsername(packet.name())) { -@@ -251,7 +254,7 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, +- if (io.papermc.paper.configuration.GlobalConfiguration.get().proxies.isProxyOnlineMode() && io.papermc.paper.configuration.GlobalConfiguration.get().unsupportedSettings.performUsernameValidation && !this.iKnowThisMayNotBeTheBestIdeaButPleaseDisableUsernameValidation) Validate.validState(Player.isValidUsername(packet.name()), "Invalid characters in username", new Object[0]); // Paper - config username validation ++ Validate.validState(this.state == ServerLoginPacketListenerImpl.State.HELLO, "Unexpected hello packet", ArrayConstants.emptyObjectArray); // Leaves - reduce array allocations ++ if (io.papermc.paper.configuration.GlobalConfiguration.get().proxies.isProxyOnlineMode() && io.papermc.paper.configuration.GlobalConfiguration.get().unsupportedSettings.performUsernameValidation && !this.iKnowThisMayNotBeTheBestIdeaButPleaseDisableUsernameValidation) Validate.validState(Player.isValidUsername(packet.name()), "Invalid characters in username", ArrayConstants.emptyObjectArray); // Paper - config username validation // Leaves - reduce array allocations + this.requestedUsername = packet.name(); + GameProfile gameprofile = this.server.getSingleplayerProfile(); + +@@ -218,7 +219,7 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, @Override public void handleKey(ServerboundKeyPacket packet) { @@ -328,18 +326,18 @@ index 1c4f272219e68373eaae93fc5ea9af7d8f3fd6f9..e6834c3388cba6d014871efb3ab2b953 final String s; diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 683691fa61d02be951a0f759b1983ce9c5cd3863..1bc21038e33faa9c1f24acedabeb84741e31de05 100644 +index 2818f21777560f271379884e0cf3ef26bd99196a..cd962621ee0d8bd17926a90ce960c46f1ae5a8dd 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -123,6 +123,7 @@ import org.bukkit.event.player.PlayerRespawnEvent; - import org.bukkit.event.player.PlayerRespawnEvent.RespawnReason; - // CraftBukkit end +@@ -122,6 +122,7 @@ import org.bukkit.event.player.PlayerSpawnChangeEvent; -+import top.leavesmc.leaves.util.ArrayConstants; + import top.leavesmc.leaves.bot.ServerBot; import top.leavesmc.leaves.util.ReturnPortalManager; // Leaves - return portal fix ++import top.leavesmc.leaves.util.ArrayConstants; public abstract class PlayerList { -@@ -736,7 +737,7 @@ public abstract class PlayerList { + +@@ -734,7 +735,7 @@ public abstract class PlayerList { while (iterator.hasNext()) { entityplayer = (ServerPlayer) iterator.next(); this.save(entityplayer); // CraftBukkit - Force the player's inventory to be saved @@ -349,10 +347,10 @@ index 683691fa61d02be951a0f759b1983ce9c5cd3863..1bc21038e33faa9c1f24acedabeb8474 // Instead of kicking then returning, we need to store the kick reason diff --git a/src/main/java/net/minecraft/server/players/StoredUserList.java b/src/main/java/net/minecraft/server/players/StoredUserList.java -index 09fc086548b9d0f97849f56f41e3a5be87f5091a..455efedffb3301a9883107dc35499f493a06a4ef 100644 +index 665120a62525f56912263a3e1b6f12f6c3e15dec..7fd220838520bf0f971d6fbe6d9286592d590253 100644 --- a/src/main/java/net/minecraft/server/players/StoredUserList.java +++ b/src/main/java/net/minecraft/server/players/StoredUserList.java -@@ -27,6 +27,7 @@ import javax.annotation.Nullable; +@@ -25,6 +25,7 @@ import javax.annotation.Nullable; import net.minecraft.Util; import net.minecraft.util.GsonHelper; import org.slf4j.Logger; @@ -360,7 +358,7 @@ index 09fc086548b9d0f97849f56f41e3a5be87f5091a..455efedffb3301a9883107dc35499f49 public abstract class StoredUserList> { -@@ -96,7 +97,7 @@ public abstract class StoredUserList> { +@@ -79,7 +80,7 @@ public abstract class StoredUserList> { } public String[] getUserList() { @@ -398,10 +396,10 @@ index 2e324276ea4cd9e528c6a3f9a9ba394b378fe075..8d949983a30f27a60982f6b406151408 private EquipmentSlot(EquipmentSlot.Type type, int entityId, int armorStandId, String name) { this.type = type; diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index eea0eb67b3f74574d8dcd8cad30394f3a49cb2cd..8360805905810eae915a61b2e41aedf232c106da 100644 +index c5be586d14751991c95626adb76d7a99612f7daa..2b34c1b58bc0f25462834bdc2e79c6936553729b 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -3146,7 +3146,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3143,7 +3143,7 @@ public abstract class LivingEntity extends Entity implements Attackable { @Nullable private Map collectEquipmentChanges() { Map map = null; @@ -411,10 +409,10 @@ index eea0eb67b3f74574d8dcd8cad30394f3a49cb2cd..8360805905810eae915a61b2e41aedf2 for (int j = 0; j < i; ++j) { diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 115c25ec168145ae78797eeed830de66aa4546b1..c233c1e9f3162e6835d02ec1f3ef8267f8f1d7b2 100644 +index 339782b10101189fdf70d41330d2e793713d1544..a4193814174821614e8c47d7662d567a352102bc 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -1081,7 +1081,7 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -1082,7 +1082,7 @@ public abstract class Mob extends LivingEntity implements Targeting { @Override protected void dropCustomDeathLoot(DamageSource source, int lootingMultiplier, boolean allowDrops) { super.dropCustomDeathLoot(source, lootingMultiplier, allowDrops); @@ -423,7 +421,7 @@ index 115c25ec168145ae78797eeed830de66aa4546b1..c233c1e9f3162e6835d02ec1f3ef8267 int j = aenumitemslot.length; for (int k = 0; k < j; ++k) { -@@ -1143,7 +1143,7 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -1144,7 +1144,7 @@ public abstract class Mob extends LivingEntity implements Targeting { } boolean flag = true; @@ -432,7 +430,7 @@ index 115c25ec168145ae78797eeed830de66aa4546b1..c233c1e9f3162e6835d02ec1f3ef8267 int j = aenumitemslot.length; for (int k = 0; k < j; ++k) { -@@ -1230,7 +1230,7 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -1231,7 +1231,7 @@ public abstract class Mob extends LivingEntity implements Targeting { float f = localDifficulty.getSpecialMultiplier(); this.enchantSpawnedWeapon(random, f); @@ -441,7 +439,7 @@ index 115c25ec168145ae78797eeed830de66aa4546b1..c233c1e9f3162e6835d02ec1f3ef8267 int i = aenumitemslot.length; for (int j = 0; j < i; ++j) { -@@ -1449,7 +1449,7 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -1450,7 +1450,7 @@ public abstract class Mob extends LivingEntity implements Targeting { t0.setInvulnerable(this.isInvulnerable()); if (flag) { t0.setCanPickUpLoot(this.canPickUpLoot()); @@ -464,10 +462,10 @@ index 94396ad1a3c280787d36c6c18256d10340ace488..ae0de0d0cb970a10a8a612cf34810a36 for (int j = 0; j < i; ++j) { diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java -index a314d3aa9b2cf22bc34ac54ba1552138ad39191a..e46f323e0b11bc22b7c4c07f313cbba501eb0cc0 100644 +index fdfbca595e5bff701bf6d9dd7990d67fbb16795f..c85ae98b7d50e7f08035417d2f4d43099c02041c 100644 --- a/src/main/java/net/minecraft/world/item/ItemStack.java +++ b/src/main/java/net/minecraft/world/item/ItemStack.java -@@ -1027,7 +1027,7 @@ public final class ItemStack { +@@ -1052,7 +1052,7 @@ public final class ItemStack { int k; if (ItemStack.shouldShowInTooltip(i, ItemStack.TooltipPart.MODIFIERS)) { @@ -477,10 +475,10 @@ index a314d3aa9b2cf22bc34ac54ba1552138ad39191a..e46f323e0b11bc22b7c4c07f313cbba5 k = aenumitemslot.length; diff --git a/src/main/java/net/minecraft/world/item/crafting/ShapedRecipe.java b/src/main/java/net/minecraft/world/item/crafting/ShapedRecipe.java -index 17bef91546fa85d401b263c3a69fbf464f290eca..131d9b730f1c3dfa4c8c4a63a6567fe3ebd6191e 100644 +index d772cf80fa3831e1c79d601ea09a073da089e2c5..4699f5fd794a7ef1f430e801bd35f1c62452aa8e 100644 --- a/src/main/java/net/minecraft/world/item/crafting/ShapedRecipe.java +++ b/src/main/java/net/minecraft/world/item/crafting/ShapedRecipe.java -@@ -25,6 +25,7 @@ import org.bukkit.craftbukkit.inventory.CraftRecipe; +@@ -16,6 +16,7 @@ import org.bukkit.craftbukkit.inventory.CraftRecipe; import org.bukkit.craftbukkit.inventory.CraftShapedRecipe; import org.bukkit.inventory.RecipeChoice; // CraftBukkit end @@ -488,37 +486,28 @@ index 17bef91546fa85d401b263c3a69fbf464f290eca..131d9b730f1c3dfa4c8c4a63a6567fe3 public class ShapedRecipe extends io.papermc.paper.inventory.recipe.RecipeBookExactChoiceRecipe implements CraftingRecipe { // Paper - improve exact recipe choices -@@ -226,7 +227,7 @@ public class ShapedRecipe extends io.papermc.paper.inventory.recipe.RecipeBookEx - } - - if (pattern.size() == l) { -- return new String[0]; -+ return ArrayConstants.emptyStringArray; // Leaves - reduce array allocations - } else { - String[] astring = new String[pattern.size() - l - k]; - diff --git a/src/main/java/net/minecraft/world/item/enchantment/Enchantments.java b/src/main/java/net/minecraft/world/item/enchantment/Enchantments.java -index 2bfbdaeb2b0d99dfd956cd5936403fe8b0eeae64..7ad1545631604aa55f6d4fbdcbaefe6dc647f35c 100644 +index 6c2e8049c2197ddc912c1a0fc99c87beae81e25b..be13baa7b51c4ad377b50d8ca8f7cfad3c870390 100644 --- a/src/main/java/net/minecraft/world/item/enchantment/Enchantments.java +++ b/src/main/java/net/minecraft/world/item/enchantment/Enchantments.java -@@ -44,8 +44,10 @@ public class Enchantments { - public static final Enchantment MULTISHOT = Enchantments.register("multishot", new MultiShotEnchantment(Enchantment.Rarity.RARE, new EquipmentSlot[]{EquipmentSlot.MAINHAND})); - public static final Enchantment QUICK_CHARGE = Enchantments.register("quick_charge", new QuickChargeEnchantment(Enchantment.Rarity.UNCOMMON, new EquipmentSlot[]{EquipmentSlot.MAINHAND})); - public static final Enchantment PIERCING = Enchantments.register("piercing", new ArrowPiercingEnchantment(Enchantment.Rarity.COMMON, new EquipmentSlot[]{EquipmentSlot.MAINHAND})); -- public static final Enchantment MENDING = Enchantments.register("mending", new MendingEnchantment(Enchantment.Rarity.RARE, EquipmentSlot.values())); -- public static final Enchantment VANISHING_CURSE = Enchantments.register("vanishing_curse", new VanishingCurseEnchantment(Enchantment.Rarity.VERY_RARE, EquipmentSlot.values())); +@@ -43,8 +43,10 @@ public class Enchantments { + public static final Enchantment MULTISHOT = register("multishot", new MultiShotEnchantment(Enchantment.Rarity.RARE, EquipmentSlot.MAINHAND)); + public static final Enchantment QUICK_CHARGE = register("quick_charge", new QuickChargeEnchantment(Enchantment.Rarity.UNCOMMON, EquipmentSlot.MAINHAND)); + public static final Enchantment PIERCING = register("piercing", new ArrowPiercingEnchantment(Enchantment.Rarity.COMMON, EquipmentSlot.MAINHAND)); +- public static final Enchantment MENDING = register("mending", new MendingEnchantment(Enchantment.Rarity.RARE, EquipmentSlot.values())); +- public static final Enchantment VANISHING_CURSE = register("vanishing_curse", new VanishingCurseEnchantment(Enchantment.Rarity.VERY_RARE, EquipmentSlot.values())); + // Leaves start - reduce array allocations + public static final Enchantment MENDING = Enchantments.register("mending", new MendingEnchantment(Enchantment.Rarity.RARE, EquipmentSlot.VALUES)); + public static final Enchantment VANISHING_CURSE = Enchantments.register("vanishing_curse", new VanishingCurseEnchantment(Enchantment.Rarity.VERY_RARE, EquipmentSlot.VALUES)); + // Leaves end - reduce array allocations - public Enchantments() {} - + private static Enchantment register(String name, Enchantment enchantment) { + return Registry.register(BuiltInRegistries.ENCHANTMENT, name, enchantment); diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index cdfeb7f87efdfe689a43b3d13656c8f682b5400e..cabd335e0a52e992bb2e1fbd3215ee10715c993b 100644 +index 614c37b11f7820bedc576fce74829c1950ed7756..302f0f5c3a8137e1eb1b90a25e92e82e308c02c4 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -94,6 +94,7 @@ import org.bukkit.craftbukkit.util.CraftSpawnCategory; +@@ -97,6 +97,7 @@ import org.bukkit.craftbukkit.util.CraftSpawnCategory; import org.bukkit.entity.SpawnCategory; import org.bukkit.event.block.BlockPhysicsEvent; // CraftBukkit end @@ -526,7 +515,7 @@ index cdfeb7f87efdfe689a43b3d13656c8f682b5400e..cabd335e0a52e992bb2e1fbd3215ee10 public abstract class Level implements LevelAccessor, AutoCloseable { -@@ -1828,7 +1829,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1848,7 +1849,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { public org.bukkit.entity.Entity[] getChunkEntities(int chunkX, int chunkZ) { io.papermc.paper.world.ChunkEntitySlices slices = ((ServerLevel)this).getEntityLookup().getChunk(chunkX, chunkZ); if (slices == null) { @@ -536,10 +525,10 @@ index cdfeb7f87efdfe689a43b3d13656c8f682b5400e..cabd335e0a52e992bb2e1fbd3215ee10 return slices.getChunkEntities(); } diff --git a/src/main/java/net/minecraft/world/level/block/ComposterBlock.java b/src/main/java/net/minecraft/world/level/block/ComposterBlock.java -index 10d3912ef043eefdf89105332e29b0d2bf4a5539..3bc33b552743be03c6b895e0d217152a65454807 100644 +index de8b5cab7925c1c46478952ed2cb2bd40f9a9c48..3ea1c2a9a3e6dfb65d95b5ed92d21f401a1c0cd2 100644 --- a/src/main/java/net/minecraft/world/level/block/ComposterBlock.java +++ b/src/main/java/net/minecraft/world/level/block/ComposterBlock.java -@@ -43,6 +43,7 @@ import net.minecraft.world.phys.shapes.VoxelShape; +@@ -44,6 +44,7 @@ import net.minecraft.world.phys.shapes.VoxelShape; import org.bukkit.craftbukkit.inventory.CraftBlockInventoryHolder; import org.bukkit.craftbukkit.util.DummyGeneratorAccess; // CraftBukkit end @@ -547,7 +536,7 @@ index 10d3912ef043eefdf89105332e29b0d2bf4a5539..3bc33b552743be03c6b895e0d217152a public class ComposterBlock extends Block implements WorldlyContainerHolder { -@@ -415,7 +416,7 @@ public class ComposterBlock extends Block implements WorldlyContainerHolder { +@@ -422,7 +423,7 @@ public class ComposterBlock extends Block implements WorldlyContainerHolder { @Override public int[] getSlotsForFace(Direction side) { @@ -556,7 +545,7 @@ index 10d3912ef043eefdf89105332e29b0d2bf4a5539..3bc33b552743be03c6b895e0d217152a } @Override -@@ -464,7 +465,7 @@ public class ComposterBlock extends Block implements WorldlyContainerHolder { +@@ -471,7 +472,7 @@ public class ComposterBlock extends Block implements WorldlyContainerHolder { @Override public int[] getSlotsForFace(Direction side) { @@ -565,7 +554,7 @@ index 10d3912ef043eefdf89105332e29b0d2bf4a5539..3bc33b552743be03c6b895e0d217152a } @Override -@@ -506,7 +507,7 @@ public class ComposterBlock extends Block implements WorldlyContainerHolder { +@@ -513,7 +514,7 @@ public class ComposterBlock extends Block implements WorldlyContainerHolder { @Override public int[] getSlotsForFace(Direction side) { @@ -596,10 +585,10 @@ index eeed0ccbf0fc04e12dea5e8602f67d862fbd3600..0caf6040c2da342971c37a9af5d83f32 private static final int[] SLOTS_FOR_SIDES = new int[]{1}; public static final int DATA_LIT_DURATION = 1; diff --git a/src/main/java/net/minecraft/world/level/storage/PlayerDataStorage.java b/src/main/java/net/minecraft/world/level/storage/PlayerDataStorage.java -index 36af81f0957d17e170d229059c66f4eb4539dfeb..487d09aaadd9cf1b239cf9773fa71cbff6e6a77e 100644 +index b3a90d6ef0e17c236e0b3c46e2d0012671afdaa7..f273d6ab29d8c2a36a4a00ef341d2a8e7ce3e8c3 100644 --- a/src/main/java/net/minecraft/world/level/storage/PlayerDataStorage.java +++ b/src/main/java/net/minecraft/world/level/storage/PlayerDataStorage.java -@@ -9,7 +9,6 @@ import net.minecraft.nbt.CompoundTag; +@@ -12,7 +12,6 @@ import net.minecraft.nbt.NbtAccounter; import net.minecraft.nbt.NbtIo; import net.minecraft.nbt.NbtUtils; import net.minecraft.server.level.ServerPlayer; @@ -607,7 +596,7 @@ index 36af81f0957d17e170d229059c66f4eb4539dfeb..487d09aaadd9cf1b239cf9773fa71cbf import net.minecraft.world.entity.player.Player; import org.slf4j.Logger; -@@ -18,6 +17,7 @@ import java.io.FileInputStream; +@@ -21,6 +20,7 @@ import java.io.FileInputStream; import java.io.InputStream; import org.bukkit.craftbukkit.entity.CraftPlayer; // CraftBukkit end @@ -615,7 +604,7 @@ index 36af81f0957d17e170d229059c66f4eb4539dfeb..487d09aaadd9cf1b239cf9773fa71cbf public class PlayerDataStorage { -@@ -119,7 +119,7 @@ public class PlayerDataStorage { +@@ -124,7 +124,7 @@ public class PlayerDataStorage { String[] astring = this.playerDir.list(); if (astring == null) { diff --git a/patches/server/0094-Optimize-sun-burn-tick.patch b/patches/server/0094-Optimize-sun-burn-tick.patch index dc22e273..747512a1 100644 --- a/patches/server/0094-Optimize-sun-burn-tick.patch +++ b/patches/server/0094-Optimize-sun-burn-tick.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Optimize sun burn tick This patch is Powered by Gale(https://github.com/GaleMC/Gale) diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 00cc1bfec7578f2118d38ef275e92a0c01ecdecc..4fdacff42533daa0cd4eabc25b5f30cbc9bbbfb4 100644 +index 9752b4205b5d3047b29fc7e98233f4f601826a57..3d450dd637502941fb0a0be9aa64f09bf14eef0a 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -1989,8 +1989,22 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -1994,8 +1994,22 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S /** @deprecated */ @Deprecated public float getLightLevelDependentMagicValue() { @@ -34,10 +34,10 @@ index 00cc1bfec7578f2118d38ef275e92a0c01ecdecc..4fdacff42533daa0cd4eabc25b5f30cb public void absMoveTo(double x, double y, double z, float yaw, float pitch) { this.absMoveTo(x, y, z); diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index c233c1e9f3162e6835d02ec1f3ef8267f8f1d7b2..7a4231892fb43a10193e2881f3715b32ac1c382f 100644 +index a4193814174821614e8c47d7662d567a352102bc..b24076ebe434b510a3a01b99dd41dbb481f4cf66 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -1711,15 +1711,41 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -1712,15 +1712,41 @@ public abstract class Mob extends LivingEntity implements Targeting { } diff --git a/patches/server/0096-Use-optimized-collection.patch b/patches/server/0096-Use-optimized-collection.patch index 5df91c30..1977596b 100644 --- a/patches/server/0096-Use-optimized-collection.patch +++ b/patches/server/0096-Use-optimized-collection.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Use optimized collection This patch is Powered by Gale(https://github.com/GaleMC/Gale) diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index 55cdb8e23b91ad68ad128c664ddad5b2cd734423..f84b3716657784ba8448b91dbebef4a12422a5d1 100644 +index ea617a5695db07d58f9115d85a06e6c07c47953e..1ffbec72ea000be04f4d0abfa9831e27b3cf3fac 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java @@ -237,7 +237,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider @@ -71,10 +71,10 @@ index b738ee2d3801fadfd09313f05ae24593e56b0ec6..2d1abb9518795875b3719efe91e60508 private final EnumSet disabledFlags = EnumSet.noneOf(Goal.Flag.class); // Paper unused, but dummy to prevent plugins from crashing as hard. Theyll need to support paper in a special case if this is super important, but really doesn't seem like it would be. private final com.destroystokyo.paper.util.set.OptimizedSmallEnumSet goalTypes = new com.destroystokyo.paper.util.set.OptimizedSmallEnumSet<>(Goal.Flag.class); // Paper - remove streams from pathfindergoalselector diff --git a/src/main/java/net/minecraft/world/level/GameRules.java b/src/main/java/net/minecraft/world/level/GameRules.java -index 6639902efb85b4f49f26ba5f90556fb871ef8a0e..d1c389021503423f20835dac32550da285930392 100644 +index 4f2fa47d094348bb8f86a86e808019ddba56e187..e6938589bf12ccd401cc6700cfa5f28cefc93c9f 100644 --- a/src/main/java/net/minecraft/world/level/GameRules.java +++ b/src/main/java/net/minecraft/world/level/GameRules.java -@@ -137,7 +137,7 @@ public class GameRules { +@@ -141,7 +141,7 @@ public class GameRules { } private GameRules(Map, GameRules.Value> rules) { @@ -84,10 +84,10 @@ index 6639902efb85b4f49f26ba5f90556fb871ef8a0e..d1c389021503423f20835dac32550da2 // Paper start int arraySize = rules.keySet().stream().mapToInt(key -> key.gameRuleIndex).max().orElse(-1) + 1; diff --git a/src/main/java/net/minecraft/world/level/block/Block.java b/src/main/java/net/minecraft/world/level/block/Block.java -index 671a2f0f6f4abe7915644598185092a4ad9106fa..6058750fdc664e674b00551dbbbaeae78c00028a 100644 +index 478dcee61e4cb5e0691ce52a3be2e307f6d4af64..38f3644ffe7fd13f13b928ee8568860a23d7c69d 100644 --- a/src/main/java/net/minecraft/world/level/block/Block.java +++ b/src/main/java/net/minecraft/world/level/block/Block.java -@@ -61,6 +61,7 @@ import net.minecraft.world.phys.shapes.BooleanOp; +@@ -62,6 +62,7 @@ import net.minecraft.world.phys.shapes.BooleanOp; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; import org.slf4j.Logger; @@ -95,7 +95,7 @@ index 671a2f0f6f4abe7915644598185092a4ad9106fa..6058750fdc664e674b00551dbbbaeae7 public class Block extends BlockBehaviour implements ItemLike { -@@ -72,6 +73,12 @@ public class Block extends BlockBehaviour implements ItemLike { +@@ -74,6 +75,12 @@ public class Block extends BlockBehaviour implements ItemLike { return !Shapes.joinIsNotEmpty(Shapes.block(), voxelshape, BooleanOp.NOT_SAME); } }); diff --git a/patches/server/0099-Check-frozen-ticks-before-landing-block.patch b/patches/server/0099-Check-frozen-ticks-before-landing-block.patch index 9132a0eb..27d3f380 100644 --- a/patches/server/0099-Check-frozen-ticks-before-landing-block.patch +++ b/patches/server/0099-Check-frozen-ticks-before-landing-block.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Check frozen ticks before landing block This patch is Powered by Gale(https://github.com/GaleMC/Gale) diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 61379db810c84a6044dee6d1a0457442d41cb407..8e9af399588698b05018cc63b5c36841a0bc02ed 100644 +index 2b34c1b58bc0f25462834bdc2e79c6936553729b..abc2c1c5ffb1ccf8bfac88b79326d62921daf632 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -582,11 +582,11 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -581,11 +581,11 @@ public abstract class LivingEntity extends Entity implements Attackable { } protected void tryAddFrost() { diff --git a/patches/server/0100-Cache-ominous-banner-item.patch b/patches/server/0100-Cache-ominous-banner-item.patch index dd32a245..98f41755 100644 --- a/patches/server/0100-Cache-ominous-banner-item.patch +++ b/patches/server/0100-Cache-ominous-banner-item.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Cache ominous banner item This patch is Powered by Gale(https://github.com/GaleMC/Gale) diff --git a/src/main/java/net/minecraft/advancements/critereon/EntityEquipmentPredicate.java b/src/main/java/net/minecraft/advancements/critereon/EntityEquipmentPredicate.java -index 3509fd5ad4f06cbac24d2dcdde171cebbdd0fcc1..d0bbe00173c72eccd4b9a8a72b17ad698fb5fbf3 100644 +index f4e5ada556a7fc7adac9b8d3e75ace483f753782..31a26dc4b6fb22fa27e7e6de0c7a32df04849271 100644 --- a/src/main/java/net/minecraft/advancements/critereon/EntityEquipmentPredicate.java +++ b/src/main/java/net/minecraft/advancements/critereon/EntityEquipmentPredicate.java @@ -15,7 +15,7 @@ public record EntityEquipmentPredicate(Optional head, Optional parent, Optional parent, Optional display, AdvancementRewards rewards, Map> criteria, AdvancementRequirements requirements, boolean sendsTelemetryEvent, Optional name) { public Advancement(Optional parent, Optional display, AdvancementRewards rewards, Map> criteria, AdvancementRequirements requirements, boolean sendsTelemetryEvent) { - this(parent, display, rewards, Map.copyOf(criteria), requirements, sendsTelemetryEvent, display.map(Advancement::decorateName)); + this(parent, display, rewards, !top.leavesmc.leaves.LeavesConfig.skipCloningAdvancementCriteria ? Map.copyOf(criteria) : criteria, requirements, sendsTelemetryEvent, display.map(Advancement::decorateName)); // Leaves - skip cloning advancement criteria } - public static Component decorateName(DisplayInfo display) { + private static DataResult validate(Advancement advancement) { diff --git a/patches/server/0103-Skip-negligible-planar-movement-multiplication.patch b/patches/server/0103-Skip-negligible-planar-movement-multiplication.patch index c19ffa52..89f01ab2 100644 --- a/patches/server/0103-Skip-negligible-planar-movement-multiplication.patch +++ b/patches/server/0103-Skip-negligible-planar-movement-multiplication.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Skip negligible planar movement multiplication This patch is Powered by Gale(https://github.com/GaleMC/Gale) diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index f0ccd174fb7fa56ab3cd387d6680e8c5e5ecb5c3..c1f0c485af4198ba16c606bcfa8507982776ec55 100644 +index 98570eb6c9c42bba4daf32d447c29650cfcd4de7..295f16965ef33c6369303b3c9a19be047223afaa 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -1213,9 +1213,16 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -1218,9 +1218,16 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } this.tryCheckInsideBlocks(); diff --git a/patches/server/0104-Fix-villagers-dont-release-memory.patch b/patches/server/0104-Fix-villagers-dont-release-memory.patch index 2888c790..ba918048 100644 --- a/patches/server/0104-Fix-villagers-dont-release-memory.patch +++ b/patches/server/0104-Fix-villagers-dont-release-memory.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Fix villagers dont release memory diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index cbe2a37f74f4fb2abd0b3297699e54335aaed64f..212c8a00eae9ef255e70790c26e50c44f9d5ff49 100644 +index 11935e5b16324af572b07c5b173708f5a91f8289..0b334ab58d723f27dae68974ed6ec5d64b10ad40 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java @@ -1076,4 +1076,20 @@ public class Villager extends AbstractVillager implements ReputationEventHandler diff --git a/patches/server/0105-Avoid-anvil-too-expensive.patch b/patches/server/0105-Avoid-anvil-too-expensive.patch index 6e158eb3..a669dde8 100644 --- a/patches/server/0105-Avoid-anvil-too-expensive.patch +++ b/patches/server/0105-Avoid-anvil-too-expensive.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Avoid anvil too expensive diff --git a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java -index e0c3a4ba27e21c3692e601acd0af60873bcbb84c..b9fcf49ed88c62265d9aa8926c1228b96bf314b6 100644 +index f00638e9d7baf8b803dd610f2bf6250da34efab3..6ceb841fe5b415265cf3799d11c85f1ac9166601 100644 --- a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java +++ b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java @@ -293,7 +293,7 @@ public class AnvilMenu extends ItemCombinerMenu { diff --git a/patches/server/0107-Zero-tick-plants.patch b/patches/server/0107-Zero-tick-plants.patch index 98ab78b5..da9451b3 100644 --- a/patches/server/0107-Zero-tick-plants.patch +++ b/patches/server/0107-Zero-tick-plants.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Zero tick plants diff --git a/src/main/java/net/minecraft/world/level/block/BambooStalkBlock.java b/src/main/java/net/minecraft/world/level/block/BambooStalkBlock.java -index 05a508cb457b67078ccb08bd2228a59e73701cf3..a1d340eb20fab567eee26591dffee2c57cfafd05 100644 +index 1dd85da8da9e2040d740c5f573e7438380f9a7a8..a7fd8a4a6eb252bac8641547cef3a76e47118fcc 100644 --- a/src/main/java/net/minecraft/world/level/block/BambooStalkBlock.java +++ b/src/main/java/net/minecraft/world/level/block/BambooStalkBlock.java -@@ -115,8 +115,11 @@ public class BambooStalkBlock extends Block implements BonemealableBlock { +@@ -122,8 +122,11 @@ public class BambooStalkBlock extends Block implements BonemealableBlock { public void tick(BlockState state, ServerLevel world, BlockPos pos, RandomSource random) { if (!state.canSurvive(world, pos)) { world.destroyBlock(pos, true); @@ -22,10 +22,10 @@ index 05a508cb457b67078ccb08bd2228a59e73701cf3..a1d340eb20fab567eee26591dffee2c5 @Override diff --git a/src/main/java/net/minecraft/world/level/block/CactusBlock.java b/src/main/java/net/minecraft/world/level/block/CactusBlock.java -index 0003fb51ae3a6575575e10b4c86719f3061e2577..12e251428260c6e05e9a48c71493aaf2bd2b486b 100644 +index a9629a102c4fa4e5720e63fcf4590e9231426c62..b630f9c84e736bcc5d28e5ffd90bc47b2502d3de 100644 --- a/src/main/java/net/minecraft/world/level/block/CactusBlock.java +++ b/src/main/java/net/minecraft/world/level/block/CactusBlock.java -@@ -39,8 +39,11 @@ public class CactusBlock extends Block { +@@ -46,8 +46,11 @@ public class CactusBlock extends Block { public void tick(BlockState state, ServerLevel world, BlockPos pos, RandomSource random) { if (!state.canSurvive(world, pos)) { world.destroyBlock(pos, true); @@ -39,10 +39,10 @@ index 0003fb51ae3a6575575e10b4c86719f3061e2577..12e251428260c6e05e9a48c71493aaf2 @Override diff --git a/src/main/java/net/minecraft/world/level/block/ChorusFlowerBlock.java b/src/main/java/net/minecraft/world/level/block/ChorusFlowerBlock.java -index e9beebedf1d60e06e16c442b64d28d022a3e3164..cda6d18e4bdaec7d581169b3b8237bb00c1c2962 100644 +index 0ab1bbd7c8dc8e45f754434357898d8fc990a021..107a3df31a77ff7d13e18691dc2c96024456a0d6 100644 --- a/src/main/java/net/minecraft/world/level/block/ChorusFlowerBlock.java +++ b/src/main/java/net/minecraft/world/level/block/ChorusFlowerBlock.java -@@ -39,8 +39,11 @@ public class ChorusFlowerBlock extends Block { +@@ -51,8 +51,11 @@ public class ChorusFlowerBlock extends Block { public void tick(BlockState state, ServerLevel world, BlockPos pos, RandomSource random) { if (!state.canSurvive(world, pos)) { world.destroyBlock(pos, true); @@ -56,10 +56,10 @@ index e9beebedf1d60e06e16c442b64d28d022a3e3164..cda6d18e4bdaec7d581169b3b8237bb0 @Override diff --git a/src/main/java/net/minecraft/world/level/block/GrowingPlantHeadBlock.java b/src/main/java/net/minecraft/world/level/block/GrowingPlantHeadBlock.java -index b325fdec8eb99ce57152a5c0fefa5059685276e4..5897fdb2b9d4eaa07d539d92e74a71f8cee01d7b 100644 +index 4ebdc4918131a15a1c91b45e8ceb1392bca20a81..b7941eb8819592adb003adc2c6acb49c5f2709dc 100644 --- a/src/main/java/net/minecraft/world/level/block/GrowingPlantHeadBlock.java +++ b/src/main/java/net/minecraft/world/level/block/GrowingPlantHeadBlock.java -@@ -138,4 +138,15 @@ public abstract class GrowingPlantHeadBlock extends GrowingPlantBlock implements +@@ -142,4 +142,15 @@ public abstract class GrowingPlantHeadBlock extends GrowingPlantBlock implements protected GrowingPlantHeadBlock getHeadBlock() { return this; } @@ -76,10 +76,10 @@ index b325fdec8eb99ce57152a5c0fefa5059685276e4..5897fdb2b9d4eaa07d539d92e74a71f8 + // Leaves end - zero tick plants } diff --git a/src/main/java/net/minecraft/world/level/block/SugarCaneBlock.java b/src/main/java/net/minecraft/world/level/block/SugarCaneBlock.java -index c3f500580d257e1397f2eb7c47b063a6fe6bb405..34de88e9677deb7b81b314d48c4880cce451d6a6 100644 +index ceaec1776067b7635c3952025f00f13f4ea86c88..81f8519b8d21d871ff3ddabb4a3674e8f35af82c 100644 --- a/src/main/java/net/minecraft/world/level/block/SugarCaneBlock.java +++ b/src/main/java/net/minecraft/world/level/block/SugarCaneBlock.java -@@ -39,8 +39,11 @@ public class SugarCaneBlock extends Block { +@@ -46,8 +46,11 @@ public class SugarCaneBlock extends Block { public void tick(BlockState state, ServerLevel world, BlockPos pos, RandomSource random) { if (!state.canSurvive(world, pos)) { world.destroyBlock(pos, true); diff --git a/patches/server/0108-Leaves-update-command.patch b/patches/server/0108-Leaves-update-command.patch index e9fd0e8e..cc981e05 100644 --- a/patches/server/0108-Leaves-update-command.patch +++ b/patches/server/0108-Leaves-update-command.patch @@ -53,7 +53,7 @@ index 0000000000000000000000000000000000000000..293117a6c54fdce70d69b93fe80ce021 +} diff --git a/src/main/java/top/leavesmc/leaves/util/LeavesUpdateHelper.java b/src/main/java/top/leavesmc/leaves/util/LeavesUpdateHelper.java new file mode 100644 -index 0000000000000000000000000000000000000000..7476f6c5bf8c4572878159a74507193e3c4a6207 +index 0000000000000000000000000000000000000000..9b18d711191aa26c9afea85fc901e422e8f8496c --- /dev/null +++ b/src/main/java/top/leavesmc/leaves/util/LeavesUpdateHelper.java @@ -0,0 +1,234 @@ @@ -202,7 +202,7 @@ index 0000000000000000000000000000000000000000..7476f6c5bf8c4572878159a74507193e + + File nowServerCore = new File(autoUpdateDir + File.separator + "leaves" + File.separator + buildInfo.fileName); + File backupServerCore = new File(autoUpdateDir + File.separator + "leaves" + File.separator + buildInfo.fileName + ".old"); -+ Util.safeReplaceFile(nowServerCore, outFile.toFile(), backupServerCore); ++ Util.safeReplaceFile(nowServerCore.toPath(), outFile, backupServerCore.toPath()); + + try (BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(corePathFileName))) { + bufferedWriter.write(autoUpdateDir + File.separator + "leaves" + File.separator + "leaves-1.20.1.jar"); diff --git a/patches/server/0109-Force-peaceful-mode-switch.patch b/patches/server/0109-Force-peaceful-mode-switch.patch index f49211b9..24991d93 100644 --- a/patches/server/0109-Force-peaceful-mode-switch.patch +++ b/patches/server/0109-Force-peaceful-mode-switch.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Force peaceful mode switch diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -index 19aec4b735a25592ae173dcb63110d6dce0381e7..6df41418bc02f65c6d5ec84507b6ed799270b90c 100644 +index 8a3e55b3a79a174a2a55f38d39ed4b8ba29b8763..d1a32a9e5267c27d1983abfb4812a6063964291f 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -@@ -76,6 +76,12 @@ public class ServerChunkCache extends ChunkSource { +@@ -74,6 +74,12 @@ public class ServerChunkCache extends ChunkSource { private final LevelChunk[] lastLoadedChunks = new LevelChunk[4 * 4]; @@ -21,11 +21,10 @@ index 19aec4b735a25592ae173dcb63110d6dce0381e7..6df41418bc02f65c6d5ec84507b6ed79 private static int getChunkCacheKey(int x, int z) { return x & 3 | ((z & 3) << 2); } -@@ -514,6 +520,22 @@ public class ServerChunkCache extends ChunkSource { - this.level.resetIceAndSnowTick(); - } +@@ -510,6 +516,21 @@ public class ServerChunkCache extends ChunkSource { // Leaves end - reset ice & snow tick random -+ + gameprofilerfiller.push("filteringLoadedChunks"); + + // Leaves start - peaceful mode switch + if (peacefulModeSwitchTick > 0) { + if (this.level.getLevelData().getGameTime() % peacefulModeSwitchTick == 0) { @@ -41,35 +40,42 @@ index 19aec4b735a25592ae173dcb63110d6dce0381e7..6df41418bc02f65c6d5ec84507b6ed79 + } + // Leaves end - peaceful mode switch + - int k = this.level.getGameRules().getInt(GameRules.RULE_RANDOMTICKING); - boolean flag1 = this.level.ticksPerSpawnCategory.getLong(org.bukkit.entity.SpawnCategory.ANIMAL) != 0L && worlddata.getGameTime() % this.level.ticksPerSpawnCategory.getLong(org.bukkit.entity.SpawnCategory.ANIMAL) == 0L; // CraftBukkit - -@@ -603,6 +625,16 @@ public class ServerChunkCache extends ChunkSource { - Collections.shuffle(shuffled); - iterator1 = shuffled.iterator(); - } + // Paper start - optimise chunk tick iteration + ChunkMap playerChunkMap = this.chunkMap; + for (ServerPlayer player : this.level.players) { +@@ -628,10 +649,20 @@ public class ServerChunkCache extends ChunkSource { + } + Util.shuffle(shuffled, this.level.random); + chunkIterator = shuffled.iterator(); ++ } + + // Leaves start - peaceful mode switch + boolean peacefulModeSwitch = false; + if (lastSpawnState != null && peacefulModeSwitchCount != -1) { + if (peacefulModeSwitchCount >= NaturalSpawner.globalLimitForCategory(level, net.minecraft.world.entity.MobCategory.MONSTER, lastSpawnState.getSpawnableChunkCount())) { + peacefulModeSwitch = true; -+ } + } +- try { +- // Paper end - optimise chunk tick iteration +- while (chunkIterator.hasNext()) { + } + // Leaves end - peaceful mode switch + - try { - // Paper end - optimise chunk tick iteration - while (iterator1.hasNext()) { -@@ -635,7 +667,7 @@ public class ServerChunkCache extends ChunkSource { - if (tick && chunk1.chunkStatus.isOrAfter(net.minecraft.server.level.FullChunkStatus.ENTITY_TICKING)) { // Paper - optimise chunk tick iteration - chunk1.incrementInhabitedTime(j); - if (spawn && flag2 && (this.spawnEnemies || this.spawnFriendlies) && this.level.getWorldBorder().isWithinBounds(chunkcoordintpair)) { // Spigot // Paper - optimise chunk tick iteration -- NaturalSpawner.spawnForChunk(this.level, chunk1, spawnercreature_d, this.spawnFriendlies, this.spawnEnemies, flag1); -+ NaturalSpawner.spawnForChunk(this.level, chunk1, spawnercreature_d, this.spawnFriendlies, this.spawnEnemies, flag1, peacefulModeSwitch); // Leaves - peaceful mode switch - } ++ try { ++ // Paper end - optimise chunk tick iteration ++ while (chunkIterator.hasNext()) { + LevelChunk chunk1 = chunkIterator.next(); // Paper - optimise chunk tick iteration + ChunkPos chunkcoordintpair = chunk1.getPos(); - if (true || this.level.shouldTickBlocksAt(chunkcoordintpair.toLong())) { // Paper - optimise chunk tick iteration +@@ -662,7 +693,7 @@ public class ServerChunkCache extends ChunkSource { + // Paper end - optimise chunk tick iteration + chunk1.incrementInhabitedTime(j); + if (spawn && flag && (this.spawnEnemies || this.spawnFriendlies) && this.level.getWorldBorder().isWithinBounds(chunkcoordintpair)) { // Spigot // Paper - optimise chunk tick iteration +- NaturalSpawner.spawnForChunk(this.level, chunk1, spawnercreature_d, this.spawnFriendlies, this.spawnEnemies, flag1); ++ NaturalSpawner.spawnForChunk(this.level, chunk1, spawnercreature_d, this.spawnFriendlies, this.spawnEnemies, flag1, peacefulModeSwitch); // Leaves - peaceful mode switch + } + + if (true || this.level.shouldTickBlocksAt(chunkcoordintpair.toLong())) { // Paper - optimise chunk tick iteration diff --git a/src/main/java/net/minecraft/world/level/NaturalSpawner.java b/src/main/java/net/minecraft/world/level/NaturalSpawner.java index 7eec9dc8237ff04c53b573c3cc87e6cdbfdda7ed..2aafb872578d266f2826e5bddebc9b4ab9b5050b 100644 --- a/src/main/java/net/minecraft/world/level/NaturalSpawner.java @@ -100,10 +106,10 @@ index 7eec9dc8237ff04c53b573c3cc87e6cdbfdda7ed..2aafb872578d266f2826e5bddebc9b4a boolean spawnThisTick = true; int limit = enumcreaturetype.getMaxInstancesPerChunk(); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index 90c76ddcb8af13409490b8976263d27a71954668..da1b4a6dcb87d81b5fb1bfd2f2fd924b59161792 100644 +index e1fad381b861471a17529c246bb8a4a9c7646420..306c61c5d37bfda23fecde572ec6acd6d6d91e1e 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -@@ -2364,6 +2364,18 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -2370,6 +2370,18 @@ public class CraftWorld extends CraftRegionAccessor implements World { return CraftFeatureFlag.getFromNMS(this.getHandle().enabledFeatures()).stream().map(FeatureFlag.class::cast).collect(Collectors.toUnmodifiableSet()); } diff --git a/patches/server/0110-Add-Leaves-Auto-Update.patch b/patches/server/0110-Add-Leaves-Auto-Update.patch index 24155eb2..20ae7429 100644 --- a/patches/server/0110-Add-Leaves-Auto-Update.patch +++ b/patches/server/0110-Add-Leaves-Auto-Update.patch @@ -25,7 +25,7 @@ index 01514c0948c4705f7cee872ddd4686741feabefe..204718256522b0bcfb2f71754fe73787 LeavesLogger.LOGGER.warning("Auto-Update is not completely safe. Enabling it may cause data security problems!"); } diff --git a/src/main/java/top/leavesmc/leaves/util/LeavesUpdateHelper.java b/src/main/java/top/leavesmc/leaves/util/LeavesUpdateHelper.java -index 7476f6c5bf8c4572878159a74507193e3c4a6207..7b38b707869932bd81522c100cb430389d44ad00 100644 +index 9b18d711191aa26c9afea85fc901e422e8f8496c..35a9ea436b86137d0329b16489e3fb3bbdedee48 100644 --- a/src/main/java/top/leavesmc/leaves/util/LeavesUpdateHelper.java +++ b/src/main/java/top/leavesmc/leaves/util/LeavesUpdateHelper.java @@ -7,8 +7,11 @@ import com.google.gson.JsonElement; diff --git a/patches/server/0111-Replay-Mod-API.patch b/patches/server/0111-Replay-Mod-API.patch index d1396dc3..88f05cd3 100644 --- a/patches/server/0111-Replay-Mod-API.patch +++ b/patches/server/0111-Replay-Mod-API.patch @@ -94,10 +94,10 @@ index 73c15a0c56a103ba4e62f0a51af8d42566b07245..a2dd8434cdf1f7b117b46fbb14e75890 if (((List) object).size() >= i) { return (List) object; diff --git a/src/main/java/net/minecraft/server/PlayerAdvancements.java b/src/main/java/net/minecraft/server/PlayerAdvancements.java -index fbd602b5219c0eeefea36dbaca7aae10d483a152..e05620a5fa75e22001511fff205b718b3e11619c 100644 +index f941e7add46e690e21d39111bed520df9156f154..5ea28c20b34b46eb68fb8a2d468ea009a30180c0 100644 --- a/src/main/java/net/minecraft/server/PlayerAdvancements.java +++ b/src/main/java/net/minecraft/server/PlayerAdvancements.java -@@ -224,7 +224,7 @@ public class PlayerAdvancements { +@@ -223,7 +223,7 @@ public class PlayerAdvancements { public boolean award(AdvancementHolder advancement, String criterionName) { // Leaves start - bot can't get advancement @@ -107,11 +107,11 @@ index fbd602b5219c0eeefea36dbaca7aae10d483a152..e05620a5fa75e22001511fff205b718b } // Leaves end - bot can't get advancement diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index afbefe01fe7b4a129d8bd471658d5ee64507477e..2277e70b2adacad0341d07da718ce3110253926e 100644 +index 9e1e99a5afa972527d036a32339b571816b325fe..a2f3d0d77dd7e07451af4b33f63bae55634f02f0 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -300,7 +300,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl - this.messageSignatureCache = MessageSignatureCache.createDefault(); + super(server, connection, clientData, player); // CraftBukkit this.chunkSender = new PlayerChunkSender(connection.isMemoryConnection()); // Leaves start - fakeplayer - if (player instanceof top.leavesmc.leaves.bot.ServerBot) { @@ -120,18 +120,18 @@ index afbefe01fe7b4a129d8bd471658d5ee64507477e..2277e70b2adacad0341d07da718ce311 } else { connection.setListener(this); diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 1bc21038e33faa9c1f24acedabeb84741e31de05..dc7b69f429cc9b19080fa05c6135175dbe55e4e8 100644 +index cd962621ee0d8bd17926a90ce960c46f1ae5a8dd..2a2262a9f0ead7a9b477cf7a75905b8d2a5f2932 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -125,6 +125,7 @@ import org.bukkit.event.player.PlayerRespawnEvent.RespawnReason; - - import top.leavesmc.leaves.util.ArrayConstants; +@@ -123,6 +123,7 @@ import org.bukkit.event.player.PlayerSpawnChangeEvent; + import top.leavesmc.leaves.bot.ServerBot; import top.leavesmc.leaves.util.ReturnPortalManager; // Leaves - return portal fix + import top.leavesmc.leaves.util.ArrayConstants; +import top.leavesmc.leaves.replay.ServerPhotographer; public abstract class PlayerList { -@@ -157,6 +158,7 @@ public abstract class PlayerList { +@@ -155,6 +156,7 @@ public abstract class PlayerList { private boolean allowCheatsForAllPlayers; private static final boolean ALLOW_LOGOUTIVATOR = false; private int sendAllPlayerInfoIn; @@ -139,7 +139,7 @@ index 1bc21038e33faa9c1f24acedabeb84741e31de05..dc7b69f429cc9b19080fa05c6135175d // CraftBukkit start private CraftServer cserver; -@@ -183,6 +185,120 @@ public abstract class PlayerList { +@@ -181,6 +183,120 @@ public abstract class PlayerList { } abstract public void loadAndSaveFiles(); // Paper - moved from DedicatedPlayerList constructor @@ -260,7 +260,7 @@ index 1bc21038e33faa9c1f24acedabeb84741e31de05..dc7b69f429cc9b19080fa05c6135175d public void placeNewPlayer(Connection connection, ServerPlayer player, CommonListenerCookie clientData) { player.isRealPlayer = true; // Paper player.loginTime = System.currentTimeMillis(); // Paper -@@ -329,6 +445,7 @@ public abstract class PlayerList { +@@ -327,6 +443,7 @@ public abstract class PlayerList { // entityplayer.connection.send(ClientboundPlayerInfoUpdatePacket.createPlayerInitializing(this.players)); // CraftBukkit - replaced with loop below this.players.add(player); @@ -268,7 +268,7 @@ index 1bc21038e33faa9c1f24acedabeb84741e31de05..dc7b69f429cc9b19080fa05c6135175d this.playersByName.put(player.getScoreboardName().toLowerCase(java.util.Locale.ROOT), player); // Spigot this.playersByUUID.put(player.getUUID(), player); // this.broadcastAll(ClientboundPlayerInfoUpdatePacket.createPlayerInitializing(List.of(entityplayer))); // CraftBukkit - replaced with loop below -@@ -400,6 +517,12 @@ public abstract class PlayerList { +@@ -398,6 +515,12 @@ public abstract class PlayerList { continue; } @@ -281,7 +281,7 @@ index 1bc21038e33faa9c1f24acedabeb84741e31de05..dc7b69f429cc9b19080fa05c6135175d onlinePlayers.add(entityplayer1); // Paper - use single player info update packet } // Paper start - use single player info update packet -@@ -615,6 +738,43 @@ public abstract class PlayerList { +@@ -613,6 +736,43 @@ public abstract class PlayerList { } @@ -298,7 +298,7 @@ index 1bc21038e33faa9c1f24acedabeb84741e31de05..dc7b69f429cc9b19080fa05c6135175d + if (server.isSameThread()) entityplayer.doTick(); + + if (this.collideRuleTeamName != null) { -+ final Scoreboard scoreBoard = this.server.getLevel(Level.OVERWORLD).getScoreboard(); ++ final net.minecraft.world.scores.Scoreboard scoreBoard = this.server.getLevel(Level.OVERWORLD).getScoreboard(); + final PlayerTeam team = scoreBoard.getPlayersTeam(this.collideRuleTeamName); + if (entityplayer.getTeam() == team && team != null) { + scoreBoard.removePlayerFromTeam(entityplayer.getScoreboardName(), team); @@ -325,7 +325,7 @@ index 1bc21038e33faa9c1f24acedabeb84741e31de05..dc7b69f429cc9b19080fa05c6135175d public net.kyori.adventure.text.Component remove(ServerPlayer entityplayer) { // CraftBukkit - return string // Paper - return Component // Paper start return this.remove(entityplayer, net.kyori.adventure.text.Component.translatable("multiplayer.player.left", net.kyori.adventure.text.format.NamedTextColor.YELLOW, io.papermc.paper.configuration.GlobalConfiguration.get().messages.useDisplayNameInQuitMessage ? entityplayer.getBukkitEntity().displayName() : io.papermc.paper.adventure.PaperAdventure.asAdventure(entityplayer.getDisplayName()))); -@@ -683,6 +843,7 @@ public abstract class PlayerList { +@@ -681,6 +841,7 @@ public abstract class PlayerList { entityplayer.retireScheduler(); // Paper - Folia schedulers entityplayer.getAdvancements().stopListening(); this.players.remove(entityplayer); @@ -334,10 +334,10 @@ index 1bc21038e33faa9c1f24acedabeb84741e31de05..dc7b69f429cc9b19080fa05c6135175d this.server.getCustomBossEvents().onPlayerDisconnect(entityplayer); UUID uuid = entityplayer.getUUID(); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index b76d078606b9c8486c1cbff240fd45e69eb9e58d..73e77895559ad935e03f27cee32d433c13d47b73 100644 +index a36b234f884e2aae88a29fae872aeef662b27712..43e4c9fe0243f29d66b0255306b02e07f886d8c6 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -265,6 +265,7 @@ import org.yaml.snakeyaml.error.MarkedYAMLException; +@@ -266,6 +266,7 @@ import org.yaml.snakeyaml.error.MarkedYAMLException; import net.md_5.bungee.api.chat.BaseComponent; // Spigot import top.leavesmc.leaves.entity.CraftBotManager; @@ -345,7 +345,7 @@ index b76d078606b9c8486c1cbff240fd45e69eb9e58d..73e77895559ad935e03f27cee32d433c import javax.annotation.Nullable; // Paper import javax.annotation.Nonnull; // Paper -@@ -311,6 +312,7 @@ public final class CraftServer implements Server { +@@ -312,6 +313,7 @@ public final class CraftServer implements Server { private final io.papermc.paper.logging.SysoutCatcher sysoutCatcher = new io.papermc.paper.logging.SysoutCatcher(); // Paper private final CraftPotionBrewer potionBrewer = new CraftPotionBrewer(); // Paper private final CraftBotManager botManager = new CraftBotManager(); @@ -353,7 +353,7 @@ index b76d078606b9c8486c1cbff240fd45e69eb9e58d..73e77895559ad935e03f27cee32d433c // Paper start - Folia region threading API private final io.papermc.paper.threadedregions.scheduler.FallbackRegionScheduler regionizedScheduler = new io.papermc.paper.threadedregions.scheduler.FallbackRegionScheduler(); -@@ -392,7 +394,7 @@ public final class CraftServer implements Server { +@@ -393,7 +395,7 @@ public final class CraftServer implements Server { public CraftServer(DedicatedServer console, PlayerList playerList) { this.console = console; this.playerList = (DedicatedPlayerList) playerList; @@ -362,7 +362,7 @@ index b76d078606b9c8486c1cbff240fd45e69eb9e58d..73e77895559ad935e03f27cee32d433c @Override public CraftPlayer apply(ServerPlayer player) { return player.getBukkitEntity(); -@@ -3218,4 +3220,11 @@ public final class CraftServer implements Server { +@@ -3250,4 +3252,11 @@ public final class CraftServer implements Server { return botManager; } // Leaves end - Bot API @@ -375,10 +375,10 @@ index b76d078606b9c8486c1cbff240fd45e69eb9e58d..73e77895559ad935e03f27cee32d433c + // Leaves end - replay mod api } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index 22e22234473c601bf674f42efa81a6920c0fb344..796423c97b06b29d1e5afa16792338f86738fc81 100644 +index 801ee163a71ab2afd822c7f17bf45573c0fd83f5..8598a20fa2a2a81ccbf2099f52c15103f91d53d0 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -@@ -198,6 +198,8 @@ import top.leavesmc.leaves.bot.ServerBot; +@@ -203,6 +203,8 @@ import top.leavesmc.leaves.bot.ServerBot; import top.leavesmc.leaves.entity.CraftBot; import net.md_5.bungee.api.chat.BaseComponent; // Spigot @@ -387,7 +387,7 @@ index 22e22234473c601bf674f42efa81a6920c0fb344..796423c97b06b29d1e5afa16792338f8 public abstract class CraftEntity implements org.bukkit.entity.Entity { private static PermissibleBase perm; -@@ -236,6 +238,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { +@@ -241,6 +243,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { // Leaves start - add CraftBot if (entity instanceof ServerPlayer) { if (entity instanceof ServerBot) { return new CraftBot(server, (ServerBot) entity); } diff --git a/patches/server/0113-Fix-vehicle-teleport-by-end-gateway.patch b/patches/server/0112-Fix-vehicle-teleport-by-end-gateway.patch similarity index 91% rename from patches/server/0113-Fix-vehicle-teleport-by-end-gateway.patch rename to patches/server/0112-Fix-vehicle-teleport-by-end-gateway.patch index 216bd680..fd3231af 100644 --- a/patches/server/0113-Fix-vehicle-teleport-by-end-gateway.patch +++ b/patches/server/0112-Fix-vehicle-teleport-by-end-gateway.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Fix vehicle teleport by end gateway diff --git a/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java -index f26e5626c0823c041eeb388cbcd78e5293d2f0ff..8c13b0ff5a34a66df0e087320e7bb6542fbf89fd 100644 +index e5c4deb9a921b90b7e0760955e90e815db95d3a1..29f421a5df918523cfbe7a565e3a0227834db001 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java @@ -108,7 +108,7 @@ public class TheEndGatewayBlockEntity extends TheEndPortalBlockEntity { diff --git a/patches/server/0112-Leaves-tick-command.patch b/patches/server/0112-Leaves-tick-command.patch deleted file mode 100644 index a8878722..00000000 --- a/patches/server/0112-Leaves-tick-command.patch +++ /dev/null @@ -1,257 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: violetc <58360096+s-yh-china@users.noreply.github.com> -Date: Sun, 13 Aug 2023 17:22:08 +0800 -Subject: [PATCH] Leaves tick command - - -diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index a890c2afd91c250e9b06e826a0eaa4d1eadf5a00..863abf6a15cc35bceb18e20a4e2798d3f4d62655 100644 ---- a/src/main/java/net/minecraft/server/MinecraftServer.java -+++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -184,6 +184,8 @@ import org.bukkit.craftbukkit.Main; - import org.bukkit.event.server.ServerLoadEvent; - // CraftBukkit end - -+import top.leavesmc.leaves.util.TickStatus; // Leaves - tick command -+ - public abstract class MinecraftServer extends ReentrantBlockableEventLoop implements ServerInfo, CommandSource, AutoCloseable { - - private static MinecraftServer SERVER; // Paper -@@ -1075,6 +1077,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop, LeavesSubcommand> commands = new HashMap<>(); - commands.put(Set.of("update"), new UpdateCommand()); - commands.put(Set.of("peaceful"), new PeacefulModeSwitchCommand()); -+ commands.put(Set.of("tick"), new TickCommand()); - - return commands.entrySet().stream() - .flatMap(entry -> entry.getKey().stream().map(s -> Map.entry(s, entry.getValue()))) -diff --git a/src/main/java/top/leavesmc/leaves/command/subcommands/TickCommand.java b/src/main/java/top/leavesmc/leaves/command/subcommands/TickCommand.java -new file mode 100644 -index 0000000000000000000000000000000000000000..162c3c005130bfa07c7b924015356430b1e1ac2a ---- /dev/null -+++ b/src/main/java/top/leavesmc/leaves/command/subcommands/TickCommand.java -@@ -0,0 +1,82 @@ -+package top.leavesmc.leaves.command.subcommands; -+ -+import io.papermc.paper.command.CommandUtil; -+import net.kyori.adventure.text.Component; -+import net.kyori.adventure.text.JoinConfiguration; -+import net.kyori.adventure.text.format.NamedTextColor; -+import net.minecraft.server.MinecraftServer; -+import org.bukkit.command.CommandSender; -+import top.leavesmc.leaves.LeavesConfig; -+import top.leavesmc.leaves.command.LeavesSubcommand; -+import top.leavesmc.leaves.util.TickStatus; -+ -+import java.util.Collections; -+import java.util.List; -+ -+public class TickCommand implements LeavesSubcommand { -+ -+ @Override -+ public boolean execute(CommandSender sender, String subCommand, String[] args) { -+ if (!LeavesConfig.tickCommand) { -+ return true; -+ } -+ -+ if (args.length < 1) { -+ sender.sendMessage(Component.join(JoinConfiguration.noSeparators(), -+ Component.text("Tick Status: ", NamedTextColor.GRAY), -+ this.getStatus().getMessage() -+ )); -+ return true; -+ } -+ -+ TickStatus oldStatus = this.getStatus(); -+ -+ switch (args[0]) { -+ case "warp" -> { -+ MinecraftServer.tickStatus = TickStatus.WARP; -+ sender.sendMessage(this.getStatusChangeMessage(oldStatus)); -+ } -+ -+ case "freeze" -> { -+ MinecraftServer.tickStatus = TickStatus.FREEZE; -+ sender.sendMessage(this.getStatusChangeMessage(oldStatus)); -+ } -+ -+ case "normal" -> { -+ MinecraftServer.tickStatus = TickStatus.NORMAL; -+ sender.sendMessage(this.getStatusChangeMessage(oldStatus)); -+ } -+ } -+ return true; -+ } -+ -+ public Component getStatusChangeMessage(TickStatus old) { -+ return Component.join(JoinConfiguration.noSeparators(), -+ Component.text("Tick Status: ", NamedTextColor.GRAY), -+ old.getMessage(), -+ Component.text(" -> ", NamedTextColor.GRAY), -+ this.getStatus().getMessage() -+ ); -+ } -+ -+ public TickStatus getStatus() { -+ return MinecraftServer.tickStatus; -+ } -+ -+ @Override -+ public List tabComplete(final CommandSender sender, final String subCommand, final String[] args) { -+ if (!LeavesConfig.tickCommand) { -+ return Collections.emptyList(); -+ } -+ -+ if (args.length == 1) { -+ return CommandUtil.getListMatchingLast(sender, args, "normal", "warp", "freeze"); -+ } -+ return Collections.emptyList(); -+ } -+ -+ @Override -+ public boolean tabCompletes() { -+ return LeavesConfig.tickCommand; -+ } -+} -diff --git a/src/main/java/top/leavesmc/leaves/util/TickStatus.java b/src/main/java/top/leavesmc/leaves/util/TickStatus.java -new file mode 100644 -index 0000000000000000000000000000000000000000..460307c6d477704417dbfe38364afbc5efe8c767 ---- /dev/null -+++ b/src/main/java/top/leavesmc/leaves/util/TickStatus.java -@@ -0,0 +1,20 @@ -+package top.leavesmc.leaves.util; -+ -+import net.kyori.adventure.text.Component; -+import net.kyori.adventure.text.format.NamedTextColor; -+ -+public enum TickStatus { -+ NORMAL(Component.text("normal", NamedTextColor.GRAY)), -+ WARP(Component.text("warp", NamedTextColor.GREEN)), -+ FREEZE(Component.text("freeze", NamedTextColor.AQUA)); -+ -+ private final Component message; -+ -+ private TickStatus(Component message) { -+ this.message = message; -+ } -+ -+ public Component getMessage() { -+ return message; -+ } -+} diff --git a/patches/server/0114-Leaves-I18n.patch b/patches/server/0113-Leaves-I18n.patch similarity index 99% rename from patches/server/0114-Leaves-I18n.patch rename to patches/server/0113-Leaves-I18n.patch index 855d09c8..3abffc75 100644 --- a/patches/server/0114-Leaves-I18n.patch +++ b/patches/server/0113-Leaves-I18n.patch @@ -51,7 +51,7 @@ index 571fdf253ebc5cf2a3ec120c53293b37b770836d..800cadbb379cb90d5351c6d73f994713 ImmutableMap.Builder builder = ImmutableMap.builder(); BiConsumer biConsumer = builder::put; diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java -index 7362fb735a7eb006ebe63190992ae098c4efb2f9..1070582db86ac46e80a0f0ebe4d00eddb5256be6 100644 +index 4b13af14fcbe1925f9d3104d95ebbfbc596cfb3c..2225401b9b864d58803cfd76357c4e9f7d97e5ec 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java @@ -223,6 +223,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface diff --git a/patches/server/0115-Fix-minecraft-hopper-not-work-without-player.patch b/patches/server/0114-Fix-minecraft-hopper-not-work-without-player.patch similarity index 100% rename from patches/server/0115-Fix-minecraft-hopper-not-work-without-player.patch rename to patches/server/0114-Fix-minecraft-hopper-not-work-without-player.patch diff --git a/patches/server/0116-Wool-Hopper-Counter.patch b/patches/server/0115-Wool-Hopper-Counter.patch similarity index 98% rename from patches/server/0116-Wool-Hopper-Counter.patch rename to patches/server/0115-Wool-Hopper-Counter.patch index aca249a2..fabda121 100644 --- a/patches/server/0116-Wool-Hopper-Counter.patch +++ b/patches/server/0115-Wool-Hopper-Counter.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Wool Hopper Counter This patch is Powered by fabric-carpet(https://github.com/gnembon/fabric-carpet) diff --git a/src/main/java/net/minecraft/world/item/crafting/Ingredient.java b/src/main/java/net/minecraft/world/item/crafting/Ingredient.java -index 06fe5b056d78d42cdf78437eeabe1786d596b7f8..27dded619e1cab0a9df658e25fe6dcd55e1d2555 100644 +index 7c29750e534eae4266bf7a63c50e3827401d6569..ab9a8c428975d016fbfa210b3a8cb5310cf3def2 100644 --- a/src/main/java/net/minecraft/world/item/crafting/Ingredient.java +++ b/src/main/java/net/minecraft/world/item/crafting/Ingredient.java -@@ -33,7 +33,7 @@ import net.minecraft.world.level.ItemLike; +@@ -30,7 +30,7 @@ import net.minecraft.world.level.ItemLike; public final class Ingredient implements Predicate { public static final Ingredient EMPTY = new Ingredient(Stream.empty()); @@ -19,7 +19,7 @@ index 06fe5b056d78d42cdf78437eeabe1786d596b7f8..27dded619e1cab0a9df658e25fe6dcd5 public ItemStack[] itemStacks; @Nullable diff --git a/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java -index 9310444c04608a0015844eafa872f24c8baedf4d..772189ffb380335c4c88533f91b28e8d5a327af4 100644 +index 5fabdda079ebcb0e5d119f3e60f7447d88dd2707..659d4e62bb57946e595174d758c351e4feed1952 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java @@ -444,6 +444,13 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen @@ -61,7 +61,7 @@ index 9310444c04608a0015844eafa872f24c8baedf4d..772189ffb380335c4c88533f91b28e8d return inventory instanceof WorldlyContainer ? IntStream.of(((WorldlyContainer) inventory).getSlotsForFace(side)) : IntStream.range(0, inventory.getContainerSize()); } diff --git a/src/main/java/top/leavesmc/leaves/command/LeavesCommand.java b/src/main/java/top/leavesmc/leaves/command/LeavesCommand.java -index 0259a1472bba36b5bb903e559a99f791e8a9317a..258c6c97eb8cc86ee53569377c3c472f87293334 100644 +index da1f7ce2db23c509c70f673c8bb1c46af2ed7279..5e413b0216289922a49a3de7ff5cd9aef4c3c16e 100644 --- a/src/main/java/top/leavesmc/leaves/command/LeavesCommand.java +++ b/src/main/java/top/leavesmc/leaves/command/LeavesCommand.java @@ -12,6 +12,7 @@ import org.bukkit.permissions.PermissionDefault; @@ -70,12 +70,12 @@ index 0259a1472bba36b5bb903e559a99f791e8a9317a..258c6c97eb8cc86ee53569377c3c472f import org.jetbrains.annotations.NotNull; +import top.leavesmc.leaves.command.subcommands.CounterCommand; import top.leavesmc.leaves.command.subcommands.PeacefulModeSwitchCommand; - import top.leavesmc.leaves.command.subcommands.TickCommand; import top.leavesmc.leaves.command.subcommands.UpdateCommand; -@@ -37,6 +38,7 @@ public final class LeavesCommand extends Command { + +@@ -35,6 +36,7 @@ public final class LeavesCommand extends Command { + final Map, LeavesSubcommand> commands = new HashMap<>(); commands.put(Set.of("update"), new UpdateCommand()); commands.put(Set.of("peaceful"), new PeacefulModeSwitchCommand()); - commands.put(Set.of("tick"), new TickCommand()); + commands.put(Set.of("counter"), new CounterCommand()); return commands.entrySet().stream() diff --git a/patches/server/0117-Loot-world-random.patch b/patches/server/0116-Loot-world-random.patch similarity index 100% rename from patches/server/0117-Loot-world-random.patch rename to patches/server/0116-Loot-world-random.patch diff --git a/patches/server/0118-Leaves-Reload-Command.patch b/patches/server/0117-Leaves-Reload-Command.patch similarity index 89% rename from patches/server/0118-Leaves-Reload-Command.patch rename to patches/server/0117-Leaves-Reload-Command.patch index 79861257..c2a2062c 100644 --- a/patches/server/0118-Leaves-Reload-Command.patch +++ b/patches/server/0117-Leaves-Reload-Command.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Leaves Reload Command diff --git a/src/main/java/top/leavesmc/leaves/command/LeavesCommand.java b/src/main/java/top/leavesmc/leaves/command/LeavesCommand.java -index 258c6c97eb8cc86ee53569377c3c472f87293334..aa69854adfea877d4d8fdc741d6c9f3ca83a12c0 100644 +index 5e413b0216289922a49a3de7ff5cd9aef4c3c16e..5109d08998707f7443880b2daff719483dff7a5e 100644 --- a/src/main/java/top/leavesmc/leaves/command/LeavesCommand.java +++ b/src/main/java/top/leavesmc/leaves/command/LeavesCommand.java @@ -14,6 +14,7 @@ import org.checkerframework.checker.nullness.qual.Nullable; @@ -13,12 +13,12 @@ index 258c6c97eb8cc86ee53569377c3c472f87293334..aa69854adfea877d4d8fdc741d6c9f3c import top.leavesmc.leaves.command.subcommands.CounterCommand; import top.leavesmc.leaves.command.subcommands.PeacefulModeSwitchCommand; +import top.leavesmc.leaves.command.subcommands.ReloadCommand; - import top.leavesmc.leaves.command.subcommands.TickCommand; import top.leavesmc.leaves.command.subcommands.UpdateCommand; -@@ -39,6 +40,7 @@ public final class LeavesCommand extends Command { + import java.util.ArrayList; +@@ -37,6 +38,7 @@ public final class LeavesCommand extends Command { + commands.put(Set.of("update"), new UpdateCommand()); commands.put(Set.of("peaceful"), new PeacefulModeSwitchCommand()); - commands.put(Set.of("tick"), new TickCommand()); commands.put(Set.of("counter"), new CounterCommand()); + commands.put(Set.of("reload"), new ReloadCommand()); diff --git a/patches/server/0119-Spider-jockeys-drop-gapples.patch b/patches/server/0118-Spider-jockeys-drop-gapples.patch similarity index 94% rename from patches/server/0119-Spider-jockeys-drop-gapples.patch rename to patches/server/0118-Spider-jockeys-drop-gapples.patch index 8626e5b1..2ea848e6 100644 --- a/patches/server/0119-Spider-jockeys-drop-gapples.patch +++ b/patches/server/0118-Spider-jockeys-drop-gapples.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Spider jockeys drop gapples diff --git a/src/main/java/net/minecraft/world/entity/monster/Spider.java b/src/main/java/net/minecraft/world/entity/monster/Spider.java -index 71b5a9c97a13f703073c0122742ff9e8a0e49df2..15b1cdc7e2bf53998187c12ffff17c6653098890 100644 +index 6f12e342adf1a008709fd9a4fbbbe1da8ec31b83..aaac1df6a29b64446f964285b5e825bc145017b0 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Spider.java +++ b/src/main/java/net/minecraft/world/entity/monster/Spider.java @@ -154,6 +154,18 @@ public class Spider extends Monster { diff --git a/patches/server/0120-Force-Void-Trade.patch b/patches/server/0119-Force-Void-Trade.patch similarity index 95% rename from patches/server/0120-Force-Void-Trade.patch rename to patches/server/0119-Force-Void-Trade.patch index a20d997e..62559e51 100644 --- a/patches/server/0120-Force-Void-Trade.patch +++ b/patches/server/0119-Force-Void-Trade.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Force Void Trade diff --git a/src/main/java/net/minecraft/world/entity/npc/AbstractVillager.java b/src/main/java/net/minecraft/world/entity/npc/AbstractVillager.java -index e585eca535ceb2ed28334bc3c6949fcb4881a364..7162f7acfdca6985dfdac2661d4e94b1d781a185 100644 +index 17cc25b6fbc85c9e0023be7e9d857b2d76f6e58c..4c54a9f54310efb78e5f5c47457b9f0d62c1de55 100644 --- a/src/main/java/net/minecraft/world/entity/npc/AbstractVillager.java +++ b/src/main/java/net/minecraft/world/entity/npc/AbstractVillager.java @@ -59,6 +59,7 @@ public abstract class AbstractVillager extends AgeableMob implements InventoryCa @@ -63,7 +63,7 @@ index e585eca535ceb2ed28334bc3c6949fcb4881a364..7162f7acfdca6985dfdac2661d4e94b1 + // Leaves end - force void trade } diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index 452caefc36140937f31be7e67c2580970e64626c..957fefdc5d942e647148f5c5b673a942eea18928 100644 +index 0b334ab58d723f27dae68974ed6ec5d64b10ad40..a63549154fc3a2c93b7f66072bc9a89a31bea55f 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java @@ -347,6 +347,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @@ -90,7 +90,7 @@ index 452caefc36140937f31be7e67c2580970e64626c..957fefdc5d942e647148f5c5b673a942 this.updateMerchantTimer = 40; this.increaseProfessionLevelOnUpdate = true; diff --git a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java -index 3c2941d799c9acb3dd9e2b67b7092f4bba5ede17..bde29322bb3158ea99333247cf79ab62c311f581 100644 +index 833563e237462ccfc1b730b8f5fb35340d0db854..92981bbfe854339fdb52a5940fadda009987e8e8 100644 --- a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java @@ -120,6 +120,7 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill @@ -115,7 +115,7 @@ index 8eab7596e1f7d1beb9ab0d70d1310d26822262e9..55ae9ccbadeb3bb358dd04aadd7b32b1 private int merchantLevel; private boolean showProgressBar; diff --git a/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java -index 8c13b0ff5a34a66df0e087320e7bb6542fbf89fd..d9295fb332342f8f77798757e65d7eb2fa6d7a0f 100644 +index 29f421a5df918523cfbe7a565e3a0227834db001..9e0f5df8a398e24de845de1e4019e9e383e2d338 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java @@ -225,6 +225,16 @@ public class TheEndGatewayBlockEntity extends TheEndPortalBlockEntity { diff --git a/patches/server/0121-Servux-Protocol.patch b/patches/server/0120-Servux-Protocol.patch similarity index 98% rename from patches/server/0121-Servux-Protocol.patch rename to patches/server/0120-Servux-Protocol.patch index b7e4d450..cf4dac2b 100644 --- a/patches/server/0121-Servux-Protocol.patch +++ b/patches/server/0120-Servux-Protocol.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Servux Protocol 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 7add47837626b7cbc170b1e0b1d0e445e7b51fa5..6ecd3feb095385afcd69f80392e6282530b3931d 100644 +index ed288e84029d5ef7e9b7eb2827458c258f0ce10e..99ad309a2957e25004138a4b32a701108b832514 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java @@ -935,6 +935,7 @@ public class LevelChunk extends ChunkAccess { diff --git a/patches/server/0122-Villager-infinite-discounts.patch b/patches/server/0121-Villager-infinite-discounts.patch similarity index 100% rename from patches/server/0122-Villager-infinite-discounts.patch rename to patches/server/0121-Villager-infinite-discounts.patch diff --git a/patches/server/0123-CCE-update-suppression.patch b/patches/server/0122-CCE-update-suppression.patch similarity index 92% rename from patches/server/0123-CCE-update-suppression.patch rename to patches/server/0122-CCE-update-suppression.patch index b4a3763e..c6eaac57 100644 --- a/patches/server/0123-CCE-update-suppression.patch +++ b/patches/server/0122-CCE-update-suppression.patch @@ -5,10 +5,10 @@ Subject: [PATCH] CCE update suppression diff --git a/src/main/java/net/minecraft/world/level/block/ShulkerBoxBlock.java b/src/main/java/net/minecraft/world/level/block/ShulkerBoxBlock.java -index 66f652724d1a4a27d75cd2f15c0a50879d5bafc5..346c749aaf4cd8fad14b0813b516576023bf1ee1 100644 +index dd40b975b72f7bd16f2c491a36c39b7098c66f2b..b312d46de96ac63d6ff4b7e82eae01d5cb92a843 100644 --- a/src/main/java/net/minecraft/world/level/block/ShulkerBoxBlock.java +++ b/src/main/java/net/minecraft/world/level/block/ShulkerBoxBlock.java -@@ -249,17 +249,21 @@ public class ShulkerBoxBlock extends BaseEntityBlock { +@@ -265,17 +265,21 @@ public class ShulkerBoxBlock extends BaseEntityBlock { @Override public int getAnalogOutputSignal(BlockState state, Level world, BlockPos pos) { diff --git a/patches/server/0124-Disable-offline-warn-if-use-proxy.patch b/patches/server/0123-Disable-offline-warn-if-use-proxy.patch similarity index 93% rename from patches/server/0124-Disable-offline-warn-if-use-proxy.patch rename to patches/server/0123-Disable-offline-warn-if-use-proxy.patch index da57fb55..8a002696 100644 --- a/patches/server/0124-Disable-offline-warn-if-use-proxy.patch +++ b/patches/server/0123-Disable-offline-warn-if-use-proxy.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Disable offline warn if use proxy diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java -index 1070582db86ac46e80a0f0ebe4d00eddb5256be6..d63da8855732f155bce0ab1ba47c50fb0338ca4b 100644 +index 2225401b9b864d58803cfd76357c4e9f7d97e5ec..c2d98ccd9f2a71007dc39c1a67eb2b20b403e833 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java @@ -284,7 +284,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface diff --git a/patches/server/0125-Disable-moved-wrongly-threshold.patch b/patches/server/0124-Disable-moved-wrongly-threshold.patch similarity index 91% rename from patches/server/0125-Disable-moved-wrongly-threshold.patch rename to patches/server/0124-Disable-moved-wrongly-threshold.patch index 5493bbc5..5477467c 100644 --- a/patches/server/0125-Disable-moved-wrongly-threshold.patch +++ b/patches/server/0124-Disable-moved-wrongly-threshold.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Disable moved wrongly threshold diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 2277e70b2adacad0341d07da718ce3110253926e..090e07c9c61578bf0771e89dc36d61f3a00f7a1d 100644 +index a2f3d0d77dd7e07451af4b33f63bae55634f02f0..76043154cb073a9ed4b3f15969f7d02cac46443b 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -586,7 +586,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -589,7 +589,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl d10 = d6 * d6 + d7 * d7 + d8 * d8; boolean flag2 = false; @@ -17,7 +17,7 @@ index 2277e70b2adacad0341d07da718ce3110253926e..090e07c9c61578bf0771e89dc36d61f3 flag2 = true; // Paper - diff on change, this should be moved wrongly ServerGamePacketListenerImpl.LOGGER.warn("{} (vehicle of {}) moved wrongly! {}", new Object[]{entity.getName().getString(), this.player.getName().getString(), Math.sqrt(d10)}); } -@@ -1470,7 +1470,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1497,7 +1497,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl d10 = d6 * d6 + d7 * d7 + d8 * d8; boolean flag2 = false; diff --git a/patches/server/0126-Armor-stand-cant-kill-by-mob-projectile.patch b/patches/server/0125-Armor-stand-cant-kill-by-mob-projectile.patch similarity index 82% rename from patches/server/0126-Armor-stand-cant-kill-by-mob-projectile.patch rename to patches/server/0125-Armor-stand-cant-kill-by-mob-projectile.patch index a3c9a296..39921611 100644 --- a/patches/server/0126-Armor-stand-cant-kill-by-mob-projectile.patch +++ b/patches/server/0125-Armor-stand-cant-kill-by-mob-projectile.patch @@ -5,16 +5,16 @@ Subject: [PATCH] Armor stand cant kill by mob projectile diff --git a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java -index 3d982458fa0e5c5af27368e8750d7d24392386d2..d6cbd2cdaf10a5ba76c6052255b5ae2e119e2db6 100644 +index 18e9ee9e0c986b1174ff9529b198a839df12825f..a6d486c867f86d5eec9423e53f37b7df6e93e7e2 100644 --- a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java +++ b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java @@ -518,6 +518,14 @@ public class ArmorStand extends LivingEntity { - boolean flag = "player".equals(source.getMsgId()); + boolean flag = source.is(DamageTypeTags.CAN_BREAK_ARMOR_STAND); boolean flag1 = source.is(DamageTypeTags.ALWAYS_KILLS_ARMOR_STANDS); + // Leaves start - Armor stand cant kill by mob projectile + if (top.leavesmc.leaves.LeavesConfig.armorStandCantKillByMobProjectile) { -+ if (!flag && !(source.getDirectEntity() instanceof AbstractArrow)) { ++ if (!flag && !(source.getDirectEntity() instanceof net.minecraft.world.entity.projectile.AbstractArrow)) { + return false; + } + } diff --git a/patches/server/0127-Make-Item-tick-vanilla.patch b/patches/server/0126-Make-Item-tick-vanilla.patch similarity index 82% rename from patches/server/0127-Make-Item-tick-vanilla.patch rename to patches/server/0126-Make-Item-tick-vanilla.patch index a009ea1f..4faac485 100644 --- a/patches/server/0127-Make-Item-tick-vanilla.patch +++ b/patches/server/0126-Make-Item-tick-vanilla.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Make Item tick vanilla diff --git a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java -index 5eb9d599e2f6e61adb34c991fe9008859633fdfc..862e99ddfcc1216ea4b5a7f12efc1a67ac839674 100644 +index c8abafdfc2bd09429fe0a509b1afa1579d5d75b6..aef0d33036dae6ee0cd89cf9a3ec7fdab781b8d9 100644 --- a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java +++ b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java -@@ -233,6 +233,9 @@ public class ItemEntity extends Entity implements TraceableEntity { +@@ -251,6 +251,9 @@ public class ItemEntity extends Entity implements TraceableEntity { // Spigot start - copied from above @Override public void inactiveTick() { @@ -18,7 +18,7 @@ index 5eb9d599e2f6e61adb34c991fe9008859633fdfc..862e99ddfcc1216ea4b5a7f12efc1a67 // CraftBukkit start - Use wall time for pickup and despawn timers int elapsedTicks = MinecraftServer.currentTick - this.lastTick; if (this.pickupDelay != 32767) this.pickupDelay -= elapsedTicks; -@@ -250,6 +253,8 @@ public class ItemEntity extends Entity implements TraceableEntity { +@@ -268,6 +271,8 @@ public class ItemEntity extends Entity implements TraceableEntity { // CraftBukkit end this.discard(); }