diff --git a/gradle.properties b/gradle.properties index 45b504e..d2109ee 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,7 @@ group = cc.keyimc.keyi version = 1.19.2-R0.1-SNAPSHOT -purpurCommit = 74b72a5f42f2e579c268b8c0411d0f78b9e38c4f +purpurCommit = 0d5fd505e5a82ea9e9d8afb35f72c5c3e03a4a9b org.gradle.caching = true org.gradle.parallel = true diff --git a/patches/server/0003-JettPack-patches.patch b/patches/server/0003-JettPack-patches.patch index df348f7..125ffca 100644 --- a/patches/server/0003-JettPack-patches.patch +++ b/patches/server/0003-JettPack-patches.patch @@ -45,7 +45,7 @@ index 0000000000000000000000000000000000000000..7bd88761137b2a68c04fbaa920a9ea9c +} \ No newline at end of file diff --git a/src/main/java/net/minecraft/Util.java b/src/main/java/net/minecraft/Util.java -index cdb7aea969b56f59d88f60bc3744e4932228c50a..b759f82b265542f42821e35ead56a5c073625d36 100644 +index 6b7943e8348b0a41ca69fb56ccfd5f1c1484eb07..b2860114d52c52360e1e559d0c2c5ee4789dee97 100644 --- a/src/main/java/net/minecraft/Util.java +++ b/src/main/java/net/minecraft/Util.java @@ -73,6 +73,12 @@ import net.minecraft.util.TimeSource; @@ -55,17 +55,18 @@ index cdb7aea969b56f59d88f60bc3744e4932228c50a..b759f82b265542f42821e35ead56a5c0 +// JettPack start +import java.util.concurrent.AbstractExecutorService; +import me.titaniumtown.ServerWorkerWrapper; -+import net.minecraft.server.MCUtil; ++import io.papermc.paper.util.MCUtil; +import java.util.Collections; +// JettPack end public class Util { static final Logger LOGGER = LogUtils.getLogger(); -@@ -165,7 +171,46 @@ public class Util { +@@ -165,7 +171,47 @@ public class Util { if (i <= 0) { executorService = MoreExecutors.newDirectExecutorService(); } else { -- executorService = new java.util.concurrent.ThreadPoolExecutor(i, i,0L, TimeUnit.MILLISECONDS, new java.util.concurrent.LinkedBlockingQueue(), target -> new net.minecraft.server.ServerWorkerThread(target, s, priorityModifier)); +- executorService = new java.util.concurrent.ThreadPoolExecutor(i, i,0L, TimeUnit.MILLISECONDS, new java.util.concurrent.LinkedBlockingQueue(), target -> new io.papermc.paper.util.ServerWorkerThread(target, s, priorityModifier)); ++ + //executorService = new java.util.concurrent.ThreadPoolExecutor(i, i,0L, TimeUnit.MILLISECONDS, new java.util.concurrent.LinkedBlockingQueue(), target -> new net.minecraft.server.ServerWorkerThread(target, s, priorityModifier)); // JettPack + // JettPack start + executorService = Integer.getInteger("Paper.WorkerThreadCount", i) <= 0 ? MoreExecutors.newDirectExecutorService() : new AbstractExecutorService(){ diff --git a/patches/server/0004-Lithium-optimizations.patch b/patches/server/0004-Lithium-optimizations.patch index 8d6ff4e..893715e 100644 --- a/patches/server/0004-Lithium-optimizations.patch +++ b/patches/server/0004-Lithium-optimizations.patch @@ -1083,7 +1083,7 @@ index 6c27b22dd1d497687c0f4d3835e34149bcf952c1..445f21c3764d148de937f558e3f087ae public static Direction getNearest(double x, double y, double z) { diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index d418144bc7471b2c00ad272652b035d79974ef75..7672e7b8f162dfc173f2c6b94a0e339751969a0c 100644 +index c888e654ab9449bfdc7dfe16078eb0786ae6c15e..00fe84ae4fee41b365223f836c82e1688fe322ee 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -229,6 +229,13 @@ public class ServerLevel extends Level implements WorldGenLevel { @@ -1378,10 +1378,10 @@ index 5d8e9bdf5538b19681f21949368d862fab8a89ad..2224245a985dfe78565dfdb42840d3ed + @Override public void compact(Palette srcPalette, Palette dstPalette, short[] out) {} // JettPack } diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index bef8f4d080fb6067f87b9df986ac33f7003c2a84..a727875f6db8d9950d1d9ada67dd39480f3b0da9 100644 +index 967647c7dc0a4c2d762e7133fe969106f7d8ecba..dbaece0cbf521aada6bda2a2266edf0e97f3055f 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -2578,39 +2578,64 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -2589,39 +2589,64 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { return !this.isRemoved(); } @@ -1468,10 +1468,10 @@ index bef8f4d080fb6067f87b9df986ac33f7003c2a84..a727875f6db8d9950d1d9ada67dd3948 public InteractionResult interact(Player player, InteractionHand hand) { return InteractionResult.PASS; diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 1fc877194950ee754e9ffdbe3ff9b80bb316560f..ba673b7e5ae1084caa6b23763c9a83aac60269bb 100644 +index 1ec9a48f2f44f5bd647e0661423ae90970aee262..219c7dcbe6bee5054aff0640a80d620eded812c0 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -577,11 +577,11 @@ public abstract class LivingEntity extends Entity { +@@ -576,11 +576,11 @@ public abstract class LivingEntity extends Entity { } protected void tryAddFrost() { @@ -1485,7 +1485,7 @@ index 1fc877194950ee754e9ffdbe3ff9b80bb316560f..ba673b7e5ae1084caa6b23763c9a83aa if (attributemodifiable == null) { return; -@@ -591,7 +591,7 @@ public abstract class LivingEntity extends Entity { +@@ -590,7 +590,7 @@ public abstract class LivingEntity extends Entity { attributemodifiable.addTransientModifier(new AttributeModifier(LivingEntity.SPEED_MODIFIER_POWDER_SNOW_UUID, "Powder snow slow", (double) f, AttributeModifier.Operation.ADDITION)); } @@ -1494,7 +1494,7 @@ index 1fc877194950ee754e9ffdbe3ff9b80bb316560f..ba673b7e5ae1084caa6b23763c9a83aa } -@@ -2550,6 +2550,8 @@ public abstract class LivingEntity extends Entity { +@@ -2549,6 +2549,8 @@ public abstract class LivingEntity extends Entity { } protected void updateSwingTime() { @@ -1503,7 +1503,7 @@ index 1fc877194950ee754e9ffdbe3ff9b80bb316560f..ba673b7e5ae1084caa6b23763c9a83aa int i = this.getCurrentSwingDuration(); if (this.swinging) { -@@ -3529,6 +3531,8 @@ public abstract class LivingEntity extends Entity { +@@ -3528,6 +3530,8 @@ public abstract class LivingEntity extends Entity { } private void updateFallFlying() { @@ -1662,7 +1662,7 @@ index 17e869074b8cf29a8c3280499a27e95179896750..97a5aec7da267b8b9f6d191c871316cc // Pufferfish start int arraySize = rules.keySet().stream().mapToInt(key -> key.gameRuleIndex).max().orElse(-1) + 1; diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index cf8693d02de53f1e02d55936f889c5724889e3f5..9f0126aedb94f74d01dc47112496160cc4e1f02c 100644 +index 0bb14272d024af90e7aef40f2f694e184af607d3..aa27ab72d30f917ea41045db16b6f59f1442ea77 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -117,9 +117,9 @@ public abstract class Level implements LevelAccessor, AutoCloseable { @@ -2276,7 +2276,7 @@ index 2182afd1b95acf14c55bddfeec17dae0a63e1f00..461ac9a464c4a66e302798032c6019bb this.shape = voxels; } diff --git a/src/main/java/net/minecraft/world/ticks/LevelChunkTicks.java b/src/main/java/net/minecraft/world/ticks/LevelChunkTicks.java -index 9f6c2e5b5d9e8d714a47c770e255d06c0ef7c190..826ced345c97bd2eb04749f42744a086fafc4ce8 100644 +index ac807277a6b26d140ea9873d17c7aa4fb5fe37b2..b46e4be9202eb6002f1e95f12bb875de004e0582 100644 --- a/src/main/java/net/minecraft/world/ticks/LevelChunkTicks.java +++ b/src/main/java/net/minecraft/world/ticks/LevelChunkTicks.java @@ -16,14 +16,37 @@ import javax.annotation.Nullable; @@ -2317,9 +2317,9 @@ index 9f6c2e5b5d9e8d714a47c770e255d06c0ef7c190..826ced345c97bd2eb04749f42744a086 + private final IntOpenHashSet allpendingTicks = new IntOpenHashSet(); + // Mirai end - public LevelChunkTicks() { - } -@@ -35,34 +58,133 @@ public class LevelChunkTicks implements SerializableTickContainer, TickCon + // Paper start - add dirty flag + private boolean dirty; +@@ -48,36 +71,135 @@ public class LevelChunkTicks implements SerializableTickContainer, TickCon this.ticksPerPosition.add(ScheduledTick.probe(savedTick.type(), savedTick.pos())); } @@ -2394,12 +2394,13 @@ index 9f6c2e5b5d9e8d714a47c770e255d06c0ef7c190..826ced345c97bd2eb04749f42744a086 public ScheduledTick poll() { - ScheduledTick scheduledTick = this.tickQueue.poll(); - if (scheduledTick != null) { -- this.ticksPerPosition.remove(scheduledTick); + ScheduledTick orderedTick = this.nextTickQueue.poll(); + if (orderedTick != null) { + if (this.nextTickQueue.isEmpty()) { + this.updateNextTickQueue(true); + } + this.dirty = true; // Paper - add dirty flag +- this.ticksPerPosition.remove(scheduledTick); + this.allpendingTicks.remove(tickToInt(orderedTick.pos(), orderedTick.type())); + return orderedTick; } @@ -2415,9 +2416,10 @@ index 9f6c2e5b5d9e8d714a47c770e255d06c0ef7c190..826ced345c97bd2eb04749f42744a086 @Override public void schedule(ScheduledTick orderedTick) { - if (this.ticksPerPosition.add(orderedTick)) { -- this.scheduleUnchecked(orderedTick); + int intTick = tickToInt(orderedTick.pos(), orderedTick.type()); + if (this.allpendingTicks.add(intTick)) { + this.dirty = true; // Paper - add dirty flag +- this.scheduleUnchecked(orderedTick); + this.queueTick(orderedTick); + } + } @@ -2461,7 +2463,7 @@ index 9f6c2e5b5d9e8d714a47c770e255d06c0ef7c190..826ced345c97bd2eb04749f42744a086 private void scheduleUnchecked(ScheduledTick orderedTick) { this.tickQueue.add(orderedTick); -@@ -72,60 +194,93 @@ public class LevelChunkTicks implements SerializableTickContainer, TickCon +@@ -87,50 +209,84 @@ public class LevelChunkTicks implements SerializableTickContainer, TickCon } @@ -2486,7 +2488,7 @@ index 9f6c2e5b5d9e8d714a47c770e255d06c0ef7c190..826ced345c97bd2eb04749f42744a086 - while(iterator.hasNext()) { - ScheduledTick scheduledTick = iterator.next(); - if (predicate.test(scheduledTick)) { -- iterator.remove(); +- iterator.remove(); this.dirty = true; // Paper - add dirty flag - this.ticksPerPosition.remove(scheduledTick); + for (ObjectIterator> tickQueueIterator = this.tickQueuesByTimeAndPriority.values().iterator(); tickQueueIterator.hasNext(); ) { + OrderedTickQueue nextTickQueue = tickQueueIterator.next(); @@ -2497,7 +2499,7 @@ index 9f6c2e5b5d9e8d714a47c770e255d06c0ef7c190..826ced345c97bd2eb04749f42744a086 + if (predicate.test(nextTick)) { + nextTickQueue.setTickAtIndex(i, null); + this.allpendingTicks.remove(tickToInt(nextTick.pos(), nextTick.type())); -+ removed = true; ++ removed = true; this.dirty = true; // Paper - add dirty flag + } + } + if (removed) { @@ -2535,6 +2537,7 @@ index 9f6c2e5b5d9e8d714a47c770e255d06c0ef7c190..826ced345c97bd2eb04749f42744a086 + */ @Override public ListTag save(long l, Function function) { + this.lastSaved = l; // Paper - add dirty system to level ticks - ListTag listTag = new ListTag(); + ListTag nbtList = new ListTag(); if (this.pendingTicks != null) { @@ -2563,6 +2566,10 @@ index 9f6c2e5b5d9e8d714a47c770e255d06c0ef7c190..826ced345c97bd2eb04749f42744a086 + */ public void unpack(long time) { if (this.pendingTicks != null) { + // Paper start - add dirty system to level chunk ticks +@@ -139,14 +295,13 @@ public class LevelChunkTicks implements SerializableTickContainer, TickCon + } + // Paper end - add dirty system to level chunk ticks int i = -this.pendingTicks.size(); - - for(SavedTick savedTick : this.pendingTicks) { diff --git a/patches/server/0005-CarpetFixes-optimizations.patch b/patches/server/0005-CarpetFixes-optimizations.patch index 50f2610..1459a09 100644 --- a/patches/server/0005-CarpetFixes-optimizations.patch +++ b/patches/server/0005-CarpetFixes-optimizations.patch @@ -107,7 +107,7 @@ index c3e54da4ab6440811aab2f9dd1e218802ac13285..db1319c51a5410ee106d023fce759f1e } } diff --git a/src/main/java/io/papermc/paper/chunk/PlayerChunkLoader.java b/src/main/java/io/papermc/paper/chunk/PlayerChunkLoader.java -index dd501e83d991e45598509134fab05bafc1904953..5ecdbeb90e9715fc89ff25e9b3c33a2e8d98ff93 100644 +index 0b060183429f4c72ec767075538477b4302bbf0d..75e7d181a8dff7247c6db8448cbf5f22772eab4b 100644 --- a/src/main/java/io/papermc/paper/chunk/PlayerChunkLoader.java +++ b/src/main/java/io/papermc/paper/chunk/PlayerChunkLoader.java @@ -387,11 +387,11 @@ public final class PlayerChunkLoader { @@ -125,7 +125,7 @@ index dd501e83d991e45598509134fab05bafc1904953..5ecdbeb90e9715fc89ff25e9b3c33a2e public void onChunkPlayerTickReady(final int chunkX, final int chunkZ) { diff --git a/src/main/java/io/papermc/paper/command/subcommands/FixLightCommand.java b/src/main/java/io/papermc/paper/command/subcommands/FixLightCommand.java -index 450bd95218852174cfbc88d4517e17daee5ffd5f..317e952655db5a4dcb2e6ec6573510f75bba9255 100644 +index 7784d72ddd6db00c674e22759c00c430222c4b85..0f180d11774f6dec2667b3a3f6a63d1127bac869 100644 --- a/src/main/java/io/papermc/paper/command/subcommands/FixLightCommand.java +++ b/src/main/java/io/papermc/paper/command/subcommands/FixLightCommand.java @@ -95,12 +95,12 @@ public final class FixLightCommand implements PaperSubcommand { @@ -157,7 +157,7 @@ index e3e80db89c18588322ffdaa0f9fd85e398cb1471..d947011b80ee14e7aaf74af3d9081fc7 throw ERROR_INVALID_TICK_COUNT.create(j); } else { diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 13c9cddf7ac0af16676050e3bcdf22b7475a0387..a444c8c57a2ab16eba45b0379841a69ff60a5586 100644 +index 735e01c550d561aa21c3c8f7f34a495ec3a0ab67..795c631bb5edc696a4e52703b1819fcddfb800e2 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -2786,7 +2786,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0.0F && f2 < 3.4028235E37F) { @@ -208,7 +208,7 @@ index ba673b7e5ae1084caa6b23763c9a83aac60269bb..b163ad5fb6fea59982e26fdbd4dd5b5d } } -@@ -2098,9 +2098,9 @@ public abstract class LivingEntity extends Entity { +@@ -2097,9 +2097,9 @@ public abstract class LivingEntity extends Entity { if (f3 > 0.0F && f3 < 3.4028235E37F) { if (this instanceof ServerPlayer) { @@ -220,7 +220,7 @@ index ba673b7e5ae1084caa6b23763c9a83aac60269bb..b163ad5fb6fea59982e26fdbd4dd5b5d } } } -@@ -2212,9 +2212,9 @@ public abstract class LivingEntity extends Entity { +@@ -2211,9 +2211,9 @@ public abstract class LivingEntity extends Entity { float f3 = (float) -event.getDamage(DamageModifier.RESISTANCE); if (f3 > 0.0F && f3 < 3.4028235E37F) { if (this instanceof ServerPlayer) { @@ -232,7 +232,7 @@ index ba673b7e5ae1084caa6b23763c9a83aac60269bb..b163ad5fb6fea59982e26fdbd4dd5b5d } } } -@@ -2246,10 +2246,10 @@ public abstract class LivingEntity extends Entity { +@@ -2245,10 +2245,10 @@ public abstract class LivingEntity extends Entity { float f2 = absorptionModifier; if (f2 > 0.0F && f2 < 3.4028235E37F && this instanceof net.minecraft.world.entity.player.Player) { @@ -245,7 +245,7 @@ index ba673b7e5ae1084caa6b23763c9a83aac60269bb..b163ad5fb6fea59982e26fdbd4dd5b5d } // Purpur start -@@ -2271,7 +2271,7 @@ public abstract class LivingEntity extends Entity { +@@ -2270,7 +2270,7 @@ public abstract class LivingEntity extends Entity { // PAIL: Be sure to drag all this code from the EntityHuman subclass each update. ((net.minecraft.world.entity.player.Player) this).causeFoodExhaustion(damagesource.getFoodExhaustion(), org.bukkit.event.entity.EntityExhaustionEvent.ExhaustionReason.DAMAGED); // CraftBukkit - EntityExhaustionEvent if (f < 3.4028235E37F) { @@ -254,7 +254,7 @@ index ba673b7e5ae1084caa6b23763c9a83aac60269bb..b163ad5fb6fea59982e26fdbd4dd5b5d } } // CraftBukkit end -@@ -2293,7 +2293,7 @@ public abstract class LivingEntity extends Entity { +@@ -2292,7 +2292,7 @@ public abstract class LivingEntity extends Entity { CriteriaTriggers.ENTITY_HURT_PLAYER.trigger((ServerPlayer) this, damagesource, f, originalDamage, true); f2 = (float) -event.getDamage(DamageModifier.BLOCKING); if (f2 > 0.0F && f2 < 3.4028235E37F) { @@ -263,7 +263,7 @@ index ba673b7e5ae1084caa6b23763c9a83aac60269bb..b163ad5fb6fea59982e26fdbd4dd5b5d } } -@@ -3098,13 +3098,13 @@ public abstract class LivingEntity extends Entity { +@@ -3097,13 +3097,13 @@ public abstract class LivingEntity extends Entity { //this.level.getProfiler().push("rangeChecks"); // Purpur // Paper start - stop large pitch and yaw changes from crashing the server @@ -492,7 +492,7 @@ index 16504b8be08064e61b013fa943f692816612cbd0..38f6759501dcc2a0adb9608a9f639c24 i = Mth.clamp(i, (int) 0, (int) 15); diff --git a/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java b/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java -index 52264a583e79cc6adb9967aebac7f6b3ac129017..f642b7c58b8e9189d9734bf6a699848f9610b66d 100644 +index 9579889e4c7dedefc4f901ccac6157c425740481..7904e80ff9476221ffac153494c1ecbd9b9cd9d9 100644 --- a/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java +++ b/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java @@ -254,8 +254,8 @@ public abstract class ChunkGenerator { diff --git a/patches/server/0006-Suki-Patches.patch b/patches/server/0006-Suki-Patches.patch index 542d51d..e040a73 100644 --- a/patches/server/0006-Suki-Patches.patch +++ b/patches/server/0006-Suki-Patches.patch @@ -227,8 +227,23 @@ index e731de3ac158c5a4cff236c6f5001674cd488a77..06a6cecfa01c676285ea894c3ed77d0e + } + // Suki end - Suki configuration } +diff --git a/src/main/java/io/papermc/paper/util/MCUtil.java b/src/main/java/io/papermc/paper/util/MCUtil.java +index c8f7aa9e0794713724e1053581c220aa95f1bc90..f24193a13563bbfbe0f0677ec8f645b122937996 100644 +--- a/src/main/java/io/papermc/paper/util/MCUtil.java ++++ b/src/main/java/io/papermc/paper/util/MCUtil.java +@@ -56,8 +56,8 @@ import java.util.function.Supplier; + + public final class MCUtil { + public static final ThreadPoolExecutor asyncExecutor = new ThreadPoolExecutor( +- 0, 2, 60L, TimeUnit.SECONDS, +- new LinkedBlockingQueue<>(), ++ Integer.getInteger("suki.threads.asyncexecutor", 4), Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, // JettPack // Suki - multithreading environment variables ++ new LinkedBlockingQueue<>(), + new ThreadFactoryBuilder() + .setNameFormat("Paper Async Task Handler Thread - %1$d") + .setUncaughtExceptionHandler(new net.minecraft.DefaultUncaughtExceptionHandlerWithName(MinecraftServer.LOGGER)) diff --git a/src/main/java/net/minecraft/Util.java b/src/main/java/net/minecraft/Util.java -index b759f82b265542f42821e35ead56a5c073625d36..f93cbf0812801bb503db26e623d988e4eeb8b126 100644 +index b2860114d52c52360e1e559d0c2c5ee4789dee97..8c09bdc0bd0af7ab9c5b3cad4067e1e0067c5502 100644 --- a/src/main/java/net/minecraft/Util.java +++ b/src/main/java/net/minecraft/Util.java @@ -27,7 +27,6 @@ import java.net.URL; @@ -268,8 +283,8 @@ index b759f82b265542f42821e35ead56a5c073625d36..f93cbf0812801bb503db26e623d988e4 ExecutorService executorService; if (i <= 0) { -@@ -173,7 +183,7 @@ public class Util { - } else { +@@ -174,7 +184,7 @@ public class Util { + //executorService = new java.util.concurrent.ThreadPoolExecutor(i, i,0L, TimeUnit.MILLISECONDS, new java.util.concurrent.LinkedBlockingQueue(), target -> new net.minecraft.server.ServerWorkerThread(target, s, priorityModifier)); // JettPack // JettPack start - executorService = Integer.getInteger("Paper.WorkerThreadCount", i) <= 0 ? MoreExecutors.newDirectExecutorService() : new AbstractExecutorService(){ @@ -278,7 +293,7 @@ index b759f82b265542f42821e35ead56a5c073625d36..f93cbf0812801bb503db26e623d988e4 @Override diff --git a/src/main/java/net/minecraft/network/Connection.java b/src/main/java/net/minecraft/network/Connection.java -index 40fd77b18425f093ddc69d21856f4e9548f8f9ca..3ed75fe9f712c0e777b0ec9152705390a17f2bd0 100644 +index 141ea294d12411d58771ea1ad58383e84b6ba048..20763daf8921f78f8c017d3dbcafbd2c8527abcf 100644 --- a/src/main/java/net/minecraft/network/Connection.java +++ b/src/main/java/net/minecraft/network/Connection.java @@ -355,7 +355,11 @@ public class Connection extends SimpleChannelInboundHandler> { @@ -311,21 +326,6 @@ index 40fd77b18425f093ddc69d21856f4e9548f8f9ca..3ed75fe9f712c0e777b0ec9152705390 // Paper end - add flush parameter ConnectionProtocol enumprotocol = ConnectionProtocol.getProtocolForPacket(packet); ConnectionProtocol enumprotocol1 = this.getCurrentProtocol(); -diff --git a/src/main/java/net/minecraft/server/MCUtil.java b/src/main/java/net/minecraft/server/MCUtil.java -index 0d995a13114e718016518f41d7fcff3042674847..bd7c4f5056470dead6aece51777ebc0e5bbdd06b 100644 ---- a/src/main/java/net/minecraft/server/MCUtil.java -+++ b/src/main/java/net/minecraft/server/MCUtil.java -@@ -55,8 +55,8 @@ import java.util.function.Supplier; - - public final class MCUtil { - public static final ThreadPoolExecutor asyncExecutor = new ThreadPoolExecutor( -- 0, 2, 60L, TimeUnit.SECONDS, -- new LinkedBlockingQueue<>(), -+ Integer.getInteger("suki.threads.asyncexecutor", 4), Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, // JettPack // Suki - multithreading environment variables -+ new LinkedBlockingQueue<>(), - new ThreadFactoryBuilder() - .setNameFormat("Paper Async Task Handler Thread - %1$d") - .setUncaughtExceptionHandler(new net.minecraft.DefaultUncaughtExceptionHandlerWithName(MinecraftServer.LOGGER)) diff --git a/src/main/java/net/minecraft/server/Main.java b/src/main/java/net/minecraft/server/Main.java index 88ef769abfa163f923258d1f83d47b28c491eaca..9ae43d359deee3172f8f059adc94dffee1ec303f 100644 --- a/src/main/java/net/minecraft/server/Main.java @@ -340,7 +340,7 @@ index 88ef769abfa163f923258d1f83d47b28c491eaca..9ae43d359deee3172f8f059adc94dffe worldUpgrader.convert(); } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index a444c8c57a2ab16eba45b0379841a69ff60a5586..ede16b015b9dde07a7346e0bffde53082145798b 100644 +index 795c631bb5edc696a4e52703b1819fcddfb800e2..a85170f6ff613b002d9471f18385d6fea7172e43 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -294,6 +294,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop> CURRENT_TICKET_UPDATE_SCHEDULING = new ThreadLocal<>(); diff --git a/src/main/java/io/papermc/paper/chunk/system/scheduling/NewChunkHolder.java b/src/main/java/io/papermc/paper/chunk/system/scheduling/NewChunkHolder.java -index cfc355829df3e5b51c2ff524bb3730360fee15a2..4ce6df7082d4f7ed3651e3d57e379f95dd05715e 100644 +index e42eb93fd9f6f51ff5bb4b14a2304d4ffcdd8441..8013dd333e27aa5fd0beb431fa32491eec9f5246 100644 --- a/src/main/java/io/papermc/paper/chunk/system/scheduling/NewChunkHolder.java +++ b/src/main/java/io/papermc/paper/chunk/system/scheduling/NewChunkHolder.java -@@ -1748,7 +1748,7 @@ public final class NewChunkHolder { +@@ -1750,7 +1750,7 @@ public final class NewChunkHolder { boolean canSavePOI = !(chunk instanceof LevelChunk levelChunk && levelChunk.mustNotSave) && (poi != null && poi.isDirty()); boolean canSaveEntities = entities != null; @@ -34,14 +34,14 @@ index cfc355829df3e5b51c2ff524bb3730360fee15a2..4ce6df7082d4f7ed3651e3d57e379f95 if (canSaveChunk) { canSaveChunk = this.saveChunk(chunk, unloading); } -@@ -1762,7 +1762,7 @@ public final class NewChunkHolder { +@@ -1764,7 +1764,7 @@ public final class NewChunkHolder { this.lastEntityUnload = null; } } - //} // Purpur + } - return executedUnloadTask | canSaveChunk | canSaveEntities | canSavePOI; + return executedUnloadTask | canSaveChunk | canSaveEntities | canSavePOI ? new SaveStat(executedUnloadTask || canSaveChunk, canSaveEntities, canSavePOI): null; } diff --git a/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java b/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java index 04ca6d27a13706fbddc708df0fcca42b4098bcba..d03551e81e3ef37935cb1d963aba3df316f48ef5 100644 @@ -89,7 +89,7 @@ index e8efbbeece7e866c6c4d7489677d2d9e15fea4d0..8bc0cb9ad5bb4e76d962ff54305e2c08 PacketUtils.LOGGER.debug("Ignoring packet due to disconnection: {}", packet); } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index ede16b015b9dde07a7346e0bffde53082145798b..705fe5e4a8b25fb061263ac60e491aeff83bd930 100644 +index a85170f6ff613b002d9471f18385d6fea7172e43..96748e184d953cb5838c1a90eb040acb90a4603f 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -331,13 +331,13 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { // Paper - Ensure main + io.papermc.paper.util.MCUtil.ensureMain("Save Players" , () -> { // Paper - Ensure main - //MinecraftTimings.savePlayers.startTiming(); // Paper // Purpur + MinecraftTimings.savePlayers.startTiming(); // Paper int numSaved = 0; @@ -1222,7 +1222,7 @@ index 7094701d213c73ba47ace806962244c10fdf4dda..fcdb9bde8e1605e30dde3e580491522d } diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index dc3f2b26e19619adf80827d26b95209ded973c2a..9b082716ebfe84e9a2dd5265b2ede86f42008cc2 100644 +index d882d52ff7aa2c3a33438ecb078c810160ef47d1..440b738b94112d4bdf5f113d567bb8020844cbe0 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -117,9 +117,9 @@ public abstract class Level implements LevelAccessor, AutoCloseable { @@ -1314,7 +1314,7 @@ index dc3f2b26e19619adf80827d26b95209ded973c2a..9b082716ebfe84e9a2dd5265b2ede86f } diff --git a/src/main/java/net/minecraft/world/level/NaturalSpawner.java b/src/main/java/net/minecraft/world/level/NaturalSpawner.java -index bca69d595ef0f18a5910cbd6f7e6f742830a0800..386ed2c102aaa3ec68e828e20fff6bfe0d8f7877 100644 +index 6b8356e592bfca69cf785457284c99e47e360bd6..eceae1230e672d95491405f3f7c550c90ea9b138 100644 --- a/src/main/java/net/minecraft/world/level/NaturalSpawner.java +++ b/src/main/java/net/minecraft/world/level/NaturalSpawner.java @@ -131,8 +131,8 @@ public final class NaturalSpawner { @@ -1349,7 +1349,7 @@ index bca69d595ef0f18a5910cbd6f7e6f742830a0800..386ed2c102aaa3ec68e828e20fff6bfe if (entityhuman != null) { double d2 = entityhuman.distanceToSqr(d0, (double) i, d1); 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 d3d2b554f0313b73442f25cc2bd6ab21fa34e2bf..b89dad36bf09fdab340efc83d09992b707cd321a 100644 +index ebb4f75580ae8e2a673313ea11139f987624454f..d9638971ac4d8dfaf4351cebb5ff6ea16327091e 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java @@ -53,10 +53,6 @@ import net.minecraft.world.level.material.Fluids; @@ -1384,7 +1384,7 @@ index d3d2b554f0313b73442f25cc2bd6ab21fa34e2bf..b89dad36bf09fdab340efc83d09992b7 } } } -@@ -1296,10 +1292,10 @@ public class LevelChunk extends ChunkAccess { +@@ -1313,10 +1309,10 @@ public class LevelChunk extends ChunkAccess { if (LevelChunk.this.isTicking(blockposition)) { try { @@ -1398,7 +1398,7 @@ index d3d2b554f0313b73442f25cc2bd6ab21fa34e2bf..b89dad36bf09fdab340efc83d09992b7 BlockState iblockdata = LevelChunk.this.getBlockState(blockposition); if (this.blockEntity.getType().isValid(iblockdata)) { -@@ -1310,7 +1306,7 @@ public class LevelChunk extends ChunkAccess { +@@ -1327,7 +1323,7 @@ public class LevelChunk extends ChunkAccess { LevelChunk.LOGGER.warn("Block entity {} @ {} state {} invalid for ticking:", new Object[]{LogUtils.defer(this::getType), LogUtils.defer(this::getPos), iblockdata}); } @@ -1407,7 +1407,7 @@ index d3d2b554f0313b73442f25cc2bd6ab21fa34e2bf..b89dad36bf09fdab340efc83d09992b7 } catch (Throwable throwable) { if (throwable instanceof ThreadDeath) throw throwable; // Paper // Paper start - Prevent tile entity and entity crashes -@@ -1321,7 +1317,7 @@ public class LevelChunk extends ChunkAccess { +@@ -1338,7 +1334,7 @@ public class LevelChunk extends ChunkAccess { // Paper end // Spigot start } finally { diff --git a/patches/server/0030-Reduce-sensor-work.patch b/patches/server/0030-Reduce-sensor-work.patch index 7f3e46b..036f9f6 100644 --- a/patches/server/0030-Reduce-sensor-work.patch +++ b/patches/server/0030-Reduce-sensor-work.patch @@ -10,10 +10,10 @@ this patch is focused around the sensors used for ai delete the line of sight cache less often and use a faster nearby comparison diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index b163ad5fb6fea59982e26fdbd4dd5b5dcb4350a5..4f3cce05807715b978792ffa28f2d63315818f54 100644 +index 87655d7c3dfbbd6bf348d693445c71d5601ed9c3..149d3db91b546a8428271e22d91036f8b8f9f639 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -1012,20 +1012,22 @@ public abstract class LivingEntity extends Entity { +@@ -1011,20 +1011,22 @@ public abstract class LivingEntity extends Entity { } if (entity != null) {