Updated Upstream (Paper)

Upstream has released updates that appear to apply and compile correctly

Paper Changes:
PaperMC/Paper@484d6bf [ci skip] Move some disruptive patches back
PaperMC/Paper@52619e7 [ci skip] Add more patch identifying comments
PaperMC/Paper@e660379 [ci skip] Move some disruptive patches back
PaperMC/Paper@c57d1aa Move diffs around to compile without later ones applied
PaperMC/Paper@581b101 Add world to Entity AddTo/RemoveFrom Events (#10183)
PaperMC/Paper@24dc2bf Add BlockStateMeta#clearBlockState (#10160)
PaperMC/Paper@76da4bc Expose LootTable of DecoratedPot (#10023)
PaperMC/Paper@11645e3 [ci skip] (Mostly) finish adding identifying patch comments
PaperMC/Paper@51bef80 [ci skip] Remove removed patches
PaperMC/Paper@ad2cf68 [ci skip] Move chunk system patch back a bit
PaperMC/Paper@d405ff1 [ci skip] Fixup last commit
PaperMC/Paper@a4a08b7 [ci skip] Move chunk system patch a bit back
PaperMC/Paper@b700460 Convert average tick value in the GUI to the correct granularity
PaperMC/Paper@1831240 [ci skip] Move chunk system patch back
This commit is contained in:
granny
2024-01-25 01:07:43 -08:00
parent 11391a2b82
commit 8ac38d927f
63 changed files with 422 additions and 432 deletions

View File

@@ -86,10 +86,10 @@ index 376e8983fdfdbb6c3e5fd8ad0f6a05e655b622bf..658e9b4590a82d179907feea04e129fd
+ classpath(sourceSets.main.map { it.runtimeClasspath })
}
diff --git a/src/main/java/co/aikar/timings/TimingsExport.java b/src/main/java/co/aikar/timings/TimingsExport.java
index a2f71a6d1a9e98133dff6cd0f625da9435a8af14..ff940e43ca35094bbcae6c7d471d3c4aeb7c1727 100644
index 7620c72a4c243cbeea245203ce03a97cbfa7d922..b35a9f4c5f8960864c402ede8a51fb5ab9c4fcc0 100644
--- a/src/main/java/co/aikar/timings/TimingsExport.java
+++ b/src/main/java/co/aikar/timings/TimingsExport.java
@@ -242,7 +242,8 @@ public class TimingsExport extends Thread {
@@ -240,7 +240,8 @@ public class TimingsExport extends Thread {
parent.put("config", createObject(
pair("spigot", mapAsJSON(Bukkit.spigot().getSpigotConfig(), null)),
pair("bukkit", mapAsJSON(Bukkit.spigot().getBukkitConfig(), null)),
@@ -1497,19 +1497,19 @@ index ba12919c3f9aec34a9e64993b143ae92be5eb172..9efeab9078e2d08903e482718b840797
} else {
this.lastTimeStamp = body.timeStamp();
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index 49ab2773658a2c6fababa316707762a8e2b19c58..9e632e6d865a802119aa70a2f393d3cab46e9aae 100644
index 23d2264dfc4f763a7198eb543e7f86a5a5aa85c3..c51485db18db179be33b4416debbc30c93bdf5c2 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -314,6 +314,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
// Paper start - lag compensation
public static final long SERVER_INIT = System.nanoTime();
// Paper end - lag compensation
+
+ public gg.pufferfish.pufferfish.util.AsyncExecutor mobSpawnExecutor = new gg.pufferfish.pufferfish.util.AsyncExecutor("MobSpawning"); // Pufferfish - optimize mob spawning
@@ -312,6 +312,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
public volatile boolean abnormalExit = false; // Paper
public static final long SERVER_INIT = System.nanoTime(); // Paper - Lag compensation
+ public gg.pufferfish.pufferfish.util.AsyncExecutor mobSpawnExecutor = new gg.pufferfish.pufferfish.util.AsyncExecutor("MobSpawning"); // Pufferfish - optimize mob spawning
+
public static <S extends MinecraftServer> S spin(Function<Thread, S> serverFactory) {
AtomicReference<S> atomicreference = new AtomicReference();
@@ -1217,6 +1219,12 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
Thread thread = new io.papermc.paper.util.TickThread(() -> { // Paper - rewrite chunk system
@@ -1214,6 +1216,12 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
this.profiler.popPush("nextTickWait");
this.mayHaveDelayedTasks = true;
this.delayedTasksMaxNextTickTimeNanos = Math.max(Util.getNanos() + i, this.nextTickTimeNanos);
@@ -1522,16 +1522,16 @@ index 49ab2773658a2c6fababa316707762a8e2b19c58..9e632e6d865a802119aa70a2f393d3ca
this.waitUntilNextTick();
if (flag) {
this.tickRateManager.endTickWork();
@@ -1852,7 +1860,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -1850,7 +1858,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@DontObfuscate
public String getServerModName() {
- return "Paper"; // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla!
+ return "Pufferfish"; // Pufferfish - Pufferfish > // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla!
- return "Paper"; // Paper
+ return "Pufferfish"; // Pufferfish - Pufferfish > // Paper
}
public SystemReport fillSystemReport(SystemReport details) {
@@ -2439,6 +2447,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -2437,6 +2445,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
}
public ProfilerFiller getProfiler() {
@@ -1561,7 +1561,7 @@ index 6de6dad36203479677a29ad61e21bc369d4e5513..c5f92c80d7ca1e1c7f5b9304a5a1173e
}
}
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
index 424de333bf4fc5632410c689d9b17b2eab3371c4..b72969b3bc4319387e3946ea01c5b05acd8a87cb 100644
index 5a7278b093e37b95fb005ad5cc3cac90ac36f8fb..28d05b46952397bb664a1c8dae71816cafee89ce 100644
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
@@ -243,7 +243,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
@@ -1573,7 +1573,7 @@ index 424de333bf4fc5632410c689d9b17b2eab3371c4..b72969b3bc4319387e3946ea01c5b05a
// Paper end - optimise chunk tick iteration
public ChunkMap(ServerLevel world, LevelStorageSource.LevelStorageAccess session, DataFixer dataFixer, StructureTemplateManager structureTemplateManager, Executor executor, BlockableEventLoop<Runnable> mainThreadExecutor, LightChunkGetter chunkProvider, ChunkGenerator chunkGenerator, ChunkProgressListener worldGenerationProgressListener, ChunkStatusUpdateListener chunkStatusChangeListener, Supplier<DimensionDataStorage> persistentStateManagerFactory, int viewDistance, boolean dsync) {
@@ -1458,8 +1458,28 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
@@ -1448,8 +1448,28 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
return ChunkMap.this.level.getServer().getScaledTrackingDistance(initialDistance);
}
@@ -1602,7 +1602,7 @@ index 424de333bf4fc5632410c689d9b17b2eab3371c4..b72969b3bc4319387e3946ea01c5b05a
Iterator iterator = this.entity.getIndirectPassengers().iterator();
while (iterator.hasNext()) {
@@ -1471,6 +1491,9 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
@@ -1461,6 +1481,9 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
i = j;
}
}
@@ -1613,20 +1613,20 @@ index 424de333bf4fc5632410c689d9b17b2eab3371c4..b72969b3bc4319387e3946ea01c5b05a
return this.scaledRange(i);
}
diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
index 77a2458b8acb21c64676934cd8d6b05ef6351c10..ad8e79c72841ff80f8af3580d2cdb89c13f6d688 100644
index 366c0c9b45a819f7f94ebe3e49b8ab7f9edf9ce7..097f6eb96c2df203565a0c50aba6221e67a7e026 100644
--- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java
+++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
@@ -73,6 +73,9 @@ public class ServerChunkCache extends ChunkSource {
final it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap<LevelChunk> loadedChunkMap = new it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap<>(8192, 0.5f);
@@ -77,6 +77,9 @@ public class ServerChunkCache extends ChunkSource {
private final LevelChunk[] lastLoadedChunks = new LevelChunk[4 * 4];
+
// Paper end
+ public boolean firstRunSpawnCounts = true; // Pufferfish
+ public final java.util.concurrent.atomic.AtomicBoolean _pufferfish_spawnCountsReady = new java.util.concurrent.atomic.AtomicBoolean(false); // Pufferfish - optimize countmobs
private static int getChunkCacheKey(int x, int z) {
return x & 3 | ((z & 3) << 2);
@@ -528,6 +531,7 @@ public class ServerChunkCache extends ChunkSource {
+
public ServerChunkCache(ServerLevel world, LevelStorageSource.LevelStorageAccess session, DataFixer dataFixer, StructureTemplateManager structureTemplateManager, Executor workerExecutor, ChunkGenerator chunkGenerator, int viewDistance, int simulationDistance, boolean dsync, ChunkProgressListener worldGenerationProgressListener, ChunkStatusUpdateListener chunkStatusChangeListener, Supplier<DimensionDataStorage> persistentStateManagerFactory) {
this.level = world;
this.mainThreadProcessor = new ServerChunkCache.MainThreadExecutor(world);
@@ -513,6 +516,7 @@ public class ServerChunkCache extends ChunkSource {
// Paper - optimise chunk tick iteration
@@ -1634,7 +1634,7 @@ index 77a2458b8acb21c64676934cd8d6b05ef6351c10..ad8e79c72841ff80f8af3580d2cdb89c
if (this.level.getServer().tickRateManager().runsNormally()) {
gameprofilerfiller.popPush("naturalSpawnCount");
this.level.timings.countNaturalMobs.startTiming(); // Paper - timings
@@ -536,6 +540,7 @@ public class ServerChunkCache extends ChunkSource {
@@ -521,6 +525,7 @@ public class ServerChunkCache extends ChunkSource {
int naturalSpawnChunkCount = k;
NaturalSpawner.SpawnState spawnercreature_d; // moved down
if ((this.spawnFriendlies || this.spawnEnemies) && this.level.paperConfig().entities.spawning.perPlayerMobSpawns) { // don't count mobs when animals and monsters are disabled
@@ -1642,7 +1642,7 @@ index 77a2458b8acb21c64676934cd8d6b05ef6351c10..ad8e79c72841ff80f8af3580d2cdb89c
// re-set mob counts
for (ServerPlayer player : this.level.players) {
// Paper start - per player mob spawning backoff
@@ -550,14 +555,18 @@ public class ServerChunkCache extends ChunkSource {
@@ -535,14 +540,18 @@ public class ServerChunkCache extends ChunkSource {
}
// Paper end - per player mob spawning backoff
}
@@ -1664,7 +1664,7 @@ index 77a2458b8acb21c64676934cd8d6b05ef6351c10..ad8e79c72841ff80f8af3580d2cdb89c
gameprofilerfiller.popPush("spawnAndTick");
boolean flag = this.level.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING) && !this.level.players().isEmpty(); // CraftBukkit
@@ -647,8 +656,8 @@ public class ServerChunkCache extends ChunkSource {
@@ -632,8 +641,8 @@ public class ServerChunkCache extends ChunkSource {
if (tick && chunk1.chunkStatus.isOrAfter(net.minecraft.server.level.FullChunkStatus.ENTITY_TICKING)) {
// Paper end - optimise chunk tick iteration
chunk1.incrementInhabitedTime(j);
@@ -1675,11 +1675,11 @@ index 77a2458b8acb21c64676934cd8d6b05ef6351c10..ad8e79c72841ff80f8af3580d2cdb89c
}
if (true || this.level.shouldTickBlocksAt(chunkcoordintpair.toLong())) { // Paper - optimise chunk tick iteration
@@ -695,6 +704,40 @@ public class ServerChunkCache extends ChunkSource {
@@ -680,6 +689,40 @@ public class ServerChunkCache extends ChunkSource {
gameprofilerfiller.pop();
gameprofilerfiller.pop();
}
+
+
+ // Pufferfish start - optimize mob spawning
+ if (gg.pufferfish.pufferfish.PufferfishConfig.enableAsyncMobSpawning) {
+ for (ServerPlayer player : this.level.players) {
@@ -1717,7 +1717,7 @@ index 77a2458b8acb21c64676934cd8d6b05ef6351c10..ad8e79c72841ff80f8af3580d2cdb89c
private void getFullChunk(long pos, Consumer<LevelChunk> chunkConsumer) {
diff --git a/src/main/java/net/minecraft/server/level/ServerEntity.java b/src/main/java/net/minecraft/server/level/ServerEntity.java
index ae188ae314336d971303023c7b7b8ecf32bae253..79914528f6d255355284b04253218a7c4dec1ead 100644
index 529ab44baaf573b97cf7e89560c548642733188f..db55ad9aaabfa1ea998754f3ac352d1698936696 100644
--- a/src/main/java/net/minecraft/server/level/ServerEntity.java
+++ b/src/main/java/net/minecraft/server/level/ServerEntity.java
@@ -183,7 +183,8 @@ public class ServerEntity {
@@ -1739,7 +1739,7 @@ index ae188ae314336d971303023c7b7b8ecf32bae253..79914528f6d255355284b04253218a7c
this.wasOnGround = this.entity.onGround();
this.teleportDelay = 0;
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
index fa203e66887f5db1083728166e2f81ea4f656bd7..6c4a30779346985a7423286965bcc6446a777785 100644
index 6934e9dac0d69c043b73b7c46d59f2d39b37c67f..dbe612427b894df9da1335b94163ba9b89b090c0 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -894,6 +894,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
@@ -1789,13 +1789,13 @@ index fa203e66887f5db1083728166e2f81ea4f656bd7..6c4a30779346985a7423286965bcc644
gameprofilerfiller.push("thunder");
final BlockPos.MutableBlockPos blockposition = this.chunkTickMutablePosition; // Paper - use mutable to reduce allocation rate, final to force compile fail on change
- if (!this.paperConfig().environment.disableThunder && flag && this.isThundering() && this.spigotConfig.thunderChance > 0 && this.random.nextInt(this.spigotConfig.thunderChance) == 0) { // Spigot // Paper - disable thunder
+ if (!this.paperConfig().environment.disableThunder && flag && this.isThundering() && this.spigotConfig.thunderChance > 0 && /*this.random.nextInt(this.spigotConfig.thunderChance) == 0 &&*/ chunk.shouldDoLightning(this.random)) { // Spigot // Paper - disable thunder // Pufferfish - replace random with shouldDoLightning
- if (!this.paperConfig().environment.disableThunder && flag && this.isThundering() && this.spigotConfig.thunderChance > 0 && this.random.nextInt(this.spigotConfig.thunderChance) == 0) { // Spigot // Paper - Option to disable thunder
+ if (!this.paperConfig().environment.disableThunder && flag && this.isThundering() && this.spigotConfig.thunderChance > 0 && /*this.random.nextInt(this.spigotConfig.thunderChance) == 0 &&*/ chunk.shouldDoLightning(this.random)) { // Spigot // Paper - Option to disable thunder // Pufferfish - replace random with shouldDoLightning
blockposition.set(this.findLightningTargetAround(this.getBlockRandomPos(j, 0, k, 15))); // Paper
if (this.isRainingAt(blockposition)) {
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index 42b433d9461d0912b39542263684323369469ac0..79701158989205af7b70ab5d312c1d3fa27c6cd2 100644
index 6f9ec543185b6f68bb1eaa61a7ebea9d866d688f..7b74541d648de48579221945e4bab963882cc1f2 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -1121,6 +1121,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
@@ -1919,7 +1919,7 @@ index d6cbe98e67fdbf8db46338a88ab1356dd63b50a3..20dd3a63b2f955b05a75eb240e33ae4c
int LARGE_MAX_STACK_SIZE = 64;
int DEFAULT_DISTANCE_LIMIT = 8;
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index 554fc0d4e791a98a46216714f0fb07e178ddabe4..8328fb75f117a523301ed31b79fbee33ca82cbad 100644
index 2c06f3ebf7e1069727387bfc60db30c958c14b5a..00b26925b9e0ef7290f904273da875603b6ce11b 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -308,7 +308,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
@@ -1931,16 +1931,16 @@ index 554fc0d4e791a98a46216714f0fb07e178ddabe4..8328fb75f117a523301ed31b79fbee33
private ChunkPos chunkPosition;
private Vec3 deltaMovement;
private float yRot;
@@ -439,6 +439,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
return this.originWorld;
@@ -501,6 +501,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
return chunkMap.playerEntityTrackerTrackMaps[type.ordinal()].getObjectsInRange(MCUtil.getCoordinateKey(this));
}
// Paper end
// Paper end - optimise entity tracking
+ // Pufferfish start
+ public boolean activatedPriorityReset = false; // DAB
+ public int activatedPriority = gg.pufferfish.pufferfish.PufferfishConfig.maximumActivationPrio; // golf score
+ public final BlockPos.MutableBlockPos cachedBlockPos = new BlockPos.MutableBlockPos(); // used where needed
+ // Pufferfish end
+
+
public float getBukkitYaw() {
return this.yRot;
}
@@ -1957,7 +1957,7 @@ index 554fc0d4e791a98a46216714f0fb07e178ddabe4..8328fb75f117a523301ed31b79fbee33
this.baseTick();
}
@@ -4407,16 +4419,18 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
@@ -4402,16 +4414,18 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
}
public boolean updateFluidHeightAndDoFluidPushing(TagKey<Fluid> tag, double speed) {
@@ -1983,7 +1983,7 @@ index 554fc0d4e791a98a46216714f0fb07e178ddabe4..8328fb75f117a523301ed31b79fbee33
double d1 = 0.0D;
boolean flag = this.isPushedByFluid();
boolean flag1 = false;
@@ -4424,14 +4438,61 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
@@ -4419,14 +4433,61 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
int k1 = 0;
BlockPos.MutableBlockPos blockposition_mutableblockposition = new BlockPos.MutableBlockPos();
@@ -2051,7 +2051,7 @@ index 554fc0d4e791a98a46216714f0fb07e178ddabe4..8328fb75f117a523301ed31b79fbee33
if (d2 >= axisalignedbb.minY) {
flag1 = true;
@@ -4453,9 +4514,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
@@ -4448,9 +4509,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
// CraftBukkit end
}
}
@@ -2078,7 +2078,7 @@ index edc723ea5ca3a325106e7af38c60dbf9f0f5fb77..ab6cd363231a668c9b16df825a72d320
private String descriptionId;
@Nullable
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
index ca1900d29a86b9b39078da39b071950128c08c23..47d9d45a5244ea991bedd16ff9ef0a40128b0258 100644
index 6071451339080bbdd98fb634791a56988984c8bc..5641bc7f50cef7819ddaeb76a4a4f9c80f473d31 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;
@@ -2140,7 +2140,7 @@ index ca1900d29a86b9b39078da39b071950128c08c23..47d9d45a5244ea991bedd16ff9ef0a40
if (this.isSpectator()) {
return false;
diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java
index 22506c5c823c65e65034a962312c1dbd44356e23..4e5038e3cb6644e14d4b0022444386c50c827d0b 100644
index 24629412d2b4acaa81788ce70412b03387cc777c..a181a298334212847166409a2121476ba5871cb2 100644
--- a/src/main/java/net/minecraft/world/entity/Mob.java
+++ b/src/main/java/net/minecraft/world/entity/Mob.java
@@ -221,14 +221,16 @@ public abstract class Mob extends LivingEntity implements Targeting {
@@ -2231,7 +2231,7 @@ index 646d9a121d908a2fc3e4e302484dd5cd1bfc6804..e546ecdccde352502e26a8668eaaafe0
}
diff --git a/src/main/java/net/minecraft/world/entity/ai/goal/GoalSelector.java b/src/main/java/net/minecraft/world/entity/ai/goal/GoalSelector.java
index b738ee2d3801fadfd09313f05ae24593e56b0ec6..1635818fc4b1788c0d397085239df6dd75b210ab 100644
index 676f5485a4ca9252e911213dcda8d51776b637b6..2d63ee8fef87264d4b61290effa6ba86a787aa61 100644
--- a/src/main/java/net/minecraft/world/entity/ai/goal/GoalSelector.java
+++ b/src/main/java/net/minecraft/world/entity/ai/goal/GoalSelector.java
@@ -53,9 +53,12 @@ public class GoalSelector {
@@ -2701,18 +2701,18 @@ index 27b0a79f7a7c47047216aae42944bac2a2151181..a097cfc528f709c80575f35483b68783
autorecipestackmanager.initialize(this); // Paper - better exact choice recipes
int i = 0;
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
index ae42d5b3dea423a144056c64337af213609923d4..6ee7286797da79a3d47a85b1a4b7139804571969 100644
index b33bb001a48788e727e2f01788a6163024121bf3..763fe7d1e8334441a5db2285bd4424d165e1c945 100644
--- a/src/main/java/net/minecraft/world/level/Level.java
+++ b/src/main/java/net/minecraft/world/level/Level.java
@@ -211,6 +211,8 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
// Paper end - Use getChunkIfLoadedImmediately
@@ -212,6 +212,8 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
public abstract ResourceKey<LevelStem> getTypeKey();
+
+ protected final io.papermc.paper.util.math.ThreadUnsafeRandom randomTickRandom = new io.papermc.paper.util.math.ThreadUnsafeRandom(java.util.concurrent.ThreadLocalRandom.current().nextLong()); public net.minecraft.util.RandomSource getThreadUnsafeRandom() { return this.randomTickRandom; } // Pufferfish - move thread unsafe random initialization // Pufferfish - getter
+ protected final io.papermc.paper.util.math.ThreadUnsafeRandom randomTickRandom = new io.papermc.paper.util.math.ThreadUnsafeRandom(java.util.concurrent.ThreadLocalRandom.current().nextLong()); public net.minecraft.util.RandomSource getThreadUnsafeRandom() { return this.randomTickRandom; } // Pufferfish - move thread unsafe random initialization // Pufferfish - getter
+
protected Level(WritableLevelData worlddatamutable, ResourceKey<Level> resourcekey, RegistryAccess iregistrycustom, Holder<DimensionType> holder, Supplier<ProfilerFiller> 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<org.spigotmc.SpigotWorldConfig, io.papermc.paper.configuration.WorldConfiguration> 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
@@ -1317,13 +1319,13 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
try {
tickConsumer.accept(entity);
@@ -2720,13 +2720,13 @@ index ae42d5b3dea423a144056c64337af213609923d4..6ee7286797da79a3d47a85b1a4b71398
- } catch (Throwable throwable) {
+ } catch (Throwable throwable) { // Pufferfish - diff on change ServerLevel.tick
if (throwable instanceof ThreadDeath) throw throwable; // Paper
// Paper start - Prevent tile entity and entity crashes
// Paper start - Prevent block entity and entity crashes
final String msg = String.format("Entity threw exception at %s:%s,%s,%s", entity.level().getWorld().getName(), entity.getX(), entity.getY(), entity.getZ());
MinecraftServer.LOGGER.error(msg, throwable);
getCraftServer().getPluginManager().callEvent(new ServerExceptionEvent(new ServerInternalException(msg, throwable)));
getCraftServer().getPluginManager().callEvent(new ServerExceptionEvent(new ServerInternalException(msg, throwable))); // Paper - ServerExceptionEvent
- entity.discard();
+ entity.discard(); // Pufferfish - diff on change ServerLevel.tick
// Paper end
// Paper end - Prevent block entity and entity crashes
}
}
@@ -1797,6 +1799,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
@@ -2738,7 +2738,7 @@ index ae42d5b3dea423a144056c64337af213609923d4..6ee7286797da79a3d47a85b1a4b71398
}
diff --git a/src/main/java/net/minecraft/world/level/NaturalSpawner.java b/src/main/java/net/minecraft/world/level/NaturalSpawner.java
index 1712bd7c3a9b515c7bf8909f7392a385ef243ff9..00b965de947cb13a178061278d1ffa4342e8e065 100644
index 17e9f3a30e287faf210e08dc7eb177a70f049f43..96fc603c2fccc1d9610248b2116d35696bc65e4e 100644
--- a/src/main/java/net/minecraft/world/level/NaturalSpawner.java
+++ b/src/main/java/net/minecraft/world/level/NaturalSpawner.java
@@ -429,12 +429,12 @@ public final class NaturalSpawner {
@@ -3000,7 +3000,7 @@ index a94300a457b25f0e33a8eeabba6dd5720ca9ab1e..b41635dd0569ff7df909df492d3e850a
}
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 d85ed706703e50f76df8db414827ccd41a5985d9..177673cc19cd70f60bb489cb2e74b39fbb8f8d24 100644
index 6ec3fc801453fd54c25b642e6fa71c19b463311d..922191159fadf8e89646d7299aadee4aa851f71a 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 {
@@ -3032,7 +3032,7 @@ index d85ed706703e50f76df8db414827ccd41a5985d9..177673cc19cd70f60bb489cb2e74b39f
// CraftBukkit start
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 b10c652f53edfbf29f28b047d3b3c8edca21bc56..0806ec65a6c4e0518be01db9af2dd118d73da98d 100644
index 796bbef3544e06b8e7aac7e8ac5f740a2613f4bd..2422ca3ffc6ab7178cacf933b8013f85e7de4bd9 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 {
@@ -3273,7 +3273,7 @@ index ebe65474a4a05ff1637d7f37ebcfe690af59def5..42142c512b12e5b269c19f1e821c50e7
@Nullable
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index 28b02fee73a3ab604f6921800a7ede59e2e6f414..a6b8e768edacd1600992af5fd0a4562f1420b568 100644
index 25f41119bcc19bab7cd2fdb044147b3f78a8ef1c..5b01cd1b9a07fc8600fddb9d9e0aea3ac5a288f0 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -264,7 +264,7 @@ import javax.annotation.Nullable; // Paper
@@ -3336,7 +3336,7 @@ index 774556a62eb240da42e84db4502e2ed43495be17..80553face9c70c2a3d897681e7761df8
if (stream != null) {
diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java
index fafc8b84d6b6368c70b8eedfdb4c3a9deace9c26..a69814d3a6214af734d670fe5545518a5f8a8dc5 100644
index c39894e824334f1dc52e0466cf9d84f7e219be70..41cddf7e42f0e8f80973e482a95e55d3bd19f659 100644
--- a/src/main/java/org/spigotmc/ActivationRange.java
+++ b/src/main/java/org/spigotmc/ActivationRange.java
@@ -38,6 +38,10 @@ import co.aikar.timings.MinecraftTimings;
@@ -3350,7 +3350,7 @@ index fafc8b84d6b6368c70b8eedfdb4c3a9deace9c26..a69814d3a6214af734d670fe5545518a
public class ActivationRange
{
@@ -222,6 +226,25 @@ public class ActivationRange
@@ -221,6 +225,25 @@ public class ActivationRange
}
// Paper end - Configurable marker ticking
ActivationRange.activateEntity(entity);
@@ -3376,7 +3376,7 @@ index fafc8b84d6b6368c70b8eedfdb4c3a9deace9c26..a69814d3a6214af734d670fe5545518a
}
// Paper end
}
@@ -238,12 +261,12 @@ public class ActivationRange
@@ -237,12 +260,12 @@ public class ActivationRange
if ( MinecraftServer.currentTick > entity.activatedTick )
{
if ( entity.defaultActivationState )
@@ -3391,7 +3391,7 @@ index fafc8b84d6b6368c70b8eedfdb4c3a9deace9c26..a69814d3a6214af734d670fe5545518a
entity.activatedTick = MinecraftServer.currentTick;
}
}
@@ -297,7 +320,7 @@ public class ActivationRange
@@ -296,7 +319,7 @@ public class ActivationRange
if ( entity instanceof LivingEntity )
{
LivingEntity living = (LivingEntity) entity;