diff --git a/Tuinity b/Tuinity index 12efad68c..db8a8617c 160000 --- a/Tuinity +++ b/Tuinity @@ -1 +1 @@ -Subproject commit 12efad68c88ccd3e77ca61caa58a0ee13a4efa21 +Subproject commit db8a8617cd22377fe719dbb534c548e362b0aa00 diff --git a/patches/server/0003-Akarin-configuration.patch b/patches/server/0003-Akarin-configuration.patch index 374294a3d..151df09a8 100644 --- a/patches/server/0003-Akarin-configuration.patch +++ b/patches/server/0003-Akarin-configuration.patch @@ -274,7 +274,7 @@ index 760752eaeb07af551cd3cfd36be064c048a05d5b..8863a778a8c34513bc02e42376ebce29 public void restart() { org.spigotmc.RestartCommand.restart(); diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java -index 90a2f8fea7a291cd77b6625079b8081fb3aebe2e..61520ca75eda95f9e35c89bc8945de6ae60b702a 100644 +index cce21aaf3ba8c5049334e17b238aaf44d64db5fe..6464c181bbe35c4621b3b7eac6da47dc50de4e87 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java @@ -146,6 +146,14 @@ public class Main { diff --git a/patches/server/0011-Remove-vanilla-profiler-callers.patch b/patches/server/0011-Remove-vanilla-profiler-callers.patch index 3557feb6c..a1f3ecf52 100644 --- a/patches/server/0011-Remove-vanilla-profiler-callers.patch +++ b/patches/server/0011-Remove-vanilla-profiler-callers.patch @@ -4,11 +4,42 @@ Date: Wed, 15 Apr 2020 22:18:01 +0700 Subject: [PATCH] Remove vanilla profiler callers +diff --git a/src/main/java/com/destroystokyo/paper/server/ticklist/PaperTickList.java b/src/main/java/com/destroystokyo/paper/server/ticklist/PaperTickList.java +index a08bfb4b3b02e998d3a6f519107e522fc58496eb..bed9730542ae7c5bb010b31d587c3cc68fc2d0be 100644 +--- a/src/main/java/com/destroystokyo/paper/server/ticklist/PaperTickList.java ++++ b/src/main/java/com/destroystokyo/paper/server/ticklist/PaperTickList.java +@@ -273,7 +273,7 @@ public final class PaperTickList extends TickListServer { // extend to avo + com.tuinity.tuinity.util.TickThread.softEnsureTickThread("async tick list tick"); // Tuinity - soft async catcher + final ChunkProviderServer chunkProvider = this.world.getChunkProvider(); + +- this.world.getMethodProfiler().enter("cleaning"); ++ //this.world.getMethodProfiler().enter("cleaning"); // Akarin - remove caller + this.timingCleanup.startTiming(); + + this.prepare(); +@@ -284,7 +284,7 @@ public final class PaperTickList extends TickListServer { // extend to avo + this.nextTick = this.world.getTime() + 1; + + this.timingCleanup.stopTiming(); +- this.world.getMethodProfiler().exitEnter("ticking"); ++ //this.world.getMethodProfiler().exitEnter("ticking"); // Akarin - remove caller + this.timingTicking.startTiming(); + + for (final NextTickListEntry toTick : this.toTickThisTick) { +@@ -317,7 +317,7 @@ public final class PaperTickList extends TickListServer { // extend to avo + } + + this.timingTicking.stopTiming(); +- this.world.getMethodProfiler().exit(); ++ //this.world.getMethodProfiler().exit(); // Akarin - remove caller + this.timingFinished.startTiming(); + + // finished ticking, actual cleanup time diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java -index 05c5c4454a1a10ffad5e9335868f2feb4defc225..42f103efef76d061efe72a586ab5ae66c769da6b 100644 +index e8bf60507bacad9b333d4f074fbb62decf974c45..73545d70c2b576c22e8e6f67553d7ad07cdebdc2 100644 --- a/src/main/java/net/minecraft/server/ChunkProviderServer.java +++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java -@@ -626,9 +626,9 @@ public class ChunkProviderServer extends IChunkProvider { +@@ -636,9 +636,9 @@ public class ChunkProviderServer extends IChunkProvider { return ifLoaded; } // Paper end @@ -20,7 +51,7 @@ index 05c5c4454a1a10ffad5e9335868f2feb4defc225..42f103efef76d061efe72a586ab5ae66 long k = ChunkCoordIntPair.pair(i, j); IChunkAccess ichunkaccess; -@@ -642,7 +642,7 @@ public class ChunkProviderServer extends IChunkProvider { +@@ -652,7 +652,7 @@ public class ChunkProviderServer extends IChunkProvider { } } @@ -29,7 +60,7 @@ index 05c5c4454a1a10ffad5e9335868f2feb4defc225..42f103efef76d061efe72a586ab5ae66 CompletableFuture> completablefuture = this.getChunkFutureMainThread(i, j, chunkstatus, flag, true); // Paper if (!completablefuture.isDone()) { // Paper -@@ -718,12 +718,12 @@ public class ChunkProviderServer extends IChunkProvider { +@@ -728,13 +728,13 @@ public class ChunkProviderServer extends IChunkProvider { this.chunkMapDistance.addTicketAtLevel(TicketType.REQUIRED_LOAD, chunkcoordintpair, l, identifier); // Tuinity - prevent plugin unloads from removing our ticket if (isUrgent) this.chunkMapDistance.markUrgent(chunkcoordintpair); // Paper if (this.a(playerchunk, l)) { @@ -38,6 +69,7 @@ index 05c5c4454a1a10ffad5e9335868f2feb4defc225..42f103efef76d061efe72a586ab5ae66 - gameprofilerfiller.enter("chunkLoad"); + //gameprofilerfiller.enter("chunkLoad"); // Akarin - remove caller + chunkMapDistance.delayDistanceManagerTick = false; // Paper - ensure this is never false this.tickDistanceManager(); playerchunk = this.getChunk(k); - gameprofilerfiller.exit(); @@ -45,7 +77,7 @@ index 05c5c4454a1a10ffad5e9335868f2feb4defc225..42f103efef76d061efe72a586ab5ae66 if (this.a(playerchunk, l)) { this.chunkMapDistance.removeTicketAtLevel(TicketType.REQUIRED_LOAD, chunkcoordintpair, l, identifier); // Tuinity throw (IllegalStateException) SystemUtils.c(new IllegalStateException("No chunk holder after ticket has been added")); -@@ -886,33 +886,33 @@ public class ChunkProviderServer extends IChunkProvider { +@@ -897,33 +897,33 @@ public class ChunkProviderServer extends IChunkProvider { // CraftBukkit start - modelled on below public void purgeUnload() { @@ -86,7 +118,7 @@ index 05c5c4454a1a10ffad5e9335868f2feb4defc225..42f103efef76d061efe72a586ab5ae66 this.clearCache(); } -@@ -966,7 +966,7 @@ public class ChunkProviderServer extends IChunkProvider { +@@ -977,7 +977,7 @@ public class ChunkProviderServer extends IChunkProvider { player.lastEntitySpawnRadiusSquared = (double)((range << 4) * (range << 4)); // used in isOutsideRange } // Paper end - optimize isOutisdeRange @@ -95,7 +127,7 @@ index 05c5c4454a1a10ffad5e9335868f2feb4defc225..42f103efef76d061efe72a586ab5ae66 int k = this.world.getGameRules().getInt(GameRules.RANDOM_TICK_SPEED); BlockPosition blockposition = this.world.getSpawn(); // CraftBukkit start - Other mob type spawn tick rate -@@ -977,7 +977,7 @@ public class ChunkProviderServer extends IChunkProvider { +@@ -988,7 +988,7 @@ public class ChunkProviderServer extends IChunkProvider { boolean flag2 = spawnAnimalThisTick; // CraftBukkit end @@ -104,7 +136,7 @@ index 05c5c4454a1a10ffad5e9335868f2feb4defc225..42f103efef76d061efe72a586ab5ae66 this.world.timings.countNaturalMobs.startTiming(); // Paper - timings int l = this.chunkMapDistance.b(); EnumCreatureType[] aenumcreaturetype = EnumCreatureType.values(); -@@ -999,7 +999,7 @@ public class ChunkProviderServer extends IChunkProvider { +@@ -1010,7 +1010,7 @@ public class ChunkProviderServer extends IChunkProvider { // Paper end this.world.timings.countNaturalMobs.stopTiming(); // Paper - timings @@ -113,7 +145,7 @@ index 05c5c4454a1a10ffad5e9335868f2feb4defc225..42f103efef76d061efe72a586ab5ae66 // Paper - replaced by above // Tuinity start - optimise chunk tick iteration this.isTickingChunks = true; -@@ -1008,18 +1008,18 @@ public class ChunkProviderServer extends IChunkProvider { +@@ -1019,18 +1019,18 @@ public class ChunkProviderServer extends IChunkProvider { if (playerchunk != null) { // make sure load event has been called along with the load logic we put there // Tuinity end - optimise chunk tick iteration @@ -135,7 +167,7 @@ index 05c5c4454a1a10ffad5e9335868f2feb4defc225..42f103efef76d061efe72a586ab5ae66 this.world.timings.mobSpawn.startTiming(); // Spigot EnumCreatureType[] aenumcreaturetype1 = aenumcreaturetype; int i1 = aenumcreaturetype.length; -@@ -1079,7 +1079,7 @@ public class ChunkProviderServer extends IChunkProvider { +@@ -1090,7 +1090,7 @@ public class ChunkProviderServer extends IChunkProvider { } this.world.timings.mobSpawn.stopTiming(); // Spigot @@ -144,7 +176,7 @@ index 05c5c4454a1a10ffad5e9335868f2feb4defc225..42f103efef76d061efe72a586ab5ae66 } this.world.timings.chunkTicks.startTiming(); // Spigot // Paper -@@ -1105,15 +1105,15 @@ public class ChunkProviderServer extends IChunkProvider { +@@ -1116,15 +1116,15 @@ public class ChunkProviderServer extends IChunkProvider { } } // Tuinity end - optimise chunk tick iteration @@ -163,7 +195,7 @@ index 05c5c4454a1a10ffad5e9335868f2feb4defc225..42f103efef76d061efe72a586ab5ae66 } // Tuinity start - controlled flush for entity tracker packets -@@ -1257,7 +1257,7 @@ public class ChunkProviderServer extends IChunkProvider { +@@ -1268,7 +1268,7 @@ public class ChunkProviderServer extends IChunkProvider { @Override protected void executeTask(Runnable runnable) { @@ -460,7 +492,7 @@ index 5aca7a9131787415fb2edba1ebec9601e8a56d3a..f01a305083bd755369d1efe6d4183263 } diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index a245cfab67835d7978b310d510d029d713460a3b..85c3dc662653c7aa7aba5913864f5f74181d5962 100644 +index 0dcd1361a3765fba4edaa7c229423a624693ae92..937a965fd2f161119729366a054cd9c115889104 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java @@ -242,7 +242,7 @@ public abstract class EntityLiving extends Entity { @@ -559,10 +591,10 @@ index a245cfab67835d7978b310d510d029d713460a3b..85c3dc662653c7aa7aba5913864f5f74 private void n() { diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java -index 4ed4ad6bc3b4ab6702ca500dc26e889dca6ed2d7..065602dad55d2b83e27e619c83ca86ece22994e0 100644 +index 39072ebdc9e4be2bb762d81a8bd542dbdb8f6371..fc0af7cb52ecaacafe2ea1b34c6d31f0aabfb7d3 100644 --- a/src/main/java/net/minecraft/server/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/EntityPlayer.java -@@ -846,7 +846,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -851,7 +851,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { double d3 = 8.0D; float f2 = f1; @@ -571,7 +603,7 @@ index 4ed4ad6bc3b4ab6702ca500dc26e889dca6ed2d7..065602dad55d2b83e27e619c83ca86ec if (worldserver1 == null) { } else // CraftBukkit - empty to fall through to null to event if (dimensionmanager1 == DimensionManager.OVERWORLD && dimensionmanager == DimensionManager.NETHER) { this.cr = this.getPositionVector(); -@@ -887,8 +887,8 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -892,8 +892,8 @@ public class EntityPlayer extends EntityHuman implements ICrafting { // CraftBukkit end // this.setPositionRotation(d0, d1, d2, f1, f); // CraftBukkit - PlayerTeleportEvent handles position changes @@ -582,7 +614,7 @@ index 4ed4ad6bc3b4ab6702ca500dc26e889dca6ed2d7..065602dad55d2b83e27e619c83ca86ec // Spigot start - SPIGOT-5677, MC-114796: Fix portals generating outside world border double d4 = Math.max(-2.9999872E7D, worldserver1.getWorldBorder().c() + 16.0D); double d5 = Math.max(-2.9999872E7D, worldserver1.getWorldBorder().d() + 16.0D); -@@ -961,7 +961,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -966,7 +966,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { // CraftBukkit end } @@ -629,8 +661,35 @@ index 2552f860ff7a25f74e9a0600e58cefe064fac484..00b70d7447e0db11c09f3b751e089ea0 } } +diff --git a/src/main/java/net/minecraft/server/JsonList.java b/src/main/java/net/minecraft/server/JsonList.java +index 370841cad06121651d0c981c23f3a5e268dc3f59..c97be42dd7b4c6ea2cadcc97f47185c7f02e2cce 100644 +--- a/src/main/java/net/minecraft/server/JsonList.java ++++ b/src/main/java/net/minecraft/server/JsonList.java +@@ -168,7 +168,6 @@ public class JsonList> { + } + + public void save() throws IOException { +- Runnable runnable = () -> { // Akarin - Save json list async + this.removeStaleEntries(); // Paper - remove expired values before saving + Collection collection = this.d.values(); + String s = this.b.toJson(collection); +@@ -177,13 +176,10 @@ public class JsonList> { + try { + bufferedwriter = Files.newWriter(this.c, StandardCharsets.UTF_8); + bufferedwriter.write(s); +- } catch (IOException e) { // Akarin - Save json list async +- JsonList.LOGGER.warn("Failed to save " + this.c, e); // Akarin - Save json list async + } finally { + IOUtils.closeQuietly(bufferedwriter); + } +- }; // Akarin - Save json list async +- MCUtil.scheduleAsyncTask(runnable); // Akarin - Save json list async ++ + } + + public void load() throws FileNotFoundException { diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 2cb12e02e836f34ed80e93d4426bd994146e26c8..c07be72c6fc3f5acf1ac984a31f67ee170493e41 100644 +index 2cb12e02e836f34ed80e93d4426bd994146e26c8..06e1f6a0d7ee6b4119a4801ae298baaee1d2da3b 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -965,15 +965,15 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant 0; // Paper TileEntityHopper.skipHopperEvents = worldserver.paperConfig.disableHopperMoveEvents || org.bukkit.event.inventory.InventoryMoveItemEvent.getHandlerList().getRegisteredListeners().length == 0; // Paper if (true || worldserver.worldProvider.getDimensionManager() == DimensionManager.OVERWORLD || this.getAllowNether()) { // CraftBukkit - this.methodProfiler.a(() -> { -- return worldserver.getWorldData().getName() + " " + IRegistry.DIMENSION_TYPE.getKey(worldserver.worldProvider.getDimensionManager()); -- }); -+ // Akarin - remove caller ++ java.util.function.Supplier pleaseRemoveMe = (() -> { // Akarin - remove caller + return worldserver.getWorldData().getName() + " " + IRegistry.DIMENSION_TYPE.getKey(worldserver.worldProvider.getDimensionManager()); + }); /* Drop global time updates if (this.ticks % 20 == 0) { - this.methodProfiler.enter("timeSync"); @@ -751,7 +810,7 @@ index 2cb12e02e836f34ed80e93d4426bd994146e26c8..c07be72c6fc3f5acf1ac984a31f67ee1 try { // Tuinity - replace logic -@@ -1405,17 +1403,17 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant getExecutingGoals() {return c();} // Paper - OBFHELPER diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java -index 13f5857aedc1d47a014ff020a31ce7a84ddeffc5..fe94394239b97e534d1899afdfb6f68bbb96923e 100644 +index 34ec3b9d702fd865cf733c5608f11c927b3d6c68..4affa47c290d68d755759d2b96b46eb716515169 100644 --- a/src/main/java/net/minecraft/server/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java -@@ -873,20 +873,20 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -891,20 +891,20 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { private static final double UNLOAD_QUEUE_RESIZE_FACTOR = 0.90; // Spigot // Paper - unload more protected void unloadChunks(BooleanSupplier booleansupplier) { @@ -885,7 +944,7 @@ index 13f5857aedc1d47a014ff020a31ce7a84ddeffc5..fe94394239b97e534d1899afdfb6f68b } private void b(BooleanSupplier booleansupplier) { -@@ -1099,7 +1099,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1117,7 +1117,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { // Paper start - Async chunk io final java.util.function.BiFunction> syncLoadComplete = (chunkHolder, ioThrowable) -> { try (Timing ignored = this.world.timings.chunkLoad.startTimingIfSync()) { // Paper @@ -894,7 +953,7 @@ index 13f5857aedc1d47a014ff020a31ce7a84ddeffc5..fe94394239b97e534d1899afdfb6f68b if (ioThrowable != null) { com.destroystokyo.paper.io.IOUtil.rethrow(ioThrowable); } -@@ -1415,7 +1415,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1433,7 +1433,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { } } // Paper @@ -904,7 +963,7 @@ index 13f5857aedc1d47a014ff020a31ce7a84ddeffc5..fe94394239b97e534d1899afdfb6f68b nbttagcompound = ChunkRegionLoader.saveChunk(this.world, ichunkaccess); } // Paper diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java -index f09b85390745379ddffcfd11501881cf66352ce7..affc380bd4092654d2674e9aa084dfb920718271 100644 +index e0da3a13b987a6c20d4745430b11534f5f9833d1..e9229a42d1c5a60f7cd40aa2233a7c55d9700670 100644 --- a/src/main/java/net/minecraft/server/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/PlayerConnection.java @@ -195,7 +195,7 @@ public class PlayerConnection implements PacketListenerPlayIn { @@ -957,7 +1016,7 @@ index 3f1aa5ced697490b5481ba992cf5af5dc98b8166..af705e6c650b529c18bdd8f0c063a71c this.h.clear(); this.g.clear(); diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java -index 655e0b5e52e22a1ac1ff3718ad5ab3ab61ef7e41..fbde4fd656e8da0dccabca3872f96c7c2257bdb6 100644 +index 655e0b5e52e22a1ac1ff3718ad5ab3ab61ef7e41..665e7352d7b1f495f0d7cc4b3892382238b78ad7 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java @@ -411,9 +411,9 @@ public abstract class World implements GeneratorAccess, AutoCloseable { @@ -984,18 +1043,16 @@ index 655e0b5e52e22a1ac1ff3718ad5ab3ab61ef7e41..fbde4fd656e8da0dccabca3872f96c7c timings.tileEntityTick.startTiming(); // Spigot if (!this.tileEntityListUnload.isEmpty()) { // Paper start - Use alternate implementation with faster contains -@@ -816,9 +816,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -816,7 +816,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { if (this.chunkProvider.a(blockposition) && this.getWorldBorder().a(blockposition)) { try { - gameprofilerfiller.a(() -> { -- return String.valueOf(TileEntityTypes.a(tileentity.getTileType())); -- }); -+ // Akarin - remove caller ++ /*gameprofilerfiller.a*/java.util.function.Supplier pleaseRemoveMe = (() -> { // Akarin - remove caller + return String.valueOf(TileEntityTypes.a(tileentity.getTileType())); + }); tileentity.tickTimer.startTiming(); // Spigot - if (tileentity.getTileType().isValidBlock(this.getType(blockposition).getBlock())) { - ((ITickable) tileentity).tick(); -@@ -826,7 +824,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -826,7 +826,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { tileentity.v(); } @@ -1004,7 +1061,7 @@ index 655e0b5e52e22a1ac1ff3718ad5ab3ab61ef7e41..fbde4fd656e8da0dccabca3872f96c7c } catch (Throwable throwable) { if (throwable instanceof ThreadDeath) throw throwable; // Paper // Paper start - Prevent tile entity and entity crashes -@@ -863,7 +861,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -863,7 +863,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { timings.tileEntityTick.stopTiming(); // Spigot timings.tileEntityPending.startTiming(); // Spigot this.tickingTileEntities = false; @@ -1013,7 +1070,7 @@ index 655e0b5e52e22a1ac1ff3718ad5ab3ab61ef7e41..fbde4fd656e8da0dccabca3872f96c7c if (!this.tileEntityListPending.isEmpty()) { for (int i = 0; i < this.tileEntityListPending.size(); ++i) { TileEntity tileentity1 = (TileEntity) this.tileEntityListPending.get(i); -@@ -896,7 +894,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -896,7 +896,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { timings.tileEntityPending.stopTiming(); // Spigot co.aikar.timings.TimingHistory.tileEntityTicks += this.tileEntityListTick.size(); // Paper @@ -1022,7 +1079,7 @@ index 655e0b5e52e22a1ac1ff3718ad5ab3ab61ef7e41..fbde4fd656e8da0dccabca3872f96c7c spigotConfig.currentPrimedTnt = 0; // Spigot } -@@ -1254,7 +1252,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -1254,7 +1254,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { } public List getEntities(@Nullable Entity entity, AxisAlignedBB axisalignedbb, @Nullable Predicate predicate, List list) { // Tuinity end - add list parameter @@ -1031,7 +1088,7 @@ index 655e0b5e52e22a1ac1ff3718ad5ab3ab61ef7e41..fbde4fd656e8da0dccabca3872f96c7c int i = MathHelper.floor((axisalignedbb.minX - 2.0D) / 16.0D); int j = MathHelper.floor((axisalignedbb.maxX + 2.0D) / 16.0D); int k = MathHelper.floor((axisalignedbb.minZ - 2.0D) / 16.0D); -@@ -1274,7 +1272,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -1274,7 +1274,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { } public List a(@Nullable EntityTypes entitytypes, AxisAlignedBB axisalignedbb, Predicate predicate) { @@ -1040,7 +1097,7 @@ index 655e0b5e52e22a1ac1ff3718ad5ab3ab61ef7e41..fbde4fd656e8da0dccabca3872f96c7c int i = MathHelper.floor((axisalignedbb.minX - 2.0D) / 16.0D); int j = MathHelper.f((axisalignedbb.maxX + 2.0D) / 16.0D); int k = MathHelper.floor((axisalignedbb.minZ - 2.0D) / 16.0D); -@@ -1296,7 +1294,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -1296,7 +1296,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { public List getEntities(Class oclass, AxisAlignedBB axisalignedbb, @Nullable Predicate predicate) { return a(oclass, axisalignedbb, predicate); } // Paper - OBFHELPER @Override public List a(Class oclass, AxisAlignedBB axisalignedbb, @Nullable Predicate predicate) { @@ -1049,7 +1106,7 @@ index 655e0b5e52e22a1ac1ff3718ad5ab3ab61ef7e41..fbde4fd656e8da0dccabca3872f96c7c int i = MathHelper.floor((axisalignedbb.minX - 2.0D) / 16.0D); int j = MathHelper.f((axisalignedbb.maxX + 2.0D) / 16.0D); int k = MathHelper.floor((axisalignedbb.minZ - 2.0D) / 16.0D); -@@ -1319,7 +1317,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -1319,7 +1319,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { @Override public List b(Class oclass, AxisAlignedBB axisalignedbb, @Nullable Predicate predicate) { @@ -1059,7 +1116,7 @@ index 655e0b5e52e22a1ac1ff3718ad5ab3ab61ef7e41..fbde4fd656e8da0dccabca3872f96c7c int j = MathHelper.f((axisalignedbb.maxX + 2.0D) / 16.0D); int k = MathHelper.floor((axisalignedbb.minZ - 2.0D) / 16.0D); diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java -index c6509ad99d26f718b2e1fc89d874d4b0536d1781..a89426cb36b446c762b2f11143ed51356bddb633 100644 +index 24cd10c960a5460aef769d2937d02e7921dec9ce..1a6fa98a79910c74f121ca844424b3df0ab2e20a 100644 --- a/src/main/java/net/minecraft/server/WorldServer.java +++ b/src/main/java/net/minecraft/server/WorldServer.java @@ -727,12 +727,12 @@ public class WorldServer extends World { @@ -1231,9 +1288,9 @@ index c6509ad99d26f718b2e1fc89d874d4b0536d1781..a89426cb36b446c762b2f11143ed5135 - gameprofilerfiller.exit(); + //gameprofilerfiller.exit(); // Akarin - remove caller timings.chunkTicksBlocks.stopTiming(); // Paper + getChunkProvider().getLightEngine().queueUpdate(); // Paper // Paper end - } -@@ -1254,15 +1254,13 @@ public class WorldServer extends World { +@@ -1255,15 +1255,15 @@ public class WorldServer extends World { entity.lastPitch = entity.pitch; if (entity.inChunk) { ++entity.ticksLived; @@ -1241,10 +1298,10 @@ index c6509ad99d26f718b2e1fc89d874d4b0536d1781..a89426cb36b446c762b2f11143ed5135 + //GameProfilerFiller gameprofilerfiller = this.getMethodProfiler(); // Akarin - remove caller - gameprofilerfiller.a(() -> { -- return IRegistry.ENTITY_TYPE.getKey(entity.getEntityType()).toString(); -- }); ++ /*gameprofilerfiller.a*/java.util.function.Supplier pleaseRemoveMe = (() -> { // Akarin - remove caller + return IRegistry.ENTITY_TYPE.getKey(entity.getEntityType()).toString(); + }); - gameprofilerfiller.c("tickNonPassenger"); -+ // Akarin - remove caller + //gameprofilerfiller.c("tickNonPassenger"); // Akarin - remove caller entity.tick(); entity.postTick(); // CraftBukkit @@ -1253,7 +1310,7 @@ index c6509ad99d26f718b2e1fc89d874d4b0536d1781..a89426cb36b446c762b2f11143ed5135 } this.chunkCheck(entity); -@@ -1295,14 +1293,12 @@ public class WorldServer extends World { +@@ -1296,14 +1296,14 @@ public class WorldServer extends World { entity1.lastPitch = entity1.pitch; if (entity1.inChunk) { ++entity1.ticksLived; @@ -1261,10 +1318,10 @@ index c6509ad99d26f718b2e1fc89d874d4b0536d1781..a89426cb36b446c762b2f11143ed5135 + //GameProfilerFiller gameprofilerfiller = this.getMethodProfiler(); // Akarin - remove caller - gameprofilerfiller.a(() -> { -- return IRegistry.ENTITY_TYPE.getKey(entity1.getEntityType()).toString(); -- }); ++ /*gameprofilerfiller.a*/java.util.function.Supplier pleaseRemoveMe = (() -> { // Akarin - remove caller + return IRegistry.ENTITY_TYPE.getKey(entity1.getEntityType()).toString(); + }); - gameprofilerfiller.c("tickPassenger"); -+ // Akarin - remove caller + //gameprofilerfiller.c("tickPassenger"); // Akarin - remove caller entity1.passengerTick(); - gameprofilerfiller.exit(); @@ -1272,7 +1329,7 @@ index c6509ad99d26f718b2e1fc89d874d4b0536d1781..a89426cb36b446c762b2f11143ed5135 } this.chunkCheck(entity1); -@@ -1323,7 +1319,7 @@ public class WorldServer extends World { +@@ -1324,7 +1324,7 @@ public class WorldServer extends World { } public void chunkCheck(Entity entity) { @@ -1281,7 +1338,7 @@ index c6509ad99d26f718b2e1fc89d874d4b0536d1781..a89426cb36b446c762b2f11143ed5135 int i = MathHelper.floor(entity.locX() / 16.0D); int j = Math.min(15, Math.max(0, MathHelper.floor(entity.locY() / 16.0D))); // Paper - stay consistent with chunk add/remove behavior; int k = MathHelper.floor(entity.locZ() / 16.0D); -@@ -1343,7 +1339,7 @@ public class WorldServer extends World { +@@ -1344,7 +1344,7 @@ public class WorldServer extends World { } } diff --git a/patches/server/0016-Cache-hashcode-for-BlockPosition.patch b/patches/server/0016-Cache-hashcode-for-BlockPosition.patch index c3c1d18ed..e2ad1a0db 100644 --- a/patches/server/0016-Cache-hashcode-for-BlockPosition.patch +++ b/patches/server/0016-Cache-hashcode-for-BlockPosition.patch @@ -39,10 +39,10 @@ index a0450a7ddf21659c5636b3f298e6bf4f0a93fc4d..c4227ff056f906c6ea1fec0330d2db84 public int compareTo(BaseBlockPosition baseblockposition) { return this.getY() == baseblockposition.getY() ? (this.getZ() == baseblockposition.getZ() ? this.getX() - baseblockposition.getX() : this.getZ() - baseblockposition.getZ()) : this.getY() - baseblockposition.getY(); diff --git a/src/main/java/net/minecraft/server/BlockPosition.java b/src/main/java/net/minecraft/server/BlockPosition.java -index 4c64798fbc50f4d8b08502ba865c5fde5c968e62..ba6d9c838bf7cd16ad300029521f089d48f19547 100644 +index 7e69f9fb7a1865003c1d09a7ee05c17e1e5d4445..fccd966e627e3d706b4ed12fc101545ac4d13266 100644 --- a/src/main/java/net/minecraft/server/BlockPosition.java +++ b/src/main/java/net/minecraft/server/BlockPosition.java -@@ -437,6 +437,7 @@ public class BlockPosition extends BaseBlockPosition implements MinecraftSeriali +@@ -443,6 +443,7 @@ public class BlockPosition extends BaseBlockPosition implements MinecraftSeriali this.y = j; this.z = k; // Paper end @@ -50,7 +50,7 @@ index 4c64798fbc50f4d8b08502ba865c5fde5c968e62..ba6d9c838bf7cd16ad300029521f089d return this; } -@@ -477,16 +478,19 @@ public class BlockPosition extends BaseBlockPosition implements MinecraftSeriali +@@ -483,16 +484,19 @@ public class BlockPosition extends BaseBlockPosition implements MinecraftSeriali public final void setX(final int x) { this.o(x); } // Paper - OBFHELPER public void o(int i) { this.x = i; // Paper change to x diff --git a/patches/server/0017-Remove-a-few-more-streams.patch b/patches/server/0017-Remove-a-few-more-streams.patch index beab31e21..18c4b61fb 100644 --- a/patches/server/0017-Remove-a-few-more-streams.patch +++ b/patches/server/0017-Remove-a-few-more-streams.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Remove a few more streams diff --git a/src/main/java/net/minecraft/server/ChunkMapDistance.java b/src/main/java/net/minecraft/server/ChunkMapDistance.java -index 1270d88138c7d6a88614f2df2802722a93ff27a6..570c6a1af1acafc53af8fe3e85e195e47f1986ef 100644 +index e0378f486c5d191d55114701d4d519e0d0af5726..e70f4928f81a06d3c15862fc7bdc43dc5fba928e 100644 --- a/src/main/java/net/minecraft/server/ChunkMapDistance.java +++ b/src/main/java/net/minecraft/server/ChunkMapDistance.java @@ -188,9 +188,15 @@ public abstract class ChunkMapDistance { diff --git a/patches/server/0018-Modify-default-configs.patch b/patches/server/0018-Modify-default-configs.patch index e9aab685e..335bd0d5c 100644 --- a/patches/server/0018-Modify-default-configs.patch +++ b/patches/server/0018-Modify-default-configs.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Modify default configs diff --git a/src/main/java/com/destroystokyo/paper/PaperConfig.java b/src/main/java/com/destroystokyo/paper/PaperConfig.java -index f0284e81db3ab7c45018de2b446f2d8296df15c3..931060b9a7261b3aa4725136141ed9b4fd71bc94 100644 +index 8444819f071b13e98ba07032520016a664b7b9bc..a349f56548ece94ec591933e13f77ed3b9f20fb7 100644 --- a/src/main/java/com/destroystokyo/paper/PaperConfig.java +++ b/src/main/java/com/destroystokyo/paper/PaperConfig.java @@ -202,7 +202,7 @@ public class PaperConfig { diff --git a/patches/server/0019-Remove-Streams-using-IntelliJ-IDEA.patch b/patches/server/0019-Remove-Streams-using-IntelliJ-IDEA.patch index fd3ec7a42..f6e3c23ef 100644 --- a/patches/server/0019-Remove-Streams-using-IntelliJ-IDEA.patch +++ b/patches/server/0019-Remove-Streams-using-IntelliJ-IDEA.patch @@ -147,10 +147,10 @@ index 59aec103295f747793fdc0a52eb45f4121aba921..cee2cc4c5ec3dd0627b28bfb19f38127 data.sort((Pair pair1, Pair pair2) -> { return Integer.compare(pair2.getSecond().times, pair1.getSecond().times); // reverse order diff --git a/src/main/java/com/destroystokyo/paper/profile/CraftPlayerProfile.java b/src/main/java/com/destroystokyo/paper/profile/CraftPlayerProfile.java -index b151a13c1b9058eb057081ef8a64558028443a07..ffbf950c7f60762e372fd58686b724c986aa28da 100644 +index 293b73f4747f48dbf8b6a8453d3fc777de11588d..8a18dfcda3c785e9c8bd134f88515e077dbef7dc 100644 --- a/src/main/java/com/destroystokyo/paper/profile/CraftPlayerProfile.java +++ b/src/main/java/com/destroystokyo/paper/profile/CraftPlayerProfile.java -@@ -89,7 +89,9 @@ public class CraftPlayerProfile implements PlayerProfile { +@@ -91,7 +91,9 @@ public class CraftPlayerProfile implements PlayerProfile { @Override public void setProperties(Collection properties) { @@ -402,10 +402,10 @@ index ef6c85557c217f1cb7f78ffbd87c094a7fd77482..a071a1da72fba6efb568414977440455 private EnumTemperature(String s) { diff --git a/src/main/java/net/minecraft/server/Block.java b/src/main/java/net/minecraft/server/Block.java -index bd7a92599b4182739aafef9eeaaf8665d2f9f954..f910b88d8532b6da00a169356bdfb52be7377c0a 100644 +index 66244a9d0e253b3709df4ae2adcd21e44ebbfc90..c8109cef9db68230ee6aab3e1caaf3c95ca3044f 100644 --- a/src/main/java/net/minecraft/server/Block.java +++ b/src/main/java/net/minecraft/server/Block.java -@@ -473,9 +473,9 @@ public class Block implements IMaterial { +@@ -474,9 +474,9 @@ public class Block implements IMaterial { public static void c(IBlockData iblockdata, World world, BlockPosition blockposition) { if (world instanceof WorldServer) { @@ -417,7 +417,7 @@ index bd7a92599b4182739aafef9eeaaf8665d2f9f954..f910b88d8532b6da00a169356bdfb52b } iblockdata.dropNaturally(world, blockposition, ItemStack.a); -@@ -483,9 +483,9 @@ public class Block implements IMaterial { +@@ -484,9 +484,9 @@ public class Block implements IMaterial { public static void dropNaturally(IBlockData iblockdata, World world, BlockPosition blockposition, @Nullable TileEntity tileentity) { a(iblockdata, world, blockposition, tileentity); } public static void a(IBlockData iblockdata, World world, BlockPosition blockposition, @Nullable TileEntity tileentity) { if (world instanceof WorldServer) { @@ -429,7 +429,7 @@ index bd7a92599b4182739aafef9eeaaf8665d2f9f954..f910b88d8532b6da00a169356bdfb52b } iblockdata.dropNaturally(world, blockposition, ItemStack.a); -@@ -493,9 +493,9 @@ public class Block implements IMaterial { +@@ -494,9 +494,9 @@ public class Block implements IMaterial { public static void dropItems(IBlockData iblockdata, World world, BlockPosition blockposition, @Nullable TileEntity tileentity, Entity entity, ItemStack itemstack) { if (world instanceof WorldServer) { @@ -506,16 +506,16 @@ index 7cdadc6b6abd069f9a1bc000a8f116f73b90e029..fc5f6e064fb6bb766d6f693f5e4bd785 public static & INamable> BlockStateEnum of(String s, Class oclass, T... at) { diff --git a/src/main/java/net/minecraft/server/ChunkMapDistance.java b/src/main/java/net/minecraft/server/ChunkMapDistance.java -index 570c6a1af1acafc53af8fe3e85e195e47f1986ef..87f313e958123e9615687da42d295fc0e02d6b4b 100644 +index e70f4928f81a06d3c15862fc7bdc43dc5fba928e..a26989ecca7c56a23e5cede45abb48c5af489d48 100644 --- a/src/main/java/net/minecraft/server/ChunkMapDistance.java +++ b/src/main/java/net/minecraft/server/ChunkMapDistance.java -@@ -294,18 +294,18 @@ public abstract class ChunkMapDistance { - - public void markAreaHighPriority(ChunkCoordIntPair center, int priority, int radius) { +@@ -296,18 +296,18 @@ public abstract class ChunkMapDistance { delayDistanceManagerTick = true; + priority = Math.min(URGENT_PRIORITY - 1, Math.max(1, priority)); + int finalPriority = priority; - MCUtil.getSpiralOutChunks(center.asPosition(), radius).forEach(coords -> { + for (ChunkCoordIntPair coords : MCUtil.getSpiralOutChunks(center.asPosition(), radius)) { - addPriorityTicket(coords, TicketType.PRIORITY, priority); + addPriorityTicket(coords, TicketType.PRIORITY, finalPriority); - }); + } delayDistanceManagerTick = false; @@ -567,7 +567,7 @@ index 20b6b58bdee872a4aaa18e3507aef2c8afd5d26e..5afbd870b2388249565659c5e759026a NibbleArray nibblearray; // block light NibbleArray nibblearray1; // sky light diff --git a/src/main/java/net/minecraft/server/ContainerGrindstone.java b/src/main/java/net/minecraft/server/ContainerGrindstone.java -index ed88e208d00f3b19b5c5916cf87513ab511a5fb1..bbc4c4304bf7663d0d23e2341e391b005ffef39f 100644 +index 83cb0cd64c81eb35fa49eecff93b40f08e0a5606..4b0ac9ba44a4e09f8d3f8cdd3597d036fc2263ee 100644 --- a/src/main/java/net/minecraft/server/ContainerGrindstone.java +++ b/src/main/java/net/minecraft/server/ContainerGrindstone.java @@ -1,5 +1,6 @@ @@ -577,7 +577,7 @@ index ed88e208d00f3b19b5c5916cf87513ab511a5fb1..bbc4c4304bf7663d0d23e2341e391b00 import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; -@@ -234,9 +235,15 @@ public class ContainerGrindstone extends Container { +@@ -243,9 +244,15 @@ public class ContainerGrindstone extends Container { } itemstack1.setCount(j); @@ -805,7 +805,7 @@ index db43ac1cc4ae959a432eedd3efee891b4e141c7f..480c930714328c2789a3641d94761107 this.world.addEntity(entityareaeffectcloud); } else entityareaeffectcloud.die(); // Paper diff --git a/src/main/java/net/minecraft/server/EntityEnderDragon.java b/src/main/java/net/minecraft/server/EntityEnderDragon.java -index aecdaacfc7da560759bc513680d76f55820d5046..f4552fc267cbfedf07dfced063ed7ba924a6621c 100644 +index 7daebfdab5c6e258d3e426643c0dbd374774ff5d..e87f9d6f27835635dd9307a1661af2aceef0f4c6 100644 --- a/src/main/java/net/minecraft/server/EntityEnderDragon.java +++ b/src/main/java/net/minecraft/server/EntityEnderDragon.java @@ -464,9 +464,9 @@ public class EntityEnderDragon extends EntityInsentient implements IMonster { @@ -1348,25 +1348,26 @@ index ea60880c6f15b1a39579896d78cf641563621aa4..babe0537e10a131c8f2ea5636e8d0e99 } diff --git a/src/main/java/net/minecraft/server/LightEngineThreaded.java b/src/main/java/net/minecraft/server/LightEngineThreaded.java -index 72cc711d6c2645aed44f208ee44f8702d64c5af8..02560ecd4b305f04df6c3765a8913b69efe84c22 100644 +index 9ef39f1f51f9960865f6418115b08e8d7de86509..4a24ec468a98fe44ec5931a91881f73232bbb9a2 100644 --- a/src/main/java/net/minecraft/server/LightEngineThreaded.java +++ b/src/main/java/net/minecraft/server/LightEngineThreaded.java -@@ -266,9 +266,13 @@ public class LightEngineThreaded extends LightEngine implements AutoCloseable { - } +@@ -288,10 +288,14 @@ public class LightEngineThreaded extends LightEngine implements AutoCloseable { + int i = Math.min(queue.size(), 4); + boolean ran = false; + while (i-- > 0 && queue.poll(pre, post)) { +- pre.forEach(Runnable::run); ++ for (Runnable runnable1 : pre) { ++ runnable1.run(); ++ } + pre.clear(); + super.a(Integer.MAX_VALUE, true, true); +- post.forEach(Runnable::run); ++ for (Runnable runnable : post) { ++ runnable.run(); ++ } + post.clear(); + ran = true; } - -- pre.forEach(entry -> entry.getSecond().run()); -+ for (Pair updateRunnablePair : pre) { -+ updateRunnablePair.getSecond().run(); -+ } - super.a(Integer.MAX_VALUE, true, true); -- post.forEach(entry -> entry.getSecond().run()); -+ for (Pair entry : post) { -+ entry.getSecond().run(); -+ } - - if (!urgent && this.c.isEmpty()) nextNonUrgent = System.nanoTime() + (50 * 1000000); - // Paper end diff --git a/src/main/java/net/minecraft/server/LootTable.java b/src/main/java/net/minecraft/server/LootTable.java index 666bd34eab4847cb698596b59e1c07569bcdb38c..e9ce7f4b26e72863ab92974e36b0f835f340c4c0 100644 --- a/src/main/java/net/minecraft/server/LootTable.java @@ -1490,7 +1491,7 @@ index 973bdd25ca45ee6a11803e3abb8c0ff22d658554..b20a4a0edb5f5958361cc4c12bee0584 private MCUtil() {} diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index c07be72c6fc3f5acf1ac984a31f67ee170493e41..c5b059ea3b8bc79ee5fffec5cedc281a1911d730 100644 +index 06e1f6a0d7ee6b4119a4801ae298baaee1d2da3b..7831f1d87df7cc19e1cc428a894dbee43c0e3208 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -473,7 +473,13 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant list1 = Lists.newArrayList(); @@ -1543,7 +1544,7 @@ index c07be72c6fc3f5acf1ac984a31f67ee170493e41..c5b059ea3b8bc79ee5fffec5cedc281a CompletableFuture completablefuture = this.ae.a(this.executorService, this, list1, MinecraftServer.i); this.awaitTasks(completablefuture::isDone); -@@ -2068,15 +2078,15 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant> { +@@ -442,12 +442,12 @@ public class NetworkManager extends SimpleChannelInboundHandler> { // Paper start public void clearPacketQueue() { EntityPlayer player = getPlayer(); @@ -1639,7 +1640,7 @@ index f49fc9c8f24e0b1f0dc11a213605a3e91f4f66a9..8d525009dc80f43b032b57f194e57be2 //this.e.enter("goalUpdate"); // Akarin - remove caller // Paper start - remove streams from pathfindergoalselector diff --git a/src/main/java/net/minecraft/server/PlayerChunk.java b/src/main/java/net/minecraft/server/PlayerChunk.java -index 246ab9914a28cc3e25e1666b93de4f63e23d3550..8fa70f1af1d91b2724c3e15c6d6a4be488fb87d2 100644 +index 44d6f2debc767cb0576b17ed3e0711baa4361001..e7bfefafb70df7cca594db433a83e73e743629e5 100644 --- a/src/main/java/net/minecraft/server/PlayerChunk.java +++ b/src/main/java/net/minecraft/server/PlayerChunk.java @@ -2,6 +2,7 @@ package net.minecraft.server; @@ -1664,13 +1665,13 @@ index 246ab9914a28cc3e25e1666b93de4f63e23d3550..8fa70f1af1d91b2724c3e15c6d6a4be4 // Paper end this.oldTicketLevel = this.ticketLevel; diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java -index fe94394239b97e534d1899afdfb6f68bbb96923e..b68422e5d02aa2aa799cb5458c1de3552383b15c 100644 +index 4affa47c290d68d755759d2b96b46eb716515169..89e510c3fa06d33bfae457988d4f4f9b4b9a6c9e 100644 --- a/src/main/java/net/minecraft/server/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java -@@ -463,50 +463,50 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { - double playerChunkX = MathHelper.floor(player.locX()) >> 4; +@@ -474,53 +474,53 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { double playerChunkZ = MathHelper.floor(player.locZ()) >> 4; pos.setValues(player.locX(), 0, player.locZ()); + double twoThirdModifier = 2D / 3D; - MCUtil.getSpiralOutChunks(pos, Math.min(6, viewDistance)).forEach(coord -> { - if (shouldSkipPrioritization(coord)) return; + for (ChunkCoordIntPair coordIntPair : MCUtil.getSpiralOutChunks(pos, Math.min(6, viewDistance))) { @@ -1680,16 +1681,16 @@ index fe94394239b97e534d1899afdfb6f68bbb96923e..b68422e5d02aa2aa799cb5458c1de355 + double dist = MCUtil.distance(playerChunkX, 0, playerChunkZ, coordIntPair.x, 0, coordIntPair.z); // Prioritize immediate if (dist <= 4 * 4) { -- chunkDistanceManager.markHighPriority(coord, (int) (27 - Math.sqrt(dist))); +- updateChunkPriorityMap(priorities, coord.pair(), (int) (27 - Math.sqrt(dist))); - return; -+ chunkDistanceManager.markHighPriority(coordIntPair, (int) (27 - Math.sqrt(dist))); ++ updateChunkPriorityMap(priorities, coordIntPair.pair(), (int) (27 - Math.sqrt(dist))); + continue; } // Prioritize nearby chunks -- chunkDistanceManager.markHighPriority(coord, (int) (16 - Math.sqrt(dist*(2D/3D)))); +- updateChunkPriorityMap(priorities, coord.pair(), (int) (20 - Math.sqrt(dist) * twoThirdModifier)); - }); -+ chunkDistanceManager.markHighPriority(coordIntPair, (int) (16 - Math.sqrt(dist * (2D / 3D)))); ++ updateChunkPriorityMap(priorities, coordIntPair.pair(), (int) (20 - Math.sqrt(dist) * twoThirdModifier)); + } // Prioritize Frustum near 3 @@ -1700,9 +1701,11 @@ index fe94394239b97e534d1899afdfb6f68bbb96923e..b68422e5d02aa2aa799cb5458c1de355 + for (ChunkCoordIntPair chunkCoordIntPair : MCUtil.getSpiralOutChunks(pos, Math.min(5, viewDistance))) { + if (shouldSkipPrioritization(chunkCoordIntPair)) continue; -- chunkDistanceManager.markHighPriority(coord, 26); +- double dist = MCUtil.distance(playerChunkX, 0, playerChunkZ, coord.x, 0, coord.z); +- updateChunkPriorityMap(priorities, coord.pair(), (int) (25 - Math.sqrt(dist) * twoThirdModifier)); - }); -+ chunkDistanceManager.markHighPriority(chunkCoordIntPair, 26); ++ double dist = MCUtil.distance(playerChunkX, 0, playerChunkZ, chunkCoordIntPair.x, 0, chunkCoordIntPair.z); ++ updateChunkPriorityMap(priorities, chunkCoordIntPair.pair(), (int) (25 - Math.sqrt(dist) * twoThirdModifier)); + } // Prioritize Frustum near 5 @@ -1714,7 +1717,8 @@ index fe94394239b97e534d1899afdfb6f68bbb96923e..b68422e5d02aa2aa799cb5458c1de355 + for (ChunkCoordIntPair coord : MCUtil.getSpiralOutChunks(pos, 4)) { + if (shouldSkipPrioritization(coord)) continue; - chunkDistanceManager.markHighPriority(coord, 20); + double dist = MCUtil.distance(playerChunkX, 0, playerChunkZ, coord.x, 0, coord.z); + updateChunkPriorityMap(priorities, coord.pair(), (int) (25 - Math.sqrt(dist) * twoThirdModifier)); - }); + } } @@ -1729,13 +1733,14 @@ index fe94394239b97e534d1899afdfb6f68bbb96923e..b68422e5d02aa2aa799cb5458c1de355 - return; + continue; } - chunkDistanceManager.markHighPriority(coord, 15); + double dist = MCUtil.distance(playerChunkX, 0, playerChunkZ, coord.x, 0, coord.z); + updateChunkPriorityMap(priorities, coord.pair(), (int) (25 - Math.sqrt(dist) * twoThirdModifier)); - }); + } } pos.close(); -@@ -828,7 +828,14 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -846,7 +846,14 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { protected void save(boolean flag) { Long2ObjectLinkedOpenHashMap visibleChunks = this.getVisibleChunks(); // Paper remove clone of visible Chunks unless saving off main thread (watchdog kill) if (flag) { @@ -1751,7 +1756,7 @@ index fe94394239b97e534d1899afdfb6f68bbb96923e..b68422e5d02aa2aa799cb5458c1de355 MutableBoolean mutableboolean = new MutableBoolean(); do { -@@ -857,15 +864,17 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -875,15 +882,17 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { // this.i(); // Paper - nuke IOWorker PlayerChunkMap.LOGGER.info("ThreadedAnvilChunkStorage ({}): All chunks are saved", this.w.getName()); } else { @@ -1776,7 +1781,7 @@ index fe94394239b97e534d1899afdfb6f68bbb96923e..b68422e5d02aa2aa799cb5458c1de355 } } -@@ -955,8 +964,17 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -973,8 +982,17 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { return; } @@ -1796,7 +1801,7 @@ index fe94394239b97e534d1899afdfb6f68bbb96923e..b68422e5d02aa2aa799cb5458c1de355 } } catch (IOException ex) { ex.printStackTrace(); -@@ -1105,7 +1123,9 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1123,7 +1141,9 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { } this.getVillagePlace().loadInData(chunkcoordintpair, chunkHolder.poiData); @@ -1807,7 +1812,7 @@ index fe94394239b97e534d1899afdfb6f68bbb96923e..b68422e5d02aa2aa799cb5458c1de355 // Paper - async load completes this // Paper end -@@ -1285,7 +1305,9 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1303,7 +1323,9 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { } if (list != null) { @@ -1818,7 +1823,7 @@ index fe94394239b97e534d1899afdfb6f68bbb96923e..b68422e5d02aa2aa799cb5458c1de355 } } -@@ -1409,8 +1431,17 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1427,8 +1449,17 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { return false; } @@ -1838,7 +1843,7 @@ index fe94394239b97e534d1899afdfb6f68bbb96923e..b68422e5d02aa2aa799cb5458c1de355 } } -@@ -1518,7 +1549,12 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1536,7 +1567,12 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { // CraftBukkit - decompile error csvwriter.a(chunkcoordintpair.x, chunkcoordintpair.z, playerchunk.getTicketLevel(), optional.isPresent(), optional.map(IChunkAccess::getChunkStatus).orElse(null), optional1.map(Chunk::getState).orElse(null), a(playerchunk.c()), a(playerchunk.a()), a(playerchunk.b()), this.chunkDistanceManager.c(entry.getLongKey()), !this.isOutsideOfRange(chunkcoordintpair), optional1.map((chunk) -> { @@ -1853,7 +1858,7 @@ index fe94394239b97e534d1899afdfb6f68bbb96923e..b68422e5d02aa2aa799cb5458c1de355 return chunk.getTileEntities().size(); }).orElse(0)); diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java -index affc380bd4092654d2674e9aa084dfb920718271..0d4d28f8a939fdce42efa777742b1d8fc38da67a 100644 +index e9229a42d1c5a60f7cd40aa2233a7c55d9700670..24d31d95cefffc26f8e4d4d2793340a580fbebb5 100644 --- a/src/main/java/net/minecraft/server/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/PlayerConnection.java @@ -603,7 +603,9 @@ public class PlayerConnection implements PacketListenerPlayIn { @@ -2347,7 +2352,7 @@ index 2f1be1995d1a188da5be792abd7ac6f126332f49..bae3f216d056cb64fde49e4ca592631e private boolean shouldUseVanillaMap() { return mapView.getRenderers().size() == 1 && mapView.getRenderers().get(0).getClass() == org.bukkit.craftbukkit.map.CraftMapRenderer.class; diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java -index a89426cb36b446c762b2f11143ed51356bddb633..de93970754beae386c551ce90d340169a93a5a75 100644 +index 1a6fa98a79910c74f121ca844424b3df0ab2e20a..cbfe1550c701c457628470cb9d46864763ccb5e9 100644 --- a/src/main/java/net/minecraft/server/WorldServer.java +++ b/src/main/java/net/minecraft/server/WorldServer.java @@ -22,15 +22,7 @@ import java.io.BufferedWriter; @@ -2439,7 +2444,7 @@ index a89426cb36b446c762b2f11143ed51356bddb633..de93970754beae386c551ce90d340169 } // Paper start - optimise random block ticking -@@ -1841,25 +1847,21 @@ public class WorldServer extends World { +@@ -1846,25 +1852,21 @@ public class WorldServer extends World { // Spigot start if ( entity instanceof EntityHuman ) { @@ -2473,7 +2478,7 @@ index a89426cb36b446c762b2f11143ed51356bddb633..de93970754beae386c551ce90d340169 } // Spigot end // Spigot Start -@@ -2351,12 +2353,12 @@ public class WorldServer extends World { +@@ -2356,12 +2358,12 @@ public class WorldServer extends World { chunkproviderserver.addTicket(TicketType.START, new ChunkCoordIntPair(spawn.add(-radiusInBlocks, 0, z)), 1, Unit.INSTANCE); // level 32 } @@ -2528,7 +2533,7 @@ index 7f952a860c524aafea7094048a102478d8c2beec..2d7a4c88f18cd655cbe15e25819ca43d File file = getCommandsConfigFile(); try { diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index 1ee5ce50bf2708b01c958558d416848547e4c9b1..bfef2f1c6510d83c73d33627fa4e8e9b984dc1cb 100644 +index 32d4aa0f470e6b005fd96f3bea1bcb0cf6711966..e8f9f677a706c5c8ff6cd6b946bbb4bc508b4162 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java @@ -456,12 +456,28 @@ public class CraftWorld implements World { @@ -2562,7 +2567,7 @@ index 1ee5ce50bf2708b01c958558d416848547e4c9b1..bfef2f1c6510d83c73d33627fa4e8e9b } @Override -@@ -2466,7 +2482,12 @@ public class CraftWorld implements World { +@@ -2465,7 +2481,12 @@ public class CraftWorld implements World { @Override public List getRaids() { PersistentRaid persistentRaid = world.getPersistentRaid(); @@ -2577,7 +2582,7 @@ index 1ee5ce50bf2708b01c958558d416848547e4c9b1..bfef2f1c6510d83c73d33627fa4e8e9b @Override diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java -index 197c2ffab0015decc89bf32679a7a9ba6ecea5bc..a5800b87fc9930c70bb02a06e746fc1979dcd52f 100644 +index 0ba3d963c5d434f58ff26d68f28177ca2a326fcc..74766fcf3770a7757b12826838a366807ffc72bd 100644 --- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java +++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java @@ -1,6 +1,8 @@ @@ -2592,7 +2597,7 @@ index 197c2ffab0015decc89bf32679a7a9ba6ecea5bc..a5800b87fc9930c70bb02a06e746fc19 @@ -661,8 +663,12 @@ public class CraftBlock implements Block { // Modelled off EntityHuman#hasBlock - if (iblockdata.getMaterial().isAlwaysDestroyable() || nms.canDestroySpecialBlock(iblockdata)) { + if (item == null || iblockdata.getMaterial().isAlwaysDestroyable() || nms.canDestroySpecialBlock(iblockdata)) { - return net.minecraft.server.Block.getDrops(iblockdata, (WorldServer) world.getMinecraftWorld(), position, world.getTileEntity(position), entity == null ? null : ((CraftEntity) entity).getHandle(), nms) - .stream().map(CraftItemStack::asBukkitCopy).collect(Collectors.toList()); + List list = new ArrayList<>(); @@ -2679,7 +2684,7 @@ index f34461460049a80c5ff57805927053a36a4db426..3c610a889f371f54b0f456266d14538f return results; diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java -index 19409c7a25c48f3f72f7e0b6306b81aa90b38f7c..703363bd3e2c8c52e07f7fde5e2673072e950362 100644 +index d24a892c498d7ee58741c9358748a117f01d8a8d..85a7406048a5d44b8e26d7949feacb7ec12c575c 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java @@ -3,6 +3,8 @@ package org.bukkit.craftbukkit.entity; @@ -2709,10 +2714,10 @@ index 19409c7a25c48f3f72f7e0b6306b81aa90b38f7c..703363bd3e2c8c52e07f7fde5e267307 @Override diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index ce8d7877adcc4635ebf2f5743c8b02aa95691102..d8ce0227de0d1795009963a677d6497f8d76535d 100644 +index a4cd6c404c2a8d526c4673695aadd001f2b4516f..10341846f022cce626e4b9446dbd488942fa0d01 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -@@ -1708,7 +1708,11 @@ public class CraftEventFactory { +@@ -1711,7 +1711,11 @@ public class CraftEventFactory { Entity entity = lootInfo.getContextParameter(LootContextParameters.THIS_ENTITY); NamespacedKey key = CraftNamespacedKey.fromMinecraft(world.getHandle().getMinecraftServer().getLootTableRegistry().lootTableToKey.get(lootTable)); CraftLootTable craftLootTable = new CraftLootTable(key, lootTable);