diff --git a/gradle.properties b/gradle.properties index 43cbd532..da351a5c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,6 +4,6 @@ version=1.20.4-R0.1-SNAPSHOT mcVersion=1.20.4 packageVersion=1_20_R3 org.gradle.jvmargs=-Xmx2G -paperRef=106c67a811a857293b934c453752e73579c6ed8c +paperRef=76da4bc683a51057eadfabc6e6694486a20a0d20 preVersion=false updatingMinecraft=false \ No newline at end of file diff --git a/patches/server/0001-Build-changes.patch b/patches/server/0001-Build-changes.patch index eccbdf73..d9c2789b 100644 --- a/patches/server/0001-Build-changes.patch +++ b/patches/server/0001-Build-changes.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Build changes diff --git a/build.gradle.kts b/build.gradle.kts -index 444ff797c70b0e285d4272ea2ce3d72453c9bda5..32fb084862ce074cdbf69fff4847aa31bfd08db2 100644 +index 376e8983fdfdbb6c3e5fd8ad0f6a05e655b622bf..f5c83d033a8163786f8f7e98655e65bb606bc9dc 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -13,8 +13,12 @@ configurations.named(log4jPlugins.compileClasspathConfigurationName) { @@ -153,10 +153,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 c1c1763de0ad0376c504946cbfd7bbd5b0cff0fd..abf4346111f682ca59d009f29a9c247057e44f12 100644 +index 559e159a0cfdefb5a0d69224409d91c4ad67371a..29a3ec27139720c293e7455c0a17a8c5cef0f421 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1852,7 +1852,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop implements ServerInfo, CommandSource, AutoCloseable { private static MinecraftServer SERVER; // Paper -@@ -970,7 +965,6 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { entityplayer.connection.suspendFlushing(); }); @@ -990,7 +990,7 @@ index abf4346111f682ca59d009f29a9c247057e44f12..19c388c98d7e86391b4798bcf3a19d99 // Paper start - Folia scheduler API ((io.papermc.paper.threadedregions.scheduler.FoliaGlobalRegionScheduler) Bukkit.getGlobalRegionScheduler()).tick(); getAllLevels().forEach(level -> { -@@ -1648,21 +1631,16 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop list = Lists.newArrayList(); List list1 = this.level.players(); ObjectIterator objectiterator = this.entityMap.values().iterator(); @@ -1252,7 +1252,7 @@ index 4160fff108cc83bc0a1f0a0389ab22f722d483b4..9ea2c8d06af2f6e082f8a2401092a787 ChunkMap.TrackedEntity playerchunkmap_entitytracker; -@@ -1212,17 +1183,14 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1204,17 +1175,14 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider playerchunkmap_entitytracker.serverEntity.sendChanges(); } } @@ -1271,13 +1271,13 @@ index 4160fff108cc83bc0a1f0a0389ab22f722d483b4..9ea2c8d06af2f6e082f8a2401092a787 } diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -index 44ada45d9bf2d9b48e5de1c3cb1a855902f3884b..d6089c0d0b076d232834619bc93bc64f0be57340 100644 +index 77a2458b8acb21c64676934cd8d6b05ef6351c10..cb755283ef6bf8812e2c2ad8b546627a334b75a2 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java @@ -293,10 +293,8 @@ public class ServerChunkCache extends ChunkSource { io.papermc.paper.chunk.system.scheduling.ChunkTaskScheduler.pushChunkWait(this.level, x1, z1); // Paper - rewrite chunk system // Paper end - com.destroystokyo.paper.io.SyncLoadFinder.logSyncLoad(this.level, x1, z1); // Paper - sync load info + com.destroystokyo.paper.io.SyncLoadFinder.logSyncLoad(this.level, x1, z1); // Paper - Add debug for sync chunk loads - this.level.timings.syncChunkLoad.startTiming(); // Paper chunkproviderserver_b.managedBlock(completablefuture::isDone); io.papermc.paper.chunk.system.scheduling.ChunkTaskScheduler.popChunkWait(); // Paper - async chunk debug // Paper - rewrite chunk system @@ -1294,7 +1294,7 @@ index 44ada45d9bf2d9b48e5de1c3cb1a855902f3884b..d6089c0d0b076d232834619bc93bc64f - } // Paper - Timings } - // Paper start - duplicate save, but call incremental + // Paper start - Incremental chunk and player saving; duplicate save, but call incremental public void saveIncrementally() { this.runDistanceManagerUpdates(); - try (co.aikar.timings.Timing timed = level.timings.chunkSaveData.startTiming()) { // Paper - Timings @@ -1302,9 +1302,9 @@ index 44ada45d9bf2d9b48e5de1c3cb1a855902f3884b..d6089c0d0b076d232834619bc93bc64f - } // Paper - Timings + this.chunkMap.saveIncrementally(); } - // Paper end + // Paper end - Incremental chunk and player saving -@@ -485,23 +479,17 @@ public class ServerChunkCache extends ChunkSource { +@@ -492,23 +486,17 @@ public class ServerChunkCache extends ChunkSource { @Override public void tick(BooleanSupplier shouldKeepTicking, boolean tickChunks) { this.level.getProfiler().push("purge"); @@ -1328,7 +1328,7 @@ index 44ada45d9bf2d9b48e5de1c3cb1a855902f3884b..d6089c0d0b076d232834619bc93bc64f this.level.getProfiler().pop(); this.clearCache(); } -@@ -517,13 +505,11 @@ public class ServerChunkCache extends ChunkSource { +@@ -524,13 +512,11 @@ public class ServerChunkCache extends ChunkSource { gameprofilerfiller.push("pollingChunks"); gameprofilerfiller.push("filteringLoadedChunks"); // Paper - optimise chunk tick iteration @@ -1340,17 +1340,17 @@ index 44ada45d9bf2d9b48e5de1c3cb1a855902f3884b..d6089c0d0b076d232834619bc93bc64f gameprofilerfiller.popPush("naturalSpawnCount"); - this.level.timings.countNaturalMobs.startTiming(); // Paper - timings int k = this.distanceManager.getNaturalSpawnChunkCount(); - // Paper start - per player mob spawning + // Paper start - Optional per player mob spawns int naturalSpawnChunkCount = k; -@@ -548,7 +534,6 @@ public class ServerChunkCache extends ChunkSource { +@@ -555,7 +541,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 + // Paper end - Optional per player mob spawns - this.level.timings.countNaturalMobs.stopTiming(); // Paper - timings this.lastSpawnState = spawnercreature_d; gameprofilerfiller.popPush("spawnAndTick"); -@@ -657,19 +642,14 @@ public class ServerChunkCache extends ChunkSource { +@@ -664,19 +649,14 @@ public class ServerChunkCache extends ChunkSource { } } // Paper end - optimise chunk tick iteration @@ -1370,7 +1370,7 @@ index 44ada45d9bf2d9b48e5de1c3cb1a855902f3884b..d6089c0d0b076d232834619bc93bc64f // Paper start - optimise chunk tick iteration if (!this.chunkMap.needsChangeBroadcasting.isEmpty()) { it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet copy = this.chunkMap.needsChangeBroadcasting.clone(); -@@ -683,8 +663,6 @@ public class ServerChunkCache extends ChunkSource { +@@ -690,8 +670,6 @@ public class ServerChunkCache extends ChunkSource { } } // Paper end - optimise chunk tick iteration @@ -1380,7 +1380,7 @@ index 44ada45d9bf2d9b48e5de1c3cb1a855902f3884b..d6089c0d0b076d232834619bc93bc64f gameprofilerfiller.pop(); } diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 9801b283da75aa63d7eba33d08322285c86c241c..21b40a47160bd2904cb0a482c066d3866c804187 100644 +index 284bf39fbf1e21f3d9b628c3fe309e1b7e305bed..cc50dd6b75f0d2ed2202c39598c5c9b1c3090d0f 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 @@ @@ -1391,7 +1391,7 @@ index 9801b283da75aa63d7eba33d08322285c86c241c..21b40a47160bd2904cb0a482c066d386 import com.google.common.collect.Lists; import com.mojang.datafixers.DataFixer; import com.mojang.datafixers.util.Pair; -@@ -850,7 +849,6 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -845,7 +844,6 @@ public class ServerLevel extends Level implements WorldGenLevel { } gameprofilerfiller.popPush("tickPending"); @@ -1399,7 +1399,7 @@ index 9801b283da75aa63d7eba33d08322285c86c241c..21b40a47160bd2904cb0a482c066d386 if (!this.isDebug() && flag) { j = this.getGameTime(); gameprofilerfiller.push("blockTicks"); -@@ -859,24 +857,17 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -854,24 +852,17 @@ public class ServerLevel extends Level implements WorldGenLevel { this.fluidTicks.tick(j, 65536, this::tickFluid); gameprofilerfiller.pop(); } @@ -1424,7 +1424,7 @@ index 9801b283da75aa63d7eba33d08322285c86c241c..21b40a47160bd2904cb0a482c066d386 } this.handlingTick = false; -@@ -889,7 +880,6 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -884,7 +875,6 @@ public class ServerLevel extends Level implements WorldGenLevel { if (flag1 || this.emptyTime++ < 300) { gameprofilerfiller.push("entities"); @@ -1432,7 +1432,7 @@ index 9801b283da75aa63d7eba33d08322285c86c241c..21b40a47160bd2904cb0a482c066d386 if (this.dragonFight != null && flag) { gameprofilerfiller.push("dragonFight"); this.dragonFight.tick(); -@@ -897,7 +887,6 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -892,7 +882,6 @@ public class ServerLevel extends Level implements WorldGenLevel { } org.spigotmc.ActivationRange.activateEntities(this); // Spigot @@ -1440,7 +1440,7 @@ index 9801b283da75aa63d7eba33d08322285c86c241c..21b40a47160bd2904cb0a482c066d386 this.entityTickList.forEach((entity) -> { if (!entity.isRemoved()) { if (false && this.shouldDiscardEntity(entity)) { // CraftBukkit - We prevent spawning in general, so this butchering is not needed -@@ -924,8 +913,6 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -919,8 +908,6 @@ public class ServerLevel extends Level implements WorldGenLevel { } } }); @@ -1449,7 +1449,7 @@ index 9801b283da75aa63d7eba33d08322285c86c241c..21b40a47160bd2904cb0a482c066d386 gameprofilerfiller.pop(); this.tickBlockEntities(); } -@@ -1038,7 +1025,6 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1033,7 +1020,6 @@ public class ServerLevel extends Level implements WorldGenLevel { } // Paper gameprofilerfiller.popPush("tickBlocks"); @@ -1457,7 +1457,7 @@ index 9801b283da75aa63d7eba33d08322285c86c241c..21b40a47160bd2904cb0a482c066d386 if (randomTickSpeed > 0) { // Paper start - optimize random block ticking LevelChunkSection[] sections = chunk.getSections(); -@@ -1072,7 +1058,6 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1067,7 +1053,6 @@ public class ServerLevel extends Level implements WorldGenLevel { } // Paper end - optimise random block ticking @@ -1465,7 +1465,7 @@ index 9801b283da75aa63d7eba33d08322285c86c241c..21b40a47160bd2904cb0a482c066d386 gameprofilerfiller.pop(); } -@@ -1385,9 +1370,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1380,9 +1365,7 @@ public class ServerLevel extends Level implements WorldGenLevel { currentlyTickingEntity.lazySet(entity); } // Paper end - log detailed entity tick information @@ -1475,7 +1475,7 @@ index 9801b283da75aa63d7eba33d08322285c86c241c..21b40a47160bd2904cb0a482c066d386 /*if (!org.spigotmc.ActivationRange.checkIfActive(entity)) { // Paper - comment out - EAR 2, reimplement below entity.tickCount++; timer = entity.getType().inactiveTickTimer.startTiming(); try { // Paper - timings -@@ -1396,11 +1379,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1391,11 +1374,7 @@ public class ServerLevel extends Level implements WorldGenLevel { return; }*/ // Paper - comment out EAR 2 // Spigot end @@ -1487,7 +1487,7 @@ index 9801b283da75aa63d7eba33d08322285c86c241c..21b40a47160bd2904cb0a482c066d386 entity.setOldPosAndRot(); ProfilerFiller gameprofilerfiller = this.getProfiler(); -@@ -1410,12 +1389,10 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1405,12 +1384,10 @@ public class ServerLevel extends Level implements WorldGenLevel { }); gameprofilerfiller.incrementCounter("tickNonPassenger"); if (isActive) { // Paper - EAR 2 @@ -1500,7 +1500,7 @@ index 9801b283da75aa63d7eba33d08322285c86c241c..21b40a47160bd2904cb0a482c066d386 Iterator iterator = entity.getPassengers().iterator(); while (iterator.hasNext()) { -@@ -1438,8 +1415,6 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1433,8 +1410,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); @@ -1509,7 +1509,7 @@ index 9801b283da75aa63d7eba33d08322285c86c241c..21b40a47160bd2904cb0a482c066d386 // Paper end passenger.setOldPosAndRot(); ++passenger.tickCount; -@@ -1468,8 +1443,6 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1463,8 +1438,6 @@ public class ServerLevel extends Level implements WorldGenLevel { this.tickPassenger(passenger, entity2); } @@ -1518,16 +1518,16 @@ index 9801b283da75aa63d7eba33d08322285c86c241c..21b40a47160bd2904cb0a482c066d386 } } else { passenger.stopRiding(); -@@ -1489,26 +1462,22 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1484,26 +1457,22 @@ public class ServerLevel extends Level implements WorldGenLevel { org.bukkit.Bukkit.getPluginManager().callEvent(new org.bukkit.event.world.WorldSaveEvent(getWorld())); } - try (co.aikar.timings.Timing ignored = this.timings.worldSave.startTiming()) { - if (doFull) { -- this.saveLevelData(); +- this.saveLevelData(true); // Paper - Write SavedData IO async - } + if (doFull) { -+ this.saveLevelData(); ++ this.saveLevelData(true); // Paper - Write SavedData IO async + } - this.timings.worldSaveChunks.startTiming(); // Paper @@ -1555,9 +1555,9 @@ index 9801b283da75aa63d7eba33d08322285c86c241c..21b40a47160bd2904cb0a482c066d386 } + // CraftBukkit end } - // Paper end + // Paper end - Incremental chunk and player saving -@@ -1522,7 +1491,6 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1517,7 +1486,6 @@ public class ServerLevel extends Level implements WorldGenLevel { if (!savingDisabled) { org.bukkit.Bukkit.getPluginManager().callEvent(new org.bukkit.event.world.WorldSaveEvent(this.getWorld())); // CraftBukkit @@ -1565,7 +1565,7 @@ index 9801b283da75aa63d7eba33d08322285c86c241c..21b40a47160bd2904cb0a482c066d386 if (progressListener != null) { progressListener.progressStartNoAbort(Component.translatable("menu.savingLevel")); } -@@ -1532,11 +1500,8 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1527,11 +1495,8 @@ public class ServerLevel extends Level implements WorldGenLevel { progressListener.progressStage(Component.translatable("menu.savingChunks")); } @@ -1578,10 +1578,10 @@ index 9801b283da75aa63d7eba33d08322285c86c241c..21b40a47160bd2904cb0a482c066d386 } 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 cafd0cde26a623861c7d3d01b496cb32fdc77335..b51fec201db06edbbfb5e6e8abd137bd194cb542 100644 +index 42b433d9461d0912b39542263684323369469ac0..1461ee40c7b563869e75c036bfb0dd2656bc780f 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2400,7 +2400,6 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2380,7 +2380,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 @@ -1589,7 +1589,7 @@ index cafd0cde26a623861c7d3d01b496cb32fdc77335..b51fec201db06edbbfb5e6e8abd137bd if ( org.spigotmc.SpigotConfig.logCommands ) // Spigot this.LOGGER.info(this.player.getScoreboardName() + " issued server command: " + s); -@@ -2410,20 +2409,14 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2390,20 +2389,14 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl this.cserver.getPluginManager().callEvent(event); if (event.isCancelled()) { @@ -1612,7 +1612,7 @@ index cafd0cde26a623861c7d3d01b496cb32fdc77335..b51fec201db06edbbfb5e6e8abd137bd } // 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 be474729d41b37968b53b84eb87ac96a4d7d46a4..3f437ca10d3bfc839ac85590dec677cd84629db6 100644 +index e0ee45036b9bf14a6e2013fe291cde0402b85b1f..257b4fd11d398513a61485ab2019b30eb0d2c9ac 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 @@ @@ -1622,7 +1622,7 @@ index be474729d41b37968b53b84eb87ac96a4d7d46a4..3f437ca10d3bfc839ac85590dec677cd import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; -@@ -1236,7 +1235,6 @@ public abstract class PlayerList { +@@ -1235,7 +1234,6 @@ public abstract class PlayerList { public void saveAll(int interval) { io.papermc.paper.util.MCUtil.ensureMain("Save Players" , () -> { // Paper - Ensure main @@ -1630,16 +1630,16 @@ index be474729d41b37968b53b84eb87ac96a4d7d46a4..3f437ca10d3bfc839ac85590dec677cd int numSaved = 0; long now = MinecraftServer.currentTick; for (int i = 0; i < this.players.size(); ++i) { -@@ -1247,7 +1245,6 @@ public abstract class PlayerList { +@@ -1246,7 +1244,6 @@ public abstract class PlayerList { } - // Paper end + // Paper end - Incremental chunk and player saving } - MinecraftTimings.savePlayers.stopTiming(); // Paper return null; }); // Paper - ensure main } diff --git a/src/main/java/net/minecraft/world/entity/EntityType.java b/src/main/java/net/minecraft/world/entity/EntityType.java -index 081937597a8984b52a1e92d4c6032c04c942116e..3d05784d9ed8ac725fc019fbbb8255e57884e8b7 100644 +index edc723ea5ca3a325106e7af38c60dbf9f0f5fb77..ddb763dfa813a6b6c3d924511ee9965c1435e2ee 100644 --- a/src/main/java/net/minecraft/world/entity/EntityType.java +++ b/src/main/java/net/minecraft/world/entity/EntityType.java @@ -331,10 +331,6 @@ public class EntityType implements FeatureElement, EntityTypeT @@ -1667,7 +1667,7 @@ index 081937597a8984b52a1e92d4c6032c04c942116e..3d05784d9ed8ac725fc019fbbb8255e5 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 e914c36bede52838f47cd88b442b9cde3e4666f3..327af739b30b94e06d94ccde6473f7d762c808d5 100644 +index 6071451339080bbdd98fb634791a56988984c8bc..640cf73adf6d5dedf41b0a083cc34b3ba9bb8f2b 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; @@ -1679,7 +1679,7 @@ index e914c36bede52838f47cd88b442b9cde3e4666f3..327af739b30b94e06d94ccde6473f7d7 public abstract class LivingEntity extends Entity implements Attackable { diff --git a/src/main/java/net/minecraft/world/entity/ai/behavior/Behavior.java b/src/main/java/net/minecraft/world/entity/ai/behavior/Behavior.java -index 57ef7fbba3028c28231abf7b7ae78aa019323536..5d76b4c3897d65d015a5dc9d8689c146ce56fa68 100644 +index 1e71cde7cb7654f1c21ae5e27e2fad7b58f593eb..fbbfefc97ca82fefc8aaa5d3f0a99520b4debdaa 100644 --- a/src/main/java/net/minecraft/world/entity/ai/behavior/Behavior.java +++ b/src/main/java/net/minecraft/world/entity/ai/behavior/Behavior.java @@ -15,7 +15,6 @@ public abstract class Behavior implements BehaviorContro @@ -1687,7 +1687,7 @@ index 57ef7fbba3028c28231abf7b7ae78aa019323536..5d76b4c3897d65d015a5dc9d8689c146 // Paper start - configurable behavior tick rate and timings private final String configKey; - private final co.aikar.timings.Timing timing; - // Paper end + // Paper end - configurable behavior tick rate and timings public Behavior(Map, MemoryStatus> requiredMemoryState) { @@ -37,7 +36,6 @@ public abstract class Behavior implements BehaviorContro @@ -1695,7 +1695,7 @@ index 57ef7fbba3028c28231abf7b7ae78aa019323536..5d76b4c3897d65d015a5dc9d8689c146 } this.configKey = key.toLowerCase(java.util.Locale.ROOT); - this.timing = co.aikar.timings.MinecraftTimings.getBehaviorTimings(configKey); - // Paper end + // Paper end - configurable behavior tick rate and timings } @@ -58,9 +56,7 @@ public abstract class Behavior implements BehaviorContro @@ -1754,7 +1754,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 1496b870eaf99d4c3b6dd01159d7c2893fd9366b..e7c8d223fb6d82b017031d58a17050081e70ff3b 100644 +index 9fd2fcf8437c866e4fe7a44108cde338e1a9f9a2..111d28fc2e26783a714b10f91877b09f5e8f8fa1 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 @@ @@ -1811,7 +1811,7 @@ index 1496b870eaf99d4c3b6dd01159d7c2893fd9366b..e7c8d223fb6d82b017031d58a1705008 // CraftBukkit end public abstract class Level implements LevelAccessor, AutoCloseable { -@@ -179,7 +169,6 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -178,7 +168,6 @@ public abstract class Level implements LevelAccessor, AutoCloseable { // Paper end - add paper world config public final com.destroystokyo.paper.antixray.ChunkPacketBlockController chunkPacketBlockController; // Paper - Anti-Xray @@ -1819,7 +1819,7 @@ index 1496b870eaf99d4c3b6dd01159d7c2893fd9366b..e7c8d223fb6d82b017031d58a1705008 public static BlockPos lastPhysicsProblem; // Spigot private org.spigotmc.TickLimiter entityLimiter; private org.spigotmc.TickLimiter tileLimiter; -@@ -295,7 +284,6 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -294,7 +283,6 @@ public abstract class Level implements LevelAccessor, AutoCloseable { public void onBorderSetDamageSafeZOne(WorldBorder border, double safeZoneRadius) {} }); // CraftBukkit end @@ -1827,7 +1827,7 @@ index 1496b870eaf99d4c3b6dd01159d7c2893fd9366b..e7c8d223fb6d82b017031d58a1705008 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); -@@ -1270,15 +1258,12 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1269,15 +1257,12 @@ public abstract class Level implements LevelAccessor, AutoCloseable { ProfilerFiller gameprofilerfiller = this.getProfiler(); gameprofilerfiller.push("blockEntities"); @@ -1843,9 +1843,9 @@ index 1496b870eaf99d4c3b6dd01159d7c2893fd9366b..e7c8d223fb6d82b017031d58a1705008 // Spigot start // Iterator iterator = this.blockEntityTickers.iterator(); boolean flag = this.tickRateManager().runsNormally(); -@@ -1307,9 +1292,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1306,9 +1291,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } - this.blockEntityTickers.removeAll(toRemove); + this.blockEntityTickers.removeAll(toRemove); // Paper - Fix MC-117075 - this.timings.tileEntityTick.stopTiming(); // Spigot this.tickingBlockEntities = false; @@ -1854,7 +1854,7 @@ index 1496b870eaf99d4c3b6dd01159d7c2893fd9366b..e7c8d223fb6d82b017031d58a1705008 this.spigotConfig.currentPrimedTnt = 0; // Spigot } diff --git a/src/main/java/net/minecraft/world/level/NaturalSpawner.java b/src/main/java/net/minecraft/world/level/NaturalSpawner.java -index dc211c6aedc178ac50b7d05aab3662c422211cbd..45ddd30ca0744901e3d40a8d26c490ca08471cff 100644 +index 17e9f3a30e287faf210e08dc7eb177a70f049f43..40731adc1b85727d83aeab29b0ebde7fc366584c 100644 --- a/src/main/java/net/minecraft/world/level/NaturalSpawner.java +++ b/src/main/java/net/minecraft/world/level/NaturalSpawner.java @@ -133,7 +133,6 @@ public final class NaturalSpawner { @@ -1874,7 +1874,7 @@ index dc211c6aedc178ac50b7d05aab3662c422211cbd..45ddd30ca0744901e3d40a8d26c490ca } 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 3f2fdf73e2e520838c7b59fe994e67ab2d1a4d6b..2c1b9221b936c8f8bb00970cfe1100161ecffd36 100644 +index 73d6f881a7d4d8ff96040d34ac502e5b0937d577..e815d53c327709d977045e016f8d2e9338500002 100644 --- a/src/main/java/net/minecraft/world/level/block/Block.java +++ b/src/main/java/net/minecraft/world/level/block/Block.java @@ -103,13 +103,6 @@ public class Block extends BlockBehaviour implements ItemLike { @@ -1911,7 +1911,7 @@ index 4ce7a7947fa727e64556148f923508ce76c128c4..bfc81572df24b5afbacee6f290cffaa9 private static final CraftPersistentDataTypeRegistry DATA_TYPE_REGISTRY = new CraftPersistentDataTypeRegistry(); public CraftPersistentDataContainer persistentDataContainer; diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -index 27e8ee4507460b1cc72de692b41562b9f4f13929..b544446deb857a6a580b7a7be5a1ea571f996ff6 100644 +index f6bfe4dc7c2c2c7d7d7852c76f15f84928bc3e9f..b2807c4493a558e2fd11b2a1f04593c6299d5874 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java @@ -785,7 +785,6 @@ public class LevelChunk extends ChunkAccess { @@ -1949,7 +1949,7 @@ index 27e8ee4507460b1cc72de692b41562b9f4f13929..b544446deb857a6a580b7a7be5a1ea57 } } diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java -index 9badf09271a4ff99874110cf0622000d1eb71546..dd95c9d931da5ee2cb3e620c71cc90d178c51fbc 100644 +index 7a6f62787411a1e160576e7a7da4122b4f0ef5b6..cac0f51ff4f6b1bc498d24fa8ecdb910b3d8f010 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 { @@ -2107,7 +2107,7 @@ index b3e1adeb932da9b3bed16acd94e2f16da48a7c72..e9798517b9211c50a20ea5c69603aab3 } } diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -index ec2396f0e5d62b10450eaa7239a8c5479638b3c3..995ae8f2f76bf0255d7eac4190c5b961bfb17f24 100644 +index 509f8487a170f3dc84b091acf16df26e42391189..c00c8655db9813eac0498da6c0c75d9b199d6c7d 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java @@ -212,7 +212,6 @@ public final class CraftMagicNumbers implements UnsafeValues { diff --git a/patches/server/0003-Leaves-Server-Utils.patch b/patches/server/0003-Leaves-Server-Utils.patch index 88ea3209..81c25a31 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 92f9d55c224cd4e25060d8751ccb28a978979241..734273b452caf133a7e4671c53c670c94a0c7ee1 100644 +index 7ceb4ec480d8799d0bdbd645e5760d2c952b679b..552a68cacea57fec0dcaf22672ba8e12c677ee5f 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -424,6 +424,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -423,6 +423,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S private UUID originWorld; public boolean freezeLocked = false; // Paper - Freeze Tick Lock API public boolean fixedPose = false; // Paper - Expand Pose API @@ -62,10 +62,10 @@ index 92f9d55c224cd4e25060d8751ccb28a978979241..734273b452caf133a7e4671c53c670c9 } catch (Throwable throwable) { CrashReport crashreport = CrashReport.forThrowable(throwable, "Loading entity NBT"); -@@ -4922,4 +4929,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4915,4 +4922,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S return ((net.minecraft.server.level.ServerChunkCache) level.getChunkSource()).isPositionTicking(this); } - // Paper end + // Paper end - Expose entity id counter + + // Leaves start - leaves ex data + public CompoundTag getLeavesData() { diff --git a/patches/server/0005-Leaves-Server-Config-And-Command.patch b/patches/server/0005-Leaves-Server-Config-And-Command.patch index 9d07277c..6d3c37e4 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 19c388c98d7e86391b4798bcf3a19d9932c81aed..e5d331d0e5bf2d80685289430682ca7a9ccbefff 100644 +index a09aef16a58bf713ec670ad23d44255943016743..38c52f07f7790ff1b6aa0c8f19db98cb36e9ce7c 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1143,6 +1143,7 @@ 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 c82ebcac07033d887af499f81520982fbe5ed4f1..ef38de1c64f067250c12cceca24f68ef3a8feb74 100644 +index a0c1db8cfebaa0344012cc0af18d6231cdcdcbb8..6482c2456d9dc9b4983f691f388b7ec045d2cab6 100644 --- a/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java +++ b/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java @@ -61,12 +61,19 @@ public class EndPortalBlock extends BaseEntityBlock { diff --git a/patches/server/0008-Fix-trading-with-the-void.patch b/patches/server/0008-Fix-trading-with-the-void.patch index 5d6e7b13..6d4e11b0 100644 --- a/patches/server/0008-Fix-trading-with-the-void.patch +++ b/patches/server/0008-Fix-trading-with-the-void.patch @@ -5,19 +5,19 @@ 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 21b40a47160bd2904cb0a482c066d3866c804187..9be0aa933b2a1d5d2962871102ffa576df56245b 100644 +index cc50dd6b75f0d2ed2202c39598c5c9b1c3090d0f..384327f4a77e0fd92a5de35c4beba767143bbc36 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -2809,11 +2809,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -2789,11 +2789,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 -- // Paper start +- // Paper start - Fix merchant inventory not closing on entity removal - if (entity.getBukkitEntity() instanceof org.bukkit.inventory.Merchant merchant && merchant.getTrader() != null) { - merchant.getTrader().closeInventory(org.bukkit.event.inventory.InventoryCloseEvent.Reason.UNLOADED); - } -- // Paper end +- // Paper end - Fix merchant inventory not closing on entity removal + // Leaves - fix trading with the void for (org.bukkit.entity.HumanEntity h : Lists.newArrayList(((org.bukkit.inventory.InventoryHolder) entity.getBukkitEntity()).getInventory().getViewers())) { - h.closeInventory(org.bukkit.event.inventory.InventoryCloseEvent.Reason.UNLOADED); // Paper + h.closeInventory(org.bukkit.event.inventory.InventoryCloseEvent.Reason.UNLOADED); // Paper - Inventory close reason } diff --git a/patches/server/0010-Fakeplayer-support.patch b/patches/server/0010-Fakeplayer-support.patch index 46bf3c61..f59a8011 100644 --- a/patches/server/0010-Fakeplayer-support.patch +++ b/patches/server/0010-Fakeplayer-support.patch @@ -5,7 +5,7 @@ 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 00bf770559d9c628119658cb027eb0b970c04e1b..7284df7d0d4242f55ecd63df2c137ec3e7c2f25c 100644 +index a327973e37b5b8d4e15683ef24548482ac3dc3d5..65d82963d611a6dbbd7ca58d363854e4fad59230 100644 --- a/src/main/java/net/minecraft/advancements/critereon/SimpleCriterionTrigger.java +++ b/src/main/java/net/minecraft/advancements/critereon/SimpleCriterionTrigger.java @@ -42,6 +42,7 @@ public abstract class SimpleCriterionTrigger> set = (Set) playerAdvancements.criterionData.get(this); // Paper - fix AdvancementDataPlayer leak if (set != null && !set.isEmpty()) { diff --git a/src/main/java/net/minecraft/network/Connection.java b/src/main/java/net/minecraft/network/Connection.java -index 2ae08b21c63490bbf8cd870f9585d82ed131f815..c6f773afc39e7c97d13d1977a7609fc46714709d 100644 +index b189aeb8646b5385c7cca0c4babfcb071a642220..d6179829579a07c29565d024f53069375be53fb7 100644 --- a/src/main/java/net/minecraft/network/Connection.java +++ b/src/main/java/net/minecraft/network/Connection.java @@ -339,6 +339,14 @@ public class Connection extends SimpleChannelInboundHandler> { @@ -36,36 +36,28 @@ index 2ae08b21c63490bbf8cd870f9585d82ed131f815..c6f773afc39e7c97d13d1977a7609fc4 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 cba7872ef6fd648e2a9b4c997a97ae314557213c..85169a9082268fa77453a64196a419d59cb88c9a 100644 +index 5582fc4548cdaef69f4cf888f02d6d280adb3eaf..d90955687caa5fbe925c55184ac14fa3946afa74 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -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; -+import net.minecraft.world.damagesource.DamageSource; - import net.minecraft.world.entity.Entity; - import net.minecraft.world.entity.ai.village.VillageSiege; - import net.minecraft.world.entity.npc.CatSpawner; -@@ -665,6 +666,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop= world.paperConfig().entities.behavior.playerInsomniaStartTicks) { // Paper - Ability to control player's insomnia and phantoms 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 c8e938ec5b740b2ffd198cccc349d6ae69cda50d..69a7933bca98d29f215edfe3839e416207d083f9 100644 +index da4660b93b64100ed0f30cde5bcaafa64174fb7a..6b2c19f3ea4fb8e2f6afc165ece6d0c66ba59a75 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -259,6 +259,7 @@ import org.yaml.snakeyaml.constructor.SafeConstructor; @@ -385,7 +377,7 @@ index c8e938ec5b740b2ffd198cccc349d6ae69cda50d..69a7933bca98d29f215edfe3839e4162 + // 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 1c3e1153d08b59d29b3613fc3b50a4780aa7a3ac..fa92ba466c958eea0330cd24bf45b96958a13204 100644 +index 8698104e3eb98e2cc5da5de87a8f538860c1d91d..dc7ba0ce76031e6dd7e550ceaf3b2f97cbc307f1 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java @@ -54,6 +54,8 @@ import org.bukkit.plugin.Plugin; diff --git a/patches/server/0013-Add-isShrink-to-EntityResurrectEvent.patch b/patches/server/0013-Add-isShrink-to-EntityResurrectEvent.patch index 08e42cfd..69f7505f 100644 --- a/patches/server/0013-Add-isShrink-to-EntityResurrectEvent.patch +++ b/patches/server/0013-Add-isShrink-to-EntityResurrectEvent.patch @@ -5,7 +5,7 @@ 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 327af739b30b94e06d94ccde6473f7d762c808d5..ffc10deeb66a7038b38c10dd0c38f7f2cd2be22d 100644 +index 640cf73adf6d5dedf41b0a083cc34b3ba9bb8f2b..3e84707fe7eace5c249eb2a1299ea841356bfc78 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 { @@ -23,7 +23,7 @@ index 327af739b30b94e06d94ccde6473f7d762c808d5..ffc10deeb66a7038b38c10dd0c38f7f2 itemstack1.shrink(1); } if (itemstack != null && this instanceof ServerPlayer) { -@@ -4544,3 +4544,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 2cba7fd6..ca2d8f7d 100644 --- a/patches/server/0014-Budding-Amethyst-can-push-by-piston.patch +++ b/patches/server/0014-Budding-Amethyst-can-push-by-piston.patch @@ -5,7 +5,7 @@ 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 67e1362a398daf13e128b64523e8db69fbb46fe1..14610260905dc6922bf173d1c2fc231d92e05a6f 100644 +index e815d53c327709d977045e016f8d2e9338500002..6214df7dc09b2e50c2dcf2d60b3a02cc39329e2c 100644 --- a/src/main/java/net/minecraft/world/level/block/Block.java +++ b/src/main/java/net/minecraft/world/level/block/Block.java @@ -602,6 +602,12 @@ public class Block extends BlockBehaviour implements ItemLike { @@ -22,7 +22,7 @@ index 67e1362a398daf13e128b64523e8db69fbb46fe1..14610260905dc6922bf173d1c2fc231d 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 ee24eac5e37a2fd0c8c37365ea10d03749beb9a7..915b148e8bf5bdf6364253cf81e01b87f420d598 100644 +index 7f58c9f5935cd14ea1096de14633f653eb486d7e..b83efe46ecb3ebf2b3d0c4499eec29055663fd3f 100644 --- a/src/main/java/net/minecraft/world/level/block/BuddingAmethystBlock.java +++ b/src/main/java/net/minecraft/world/level/block/BuddingAmethystBlock.java @@ -60,4 +60,11 @@ public class BuddingAmethystBlock extends AmethystBlock { @@ -38,15 +38,15 @@ index ee24eac5e37a2fd0c8c37365ea10d03749beb9a7..915b148e8bf5bdf6364253cf81e01b87 + // 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 401f1b418a4f57059e991cc958ebadb31239a581..aafcd79bed9683cff5cc9634a01a781ab421d994 100644 +index 97a9fbbe6d8435e88e5fe716770e4034ab0db7a7..6c237de3572e060342d79f31c79e3e459b73762a 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 @@ -1157,7 +1157,7 @@ public abstract class BlockBehaviour implements FeatureElement { } public PushReaction getPistonPushReaction() { -- return !this.isDestroyable() ? PushReaction.BLOCK : this.pushReaction; // Paper -+ return !this.isDestroyable() ? PushReaction.BLOCK : this.getBlock().getResetPushReaction() == null ? this.pushReaction : this.getBlock().getResetPushReaction(); // Paper // Leaves - can reset +- return !this.isDestroyable() ? PushReaction.BLOCK : this.pushReaction; // Paper - Protect Bedrock and End Portal/Frames from being destroyed ++ return !this.isDestroyable() ? PushReaction.BLOCK : this.getBlock().getResetPushReaction() == null ? this.pushReaction : this.getBlock().getResetPushReaction(); // Paper - Protect Bedrock and End Portal/Frames from being destroyed // Leaves - can reset } public boolean isSolidRender(BlockGetter world, BlockPos pos) { diff --git a/patches/server/0017-Fix-tripwire-update.patch b/patches/server/0017-Fix-tripwire-update.patch index c70009f4..26bf962c 100644 --- a/patches/server/0017-Fix-tripwire-update.patch +++ b/patches/server/0017-Fix-tripwire-update.patch @@ -5,7 +5,7 @@ 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 0f6ea0adb4b99d934e1a3fcb92562dffb2a45f63..03cbf916cd3af404b2f234cfa15779b8eb7acf38 100644 +index 7f2dcf6a9e69779e6f898284b58fb1e32902000c..32021323101396cd91ed0cf88603c0366032639b 100644 --- a/src/main/java/net/minecraft/world/level/block/TripWireHookBlock.java +++ b/src/main/java/net/minecraft/world/level/block/TripWireHookBlock.java @@ -162,7 +162,7 @@ public class TripWireHookBlock extends Block { @@ -21,8 +21,8 @@ index 0f6ea0adb4b99d934e1a3fcb92562dffb2a45f63..03cbf916cd3af404b2f234cfa15779b8 TripWireHookBlock.emitState(world, pos, flag4, flag5, flag2, flag3); if (!beingRemoved) { // Paper - fix tripwire state inconsistency -- if (world.getBlockState(pos).getBlock() == Blocks.TRIPWIRE_HOOK) // Paper - validate -+ // if (world.getBlockState(pos).getBlock() == Blocks.TRIPWIRE_HOOK) // Paper - validate - Leaves - vanilla +- if (world.getBlockState(pos).getBlock() == Blocks.TRIPWIRE_HOOK) // Paper - Validate tripwire hook placement before update ++ // if (world.getBlockState(pos).getBlock() == Blocks.TRIPWIRE_HOOK) // Paper - Validate tripwire hook placement before update - Leaves - vanilla world.setBlock(pos, (BlockState) iblockdata3.setValue(TripWireHookBlock.FACING, enumdirection), 3); if (flag1) { TripWireHookBlock.notifyNeighbors(block, world, pos, enumdirection); diff --git a/patches/server/0018-No-chat-sign.patch b/patches/server/0018-No-chat-sign.patch index 1c8d2a45..ebeecdcc 100644 --- a/patches/server/0018-No-chat-sign.patch +++ b/patches/server/0018-No-chat-sign.patch @@ -102,7 +102,7 @@ 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 27f7507a50537ec76f88518d3584d7c880f6eee4..9229b76bb0bb87797cc3f5615d85fe2e5fd0c027 100644 +index 129c2e6f0cc9d752e7ca5934e13e89358af39180..2882d720f2b4fbc5f00cfe45a80f48e7810c1424 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 @@ -115,7 +115,7 @@ index 27f7507a50537ec76f88518d3584d7c880f6eee4..9229b76bb0bb87797cc3f5615d85fe2e } diff --git a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java -index 9b73df7fbd869ce51bd01a8d8b46d00fe7896126..68a69f09cb541607aa7d4b86d1cb759c1f83ac86 100644 +index 8aa1337b420e1c9fbf51f951f14a63d89f61d3f4..19db81d87d1e0eb9716ceaf88dc407db10e48f5f 100644 --- a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java @@ -239,10 +239,27 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack @@ -147,10 +147,10 @@ index 9b73df7fbd869ce51bd01a8d8b46d00fe7896126..68a69f09cb541607aa7d4b86d1cb759c 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 89249723a490c5b08916241279ab94f82e41a942..23707e17000639167bb11c9c5303ca1e5abf44aa 100644 +index 7612ee6c93c4ad783d71b125ed3b2fe91ab7c166..02427973b52898ab2d87d7585801fe14555d2ae4 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -1489,7 +1489,7 @@ public abstract class PlayerList { +@@ -1488,7 +1488,7 @@ public abstract class PlayerList { } public boolean verifyChatTrusted(PlayerChatMessage message) { // Paper - private -> public diff --git a/patches/server/0019-Dont-send-useless-entity-packets.patch b/patches/server/0019-Dont-send-useless-entity-packets.patch index cf977e43..1ce97b9d 100644 --- a/patches/server/0019-Dont-send-useless-entity-packets.patch +++ b/patches/server/0019-Dont-send-useless-entity-packets.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Dont send useless entity packets This patch is Powered by Purpur(https://github.com/PurpurMC/Purpur) diff --git a/src/main/java/net/minecraft/server/level/ServerEntity.java b/src/main/java/net/minecraft/server/level/ServerEntity.java -index 35674f92a67f93382103c2766df4b678ba5c862f..b0517b9483a8cfd74997f89efdc0d8559b80ae4a 100644 +index 529ab44baaf573b97cf7e89560c548642733188f..b2183c298b0c68daee41238735621ff002338a68 100644 --- a/src/main/java/net/minecraft/server/level/ServerEntity.java +++ b/src/main/java/net/minecraft/server/level/ServerEntity.java -@@ -191,6 +191,7 @@ public class ServerEntity { +@@ -197,6 +197,7 @@ public class ServerEntity { flag4 = true; flag5 = true; } @@ -17,7 +17,7 @@ index 35674f92a67f93382103c2766df4b678ba5c862f..b0517b9483a8cfd74997f89efdc0d855 } else { this.wasOnGround = this.entity.onGround(); this.teleportDelay = 0; -@@ -198,6 +199,11 @@ public class ServerEntity { +@@ -204,6 +205,11 @@ public class ServerEntity { flag4 = true; flag5 = true; } @@ -29,7 +29,7 @@ index 35674f92a67f93382103c2766df4b678ba5c862f..b0517b9483a8cfd74997f89efdc0d855 } if ((this.trackDelta || this.entity.hasImpulse || this.entity instanceof LivingEntity && ((LivingEntity) this.entity).isFallFlying()) && this.tickCount > 0) { -@@ -270,6 +276,21 @@ public class ServerEntity { +@@ -276,6 +282,21 @@ public class ServerEntity { }); } diff --git a/patches/server/0020-Fix-Paper-6045-block-goal-shouldn-t-load-chunks.patch b/patches/server/0020-Fix-Paper-6045-block-goal-shouldn-t-load-chunks.patch index ac4d8672..1730eb05 100644 --- a/patches/server/0020-Fix-Paper-6045-block-goal-shouldn-t-load-chunks.patch +++ b/patches/server/0020-Fix-Paper-6045-block-goal-shouldn-t-load-chunks.patch @@ -6,14 +6,14 @@ 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 4bbc36404b396500df0d9db380cf223b5897662e..2dda876b01b34f26337f53f2b3b6a2a1110bd96a 100644 +index 07519c817cc6de04a98198c43a0c2b02ba3141eb..3f4ba1f12e1d560abe2540d34d6f1cdd94ec5e55 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 { +@@ -120,6 +120,7 @@ public abstract class MoveToBlockGoal extends Goal { for(int m = 0; m <= l; m = m > 0 ? -m : 1 - m) { for(int n = m < l && m > -l ? l : 0; n <= l; n = n > 0 ? -n : 1 - n) { mutableBlockPos.setWithOffset(blockPos, m, k - 1, n); + if (top.leavesmc.leaves.LeavesConfig.fixPaper6045 && !this.mob.level().hasChunkAt(mutableBlockPos)) continue; // Leaves - if this block isn't loaded, continue if (this.mob.isWithinRestriction(mutableBlockPos) && this.isValidTarget(this.mob.level(), mutableBlockPos)) { this.blockPos = mutableBlockPos; - setTargetPosition(mutableBlockPos.immutable()); // Paper + this.mob.movingTarget = mutableBlockPos == BlockPos.ZERO ? null : mutableBlockPos.immutable(); // Paper diff --git a/patches/server/0021-Optimize-entity-coordinate-key.patch b/patches/server/0021-Optimize-entity-coordinate-key.patch index 8788772d..21f163ec 100644 --- a/patches/server/0021-Optimize-entity-coordinate-key.patch +++ b/patches/server/0021-Optimize-entity-coordinate-key.patch @@ -25,10 +25,10 @@ index 200ed770b57e1a9240abf0473968d4b85cbefe3c..bf16715db2424f0b05854ae7665b4448 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 d28f4e71a370606cf1626f7176aef815365b6cbe..2446413b944c7955c88b7f2930e86abfe375ab6c 100644 +index 30a2cd24727d1cffc31b077b383487f3bdb6ce4a..3f334ff8da00d37364e796685f672edfc8b449bf 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -309,7 +309,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -308,7 +308,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-Move-ThreadUnsafeRandom-Initialization.patch b/patches/server/0024-Move-ThreadUnsafeRandom-Initialization.patch index 7f631482..33bab777 100644 --- a/patches/server/0024-Move-ThreadUnsafeRandom-Initialization.patch +++ b/patches/server/0024-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 9be0aa933b2a1d5d2962871102ffa576df56245b..8846eb5b21924b00a870dfdd57fc9afe9988a263 100644 +index 384327f4a77e0fd92a5de35c4beba767143bbc36..d046ffa452a6fe2f2f35a961fec792f27ed6df38 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -970,7 +970,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -965,7 +965,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 9be0aa933b2a1d5d2962871102ffa576df56245b..8846eb5b21924b00a870dfdd57fc9afe 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 e7c8d223fb6d82b017031d58a17050081e70ff3b..b8c9684247fcb4af3a42dfae59a3e68a320fd4b4 100644 +index 111d28fc2e26783a714b10f91877b09f5e8f8fa1..0a44fddad2f90983ae46bd6465e7ee857a702674 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -202,6 +202,8 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -201,6 +201,8 @@ public abstract class Level implements LevelAccessor, AutoCloseable { public abstract ResourceKey getTypeKey(); @@ -31,7 +31,7 @@ index e7c8d223fb6d82b017031d58a17050081e70ff3b..b8c9684247fcb4af3a42dfae59a3e68a 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 - create paper world config; 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 - create paper world config -@@ -294,6 +296,12 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -293,6 +295,12 @@ public abstract class Level implements LevelAccessor, AutoCloseable { // Paper end - optimise collisions } @@ -41,6 +41,6 @@ index e7c8d223fb6d82b017031d58a17050081e70ff3b..b8c9684247fcb4af3a42dfae59a3e68a + } + // Leaves end - thread unsafe random get + - // Paper start + // Paper start - Cancel hit for vanished players // ret true if no collision public final boolean checkEntityCollision(BlockState data, Entity source, net.minecraft.world.phys.shapes.CollisionContext voxelshapedcollision, diff --git a/patches/server/0025-Optimize-random-calls-in-chunk-ticking.patch b/patches/server/0025-Optimize-random-calls-in-chunk-ticking.patch index 2d3e6ce1..a77ec8bd 100644 --- a/patches/server/0025-Optimize-random-calls-in-chunk-ticking.patch +++ b/patches/server/0025-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 d6089c0d0b076d232834619bc93bc64f0be57340..c4577d7dc27bb48c95794212de4abf2e31458380 100644 +index cb755283ef6bf8812e2c2ad8b546627a334b75a2..9659b5adb9824df325285763ef211cd189174668 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -@@ -503,6 +503,11 @@ public class ServerChunkCache extends ChunkSource { +@@ -510,6 +510,11 @@ public class ServerChunkCache extends ChunkSource { ProfilerFiller gameprofilerfiller = this.level.getProfiler(); gameprofilerfiller.push("pollingChunks"); @@ -22,10 +22,10 @@ index d6089c0d0b076d232834619bc93bc64f0be57340..c4577d7dc27bb48c95794212de4abf2e // Paper - 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 8846eb5b21924b00a870dfdd57fc9afe9988a263..14512a65562704586ad7283850b2f497391d5c10 100644 +index d046ffa452a6fe2f2f35a961fec792f27ed6df38..9018a9b714a157045e473294ee59980c561b9050 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -973,6 +973,13 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -968,6 +968,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 8846eb5b21924b00a870dfdd57fc9afe9988a263..14512a65562704586ad7283850b2f497 public void tickChunk(LevelChunk chunk, int randomTickSpeed) { ChunkPos chunkcoordintpair = chunk.getPos(); boolean flag = this.isRaining(); -@@ -983,7 +990,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -978,7 +985,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 @@ -49,7 +49,7 @@ index 8846eb5b21924b00a870dfdd57fc9afe9988a263..14512a65562704586ad7283850b2f497 if (this.isRainingAt(blockposition)) { 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 b544446deb857a6a580b7a7be5a1ea571f996ff6..cb58c50b1979480f82f9e91ab3a155318ac7dd59 100644 +index b2807c4493a558e2fd11b2a1f04593c6299d5874..6f89a493f557a55075263a74f32682fec66f4f23 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java @@ -86,6 +86,18 @@ public class LevelChunk extends ChunkAccess { diff --git a/patches/server/0026-Early-return-optimization-for-target-finding.patch b/patches/server/0026-Early-return-optimization-for-target-finding.patch index 7ea39c58..0a24936d 100644 --- a/patches/server/0026-Early-return-optimization-for-target-finding.patch +++ b/patches/server/0026-Early-return-optimization-for-target-finding.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Early return optimization for target finding This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish) diff --git a/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java b/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java -index c157309ac78e7af084d3acb6e8b2bcd469a39d5e..a7a1c25208031d9540794d2e068620bd8043b4ce 100644 +index c8a80c1b2fedff22e8a877d466062375ffb2f0d7..458e6838e953dae2b17c1cd1823feaa58ab8edcb 100644 --- a/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java +++ b/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java @@ -75,9 +75,17 @@ public class TargetingConditions { @@ -22,7 +22,7 @@ index c157309ac78e7af084d3acb6e8b2bcd469a39d5e..a7a1c25208031d9540794d2e068620bd + } + } double d = this.testInvisible ? targetEntity.getVisibilityPercent(baseEntity) : 1.0D; - double e = Math.max((this.useFollowRange ? this.getFollowRange(baseEntity) : this.range) * d, 2.0D); // Paper + double e = Math.max((this.useFollowRange ? this.getFollowRange(baseEntity) : this.range) * d, 2.0D); // Paper - Fix MC-145656 - double f = baseEntity.distanceToSqr(targetEntity.getX(), targetEntity.getY(), targetEntity.getZ()); + // Leaves end - check range before getting visibility if (f > e * e) { diff --git a/patches/server/0028-Config-to-disable-method-profiler.patch b/patches/server/0028-Config-to-disable-method-profiler.patch index 8465af52..1968d59d 100644 --- a/patches/server/0028-Config-to-disable-method-profiler.patch +++ b/patches/server/0028-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 85169a9082268fa77453a64196a419d59cb88c9a..bc8d5b9d79fff1fdf10f6458e5a84eef98adbf0e 100644 +index d90955687caa5fbe925c55184ac14fa3946afa74..0328722b7c25c258ff7adc312faf4f80ce76f1bd 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -2415,6 +2415,11 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop tag, double speed) { @@ -35,7 +35,7 @@ index 79b2831322b8312448c89b5276af40d1efa880d2..1f3a8f314832acc575e7d9d054eaa09a double d1 = 0.0D; boolean flag = this.isPushedByFluid(); boolean flag1 = false; -@@ -4407,38 +4409,123 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4405,38 +4407,123 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S int k1 = 0; BlockPos.MutableBlockPos blockposition_mutableblockposition = new BlockPos.MutableBlockPos(); @@ -181,7 +181,7 @@ index 79b2831322b8312448c89b5276af40d1efa880d2..1f3a8f314832acc575e7d9d054eaa09a if (vec3d.length() > 0.0D) { if (k1 > 0) { diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java -index f0de72afad4bb571153436399386a6a8a70582a6..dd0a589f6d1e61407a555be14f63e338c5333b6a 100644 +index 796bbef3544e06b8e7aac7e8ac5f740a2613f4bd..e4701dd6e023331c9138549cdeece5c0a270877d 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java @@ -25,6 +25,7 @@ public class LevelChunkSection { @@ -208,11 +208,11 @@ index f0de72afad4bb571153436399386a6a8a70582a6..dd0a589f6d1e61407a555be14f63e338 } this.updateBlockCallback(x, y, z, iblockdata1, state); // Paper - optimise collisions -@@ -161,6 +164,7 @@ public class LevelChunkSection { - if (fluid.isRandomlyTicking()) { - this.tickingFluidCount = (short) (this.tickingFluidCount + 1); - } +@@ -162,6 +165,7 @@ public class LevelChunkSection { + if (fluid.isRandomlyTicking()) { + this.tickingFluidCount = (short) (this.tickingFluidCount + 1); + } + this.fluidStateCount++; // Leaves - } + } - // Paper start - optimise collisions + // Paper start - optimise collisions diff --git a/patches/server/0039-BBOR-Protocol.patch b/patches/server/0039-BBOR-Protocol.patch index f37612a8..cdead2b9 100644 --- a/patches/server/0039-BBOR-Protocol.patch +++ b/patches/server/0039-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 23707e17000639167bb11c9c5303ca1e5abf44aa..74b31fe44e4a043d0415637b0ed67983062a6c67 100644 +index 02427973b52898ab2d87d7585801fe14555d2ae4..4c7262354c85aab0e70b7bfdadaa9741b0beadc5 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -1623,6 +1623,7 @@ public abstract class PlayerList { +@@ -1622,6 +1622,7 @@ public abstract class PlayerList { entityplayer.getRecipeBook().sendInitialRecipeBook(entityplayer); } @@ -17,7 +17,7 @@ index 23707e17000639167bb11c9c5303ca1e5abf44aa..74b31fe44e4a043d0415637b0ed67983 public boolean isAllowCheatsForAllPlayers() { 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 cb58c50b1979480f82f9e91ab3a155318ac7dd59..8268600fc06c500cbbb5658b0626ce4e36854e95 100644 +index 6f89a493f557a55075263a74f32682fec66f4f23..226783152422548a5ac157605fb25cddef5eeeb6 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java @@ -931,6 +931,11 @@ public class LevelChunk extends ChunkAccess { diff --git a/patches/server/0040-InstantBlockUpdater-Reintroduced.patch b/patches/server/0040-InstantBlockUpdater-Reintroduced.patch index 6d168860..4a77265c 100644 --- a/patches/server/0040-InstantBlockUpdater-Reintroduced.patch +++ b/patches/server/0040-InstantBlockUpdater-Reintroduced.patch @@ -6,7 +6,7 @@ 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 33dcb0c113614c7605ba750afb80459b68d78f99..e304b4977dd77bd770335accae697e7c7bc90ecc 100644 +index 33c8f71c85a8a29b21cfad4ecfb845f9cf3ebb65..6d3a652da337ec684ea939552bcadd61473e6cc6 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -70,6 +70,7 @@ import net.minecraft.world.level.lighting.LevelLightEngine; @@ -17,7 +17,7 @@ index 33dcb0c113614c7605ba750afb80459b68d78f99..e304b4977dd77bd770335accae697e7c import net.minecraft.world.level.redstone.NeighborUpdater; import net.minecraft.world.level.saveddata.maps.MapItemSavedData; import net.minecraft.world.level.storage.LevelData; -@@ -247,7 +248,13 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -246,7 +247,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/0044-Player-operation-limiter.patch b/patches/server/0044-Player-operation-limiter.patch index f722e911..2e6828da 100644 --- a/patches/server/0044-Player-operation-limiter.patch +++ b/patches/server/0044-Player-operation-limiter.patch @@ -6,13 +6,13 @@ 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 41acc2e1883af2220dcdfb9bbefef1976a54d202..7564aeccc8542335b3e065558d04bfd0ee49eab8 100644 +index 23260d76c00e37df8499168ebfae21f0ee077cca..bb3b204a9734b75fe8dbeca7e44267a3278750e2 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -282,6 +282,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 + public com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper - PlayerNaturallySpawnCreaturesEvent + public @Nullable String clientBrandName = null; // Paper - Brand support + public org.bukkit.event.player.PlayerQuitEvent.QuitReason quitReason = null; // Paper - Add API for quit reason; there are a lot of changes to do if we change all methods leading to the event + // Leaves start - player operation limiter + private int instaBreakCountPerTick = 0; + private int placeBlockCountPerTick = 0; @@ -62,7 +62,7 @@ index 41acc2e1883af2220dcdfb9bbefef1976a54d202..7564aeccc8542335b3e065558d04bfd0 // 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 f8fd44500fb2a5b8273d317dbb1789fae24252fd..76cf6ebc80068b3effdbdd74c0213a7d536bf97f 100644 +index cfd4ac06a9af6bf3fac293110482e1df690e075e..68f351d87f178810df64b63d9f01f1314081a13f 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; @@ -94,7 +94,7 @@ index f8fd44500fb2a5b8273d317dbb1789fae24252fd..76cf6ebc80068b3effdbdd74c0213a7d this.debugLogging(pos, true, sequence, reason); } else { diff --git a/src/main/java/net/minecraft/world/item/BlockItem.java b/src/main/java/net/minecraft/world/item/BlockItem.java -index be8014cfb483e7bf5bbba11bea904d256b436b2f..247aec2924558e52b460deb36c9a2592a38a98e8 100644 +index d5e7cc59314b2f16d7665bc0ad8cea576f1f1235..e1ffc1b52641e9cf91f524a83b8c8ee047932d1a 100644 --- a/src/main/java/net/minecraft/world/item/BlockItem.java +++ b/src/main/java/net/minecraft/world/item/BlockItem.java @@ -32,9 +32,12 @@ import net.minecraft.world.level.block.state.StateDefinition; diff --git a/patches/server/0046-Stackable-ShulkerBoxes.patch b/patches/server/0046-Stackable-ShulkerBoxes.patch index 1a04dfae..a0597a4c 100644 --- a/patches/server/0046-Stackable-ShulkerBoxes.patch +++ b/patches/server/0046-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 491a521f0e5e272fbad7870fa3adefdea22e179f..5dacb8896d8b78b0c467aa156c497a3eb35df26c 100644 +index eb0d6238588efa35fa868f26290547574a08eca2..adc179f85a774c47d386144da6b2291e915a0e1d 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; @@ -48,8 +48,8 @@ index 491a521f0e5e272fbad7870fa3adefdea22e179f..5dacb8896d8b78b0c467aa156c497a3e private boolean isMergable() { ItemStack itemstack = this.getItem(); -- return this.isAlive() && this.pickupDelay != 32767 && this.age != -32768 && this.age < this.despawnRate && itemstack.getCount() < itemstack.getMaxStackSize(); // Paper - respect despawn rate in pickup check. -+ return this.isAlive() && this.pickupDelay != 32767 && this.age != -32768 && this.age < this.despawnRate && itemstack.getCount() < top.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(itemstack); // Paper - respect despawn rate in pickup check. // Leaves - stackable shulker boxes +- return this.isAlive() && this.pickupDelay != 32767 && this.age != -32768 && this.age < this.despawnRate && itemstack.getCount() < itemstack.getMaxStackSize(); // Paper - Alternative item-despawn-rate ++ return this.isAlive() && this.pickupDelay != 32767 && this.age != -32768 && this.age < this.despawnRate && itemstack.getCount() < top.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(itemstack); // Paper - Alternative item-despawn-rate // Leaves - stackable shulker boxes } + // Leaves end - stackable shulker boxes @@ -132,7 +132,7 @@ index d2f6027056af9d2816542f4e3d9e278d9ec2c9b4..10db6853dafd8f757499992af84c6b61 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 067f44d1fb245a315ec1c0fbccfef9b169c02d02..ef00f65f4096436451deeefe9153b86886b1e931 100644 +index 7cef5c518207752f7e1bfdd5bbec55fe9fafca6b..925cc4d99d1388bc32cebb5238a322102b6f68e5 100644 --- a/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java +++ b/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java @@ -456,7 +456,7 @@ public abstract class AbstractContainerMenu { @@ -195,9 +195,9 @@ index 067f44d1fb245a315ec1c0fbccfef9b169c02d02..ef00f65f4096436451deeefe9153b868 + if (l <= top.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(stack)) { // Leaves - stackable shulker boxes stack.setCount(0); itemstack1.setCount(l); - if (!isCheck) { // Paper - dont update if only a check + if (!isCheck) { // Paper - Add PlayerTradeEvent and PlayerPurchaseEvent slot.setChanged(); - } // Paper + } // Paper - Add PlayerTradeEvent and PlayerPurchaseEvent flag1 = true; - } else if (itemstack1.getCount() < stack.getMaxStackSize()) { - stack.shrink(stack.getMaxStackSize() - itemstack1.getCount()); @@ -207,9 +207,9 @@ index 067f44d1fb245a315ec1c0fbccfef9b169c02d02..ef00f65f4096436451deeefe9153b868 + stack.shrink(top.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(stack) - itemstack1.getCount()); + itemstack1.setCount(top.leavesmc.leaves.util.ShulkerBoxUtils.getItemStackMaxCount(stack)); + // Leaves end - stackable shulker boxes - if (!isCheck) { // Paper - dont update if only a check + if (!isCheck) { // Paper - Add PlayerTradeEvent and PlayerPurchaseEvent slot.setChanged(); - } // Paper + } // Paper - Add PlayerTradeEvent and PlayerPurchaseEvent diff --git a/src/main/java/net/minecraft/world/inventory/Slot.java b/src/main/java/net/minecraft/world/inventory/Slot.java index e2fd415b69e0213688561e9a19aec2cdcd267211..bb99bdd45efdb52323429565a4e13c07f5ab6d44 100644 --- a/src/main/java/net/minecraft/world/inventory/Slot.java @@ -257,16 +257,16 @@ index 5780d349f968ea3d05cf569b63531f8e76884827..d30af75de7d146b6bf49814b0eabae94 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 b17b8f2a773fcdd20d26dcdb083d59f6b89af37f..62d1c35e78f84f561deea990b4938258a482fe39 100644 +index dfc623059f9c5920883a06f9662f1bf3b7a2c4c6..46eeae81a7cda8fab80a255a57dcf096b37461bd 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 if (itemstack1.isEmpty()) { // Spigot start - SPIGOT-6693, InventorySubcontainer#setItem - ItemStack leftover = ItemStack.EMPTY; // Paper + ItemStack leftover = ItemStack.EMPTY; // Paper - Make hoppers respect inventory max stack size - if (!stack.isEmpty() && stack.getCount() > to.getMaxStackSize()) { + if (!stack.isEmpty() && (stack.getCount() > to.getMaxStackSize() || stack.getCount() > stack.getMaxStackSize())) { // Leaves - stackable shulker boxes - leftover = stack; // Paper + leftover = stack; // Paper - Make hoppers respect inventory max stack size - stack = stack.split(to.getMaxStackSize()); + stack = stack.split(Math.min(to.getMaxStackSize(), stack.getMaxStackSize())); // Leaves - stackable shulker boxes } diff --git a/patches/server/0047-Improve-fluid-direction-caching.patch b/patches/server/0047-Improve-fluid-direction-caching.patch index c807b02e..15100225 100644 --- a/patches/server/0047-Improve-fluid-direction-caching.patch +++ b/patches/server/0047-Improve-fluid-direction-caching.patch @@ -7,7 +7,7 @@ This patch is Powered by Pufferfish (https://github.com/pufferfish-gg/Pufferfish) diff --git a/src/main/java/net/minecraft/world/level/material/FlowingFluid.java b/src/main/java/net/minecraft/world/level/material/FlowingFluid.java -index e21f4c5aff3a8e97101f6efc1349fbecf326b5ea..3cf6e62ceb555eedf133e0ba82445caadaab7743 100644 +index 6d8ff6c06af5545634f255ed17dc1e489ece2548..82cad323e4fba9aea082047d3eb6c4351681d9af 100644 --- a/src/main/java/net/minecraft/world/level/material/FlowingFluid.java +++ b/src/main/java/net/minecraft/world/level/material/FlowingFluid.java @@ -53,6 +53,11 @@ public abstract class FlowingFluid extends Fluid { @@ -22,7 +22,7 @@ index e21f4c5aff3a8e97101f6efc1349fbecf326b5ea..3cf6e62ceb555eedf133e0ba82445caa private final Map shapes = Maps.newIdentityHashMap(); public FlowingFluid() {} -@@ -252,40 +257,71 @@ public abstract class FlowingFluid extends Fluid { +@@ -251,40 +256,71 @@ public abstract class FlowingFluid extends Fluid { return false; } // Paper end - optimise collisions diff --git a/patches/server/0048-MC-Technical-Survival-Mode.patch b/patches/server/0048-MC-Technical-Survival-Mode.patch index 8c10a27a..6ed66437 100644 --- a/patches/server/0048-MC-Technical-Survival-Mode.patch +++ b/patches/server/0048-MC-Technical-Survival-Mode.patch @@ -31,10 +31,10 @@ index fa1c0aee8c3a4d0868482cf5c703bbfd08e09874..c24148d8486420434922864df6f1ffa0 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 1af3dd85ba10599eec17102c3cb6d86fba84e08d..720a89e315225cf15342bc52d337ab5762e6d126 100644 +index b1f7e80c6c762be4ac960cdd98970924da54b5dc..c78fdfaca4bb94cd1cd8075655645082b0f6746f 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -2748,7 +2748,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -2728,7 +2728,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 @@ -44,7 +44,7 @@ index 1af3dd85ba10599eec17102c3cb6d86fba84e08d..720a89e315225cf15342bc52d337ab57 pearl.ownerUUID = null; } diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 7564aeccc8542335b3e065558d04bfd0ee49eab8..2e56b8b2b8ba5c17080586745a80bc665d4231d0 100644 +index bb3b204a9734b75fe8dbeca7e44267a3278750e2..5ce2329f117eea5de6094c8dd7d37aec08b5e2a6 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -1533,7 +1533,7 @@ public class ServerPlayer extends Player { @@ -57,7 +57,7 @@ index 7564aeccc8542335b3e065558d04bfd0ee49eab8..2e56b8b2b8ba5c17080586745a80bc66 @Override diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java -index ffc5b68c4246a7111845230a75552bb15875a209..990cdebf1b9e64a5001c71411e64f68108aef47f 100644 +index c99ab157e43fc990549fc06f5b6fb1e227014fde..22812fce0f0427e94d1fdfe08cea1a1247b0d717 100644 --- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java +++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java @@ -67,7 +67,7 @@ public class EndCrystal extends Entity { @@ -70,7 +70,7 @@ 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 2274541c9386e4f1bbae489a1f123d502ccbf9cc..0b8f2affbea2b1e166aa574a432a51f30d60386f 100644 +index 2498f942ab55a2ee9af4822c300ec6f45811ef3f..2c4f9aa4ad22393e19e01e8e14e367968b5cba57 100644 --- a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java +++ b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java @@ -71,7 +71,7 @@ public class PrimedTnt extends Entity implements TraceableEntity { @@ -83,20 +83,20 @@ index 2274541c9386e4f1bbae489a1f123d502ccbf9cc..0b8f2affbea2b1e166aa574a432a51f3 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 5b6d5c799cc8e601a01b6967917e15ba1e2db721..6a2314d9506f7e1a4c8676e28125e6ac16d16ad6 100644 +index 156809090f1f83ad68e7e2477a3cfddac5757a8e..7f191b04f7c84f3188b96c108616424bf54170cb 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java +++ b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java @@ -119,7 +119,7 @@ public abstract class Projectile extends Entity implements TraceableEntity { if (nbt.hasUUID("Owner")) { this.ownerUUID = nbt.getUUID("Owner"); this.cachedOwner = null; -- if (this instanceof ThrownEnderpearl && this.level() != null && this.level().paperConfig().fixes.disableUnloadedChunkEnderpearlExploit) { this.ownerUUID = null; } // Paper - Don't store shooter name for pearls to block enderpearl travel exploit -+ if (this instanceof ThrownEnderpearl && this.level() != null && this.level().paperConfig().fixes.disableUnloadedChunkEnderpearlExploit && !top.leavesmc.leaves.LeavesConfig.mcTechnicalMode) { this.ownerUUID = null; } // Paper - Don't store shooter name for pearls to block enderpearl travel exploit // Leaves - mc technical mode +- if (this instanceof ThrownEnderpearl && this.level() != null && this.level().paperConfig().fixes.disableUnloadedChunkEnderpearlExploit) { this.ownerUUID = null; } // Paper - Reset pearls when they stop being ticked; Don't store shooter name for pearls to block enderpearl travel exploit ++ if (this instanceof ThrownEnderpearl && this.level() != null && this.level().paperConfig().fixes.disableUnloadedChunkEnderpearlExploit && !top.leavesmc.leaves.LeavesConfig.mcTechnicalMode) { this.ownerUUID = null; } // Paper - Reset pearls when they stop being ticked; Don't store shooter name for pearls to block enderpearl travel exploit // Leaves - mc technical mode } this.leftOwner = nbt.getBoolean("LeftOwner"); diff --git a/src/main/java/net/minecraft/world/level/NaturalSpawner.java b/src/main/java/net/minecraft/world/level/NaturalSpawner.java -index 5f5bc035f2e7d899f42d01b63d85b185e6143ef7..3493f40a1b7f7c60647b1d920359dfafa43d94f9 100644 +index e9175ec3d508ee72b1893e5b102033c886e9f022..232a70f79e6c5bd7fc055c0adf65ad0bbff55116 100644 --- a/src/main/java/net/minecraft/world/level/NaturalSpawner.java +++ b/src/main/java/net/minecraft/world/level/NaturalSpawner.java @@ -95,7 +95,7 @@ public final class NaturalSpawner { diff --git a/patches/server/0049-Return-nether-portal-fix.patch b/patches/server/0049-Return-nether-portal-fix.patch index 77599b79..a0d9b8c1 100644 --- a/patches/server/0049-Return-nether-portal-fix.patch +++ b/patches/server/0049-Return-nether-portal-fix.patch @@ -6,7 +6,7 @@ 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 b22dd3700c913d0391c8641fca46e89ed5cfff6b..ee85716ac98caa2e63f34be26a48d6b75b0179e3 100644 +index 5ce2329f117eea5de6094c8dd7d37aec08b5e2a6..d816d6aa67d077ea93a0438c07eb38cd4491798f 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -187,6 +187,7 @@ import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; @@ -40,7 +40,7 @@ index b22dd3700c913d0391c8641fca46e89ed5cfff6b..ee85716ac98caa2e63f34be26a48d6b7 + } + // Leaves end - nether portal fix } - // Paper start + // Paper start - Reset shield blocking on dimension change if (this.isBlocking()) { @@ -1345,6 +1364,30 @@ public class ServerPlayer extends Player { protected Optional getExitPortal(ServerLevel worldserver, BlockPos blockposition, boolean flag, WorldBorder worldborder, int searchRadius, boolean canCreatePortal, int createRadius) { // CraftBukkit @@ -74,7 +74,7 @@ index b22dd3700c913d0391c8641fca46e89ed5cfff6b..ee85716ac98caa2e63f34be26a48d6b7 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 fd91f1b08ce02d74b496ef3182a810cfcc6ac1e0..68a0974bad1205681468f2978f71035680548ab8 100644 +index 4c7262354c85aab0e70b7bfdadaa9741b0beadc5..a7730d9ffc6ccd743e227c99bb3bd43f282dee19 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -121,6 +121,7 @@ import org.bukkit.event.player.PlayerSpawnChangeEvent; @@ -85,7 +85,7 @@ index fd91f1b08ce02d74b496ef3182a810cfcc6ac1e0..68a0974bad1205681468f2978f710356 public abstract class PlayerList { -@@ -1004,6 +1005,24 @@ public abstract class PlayerList { +@@ -1003,6 +1004,24 @@ public abstract class PlayerList { if (fromWorld != location.getWorld()) { PlayerChangedWorldEvent event = new PlayerChangedWorldEvent(entityplayer.getBukkitEntity(), fromWorld); this.server.server.getPluginManager().callEvent(event); @@ -111,7 +111,7 @@ index fd91f1b08ce02d74b496ef3182a810cfcc6ac1e0..68a0974bad1205681468f2978f710356 // 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 5e7b77047d9900187a1def4270db1d4dbbf0e926..ab8e19e67f173a6c05b4895b3fa78a1eb2b13675 100644 +index 70190eae8fcf50dd75c3a7a23b86906c0f3367aa..3d4211c5af1a9b4495dc0aeead51a6f5fe72bf06 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -240,7 +240,7 @@ public abstract class LivingEntity extends Entity implements Attackable { diff --git a/patches/server/0051-Xaero-Map-Protocol.patch b/patches/server/0051-Xaero-Map-Protocol.patch index afbdb3a9..9f0948ed 100644 --- a/patches/server/0051-Xaero-Map-Protocol.patch +++ b/patches/server/0051-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 68a0974bad1205681468f2978f71035680548ab8..fe13fe480fdd932f7ed4444488d7c9b01a5cf49f 100644 +index a7730d9ffc6ccd743e227c99bb3bd43f282dee19..5f67d9e77aab73056328ba48c50f678c1e0f7262 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -1323,6 +1323,7 @@ public abstract class PlayerList { +@@ -1322,6 +1322,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/0052-Leaves-Extra-Yggdrasil-Service.patch b/patches/server/0052-Leaves-Extra-Yggdrasil-Service.patch index f4f5c1c2..279a2c7d 100644 --- a/patches/server/0052-Leaves-Extra-Yggdrasil-Service.patch +++ b/patches/server/0052-Leaves-Extra-Yggdrasil-Service.patch @@ -31,7 +31,7 @@ index bfc1e27c37689c1fbb927404a7176780a439a057..bc8ab50ef1390a2c51110a89dc43db58 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 a5e6b99b95e8408136f4c665aec070c5adc448da..f13f6c014ae188fb677e6360572c31ae6bc2b993 100644 +index 61840cfd64caba6595dfc99c91c76a195638d4ee..46d6db53dbf44228574164cc458c94b936613623 100644 --- a/src/main/java/net/minecraft/server/Main.java +++ b/src/main/java/net/minecraft/server/Main.java @@ -198,7 +198,7 @@ public class Main { @@ -44,10 +44,10 @@ index a5e6b99b95e8408136f4c665aec070c5adc448da..f13f6c014ae188fb677e6360572c31ae 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 bc8d5b9d79fff1fdf10f6458e5a84eef98adbf0e..c01e6d6844f174eceadc05d137fb4c47aadcde6a 100644 +index 0328722b7c25c258ff7adc312faf4f80ce76f1bd..2136cdddbaa90201c778efa435a35588476e9e9c 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -260,7 +260,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop type, Level world) { super(type, world); -- //this.random.setSeed((long)this.getId()); // Paper - we set the random to shared, do not clobber the seed -+ if (top.leavesmc.leaves.LeavesConfig.useVanillaRandom) this.random.setSeed(this.getId()); // Paper - we set the random to shared, do not clobber the seed // Leaves - vanilla plz +- //this.random.setSeed((long)this.getId()); // Paper - Share random for entities to make them more random ++ if (top.leavesmc.leaves.LeavesConfig.useVanillaRandom) this.random.setSeed(this.getId()); // Paper - Share random for entities to make them more random // Leaves - vanilla plz this.tentacleSpeed = 1.0F / (this.random.nextFloat() + 1.0F) * 0.2F; } 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 5dacb8896d8b78b0c467aa156c497a3eb35df26c..454bcdc843425d67e265e7ec7b56e9dd90dc0030 100644 +index adc179f85a774c47d386144da6b2291e915a0e1d..51cc6ef73da00133bbdc838b1911159a414ba4df 100644 --- a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java +++ b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java @@ -73,7 +73,13 @@ public class ItemEntity extends Entity implements TraceableEntity { @@ -63,7 +63,7 @@ index 5dacb8896d8b78b0c467aa156c497a3eb35df26c..454bcdc843425d67e265e7ec7b56e9dd // Paper end - Don't use level random in entity constructors // 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 0b8f2affbea2b1e166aa574a432a51f30d60386f..defc764756f73b278d3e87216c2cb8c6739736ab 100644 +index 2c4f9aa4ad22393e19e01e8e14e367968b5cba57..f85163a6238ca657f03f552a360776651dcfb67f 100644 --- a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java +++ b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java @@ -43,7 +43,7 @@ public class PrimedTnt extends Entity implements TraceableEntity { diff --git a/patches/server/0054-Fix-update-suppression-crash.patch b/patches/server/0054-Fix-update-suppression-crash.patch index 5ba81aa3..1677376c 100644 --- a/patches/server/0054-Fix-update-suppression-crash.patch +++ b/patches/server/0054-Fix-update-suppression-crash.patch @@ -20,10 +20,10 @@ index d0a487f0d563181818c5670749e8dd3a9d939265..140a9070fb5859e762e40ddb1e4259f6 label25: { diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index c01e6d6844f174eceadc05d137fb4c47aadcde6a..18b134cf2ef2af3b713f94084ea9d0ad3643cbbc 100644 +index 2136cdddbaa90201c778efa435a35588476e9e9c..1482dce5e76d9bc235e188ada456948d5e28d361 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1689,7 +1689,13 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop trackEntity) { - // Paper end - add parameters and int ret type + // Paper end - Optional per player mob spawns + // Leaves start - ignore lc + if (top.leavesmc.leaves.LeavesConfig.ignoreLC) { + int spawnN = 0; @@ -37,7 +37,7 @@ index 797725f7472ed36bf5a1369a7dfe600a9749cbac..7eec9dc8237ff04c53b573c3cc87e6cd if (blockposition.getY() >= world.getMinBuildHeight() + 1) { @@ -212,6 +226,16 @@ public final class NaturalSpawner { - return 0; // Paper + return 0; // Paper - Optional per player mob spawns } + // Leaves start - ignore lc diff --git a/patches/server/0070-Elytra-aeronautics-no-chunk-load.patch b/patches/server/0070-Elytra-aeronautics-no-chunk-load.patch index 8b856bb5..c0cefd52 100644 --- a/patches/server/0070-Elytra-aeronautics-no-chunk-load.patch +++ b/patches/server/0070-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 eb85cdc005be3cd2fc95e5e207a2621dfc298f05..b9529693ff28e3be6fc20523e76d3cc7ccacec6f 100644 +index f9cbcc0b6da9008be060ee4cca0a9d87c3a156ed..4eb025a4eabeb7b7abb4819bba172ee824d4c8e3 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 @@ -26,7 +26,7 @@ index eb85cdc005be3cd2fc95e5e207a2621dfc298f05..b9529693ff28e3be6fc20523e76d3cc7 int chunkX = io.papermc.paper.util.MCUtil.getChunkCoordinate(player.getX()); int chunkZ = io.papermc.paper.util.MCUtil.getChunkCoordinate(player.getZ()); // Note: players need to be explicitly added to distance maps before they can be updated -@@ -977,7 +977,8 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -969,7 +969,8 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider } private boolean skipPlayer(ServerPlayer player) { @@ -36,7 +36,7 @@ index eb85cdc005be3cd2fc95e5e207a2621dfc298f05..b9529693ff28e3be6fc20523e76d3cc7 } void updatePlayerStatus(ServerPlayer player, boolean added) { -@@ -1014,6 +1015,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1006,6 +1007,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider } public void move(ServerPlayer player) { @@ -45,10 +45,10 @@ index eb85cdc005be3cd2fc95e5e207a2621dfc298f05..b9529693ff28e3be6fc20523e76d3cc7 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 4bddf96387d6429cd02943f16d797cf78c62aab1..f840bc9bd3ee059a66aec64d0c6a9b65cbc0d42b 100644 +index 1aad5bb505439f1588e879d3ace8c976b1435527..fdf8dcb60279ffee46368bd0abdade8bd63c5679 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -549,7 +549,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -546,7 +546,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,7 +58,7 @@ index 4bddf96387d6429cd02943f16d797cf78c62aab1..f840bc9bd3ee059a66aec64d0c6a9b65 !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 15961ba0f3a70e680e1e32d0a502fcfb4cff705a..219e61d5a3644fb4ced66c4375ab551955fa043c 100644 +index 053d510c435baeab08ad0acac600327f88e62dec..08d1337dad726203f0b4974c4a2fbf2006158df3 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -1074,7 +1074,13 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S @@ -85,7 +85,7 @@ index 15961ba0f3a70e680e1e32d0a502fcfb4cff705a..219e61d5a3644fb4ced66c4375ab5519 } 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 22d014ec4cc7f3ad5df6cf28988b0bd983de301f..8f617ceb59393aebd4770fba82494713648685ec 100644 +index 001bfc1cae653ad2e451d6f40ab57dfb8351bfc0..7ea29129949364b7d887ed8e48e8f4f6cebaf7f4 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java @@ -183,6 +183,7 @@ public abstract class Player extends LivingEntity { diff --git a/patches/server/0074-No-block-update-command.patch b/patches/server/0074-No-block-update-command.patch index 3fc5b19c..72a50d9e 100644 --- a/patches/server/0074-No-block-update-command.patch +++ b/patches/server/0074-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 720a89e315225cf15342bc52d337ab5762e6d126..c9d4d9a3c1165ffff78dba1e894d1899a9f121b4 100644 +index c78fdfaca4bb94cd1cd8075655645082b0f6746f..ff957be41684f0c722b1dcac4f2ac09975f80236 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -2526,6 +2526,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -2506,6 +2506,7 @@ public class ServerLevel extends Level implements WorldGenLevel { @Override public void blockUpdated(BlockPos pos, Block block) { @@ -17,7 +17,7 @@ index 720a89e315225cf15342bc52d337ab5762e6d126..c9d4d9a3c1165ffff78dba1e894d1899 // 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 d1effd5d7b9eb2d715c9a3e16adbef2541b1ccf2..bffb03816205ed1241a7bd28bc52753d91a94a43 100644 +index ed27a963223bfe18310ad5adabf461b5e307ef9c..80e9b0615fc8036897b2dc8b0aefc4ef4a0f16f7 100644 --- a/src/main/java/net/minecraft/world/item/ItemStack.java +++ b/src/main/java/net/minecraft/world/item/ItemStack.java @@ -482,7 +482,7 @@ public final class ItemStack { @@ -30,7 +30,7 @@ index d1effd5d7b9eb2d715c9a3e16adbef2541b1ccf2..bffb03816205ed1241a7bd28bc52753d world.notifyAndUpdatePhysics(newblockposition, null, oldBlock, block, world.getBlockState(newblockposition), updateFlag, 512); // send null chunk as chunk.k() returns false by this point 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 8268600fc06c500cbbb5658b0626ce4e36854e95..b52ac7c98e42d9e80c55bfb9ea562fcbf3c729d0 100644 +index 226783152422548a5ac157605fb25cddef5eeeb6..f05e51f76a20aafe8e272cc595a4aca634d50d7f 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java @@ -481,7 +481,7 @@ public class LevelChunk extends ChunkAccess { @@ -43,10 +43,10 @@ index 8268600fc06c500cbbb5658b0626ce4e36854e95..b52ac7c98e42d9e80c55bfb9ea562fcb if (iblockdata.hasBlockEntity()) { diff --git a/src/main/java/net/minecraft/world/level/material/FlowingFluid.java b/src/main/java/net/minecraft/world/level/material/FlowingFluid.java -index 3cf6e62ceb555eedf133e0ba82445caadaab7743..8c3c9c64ea9de68a57d18164e016602016a79406 100644 +index 82cad323e4fba9aea082047d3eb6c4351681d9af..8a9b471b3cfff45a6c78d8fffa0efb3304152acb 100644 --- a/src/main/java/net/minecraft/world/level/material/FlowingFluid.java +++ b/src/main/java/net/minecraft/world/level/material/FlowingFluid.java -@@ -521,6 +521,7 @@ public abstract class FlowingFluid extends Fluid { +@@ -520,6 +520,7 @@ public abstract class FlowingFluid extends Fluid { @Override public void tick(Level world, BlockPos pos, FluidState state) { diff --git a/patches/server/0090-Reduce-array-allocations.patch b/patches/server/0090-Reduce-array-allocations.patch index 93b23aef..9cbd7d8d 100644 --- a/patches/server/0090-Reduce-array-allocations.patch +++ b/patches/server/0090-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 4c8f2dbdd6e384be026ae1c890096f89fd744eb0..5f6d8ad7340112ffb1c0581562a3f3df7c44a13b 100644 +index eea9866aecb7189455319d83561fcef35a777d7a..68d8caf3c912d9f578bf7214d068e60b7c59b2ef 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; @@ -202,7 +202,7 @@ index ff13d67151c50ea11a45117e524c7524e2b1a202..c25d23c9c2ed887ce9ae7f07cd8aa0d1 @Override diff --git a/src/main/java/net/minecraft/network/Connection.java b/src/main/java/net/minecraft/network/Connection.java -index c6f773afc39e7c97d13d1977a7609fc46714709d..9cdf39bef3112ac0a522c8bc8cb1b2b5171272ea 100644 +index d6179829579a07c29565d024f53069375be53fb7..6d0cf98fccd7b4e9b970b4d2f9d13c29c53044b3 100644 --- a/src/main/java/net/minecraft/network/Connection.java +++ b/src/main/java/net/minecraft/network/Connection.java @@ -57,6 +57,7 @@ import org.apache.commons.lang3.Validate; @@ -214,10 +214,10 @@ index c6f773afc39e7c97d13d1977a7609fc46714709d..9cdf39bef3112ac0a522c8bc8cb1b2b5 public class Connection extends SimpleChannelInboundHandler> { diff --git a/src/main/java/net/minecraft/server/level/ServerEntity.java b/src/main/java/net/minecraft/server/level/ServerEntity.java -index 7f5a5403959a54dd794b1a0f492f40c925622928..8c90406bf8b6c3d459dc27adf3671b72ac764867 100644 +index b2183c298b0c68daee41238735621ff002338a68..3957ab1ebd7e84cfe0bef81a8cce566dca9972dc 100644 --- a/src/main/java/net/minecraft/server/level/ServerEntity.java +++ b/src/main/java/net/minecraft/server/level/ServerEntity.java -@@ -348,7 +348,7 @@ public class ServerEntity { +@@ -354,7 +354,7 @@ public class ServerEntity { if (this.entity instanceof LivingEntity) { List> list = Lists.newArrayList(); @@ -227,7 +227,7 @@ index 7f5a5403959a54dd794b1a0f492f40c925622928..8c90406bf8b6c3d459dc27adf3671b72 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 c9d4d9a3c1165ffff78dba1e894d1899a9f121b4..721d46d649cb2ffdf087f2d289cd3e8cc05ed241 100644 +index ff957be41684f0c722b1dcac4f2ac09975f80236..6e9a26916a2e82dd56e51978a562e96ae8e480ac 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -177,6 +177,7 @@ import org.bukkit.event.weather.LightningStrikeEvent; @@ -238,7 +238,7 @@ index c9d4d9a3c1165ffff78dba1e894d1899a9f121b4..721d46d649cb2ffdf087f2d289cd3e8c public class ServerLevel extends Level implements WorldGenLevel { -@@ -1074,7 +1075,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1069,7 +1070,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); @@ -247,7 +247,7 @@ index c9d4d9a3c1165ffff78dba1e894d1899a9f121b4..721d46d649cb2ffdf087f2d289cd3e8c } // We drop the fluid tick since LAVA is ALREADY TICKED by the above method (See LiquidBlock). // TODO CHECK ON UPDATE (ping the Canadian) -@@ -1380,7 +1381,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1375,7 +1376,7 @@ public class ServerLevel extends Level implements WorldGenLevel { public static List getCurrentlyTickingEntities() { Entity ticking = currentlyTickingEntity.get(); @@ -257,7 +257,7 @@ index c9d4d9a3c1165ffff78dba1e894d1899a9f121b4..721d46d649cb2ffdf087f2d289cd3e8c 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 f840bc9bd3ee059a66aec64d0c6a9b65cbc0d42b..c9cc163b67a8c71e2ff482da768f8fab8fac6acb 100644 +index fdf8dcb60279ffee46368bd0abdade8bd63c5679..bf56d8f6a8fe06c5a356befa14d7eebf9af9460d 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -243,6 +243,7 @@ import org.bukkit.inventory.EquipmentSlot; @@ -268,24 +268,24 @@ index f840bc9bd3ee059a66aec64d0c6a9b65cbc0d42b..c9cc163b67a8c71e2ff482da768f8fab public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl implements ServerGamePacketListener, ServerPlayerConnection, TickablePacketListener { -@@ -781,13 +782,13 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl - // PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel()); // Paper - run this async +@@ -778,13 +779,13 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl + // PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel()); // Paper - AsyncTabCompleteEvent; 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 -- server.scheduleOnMain(() -> this.disconnect(Component.translatable("disconnect.spam", new Object[0]), org.bukkit.event.player.PlayerKickEvent.Cause.SPAM)); // Paper - kick event cause + 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 - configurable tab spam limits +- server.scheduleOnMain(() -> this.disconnect(Component.translatable("disconnect.spam"), org.bukkit.event.player.PlayerKickEvent.Cause.SPAM)); // Paper - AsyncTabCompleteEvent & kick event cause + server.scheduleOnMain(() -> this.disconnect(Component.translatable("disconnect.spam", ArrayConstants.emptyObjectArray), org.bukkit.event.player.PlayerKickEvent.Cause.SPAM)); // Paper - kick event cause // Leaves - reduce array allocations return; } // Paper start String str = packet.getCommand(); int index = -1; if (str.length() > 64 && ((index = str.indexOf(' ')) == -1 || index >= 64)) { -- server.scheduleOnMain(() -> this.disconnect(Component.translatable("disconnect.spam", new Object[0]))); // Paper -+ server.scheduleOnMain(() -> this.disconnect(Component.translatable("disconnect.spam", ArrayConstants.emptyObjectArray))); // Paper - kick event cause // Leaves - reduce array allocations +- server.scheduleOnMain(() -> this.disconnect(Component.translatable("disconnect.spam"))); // Paper ++ server.scheduleOnMain(() -> this.disconnect(Component.translatable("disconnect.spam", ArrayConstants.emptyObjectArray))); // Paper // Leaves - reduce array allocations return; } // Paper end -@@ -3211,7 +3212,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl - // Paper start +@@ -3191,7 +3192,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl + // Paper start - auto recipe limit 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) { - this.server.scheduleOnMain(() -> this.disconnect(net.minecraft.network.chat.Component.translatable("disconnect.spam", new Object[0]), org.bukkit.event.player.PlayerKickEvent.Cause.SPAM)); // Paper - kick event cause @@ -294,7 +294,7 @@ index f840bc9bd3ee059a66aec64d0c6a9b65cbc0d42b..c9cc163b67a8c71e2ff482da768f8fab } } diff --git a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -index a9f5af48c1f97b2e635727b48f4383502b17d82f..17997f3b4ee9e166372cdcb6c43ba49bb70e56fd 100644 +index f92d240e2984b0b49d09662ff33f5c524605ed47..3094c8e5cca90865d4f063e4db0d395ff1ee9265 100644 --- a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java @@ -44,6 +44,7 @@ import org.bukkit.craftbukkit.util.Waitable; @@ -326,7 +326,7 @@ index a9f5af48c1f97b2e635727b48f4383502b17d82f..17997f3b4ee9e166372cdcb6c43ba49b 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 f304ee9293828302ca26d9af766abdbcc842a3c1..12577cbfe26eaa65f475ec3385d362b4c4fa7595 100644 +index 5f67d9e77aab73056328ba48c50f678c1e0f7262..d9848bbe9c1874f85c4d774e24fea60261251ccb 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -122,6 +122,7 @@ import org.bukkit.event.player.PlayerSpawnChangeEvent; @@ -337,7 +337,7 @@ index f304ee9293828302ca26d9af766abdbcc842a3c1..12577cbfe26eaa65f475ec3385d362b4 public abstract class PlayerList { -@@ -734,7 +735,7 @@ public abstract class PlayerList { +@@ -733,7 +734,7 @@ public abstract class PlayerList { while (iterator.hasNext()) { entityplayer = (ServerPlayer) iterator.next(); this.save(entityplayer); // CraftBukkit - Force the player's inventory to be saved @@ -347,7 +347,7 @@ index f304ee9293828302ca26d9af766abdbcc842a3c1..12577cbfe26eaa65f475ec3385d362b4 // 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 665120a62525f56912263a3e1b6f12f6c3e15dec..7fd220838520bf0f971d6fbe6d9286592d590253 100644 +index 35f973cc2c0989256fa21abaf0327c2f36dbe4c9..a9ece1225fa302843423006f610889cd9773fbfb 100644 --- a/src/main/java/net/minecraft/server/players/StoredUserList.java +++ b/src/main/java/net/minecraft/server/players/StoredUserList.java @@ -25,6 +25,7 @@ import javax.annotation.Nullable; @@ -358,7 +358,7 @@ index 665120a62525f56912263a3e1b6f12f6c3e15dec..7fd220838520bf0f971d6fbe6d928659 public abstract class StoredUserList> { -@@ -79,7 +80,7 @@ public abstract class StoredUserList> { +@@ -77,7 +78,7 @@ public abstract class StoredUserList> { } public String[] getUserList() { @@ -368,7 +368,7 @@ index 665120a62525f56912263a3e1b6f12f6c3e15dec..7fd220838520bf0f971d6fbe6d928659 public boolean isEmpty() { diff --git a/src/main/java/net/minecraft/util/ZeroBitStorage.java b/src/main/java/net/minecraft/util/ZeroBitStorage.java -index e23995acb97100830079677aab0896487a705416..53e81721507cfc8f88be0ca9565746d78b2a1686 100644 +index 63c45b6f625fbab5e1d7513132f4d89fcab7a23d..820d53aa8806796284c9803f949d3b3d8c054999 100644 --- a/src/main/java/net/minecraft/util/ZeroBitStorage.java +++ b/src/main/java/net/minecraft/util/ZeroBitStorage.java @@ -4,9 +4,10 @@ import java.util.Arrays; @@ -396,7 +396,7 @@ 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 6771f0e4a35e4f82b8c905dc8c30cdc8752864c8..b6115b44d1654dbc62019dffd8c8163f37e8f7e7 100644 +index 3d4211c5af1a9b4495dc0aeead51a6f5fe72bf06..efa7d206009700cffd72e09bb910e56195511bdb 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -3144,7 +3144,7 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -409,7 +409,7 @@ index 6771f0e4a35e4f82b8c905dc8c30cdc8752864c8..b6115b44d1654dbc62019dffd8c8163f 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 65e13870262c67cd51a129b5954b2a34a51b5eb3..23e0e9125f7f68a602fa4d6c3c9562fe25bb3374 100644 +index 24ad2a51366a4fdcf35f2c1f63bbc2d339bd0d3f..005edbf57dad37f3fd369e4af1dddb6393ee2132 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -1082,7 +1082,7 @@ public abstract class Mob extends LivingEntity implements Targeting { @@ -462,7 +462,7 @@ index 7de9d012e7416eaa0189b513a0972c846e93c4b6..505cae0013a501cbff094a83c491af96 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 bffb03816205ed1241a7bd28bc52753d91a94a43..b6f0e75270b22df4aff8feee4b8ae7cd0295aec7 100644 +index 80e9b0615fc8036897b2dc8b0aefc4ef4a0f16f7..2dee534271a6bda96a9eb094a07c9fc33f549c0f 100644 --- a/src/main/java/net/minecraft/world/item/ItemStack.java +++ b/src/main/java/net/minecraft/world/item/ItemStack.java @@ -1052,7 +1052,7 @@ public final class ItemStack { @@ -504,7 +504,7 @@ index 6c2e8049c2197ddc912c1a0fc99c87beae81e25b..be13baa7b51c4ad377b50d8ca8f7cfad 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 ab3b63c9e48570d203dfcf0b8d30ab0ae85719bc..3f8113b22ebbb7ff783308033edcf10259dc0e82 100644 +index 6d3a652da337ec684ea939552bcadd61473e6cc6..ce85d69027cbfb06666c9242576d3abbd7cc2831 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -97,6 +97,7 @@ import org.bukkit.craftbukkit.util.CraftSpawnCategory; @@ -515,7 +515,7 @@ index ab3b63c9e48570d203dfcf0b8d30ab0ae85719bc..3f8113b22ebbb7ff783308033edcf102 public abstract class Level implements LevelAccessor, AutoCloseable { -@@ -1845,7 +1846,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1844,7 +1845,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) { @@ -564,7 +564,7 @@ index d78fe4081bc2938326066e0afddb4a6c833a4bf7..4246f6edb9f4989227fb3c3709f8e22e @Override diff --git a/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java -index d31bcddad2fa2ebac6269cc7bf22254710c1843e..2d167509b24c690f14fc0584fde0bedd267cb0f8 100644 +index 29580b4f6841c5c3398f8b4b224d9383f006cfb1..d1c102b9e12033c6ba6cd66706e891c4aa7c0009 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java @@ -59,6 +59,7 @@ import org.bukkit.event.inventory.FurnaceSmeltEvent; @@ -585,7 +585,7 @@ index d31bcddad2fa2ebac6269cc7bf22254710c1843e..2d167509b24c690f14fc0584fde0bedd 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 b3a90d6ef0e17c236e0b3c46e2d0012671afdaa7..f273d6ab29d8c2a36a4a00ef341d2a8e7ce3e8c3 100644 +index 63e187c65cb855031f286aad0d25ac4694f7a331..8d73357f0120ada1634f18ded0f72218e533776b 100644 --- a/src/main/java/net/minecraft/world/level/storage/PlayerDataStorage.java +++ b/src/main/java/net/minecraft/world/level/storage/PlayerDataStorage.java @@ -12,7 +12,6 @@ import net.minecraft.nbt.NbtAccounter; diff --git a/patches/server/0098-Skip-entity-move-if-movement-is-zero.patch b/patches/server/0098-Skip-entity-move-if-movement-is-zero.patch index 00d32b47..9e62a6d8 100644 --- a/patches/server/0098-Skip-entity-move-if-movement-is-zero.patch +++ b/patches/server/0098-Skip-entity-move-if-movement-is-zero.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Skip entity move if movement is zero 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 c3a91af3a6e9ca8177994bacaf375d1e7df1d0c4..f9682798c74aaae9c0610c00b2f52cda990e35a4 100644 +index 42249dc3f994d1e4ce1c5e1c6e2ec1f7d4d41324..a4acf29239e1c05e8afc42c92763f00a31762aa0 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -317,6 +317,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -316,6 +316,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S public float yRotO; public float xRotO; private AABB bb; @@ -17,7 +17,7 @@ index c3a91af3a6e9ca8177994bacaf375d1e7df1d0c4..f9682798c74aaae9c0610c00b2f52cda public boolean onGround; public boolean horizontalCollision; public boolean verticalCollision; -@@ -1052,6 +1053,13 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1051,6 +1052,13 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S // Paper end - detailed watchdog information public void move(MoverType movementType, Vec3 movement) { @@ -28,10 +28,10 @@ index c3a91af3a6e9ca8177994bacaf375d1e7df1d0c4..f9682798c74aaae9c0610c00b2f52cda + } + } + // Leaves end - skip entity move if movement is zero + final Vec3 originalMovement = movement; // Paper - Expose pre-collision velocity // Paper start - detailed watchdog information io.papermc.paper.util.TickThread.ensureTickThread("Cannot move an entity off-main"); - synchronized (this.posLock) { -@@ -4084,6 +4092,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4082,6 +4090,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } public final void setBoundingBox(AABB boundingBox) { diff --git a/patches/server/0106-Force-peaceful-mode-switch.patch b/patches/server/0106-Force-peaceful-mode-switch.patch index 7d6e32e5..98c01fdc 100644 --- a/patches/server/0106-Force-peaceful-mode-switch.patch +++ b/patches/server/0106-Force-peaceful-mode-switch.patch @@ -5,7 +5,7 @@ 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 c4577d7dc27bb48c95794212de4abf2e31458380..dc4b71023e43757ef0dad9d8b850afd304308ad9 100644 +index 9659b5adb9824df325285763ef211cd189174668..3217af4adb16a48150652258e59b49cf1cf33873 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java @@ -74,6 +74,12 @@ public class ServerChunkCache extends ChunkSource { @@ -21,7 +21,7 @@ index c4577d7dc27bb48c95794212de4abf2e31458380..dc4b71023e43757ef0dad9d8b850afd3 private static int getChunkCacheKey(int x, int z) { return x & 3 | ((z & 3) << 2); } -@@ -509,7 +515,21 @@ public class ServerChunkCache extends ChunkSource { +@@ -516,7 +522,21 @@ public class ServerChunkCache extends ChunkSource { } // Leaves end - reset ice & snow tick random gameprofilerfiller.push("filteringLoadedChunks"); @@ -44,7 +44,7 @@ index c4577d7dc27bb48c95794212de4abf2e31458380..dc4b71023e43757ef0dad9d8b850afd3 // Paper - optimise chunk tick iteration -@@ -597,10 +617,20 @@ public class ServerChunkCache extends ChunkSource { +@@ -604,10 +624,20 @@ public class ServerChunkCache extends ChunkSource { } Util.shuffle(shuffled, this.level.random); chunkIterator = shuffled.iterator(); @@ -68,7 +68,7 @@ index c4577d7dc27bb48c95794212de4abf2e31458380..dc4b71023e43757ef0dad9d8b850afd3 LevelChunk chunk1 = chunkIterator.next(); // Paper end - optimise chunk tick iteration ChunkPos chunkcoordintpair = chunk1.getPos(); -@@ -631,7 +661,7 @@ public class ServerChunkCache extends ChunkSource { +@@ -638,7 +668,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 @@ -78,7 +78,7 @@ index c4577d7dc27bb48c95794212de4abf2e31458380..dc4b71023e43757ef0dad9d8b850afd3 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 +index 4eac3f2acaf70e83b9241ed55ae5f9ecf39d2e67..8faaf4a8bcd75c79808bcfd2b6b86729eebd8ee1 100644 --- a/src/main/java/net/minecraft/world/level/NaturalSpawner.java +++ b/src/main/java/net/minecraft/world/level/NaturalSpawner.java @@ -133,6 +133,12 @@ public final class NaturalSpawner { @@ -107,10 +107,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 38d842bc0fb7d9c39a3673983a643248e9563fe2..8f57c3805547354af3f5167acc7efca9047f91e2 100644 +index cd559e6aaf4bd2bd322c953bbb186135489ddcaa..aa0a1cbbbd4f2f027e24a4166bd5be4009c2ac3e 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -@@ -2425,6 +2425,18 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -2422,6 +2422,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/0108-Replay-Mod-API.patch b/patches/server/0108-Replay-Mod-API.patch index 8e5e6141..a0002e5a 100644 --- a/patches/server/0108-Replay-Mod-API.patch +++ b/patches/server/0108-Replay-Mod-API.patch @@ -94,7 +94,7 @@ index 676a1499747b071515479130875157263d3a8352..e5ef298dc1df9cc42b3d349939a966b7 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 f941e7add46e690e21d39111bed520df9156f154..5ea28c20b34b46eb68fb8a2d468ea009a30180c0 100644 +index cb05ec292d26320562e51da96a5a28cb04ecc7e4..6cf0b94b185d901ee79f376a6d2ffd8ccfae5b84 100644 --- a/src/main/java/net/minecraft/server/PlayerAdvancements.java +++ b/src/main/java/net/minecraft/server/PlayerAdvancements.java @@ -223,7 +223,7 @@ public class PlayerAdvancements { @@ -107,7 +107,7 @@ index f941e7add46e690e21d39111bed520df9156f154..5ea28c20b34b46eb68fb8a2d468ea009 } // 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 c9cc163b67a8c71e2ff482da768f8fab8fac6acb..1d5e7cde06e4f4aa65caaf9b28c1663a59b62679 100644 +index bf56d8f6a8fe06c5a356befa14d7eebf9af9460d..de8bf759b74c8969d12b38c952f48633966d5b74 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 @@ -120,7 +120,7 @@ index c9cc163b67a8c71e2ff482da768f8fab8fac6acb..1d5e7cde06e4f4aa65caaf9b28c1663a } 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 12577cbfe26eaa65f475ec3385d362b4c4fa7595..eb3e88093fc7862a134b130f63768d1bba7990a7 100644 +index d9848bbe9c1874f85c4d774e24fea60261251ccb..42f54487ba2a6afbdacf0f1de0f9161c47140b4f 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.PlayerSpawnChangeEvent; @@ -141,7 +141,7 @@ index 12577cbfe26eaa65f475ec3385d362b4c4fa7595..eb3e88093fc7862a134b130f63768d1b private CraftServer cserver; @@ -181,6 +183,120 @@ public abstract class PlayerList { } - abstract public void loadAndSaveFiles(); // Paper - moved from DedicatedPlayerList constructor + abstract public void loadAndSaveFiles(); // Paper - fix converting txt to json file; moved from DedicatedPlayerList constructor + // Leaves start - replay api + public void placeNewPhotographer(Connection connection, ServerPhotographer player, ServerLevel worldserver, Location location) { @@ -259,7 +259,7 @@ index 12577cbfe26eaa65f475ec3385d362b4c4fa7595..eb3e88093fc7862a134b130f63768d1b + public void placeNewPlayer(Connection connection, ServerPlayer player, CommonListenerCookie clientData) { player.isRealPlayer = true; // Paper - player.loginTime = System.currentTimeMillis(); // Paper + player.loginTime = System.currentTimeMillis(); // Paper - Replace OfflinePlayer#getLastPlayed @@ -327,6 +443,7 @@ public abstract class PlayerList { // entityplayer.connection.send(ClientboundPlayerInfoUpdatePacket.createPlayerInitializing(this.players)); // CraftBukkit - replaced with loop below @@ -281,7 +281,7 @@ index 12577cbfe26eaa65f475ec3385d362b4c4fa7595..eb3e88093fc7862a134b130f63768d1b onlinePlayers.add(entityplayer1); // Paper - Use single player info update packet on join } // Paper start - Use single player info update packet on join -@@ -613,6 +736,43 @@ public abstract class PlayerList { +@@ -612,6 +735,43 @@ public abstract class PlayerList { } @@ -323,9 +323,9 @@ index 12577cbfe26eaa65f475ec3385d362b4c4fa7595..eb3e88093fc7862a134b130f63768d1b + // Leaves stop - replay mod api + public net.kyori.adventure.text.Component remove(ServerPlayer entityplayer) { // CraftBukkit - return string // Paper - return Component - // Paper start + // Paper start - Fix kick event leave message not being sent 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()))); -@@ -681,6 +841,7 @@ public abstract class PlayerList { +@@ -680,6 +840,7 @@ public abstract class PlayerList { entityplayer.retireScheduler(); // Paper - Folia schedulers entityplayer.getAdvancements().stopListening(); this.players.remove(entityplayer); @@ -334,7 +334,7 @@ index 12577cbfe26eaa65f475ec3385d362b4c4fa7595..eb3e88093fc7862a134b130f63768d1b 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 69a7933bca98d29f215edfe3839e416207d083f9..7e97276a05a2771d644b1f3a54363dad485b4eac 100644 +index 6b2c19f3ea4fb8e2f6afc165ece6d0c66ba59a75..de36a75a68915f87573280600ad5b52d6b344555 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -260,6 +260,7 @@ import org.yaml.snakeyaml.error.MarkedYAMLException; @@ -375,7 +375,7 @@ index 69a7933bca98d29f215edfe3839e416207d083f9..7e97276a05a2771d644b1f3a54363dad + // 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 fa92ba466c958eea0330cd24bf45b96958a13204..29f66df9b0984c4fe624e37f1c7d4e712a55541f 100644 +index dc7ba0ce76031e6dd7e550ceaf3b2f97cbc307f1..ca4a3830e2c57107921be7eef6f15f3680809321 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java @@ -58,6 +58,8 @@ import top.leavesmc.leaves.bot.ServerBot; diff --git a/patches/server/0109-Fix-vehicle-teleport-by-end-gateway.patch b/patches/server/0109-Fix-vehicle-teleport-by-end-gateway.patch index 02ac087c..73e91f1a 100644 --- a/patches/server/0109-Fix-vehicle-teleport-by-end-gateway.patch +++ b/patches/server/0109-Fix-vehicle-teleport-by-end-gateway.patch @@ -5,12 +5,12 @@ 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 b0acc2f37a8ebc5d93dcf33a0b89bd9c4444fccf..c06092aa35d44ba98b9680dc72eeba09f6d07822 100644 +index 0bf810971464d27b3e26b24cb8579d450a1fd37b..8cf9db4bf550cfec402fdfbfcc098cd18ea499d7 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 { if (!list.isEmpty()) { - // Paper start + // Paper start - Ensure safe gateway teleport for (Entity entity : list) { - if (entity.canChangeDimensions()) { + if (true || entity.canChangeDimensions()) { // Leaves - be vanilla diff --git a/patches/server/0116-Force-Void-Trade.patch b/patches/server/0116-Force-Void-Trade.patch index 2631a5b9..47be39bf 100644 --- a/patches/server/0116-Force-Void-Trade.patch +++ b/patches/server/0116-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 17cc25b6fbc85c9e0023be7e9d857b2d76f6e58c..75bb3f2d2eaf8ffe542534fec40084674003ec64 100644 +index fd1648546542f146ba7b866873f105ed1427ef7d..1ecbb7cb0f608e11ce84d7082bd4d3018a2bdfd5 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 @@ -34,10 +34,10 @@ index 17cc25b6fbc85c9e0023be7e9d857b2d76f6e58c..75bb3f2d2eaf8ffe542534fec4008467 @@ -162,7 +169,7 @@ public abstract class AbstractVillager extends AgeableMob implements InventoryCa @Override public void notifyTrade(MerchantOffer offer) { - // offer.increaseUses(); // Paper - handled in processTrade + // offer.increaseUses(); // Paper - Add PlayerTradeEvent and PlayerPurchaseEvent - this.ambientSoundTime = -this.getAmbientSoundInterval(); + if (!voidTrade) this.ambientSoundTime = -this.getAmbientSoundInterval(); // Leaves - force void trade - // this.rewardTradeXp(offer); // Paper - handled in processTrade + // this.rewardTradeXp(offer); // Paper - Add PlayerTradeEvent and PlayerPurchaseEvent if (this.tradingPlayer instanceof ServerPlayer) { CriteriaTriggers.TRADE.trigger((ServerPlayer) this.tradingPlayer, this, offer.getResult()); @@ -180,7 +187,7 @@ public abstract class AbstractVillager extends AgeableMob implements InventoryCa @@ -74,7 +74,7 @@ index 17cc25b6fbc85c9e0023be7e9d857b2d76f6e58c..75bb3f2d2eaf8ffe542534fec4008467 + // 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 0b334ab58d723f27dae68974ed6ec5d64b10ad40..a63549154fc3a2c93b7f66072bc9a89a31bea55f 100644 +index 82f52d90c38be29b788bef2a3bb520e4792de763..73ab81f16b1e5ea091bf3c34d23c52d5d3db9f70 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 @@ -101,7 +101,7 @@ index 0b334ab58d723f27dae68974ed6ec5d64b10ad40..a63549154fc3a2c93b7f66072bc9a89a 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 833563e237462ccfc1b730b8f5fb35340d0db854..92981bbfe854339fdb52a5940fadda009987e8e8 100644 +index 1c89f20debfad9807c90a21cc336d5790294ebce..1666bf3f94b6da030ef5d887c255bdfcf8b081cf 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 @@ -113,7 +113,7 @@ index 833563e237462ccfc1b730b8f5fb35340d0db854..92981bbfe854339fdb52a5940fadda00 this.openTradingScreen(player, this.getDisplayName(), 1); } diff --git a/src/main/java/net/minecraft/world/inventory/MerchantMenu.java b/src/main/java/net/minecraft/world/inventory/MerchantMenu.java -index 8eab7596e1f7d1beb9ab0d70d1310d26822262e9..55ae9ccbadeb3bb358dd04aadd7b32b14f5bc96f 100644 +index 9c17c14de888ef3fbf4139cbad3889ece1d74aa1..39855fc8858f48ea3db00fc35b2b22e66643fdf9 100644 --- a/src/main/java/net/minecraft/world/inventory/MerchantMenu.java +++ b/src/main/java/net/minecraft/world/inventory/MerchantMenu.java @@ -26,7 +26,7 @@ public class MerchantMenu extends AbstractContainerMenu { @@ -126,13 +126,13 @@ index 8eab7596e1f7d1beb9ab0d70d1310d26822262e9..55ae9ccbadeb3bb358dd04aadd7b32b1 private int merchantLevel; private boolean showProgressBar; diff --git a/src/main/java/net/minecraft/world/item/trading/MerchantOffer.java b/src/main/java/net/minecraft/world/item/trading/MerchantOffer.java -index 4f7457578ab3118d10e0d5dfc23d79c9b20c2f44..a71d4fd78e1a9b6f4f691d512f372f0cf2b60b4e 100644 +index 02feea12c998f37098b72becf6bfaf6b27d155de..b0ac4dcb539c3286a0c79ce7322f8cb8a2237d75 100644 --- a/src/main/java/net/minecraft/world/item/trading/MerchantOffer.java +++ b/src/main/java/net/minecraft/world/item/trading/MerchantOffer.java @@ -20,6 +20,7 @@ public class MerchantOffer { public float priceMultiplier; public int xp; - public boolean ignoreDiscounts; // Paper + public boolean ignoreDiscounts; // Paper - Add ignore discounts API + public int voidTradeUses; // Leaves - force void trade // CraftBukkit start private CraftMerchantRecipe bukkitHandle; @@ -140,7 +140,7 @@ index 4f7457578ab3118d10e0d5dfc23d79c9b20c2f44..a71d4fd78e1a9b6f4f691d512f372f0c @@ -73,6 +74,7 @@ public class MerchantOffer { this.specialPriceDiff = nbt.getInt("specialPrice"); this.demand = nbt.getInt("demand"); - this.ignoreDiscounts = nbt.getBoolean("Paper.IgnoreDiscounts"); // Paper + this.ignoreDiscounts = nbt.getBoolean("Paper.IgnoreDiscounts"); // Paper - Add ignore discounts API + this.voidTradeUses = 0; // Leaves - force void trade } @@ -188,7 +188,7 @@ index 4f7457578ab3118d10e0d5dfc23d79c9b20c2f44..a71d4fd78e1a9b6f4f691d512f372f0c public void setToOutOfStock() { 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 c06092aa35d44ba98b9680dc72eeba09f6d07822..a2df4fd3c0beb001cd313b3e48f677f37455b772 100644 +index 8cf9db4bf550cfec402fdfbfcc098cd18ea499d7..edebf6ab2711ba3e3e689269d9abd6067ecab605 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-Disable-moved-wrongly-threshold.patch b/patches/server/0121-Disable-moved-wrongly-threshold.patch index 81bee2f7..9ce1f1b5 100644 --- a/patches/server/0121-Disable-moved-wrongly-threshold.patch +++ b/patches/server/0121-Disable-moved-wrongly-threshold.patch @@ -5,19 +5,19 @@ 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 1d5e7cde06e4f4aa65caaf9b28c1663a59b62679..ce64b31bee8003942ad6f9dae64d41b0b07218fa 100644 +index de8bf759b74c8969d12b38c952f48633966d5b74..1c7408e5eac4869c492b2d4d79faf76fad1ae940 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -559,7 +559,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -556,7 +556,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl } - // Paper end + // Paper end - Prevent moving into unloaded chunks - if (d10 - d9 > Math.max(100.0D, Math.pow((double) (org.spigotmc.SpigotConfig.movedTooQuicklyMultiplier * (float) i * speed), 2)) && !this.isSingleplayerOwner()) { + if (!top.leavesmc.leaves.LeavesConfig.disableMovedWronglyThreshold && d10 - d9 > Math.max(100.0D, Math.pow((double) (org.spigotmc.SpigotConfig.movedTooQuicklyMultiplier * (float) i * speed), 2)) && !this.isSingleplayerOwner()) { // Leaves - disable can // CraftBukkit end ServerGamePacketListenerImpl.LOGGER.warn("{} (vehicle of {}) moved too quickly! {},{},{}", new Object[]{entity.getName().getString(), this.player.getName().getString(), d6, d7, d8}); this.send(new ClientboundMoveVehiclePacket(entity)); -@@ -595,7 +595,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -592,7 +592,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl d10 = d6 * d6 + d7 * d7 + d8 * d8; boolean flag2 = false; @@ -26,7 +26,7 @@ index 1d5e7cde06e4f4aa65caaf9b28c1663a59b62679..ce64b31bee8003942ad6f9dae64d41b0 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)}); } -@@ -1428,7 +1428,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1423,7 +1423,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl io.papermc.paper.event.player.PlayerFailMoveEvent event = fireFailMove(io.papermc.paper.event.player.PlayerFailMoveEvent.FailReason.MOVED_TOO_QUICKLY, toX, toY, toZ, toYaw, toPitch, true); if (!event.isAllowed()) { @@ -35,9 +35,9 @@ index 1d5e7cde06e4f4aa65caaf9b28c1663a59b62679..ce64b31bee8003942ad6f9dae64d41b0 ServerGamePacketListenerImpl.LOGGER.warn("{} moved too quickly! {},{},{}", new Object[]{this.player.getName().getString(), d6, d7, d8}); this.teleport(this.player.getX(), this.player.getY(), this.player.getZ(), this.player.getYRot(), this.player.getXRot()); return; -@@ -1498,7 +1498,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1493,7 +1493,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl d10 = d6 * d6 + d7 * d7 + d8 * d8; - boolean flag2 = false; + boolean movedWrongly = false; // Paper - Add fail move event; rename - if (!this.player.isChangingDimension() && d10 > org.spigotmc.SpigotConfig.movedWronglyThreshold && !this.player.isSleeping() && !this.player.gameMode.isCreative() && this.player.gameMode.getGameModeForPlayer() != GameType.SPECTATOR) { // Spigot + if (!top.leavesmc.leaves.LeavesConfig.disableMovedWronglyThreshold && !this.player.isChangingDimension() && d10 > org.spigotmc.SpigotConfig.movedWronglyThreshold && !this.player.isSleeping() && !this.player.gameMode.isCreative() && this.player.gameMode.getGameModeForPlayer() != GameType.SPECTATOR) { // Spigot // Leaves - disable can diff --git a/patches/server/0126-Linear-region-file-format.patch b/patches/server/0126-Linear-region-file-format.patch index a8b4c26d..de752bda 100644 --- a/patches/server/0126-Linear-region-file-format.patch +++ b/patches/server/0126-Linear-region-file-format.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Linear region file format This patch is Powered by LinearPurpur(https://github.com/StupidCraft/LinearPurpur) diff --git a/build.gradle.kts b/build.gradle.kts -index 3f1316110dd00ae51e2bde8bd87e3b582587b92c..32977ad358c48cc17b0c56f516f74c42336eb38a 100644 +index ca79034c1f044a9096de65b0936971c4fd68eb32..990dc1fdd1bffa6bc96f7b325d3e12d55f58e27b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -36,6 +36,10 @@ dependencies { @@ -103,12 +103,12 @@ index 8a11e10b01fa012b2f98b1c193c53251e848f909..17057486c031708d3aab82a01031cfef } } diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index 5dea3d1a33f107959562d64493baffc7dc6dfdd3..983a2cd560921b41bd393bd11b15f0735144d6d3 100644 +index 89be9c19db11c9fda0bc21a7f3d30493913e4d3c..e718e1a439dc3e5aef6edd005ba077a09b491260 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java -@@ -868,13 +868,13 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -860,13 +860,13 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider + } - // Paper start - chunk status cache "api" public ChunkStatus getChunkStatusOnDiskIfCached(ChunkPos chunkPos) { - net.minecraft.world.level.chunk.storage.RegionFile regionFile = regionFileCache.getRegionFileIfLoaded(chunkPos); + top.leavesmc.leaves.region.AbstractRegionFile regionFile = regionFileCache.getRegionFileIfLoaded(chunkPos); // Leaves @@ -122,7 +122,7 @@ index 5dea3d1a33f107959562d64493baffc7dc6dfdd3..983a2cd560921b41bd393bd11b15f073 if (regionFile == null || !regionFileCache.chunkExists(chunkPos)) { return null; -@@ -892,7 +892,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -884,7 +884,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider } public void updateChunkStatusOnDisk(ChunkPos chunkPos, @Nullable CompoundTag compound) throws IOException { @@ -132,7 +132,7 @@ index 5dea3d1a33f107959562d64493baffc7dc6dfdd3..983a2cd560921b41bd393bd11b15f073 regionFile.setStatus(chunkPos.x, chunkPos.z, ChunkSerializer.getStatus(compound)); } diff --git a/src/main/java/net/minecraft/util/worldupdate/WorldUpgrader.java b/src/main/java/net/minecraft/util/worldupdate/WorldUpgrader.java -index f2a7cb6ebed7a4b4019a09af2a025f624f6fe9c9..c54b88834981d3a2a23c862cc54733b2dcd3a654 100644 +index 77dd632a266f4abed30b87b7909d77857c01e316..68416a42ff257d3ba4881496262cfa3b6ca2755a 100644 --- a/src/main/java/net/minecraft/util/worldupdate/WorldUpgrader.java +++ b/src/main/java/net/minecraft/util/worldupdate/WorldUpgrader.java @@ -61,7 +61,7 @@ public class WorldUpgrader { @@ -144,7 +144,7 @@ index f2a7cb6ebed7a4b4019a09af2a025f624f6fe9c9..c54b88834981d3a2a23c862cc54733b2 private final DimensionDataStorage overworldDataStorage; public WorldUpgrader(LevelStorageSource.LevelStorageAccess session, DataFixer dataFixer, Registry dimensionOptionsRegistry, boolean eraseCache) { -@@ -235,7 +235,7 @@ public class WorldUpgrader { +@@ -241,7 +241,7 @@ public class WorldUpgrader { File file = this.levelStorage.getDimensionPath(world).toFile(); File file1 = new File(file, "region"); File[] afile = file1.listFiles((file2, s) -> { @@ -153,7 +153,7 @@ index f2a7cb6ebed7a4b4019a09af2a025f624f6fe9c9..c54b88834981d3a2a23c862cc54733b2 }); if (afile == null) { -@@ -254,7 +254,10 @@ public class WorldUpgrader { +@@ -260,7 +260,10 @@ public class WorldUpgrader { int l = Integer.parseInt(matcher.group(2)) << 5; try { @@ -166,7 +166,7 @@ index f2a7cb6ebed7a4b4019a09af2a025f624f6fe9c9..c54b88834981d3a2a23c862cc54733b2 try { for (int i1 = 0; i1 < 32; ++i1) { diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java -index c50d317d63f5ce61788abf449ec59a542b021f50..20b347d80757a702b630d816bbac55a1bea68512 100644 +index 6cf83502a954cce9c562ec036bfeddb477d38b73..d43c41d377dd04d0babb99170203e2f5bb831204 100644 --- a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java +++ b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java @@ -26,7 +26,7 @@ import net.minecraft.nbt.NbtIo; // Paper @@ -192,7 +192,7 @@ index c50d317d63f5ce61788abf449ec59a542b021f50..20b347d80757a702b630d816bbac55a1 + } + // Leaves end + - // Paper start - try to recover from RegionFile header corruption + // Paper start - Attempt to recalculate regionfile header if it is corrupt private static long roundToSectors(long bytes) { long sectors = bytes >>> 12; // 4096 = 2^12 @@ -128,7 +138,7 @@ public class RegionFile implements AutoCloseable { @@ -204,7 +204,7 @@ index c50d317d63f5ce61788abf449ec59a542b021f50..20b347d80757a702b630d816bbac55a1 if (!this.canRecalcHeader) { return false; } -@@ -954,10 +964,10 @@ public class RegionFile implements AutoCloseable { +@@ -955,10 +965,10 @@ public class RegionFile implements AutoCloseable { private static int getChunkIndex(int x, int z) { return (x & 31) + (z & 31) * 32; } @@ -217,7 +217,7 @@ index c50d317d63f5ce61788abf449ec59a542b021f50..20b347d80757a702b630d816bbac55a1 final int offset = getChunkIndex(x, z); boolean previous = this.oversized[offset] == 1; this.oversized[offset] = (byte) (oversized ? 1 : 0); -@@ -996,7 +1006,7 @@ public class RegionFile implements AutoCloseable { +@@ -997,7 +1007,7 @@ public class RegionFile implements AutoCloseable { return this.regionFile.getParent().resolve(this.regionFile.getFileName().toString().replaceAll("\\.mca$", "") + "_oversized_" + x + "_" + z + ".nbt"); } @@ -227,7 +227,7 @@ index c50d317d63f5ce61788abf449ec59a542b021f50..20b347d80757a702b630d816bbac55a1 try (DataInputStream out = new DataInputStream(new java.io.BufferedInputStream(new InflaterInputStream(Files.newInputStream(file))))) { return NbtIo.read((java.io.DataInput) out); diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java -index 6bec4549fbcfb68a053300451e25babf8ff38e99..b25f674e68714b11a9ca2a231f470082392641c8 100644 +index 30d4efc896fe8b2ec0e8b091045c7d07f952b00b..8718b525a84f717a6c2ee9cc6cef8dfd826df8b9 100644 --- a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java +++ b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java @@ -21,9 +21,14 @@ public class RegionFileStorage implements AutoCloseable { @@ -326,7 +326,7 @@ index 6bec4549fbcfb68a053300451e25babf8ff38e99..b25f674e68714b11a9ca2a231f470082 @@ -123,28 +153,46 @@ public class RegionFileStorage implements AutoCloseable { } // Paper end - cache regionfile does not exist state - if (this.regionCache.size() >= io.papermc.paper.configuration.GlobalConfiguration.get().misc.regionFileCacheSize) { // Paper - configurable + if (this.regionCache.size() >= io.papermc.paper.configuration.GlobalConfiguration.get().misc.regionFileCacheSize) { // Paper - Sanitise RegionFileCache and make configurable. - ((RegionFile) this.regionCache.removeLast()).close(); + this.regionCache.removeLast().close(); // Leaves } @@ -378,16 +378,16 @@ index 6bec4549fbcfb68a053300451e25babf8ff38e99..b25f674e68714b11a9ca2a231f470082 } // Paper end return regionfile1; -@@ -172,7 +220,7 @@ public class RegionFileStorage implements AutoCloseable { +@@ -156,7 +204,7 @@ public class RegionFileStorage implements AutoCloseable { + org.apache.logging.log4j.LogManager.getLogger().fatal(msg + " (" + file.toString().replaceAll(".+[\\\\/]", "") + " - " + x + "," + z + ") Go clean it up to remove this message. /minecraft:tp " + (x<<4)+" 128 "+(z<<4) + " - DO NOT REPORT THIS TO PAPER - You may ask for help on Discord, but do not file an issue. These error messages can not be removed."); } - - private static CompoundTag readOversizedChunk(RegionFile regionfile, ChunkPos chunkCoordinate) throws IOException { + private static CompoundTag readOversizedChunk(top.leavesmc.leaves.region.AbstractRegionFile regionfile, ChunkPos chunkCoordinate) throws IOException { // Leaves synchronized (regionfile) { try (DataInputStream datainputstream = regionfile.getChunkDataInputStream(chunkCoordinate)) { CompoundTag oversizedData = regionfile.getOversizedData(chunkCoordinate.x, chunkCoordinate.z); -@@ -219,14 +267,14 @@ public class RegionFileStorage implements AutoCloseable { +@@ -191,14 +239,14 @@ public class RegionFileStorage implements AutoCloseable { @Nullable public CompoundTag read(ChunkPos pos) throws IOException { // CraftBukkit start - SPIGOT-5680: There's no good reason to preemptively create files on read, save that for writing @@ -404,7 +404,7 @@ index 6bec4549fbcfb68a053300451e25babf8ff38e99..b25f674e68714b11a9ca2a231f470082 // We add the regionfile parameter to avoid the potential deadlock (on fileLock) if we went back to obtain a regionfile // if we decide to re-read // Paper end -@@ -236,7 +284,7 @@ public class RegionFileStorage implements AutoCloseable { +@@ -208,7 +256,7 @@ public class RegionFileStorage implements AutoCloseable { // Paper start if (regionfile.isOversized(pos.x, pos.z)) { @@ -413,7 +413,7 @@ index 6bec4549fbcfb68a053300451e25babf8ff38e99..b25f674e68714b11a9ca2a231f470082 return readOversizedChunk(regionfile, pos); } // Paper end -@@ -250,12 +298,12 @@ public class RegionFileStorage implements AutoCloseable { +@@ -222,12 +270,12 @@ public class RegionFileStorage implements AutoCloseable { if (this.isChunkData) { ChunkPos chunkPos = ChunkSerializer.getChunkCoordinate(nbttagcompound); if (!chunkPos.equals(pos)) { @@ -429,7 +429,7 @@ index 6bec4549fbcfb68a053300451e25babf8ff38e99..b25f674e68714b11a9ca2a231f470082 return null; } } -@@ -289,13 +337,13 @@ public class RegionFileStorage implements AutoCloseable { +@@ -261,13 +309,13 @@ public class RegionFileStorage implements AutoCloseable { return nbttagcompound; } finally { // Paper start @@ -445,7 +445,7 @@ index 6bec4549fbcfb68a053300451e25babf8ff38e99..b25f674e68714b11a9ca2a231f470082 if (regionfile == null) { return; } -@@ -325,7 +373,7 @@ public class RegionFileStorage implements AutoCloseable { +@@ -297,7 +345,7 @@ public class RegionFileStorage implements AutoCloseable { } protected void write(ChunkPos pos, @Nullable CompoundTag nbt) throws IOException { @@ -454,16 +454,16 @@ index 6bec4549fbcfb68a053300451e25babf8ff38e99..b25f674e68714b11a9ca2a231f470082 if (nbt == null && regionfile == null) { return; } -@@ -375,7 +423,7 @@ public class RegionFileStorage implements AutoCloseable { +@@ -347,7 +395,7 @@ public class RegionFileStorage implements AutoCloseable { } - // Paper end + // Paper end - Chunk save reattempt } finally { // Paper start - regionfile.fileLock.unlock(); + regionfile.getFileLock().unlock(); // Leaves } // Paper end } -@@ -384,7 +432,7 @@ public class RegionFileStorage implements AutoCloseable { +@@ -356,7 +404,7 @@ public class RegionFileStorage implements AutoCloseable { ObjectIterator objectiterator = this.regionCache.values().iterator(); while (objectiterator.hasNext()) { @@ -472,7 +472,7 @@ index 6bec4549fbcfb68a053300451e25babf8ff38e99..b25f674e68714b11a9ca2a231f470082 try { regionfile.close(); -@@ -400,7 +448,7 @@ public class RegionFileStorage implements AutoCloseable { +@@ -372,7 +420,7 @@ public class RegionFileStorage implements AutoCloseable { ObjectIterator objectiterator = this.regionCache.values().iterator(); while (objectiterator.hasNext()) { @@ -482,13 +482,13 @@ index 6bec4549fbcfb68a053300451e25babf8ff38e99..b25f674e68714b11a9ca2a231f470082 regionfile.flush(); } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index 2916fb49c69daaa660fc7f53821e8be766226345..433bbdb42ba5a7b4454eca2895dbf9dbf01086d5 100644 +index aa0a1cbbbd4f2f027e24a4166bd5be4009c2ac3e..eedc10b3fd0ae2da321d66d1b08f55edf031accf 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -@@ -567,7 +567,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -565,7 +565,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { + world.getChunk(x, z); // make sure we're at ticket level 32 or lower return true; } - - net.minecraft.world.level.chunk.storage.RegionFile file; + top.leavesmc.leaves.region.AbstractRegionFile file; // Leaves try { diff --git a/patches/server/0129-Placing-locked-hopper-no-longer-send-NC-updates.patch b/patches/server/0129-Placing-locked-hopper-no-longer-send-NC-updates.patch index 7059ff74..f4c048a4 100644 --- a/patches/server/0129-Placing-locked-hopper-no-longer-send-NC-updates.patch +++ b/patches/server/0129-Placing-locked-hopper-no-longer-send-NC-updates.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Placing locked hopper no longer send NC updates diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 3f8113b22ebbb7ff783308033edcf10259dc0e82..cacc6876ed4dc27d090f9d046fe8a4634f240176 100644 +index ce85d69027cbfb06666c9242576d3abbd7cc2831..bf2cf885552249765f005086750a8457c0949c49 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -51,6 +51,7 @@ import net.minecraft.world.level.biome.BiomeManager; @@ -16,7 +16,7 @@ index 3f8113b22ebbb7ff783308033edcf10259dc0e82..cacc6876ed4dc27d090f9d046fe8a463 import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.TickingBlockEntity; import net.minecraft.world.level.block.state.BlockState; -@@ -1030,7 +1031,9 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1029,7 +1030,9 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } if ((i & 1) != 0) {