diff --git a/patches/unapplied-server/0001-Pufferfish-Server-Changes.patch b/patches/server/0001-Pufferfish-Server-Changes.patch
similarity index 62%
rename from patches/unapplied-server/0001-Pufferfish-Server-Changes.patch
rename to patches/server/0001-Pufferfish-Server-Changes.patch
index bb424c228..a772acad2 100644
--- a/patches/unapplied-server/0001-Pufferfish-Server-Changes.patch
+++ b/patches/server/0001-Pufferfish-Server-Changes.patch
@@ -20,19 +20,19 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see .
diff --git a/build.gradle.kts b/build.gradle.kts
-index de0474b8dce58cb419c00b7614d7dd66be832a02..6cfa3f9994de36e135658841aa3c091b90a14424 100644
+index faf3e3fd72e8c915e7a4803dacbe1bb576c6663e..1bb33b64bd73c8ea591c3ffdf5573c7c55a520f3 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
-@@ -13,7 +13,7 @@ configurations.named(log4jPlugins.compileClasspathConfigurationName) {
- val alsoShade: Configuration by configurations.creating
+@@ -25,7 +25,7 @@ abstract class MockitoAgentProvider : CommandLineArgumentProvider {
+ // Paper end - configure mockito agent that is needed in newer java versions
dependencies {
- implementation(project(":paper-api"))
+ implementation(project(":pufferfish-api")) // Pufferfish // Paper
// Paper start
- implementation("org.jline:jline-terminal-jansi:3.21.0")
- implementation("net.minecrell:terminalconsoleappender:1.3.0")
-@@ -47,6 +47,13 @@ dependencies {
+ implementation("org.jline:jline-terminal-ffm:3.27.1") // use ffm on java 22+
+ implementation("org.jline:jline-terminal-jni:3.27.1") // fall back to jni on java 21
+@@ -60,6 +60,13 @@ dependencies {
runtimeOnly("org.apache.maven.resolver:maven-resolver-connector-basic:1.9.18")
runtimeOnly("org.apache.maven.resolver:maven-resolver-transport-http:1.9.18")
@@ -46,8 +46,8 @@ index de0474b8dce58cb419c00b7614d7dd66be832a02..6cfa3f9994de36e135658841aa3c091b
testImplementation("io.github.classgraph:classgraph:4.8.47") // Paper - mob goal test
testImplementation("org.junit.jupiter:junit-jupiter:5.10.2")
testImplementation("org.junit.platform:junit-platform-suite-engine:1.10.0")
-@@ -72,6 +79,14 @@ paperweight {
- craftBukkitPackageVersion.set("v1_21_R1") // also needs to be updated in MappingEnvironment
+@@ -86,6 +93,14 @@ paperweight {
+ craftBukkitPackageVersion.set("v1_21_R2") // also needs to be updated in MappingEnvironment
}
+
@@ -61,7 +61,7 @@ index de0474b8dce58cb419c00b7614d7dd66be832a02..6cfa3f9994de36e135658841aa3c091b
tasks.jar {
archiveClassifier.set("dev")
-@@ -85,14 +100,14 @@ tasks.jar {
+@@ -99,14 +114,14 @@ tasks.jar {
val gitBranch = git("rev-parse", "--abbrev-ref", "HEAD").getText().trim() // Paper
attributes(
"Main-Class" to "org.bukkit.craftbukkit.Main",
@@ -81,20 +81,55 @@ index de0474b8dce58cb419c00b7614d7dd66be832a02..6cfa3f9994de36e135658841aa3c091b
"Build-Number" to (build ?: ""),
"Build-Time" to Instant.now().toString(),
"Git-Branch" to gitBranch, // Paper
-diff --git a/src/main/java/co/aikar/timings/TimingsExport.java b/src/main/java/co/aikar/timings/TimingsExport.java
-index 7620c72a4c243cbeea245203ce03a97cbfa7d922..b35a9f4c5f8960864c402ede8a51fb5ab9c4fcc0 100644
---- a/src/main/java/co/aikar/timings/TimingsExport.java
-+++ b/src/main/java/co/aikar/timings/TimingsExport.java
-@@ -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)),
-- pair("paper", mapAsJSON(Bukkit.spigot().getPaperConfig(), null))
-+ pair("paper", mapAsJSON(Bukkit.spigot().getPaperConfig(), null)), // Pufferfish
-+ pair("pufferfish", mapAsJSON(gg.pufferfish.pufferfish.PufferfishConfig.getConfigCopy(), null)) // Pufferfish
- ));
+diff --git a/src/main/java/ca/spottedleaf/moonrise/common/list/IteratorSafeOrderedReferenceSet.java b/src/main/java/ca/spottedleaf/moonrise/common/list/IteratorSafeOrderedReferenceSet.java
+index c21e00812f1aaa1279834a0562d360d6b89e146c..877d2095a066854939f260ca4b0b8c7b5abb620f 100644
+--- a/src/main/java/ca/spottedleaf/moonrise/common/list/IteratorSafeOrderedReferenceSet.java
++++ b/src/main/java/ca/spottedleaf/moonrise/common/list/IteratorSafeOrderedReferenceSet.java
+@@ -18,7 +18,7 @@ public final class IteratorSafeOrderedReferenceSet {
+
+ private final double maxFragFactor;
+
+- private int iteratorCount;
++ private final java.util.concurrent.atomic.AtomicInteger iteratorCount = new java.util.concurrent.atomic.AtomicInteger(); // Pufferfish - async mob spawning
+
+ public IteratorSafeOrderedReferenceSet() {
+ this(16, 0.75f, 16, 0.2);
+@@ -79,7 +79,7 @@ public final class IteratorSafeOrderedReferenceSet {
+ }
+
+ public int createRawIterator() {
+- ++this.iteratorCount;
++ this.iteratorCount.incrementAndGet(); // Pufferfish - async mob spawning
+ if (this.indexMap.isEmpty()) {
+ return -1;
+ } else {
+@@ -100,7 +100,7 @@ public final class IteratorSafeOrderedReferenceSet {
+ }
+
+ public void finishRawIterator() {
+- if (--this.iteratorCount == 0) {
++ if (this.iteratorCount.decrementAndGet() == 0) { // Pufferfish - async mob spawning
+ if (this.getFragFactor() >= this.maxFragFactor) {
+ this.defrag();
+ }
+@@ -117,7 +117,7 @@ public final class IteratorSafeOrderedReferenceSet {
+ throw new IllegalStateException();
+ }
+ this.listElements[index] = null;
+- if (this.iteratorCount == 0 && this.getFragFactor() >= this.maxFragFactor) {
++ if (this.iteratorCount.get() == 0 && this.getFragFactor() >= this.maxFragFactor) { // Pufferfish - async mob spawning
+ this.defrag();
+ }
+ //this.check();
+@@ -219,7 +219,7 @@ public final class IteratorSafeOrderedReferenceSet {
+ }
+
+ public IteratorSafeOrderedReferenceSet.Iterator iterator(final int flags) {
+- ++this.iteratorCount;
++ this.iteratorCount.incrementAndGet(); // Pufferfish - async mob spawning
+ return new BaseIterator<>(this, true, (flags & ITERATOR_FLAG_SEE_ADDITIONS) != 0 ? Integer.MAX_VALUE : this.listSize);
+ }
- new TimingsExport(listeners, parent, history).start();
diff --git a/src/main/java/com/destroystokyo/paper/Metrics.java b/src/main/java/com/destroystokyo/paper/Metrics.java
index 4b002e8b75d117b726b0de274a76d3596fce015b..692c962193cf9fcc6801fc93f3220bdc673d527b 100644
--- a/src/main/java/com/destroystokyo/paper/Metrics.java
@@ -122,148 +157,6 @@ index 4b002e8b75d117b726b0de274a76d3596fce015b..692c962193cf9fcc6801fc93f3220bdc
metrics.addCustomChart(new Metrics.DrilldownPie("java_version", () -> {
Map> map = new HashMap<>();
-diff --git a/src/main/java/gg/airplane/structs/FluidDirectionCache.java b/src/main/java/gg/airplane/structs/FluidDirectionCache.java
-new file mode 100644
-index 0000000000000000000000000000000000000000..aa8467b9dda1f7707e41f50ac7b3e9d7343723ec
---- /dev/null
-+++ b/src/main/java/gg/airplane/structs/FluidDirectionCache.java
-@@ -0,0 +1,136 @@
-+package gg.airplane.structs;
-+
-+import it.unimi.dsi.fastutil.HashCommon;
-+
-+/**
-+ * This is a replacement for the cache used in FluidTypeFlowing.
-+ * The requirements for the previous cache were:
-+ * - Store 200 entries
-+ * - Look for the flag in the cache
-+ * - If it exists, move to front of cache
-+ * - If it doesn't exist, remove last entry in cache and insert in front
-+ *
-+ * This class accomplishes something similar, however has a few different
-+ * requirements put into place to make this more optimize:
-+ *
-+ * - maxDistance is the most amount of entries to be checked, instead
-+ * of having to check the entire list.
-+ * - In combination with that, entries are all tracked by age and how
-+ * frequently they're used. This enables us to remove old entries,
-+ * without constantly shifting any around.
-+ *
-+ * Usage of the previous map would have to reset the head every single usage,
-+ * shifting the entire map. Here, nothing happens except an increment when
-+ * the cache is hit, and when it needs to replace an old element only a single
-+ * element is modified.
-+ */
-+public class FluidDirectionCache {
-+
-+ private static class FluidDirectionEntry {
-+ private final T data;
-+ private final boolean flag;
-+ private int uses = 0;
-+ private int age = 0;
-+
-+ private FluidDirectionEntry(T data, boolean flag) {
-+ this.data = data;
-+ this.flag = flag;
-+ }
-+
-+ public int getValue() {
-+ return this.uses - (this.age >> 1); // age isn't as important as uses
-+ }
-+
-+ public void incrementUses() {
-+ this.uses = this.uses + 1 & Integer.MAX_VALUE;
-+ }
-+
-+ public void incrementAge() {
-+ this.age = this.age + 1 & Integer.MAX_VALUE;
-+ }
-+ }
-+
-+ private final FluidDirectionEntry[] entries;
-+ private final int mask;
-+ private final int maxDistance; // the most amount of entries to check for a value
-+
-+ public FluidDirectionCache(int size) {
-+ int arraySize = HashCommon.nextPowerOfTwo(size);
-+ this.entries = new FluidDirectionEntry[arraySize];
-+ this.mask = arraySize - 1;
-+ this.maxDistance = Math.min(arraySize, 4);
-+ }
-+
-+ public Boolean getValue(T data) {
-+ FluidDirectionEntry curr;
-+ int pos;
-+
-+ if ((curr = this.entries[pos = HashCommon.mix(data.hashCode()) & this.mask]) == null) {
-+ return null;
-+ } else if (data.equals(curr.data)) {
-+ curr.incrementUses();
-+ return curr.flag;
-+ }
-+
-+ int checked = 1; // start at 1 because we already checked the first spot above
-+
-+ while ((curr = this.entries[pos = (pos + 1) & this.mask]) != null) {
-+ if (data.equals(curr.data)) {
-+ curr.incrementUses();
-+ return curr.flag;
-+ } else if (++checked >= this.maxDistance) {
-+ break;
-+ }
-+ }
-+
-+ return null;
-+ }
-+
-+ public void putValue(T data, boolean flag) {
-+ FluidDirectionEntry curr;
-+ int pos;
-+
-+ if ((curr = this.entries[pos = HashCommon.mix(data.hashCode()) & this.mask]) == null) {
-+ this.entries[pos] = new FluidDirectionEntry<>(data, flag); // add
-+ return;
-+ } else if (data.equals(curr.data)) {
-+ curr.incrementUses();
-+ return;
-+ }
-+
-+ int checked = 1; // start at 1 because we already checked the first spot above
-+
-+ while ((curr = this.entries[pos = (pos + 1) & this.mask]) != null) {
-+ if (data.equals(curr.data)) {
-+ curr.incrementUses();
-+ return;
-+ } else if (++checked >= this.maxDistance) {
-+ this.forceAdd(data, flag);
-+ return;
-+ }
-+ }
-+
-+ this.entries[pos] = new FluidDirectionEntry<>(data, flag); // add
-+ }
-+
-+ private void forceAdd(T data, boolean flag) {
-+ int expectedPos = HashCommon.mix(data.hashCode()) & this.mask;
-+
-+ int toRemovePos = expectedPos;
-+ FluidDirectionEntry entryToRemove = this.entries[toRemovePos];
-+
-+ for (int i = expectedPos + 1; i < expectedPos + this.maxDistance; i++) {
-+ int pos = i & this.mask;
-+ FluidDirectionEntry entry = this.entries[pos];
-+ if (entry.getValue() < entryToRemove.getValue()) {
-+ toRemovePos = pos;
-+ entryToRemove = entry;
-+ }
-+
-+ entry.incrementAge(); // use this as a mechanism to age the other entries
-+ }
-+
-+ // remove the least used/oldest entry
-+ this.entries[toRemovePos] = new FluidDirectionEntry(data, flag);
-+ }
-+}
diff --git a/src/main/java/gg/pufferfish/pufferfish/PufferfishCommand.java b/src/main/java/gg/pufferfish/pufferfish/PufferfishCommand.java
new file mode 100644
index 0000000000000000000000000000000000000000..020368da69b9a492155f6de6297f74732f4ab6ea
@@ -340,10 +233,10 @@ index 0000000000000000000000000000000000000000..020368da69b9a492155f6de6297f7473
+}
diff --git a/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java
new file mode 100644
-index 0000000000000000000000000000000000000000..11075b0b4d4c5591850704999868c678348170ff
+index 0000000000000000000000000000000000000000..f5a43a1e1a78b3eaabbcadc7af09750ee478eeb6
--- /dev/null
+++ b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java
-@@ -0,0 +1,299 @@
+@@ -0,0 +1,280 @@
+package gg.pufferfish.pufferfish;
+
+import gg.pufferfish.pufferfish.simd.SIMDDetection;
@@ -351,10 +244,7 @@ index 0000000000000000000000000000000000000000..11075b0b4d4c5591850704999868c678
+import java.io.IOException;
+import java.util.Collections;
+import net.minecraft.core.registries.BuiltInRegistries;
-+import java.util.Locale;
-+import java.util.Map;
+import net.minecraft.server.MinecraftServer;
-+import net.minecraft.tags.TagKey;
+import org.apache.logging.log4j.Level;
+import org.bukkit.configuration.ConfigurationSection;
+import net.minecraft.world.entity.EntityType;
@@ -602,23 +492,6 @@ index 0000000000000000000000000000000000000000..11075b0b4d4c5591850704999868c678
+
+ setComment("dab", "Optimizes entity brains when", "they're far away from the player");
+ }
-+
-+ public static Map projectileTimeouts;
-+ private static void projectileTimeouts() {
-+ // Set some defaults
-+ getInt("entity_timeouts.SNOWBALL", -1);
-+ getInt("entity_timeouts.LLAMA_SPIT", -1);
-+ setComment("entity_timeouts",
-+ "These values define a entity's maximum lifespan. If an",
-+ "entity is in this list and it has survived for longer than",
-+ "that number of ticks, then it will be removed. Setting a value to",
-+ "-1 disables this feature.");
-+
-+ for (EntityType> entityType : BuiltInRegistries.ENTITY_TYPE) {
-+ String type = EntityType.getKey(entityType).getPath().toUpperCase(Locale.ROOT);
-+ entityType.ttl = config.getInt("entity_timeouts." + type, -1);
-+ }
-+ }
+
+ public static boolean throttleInactiveGoalSelectorTick;
+ private static void inactiveGoalSelectorThrottle() {
@@ -636,6 +509,7 @@ index 0000000000000000000000000000000000000000..11075b0b4d4c5591850704999868c678
+ "the ender dragon whenever a player places an end crystal.");
+ }
+
++
+ public static boolean disableMethodProfiler;
+ private static void miscSettings() {
+ disableMethodProfiler = getBoolean("misc.disable-method-profiler", true);
@@ -1143,43 +1017,43 @@ index 0000000000000000000000000000000000000000..facd55463d44cb7e3d2ca6892982f549
+ }
+}
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index 696d075ca2883f3c37e35f983c4d020e5db89d16..e63721261258dba60b1eef2eee011e0aa18b0fd2 100644
+index 780582ebaa8deb0c0b0c8de17de5abcebafa4bd3..05e49085d71e5e93a0033d3ca2a670981d6dfe75 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
-@@ -322,6 +322,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop pluginsBlockingSleep = new java.util.HashSet<>(); // Paper - API to allow/disallow tick sleeping
+ public gg.pufferfish.pufferfish.util.AsyncExecutor mobSpawnExecutor = new gg.pufferfish.pufferfish.util.AsyncExecutor("MobSpawning"); // Pufferfish - optimize mob spawning
public static S spin(Function serverFactory) {
AtomicReference atomicreference = new AtomicReference();
-@@ -1312,6 +1313,12 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop {
+ this.executeBlocking(() -> {
diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
-index dd56c8e041116ef3602a9f89c998c8208ab89b51..18bf9c42e76c8c35f57d74ea4adfa5b3bb53762f 100644
+index 17a158ff6ce6520b69a5a0032ba4c05449dd0cf8..d62f7375394409a278bc565c8263506c598ceeba 100644
--- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
+++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
-@@ -239,6 +239,8 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
+@@ -236,6 +236,8 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
this.server.spark.registerCommandBeforePlugins(this.server); // Paper - spark
com.destroystokyo.paper.Metrics.PaperMetrics.startMetrics(); // Paper - start metrics
com.destroystokyo.paper.VersionHistoryManager.INSTANCE.getClass(); // Paper - load version history now
@@ -1188,7 +1062,7 @@ index dd56c8e041116ef3602a9f89c998c8208ab89b51..18bf9c42e76c8c35f57d74ea4adfa5b3
this.setPvpAllowed(dedicatedserverproperties.pvp);
this.setFlightAllowed(dedicatedserverproperties.allowFlight);
-@@ -359,6 +361,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
+@@ -356,6 +358,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
DedicatedServer.LOGGER.info("JMX monitoring enabled");
}
@@ -1196,67 +1070,13 @@ index dd56c8e041116ef3602a9f89c998c8208ab89b51..18bf9c42e76c8c35f57d74ea4adfa5b3
return true;
}
}
-diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
-index af8cb316ac169aa8d98a88765b85bb013b9ba961..6abae547de1c9de07a75800550631ca5ee693e0a 100644
---- a/src/main/java/net/minecraft/server/level/ChunkMap.java
-+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
-@@ -172,6 +172,10 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
- return null; // Paper - rewrite chunk system
- }
- // Paper end
-+ // Paper start - optimise chunk tick iteration
-+// public final it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet needsChangeBroadcasting = new it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet<>();
-+// public final com.destroystokyo.paper.util.misc.PlayerAreaMap playerMobSpawnMap = new gg.pufferfish.pufferfish.util.AsyncPlayerAreaMap(this.pooledLinkedPlayerHashSets); // Pufferfish
-+ // Paper end - optimise chunk tick iteration
-
- public ChunkMap(ServerLevel world, LevelStorageSource.LevelStorageAccess session, DataFixer dataFixer, StructureTemplateManager structureTemplateManager, Executor executor, BlockableEventLoop mainThreadExecutor, LightChunkGetter chunkProvider, ChunkGenerator chunkGenerator, ChunkProgressListener worldGenerationProgressListener, ChunkStatusUpdateListener chunkStatusChangeListener, Supplier persistentStateManagerFactory, int viewDistance, boolean dsync) {
- super(new RegionStorageInfo(session.getLevelId(), world.dimension(), "chunk"), session.getDimensionPath(world.dimension()).resolve("region"), dataFixer, dsync);
-@@ -1282,8 +1286,28 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
- return ChunkMap.this.level.getServer().getScaledTrackingDistance(initialDistance);
- }
-
-+ private static int getHighestRange(Entity parent, int highest) {
-+ List passengers = parent.getPassengers();
-+
-+ for (int i = 0, size = passengers.size(); i < size; i++) {
-+ Entity entity = passengers.get(i);
-+ int range = entity.getType().clientTrackingRange() * 16;
-+ range = org.spigotmc.TrackingRange.getEntityTrackingRange(entity, range); // Paper
-+
-+ if (range > highest) { // Paper - we need the lowest range thanks to the fact that our tracker doesn't account for passenger logic // Tuinity - not anymore!
-+ highest = range;
-+ }
-+
-+ highest = getHighestRange(entity, highest);
-+ }
-+
-+ return highest;
-+ }
-+
- private int getEffectiveRange() {
- int i = this.range;
-+ // Pufferfish start - remove iterators and streams
-+ /*
- Iterator iterator = this.entity.getIndirectPassengers().iterator();
-
- while (iterator.hasNext()) {
-@@ -1295,6 +1319,9 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
- i = j;
- }
- }
-+ */
-+ i = getHighestRange(this.entity, i);
-+ // Pufferfish end
-
- 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 dcb5651d1d9b10b40430fb2f713beedf68336704..dbc62bf37a9e6e1936558338521938a47a51e2d6 100644
+index d021cd5b6136f0125076513977f430c6d4dd4f9f..1cb8c9d21eef27492efc4995525c198cbffd4b9b 100644
--- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java
+++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
-@@ -128,6 +128,9 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon
- // Paper end - rewrite chunk system
- private ServerChunkCache.ChunkAndHolder[] iterationCopy; // Paper - chunk tick iteration optimisations
+@@ -176,6 +176,9 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon
+ // Paper end - chunk tick iteration optimisations
+
+ public boolean firstRunSpawnCounts = true; // Pufferfish
+ public final java.util.concurrent.atomic.AtomicBoolean _pufferfish_spawnCountsReady = new java.util.concurrent.atomic.AtomicBoolean(false); // Pufferfish - optimize countmobs
@@ -1264,49 +1084,8 @@ index dcb5651d1d9b10b40430fb2f713beedf68336704..dbc62bf37a9e6e1936558338521938a4
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 persistentStateManagerFactory) {
this.level = world;
this.mainThreadProcessor = new ServerChunkCache.MainThreadExecutor(world);
-@@ -461,6 +464,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon
- 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
-+ if (!gg.pufferfish.pufferfish.PufferfishConfig.enableAsyncMobSpawning) { // Pufferfish - moved down when async processing
- // re-set mob counts
- for (ServerPlayer player : this.level.players) {
- // Paper start - per player mob spawning backoff
-@@ -475,14 +479,18 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon
- }
- // Paper end - per player mob spawning backoff
- }
-- spawnercreature_d = NaturalSpawner.createState(naturalSpawnChunkCount, this.level.getAllEntities(), this::getFullChunk, null, true);
-+ lastSpawnState = NaturalSpawner.createState(naturalSpawnChunkCount, this.level.getAllEntities(), this::getFullChunk, null, true); // Pufferfish - async mob spawning
-+ } // Pufferfish - (endif) moved down when async processing
- } else {
-- spawnercreature_d = NaturalSpawner.createState(naturalSpawnChunkCount, this.level.getAllEntities(), this::getFullChunk, !this.level.paperConfig().entities.spawning.perPlayerMobSpawns ? new LocalMobCapCalculator(this.chunkMap) : null, false);
-+ // Pufferfish start - async mob spawning
-+ lastSpawnState = NaturalSpawner.createState(naturalSpawnChunkCount, this.level.getAllEntities(), this::getFullChunk, !this.level.paperConfig().entities.spawning.perPlayerMobSpawns ? new LocalMobCapCalculator(this.chunkMap) : null, false);
-+ _pufferfish_spawnCountsReady.set(true);
-+ // Pufferfish end
- }
- // Paper end - Optional per player mob spawns
- this.level.timings.countNaturalMobs.stopTiming(); // Paper - timings
-
-- this.lastSpawnState = spawnercreature_d;
-+ // this.lastSpawnState = spawnercreature_d; // Pufferfish - this is managed asynchronously
- gameprofilerfiller.popPush("spawnAndTick");
- boolean flag = this.level.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING) && !this.level.players().isEmpty(); // CraftBukkit
-
-@@ -507,8 +515,8 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon
-
- if (true && this.chunkMap.anyPlayerCloseEnoughForSpawning(chunkcoordintpair)) { // Paper - rewrite chunk system
- chunk1.incrementInhabitedTime(j);
-- if (flag && (this.spawnEnemies || this.spawnFriendlies) && this.level.getWorldBorder().isWithinBounds(chunkcoordintpair) && this.chunkMap.anyPlayerCloseEnoughForSpawning(chunkcoordintpair, true)) { // Spigot
-- NaturalSpawner.spawnForChunk(this.level, chunk1, spawnercreature_d, this.spawnFriendlies, this.spawnEnemies, flag1);
-+ if (flag && (this.spawnEnemies || this.spawnFriendlies) && (!gg.pufferfish.pufferfish.PufferfishConfig.enableAsyncMobSpawning || _pufferfish_spawnCountsReady.get()) && this.level.getWorldBorder().isWithinBounds(chunkcoordintpair) && this.chunkMap.anyPlayerCloseEnoughForSpawning(chunkcoordintpair, true)) { // Spigot
-+ NaturalSpawner.spawnForChunk(this.level, chunk1, lastSpawnState, this.spawnFriendlies, this.spawnEnemies, flag1); // Pufferfish
- }
-
- if (true) { // Paper - rewrite chunk system
-@@ -552,6 +560,40 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon
- gameprofilerfiller.pop();
+@@ -504,6 +507,43 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon
+ this.broadcastChangedChunks(gameprofilerfiller);
gameprofilerfiller.pop();
}
+
@@ -1334,10 +1113,13 @@ index dcb5651d1d9b10b40430fb2f713beedf68336704..dbc62bf37a9e6e1936558338521938a4
+ int mapped = distanceManager.getNaturalSpawnChunkCount();
+ ca.spottedleaf.moonrise.common.list.IteratorSafeOrderedReferenceSet.Iterator objectiterator =
+ level.entityTickList.entities.iterator(ca.spottedleaf.moonrise.common.list.IteratorSafeOrderedReferenceSet.ITERATOR_FLAG_SEE_ADDITIONS);
-+ gg.pufferfish.pufferfish.util.IterableWrapper wrappedIterator =
-+ new gg.pufferfish.pufferfish.util.IterableWrapper<>(objectiterator);
-+ lastSpawnState = NaturalSpawner.createState(mapped, wrappedIterator, this::getFullChunk, null, true);
-+ objectiterator.finishedIterating();
++ try {
++ gg.pufferfish.pufferfish.util.IterableWrapper wrappedIterator =
++ new gg.pufferfish.pufferfish.util.IterableWrapper<>(objectiterator);
++ lastSpawnState = NaturalSpawner.createState(mapped, wrappedIterator, this::getFullChunk, null, true);
++ } finally {
++ objectiterator.finishedIterating();
++ }
+ _pufferfish_spawnCountsReady.set(true);
+ });
+ }
@@ -1345,40 +1127,89 @@ index dcb5651d1d9b10b40430fb2f713beedf68336704..dbc62bf37a9e6e1936558338521938a4
+ // Pufferfish end
}
- private void getFullChunk(long pos, Consumer chunkConsumer) {
+ private void broadcastChangedChunks(ProfilerFiller profiler) {
+@@ -553,6 +593,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon
+ final int naturalSpawnChunkCount = j;
+ 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
++ if (!gg.pufferfish.pufferfish.PufferfishConfig.enableAsyncMobSpawning) { // Pufferfish - moved down when async processing
+ // re-set mob counts
+ for (ServerPlayer player : this.level.players) {
+ // Paper start - per player mob spawning backoff
+@@ -567,13 +608,17 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon
+ }
+ // Paper end - per player mob spawning backoff
+ }
+- spawnercreature_d = NaturalSpawner.createState(naturalSpawnChunkCount, this.level.getAllEntities(), this::getFullChunk, null, true);
++ lastSpawnState = NaturalSpawner.createState(naturalSpawnChunkCount, this.level.getAllEntities(), this::getFullChunk, null, true); // Pufferfish - async mob spawning
++ } // Pufferfish - (endif) moved down when async processing
+ } else {
+- spawnercreature_d = NaturalSpawner.createState(naturalSpawnChunkCount, this.level.getAllEntities(), this::getFullChunk, !this.level.paperConfig().entities.spawning.perPlayerMobSpawns ? new LocalMobCapCalculator(this.chunkMap) : null, false);
++ // Pufferfish start - async mob spawning
++ lastSpawnState = NaturalSpawner.createState(naturalSpawnChunkCount, this.level.getAllEntities(), this::getFullChunk, !this.level.paperConfig().entities.spawning.perPlayerMobSpawns ? new LocalMobCapCalculator(this.chunkMap) : null, false);
++ _pufferfish_spawnCountsReady.set(true);
++ // Pufferfish end
+ }
+ // Paper end - Optional per player mob spawns
+
+- this.lastSpawnState = spawnercreature_d;
++ // this.lastSpawnState = spawnercreature_d; // Pufferfish - this is managed asynchronously
+ profiler.popPush("spawnAndTick");
+ boolean flag = this.level.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING) && !this.level.players().isEmpty(); // CraftBukkit
+ int k = this.level.getGameRules().getInt(GameRules.RULE_RANDOMTICKING);
+@@ -590,7 +635,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon
+ // Paper end - PlayerNaturallySpawnCreaturesEvent
+ boolean flag1 = this.level.ticksPerSpawnCategory.getLong(org.bukkit.entity.SpawnCategory.ANIMAL) != 0L && this.level.getLevelData().getGameTime() % this.level.ticksPerSpawnCategory.getLong(org.bukkit.entity.SpawnCategory.ANIMAL) == 0L; // CraftBukkit
+
+- list1 = NaturalSpawner.getFilteredSpawningCategories(spawnercreature_d, this.spawnFriendlies, this.spawnEnemies, flag1, this.level); // CraftBukkit
++ list1 = NaturalSpawner.getFilteredSpawningCategories(lastSpawnState, this.spawnFriendlies, this.spawnEnemies, flag1, this.level); // CraftBukkit // Pufferfish
+ } else {
+ list1 = List.of();
+ }
+@@ -602,8 +647,8 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon
+ ChunkPos chunkcoordintpair = chunk.getPos();
+
+ chunk.incrementInhabitedTime(timeDelta);
+- if (!list1.isEmpty() && this.level.getWorldBorder().isWithinBounds(chunkcoordintpair) && this.chunkMap.anyPlayerCloseEnoughForSpawning(chunkcoordintpair, true)) { // Spigot
+- NaturalSpawner.spawnForChunk(this.level, chunk, spawnercreature_d, list1);
++ if (!list1.isEmpty() && this.level.getWorldBorder().isWithinBounds(chunkcoordintpair) && (!gg.pufferfish.pufferfish.PufferfishConfig.enableAsyncMobSpawning || _pufferfish_spawnCountsReady.get()) && this.chunkMap.anyPlayerCloseEnoughForSpawning(chunkcoordintpair, true)) { // Spigot // Pufferfish
++ NaturalSpawner.spawnForChunk(this.level, chunk, lastSpawnState, list1); // Pufferfish
+ }
+
+ if (true) { // Paper - rewrite chunk system
diff --git a/src/main/java/net/minecraft/server/level/ServerEntity.java b/src/main/java/net/minecraft/server/level/ServerEntity.java
-index 8ea2f24695f5dad55e21f238b69442513e7a90c6..5a2f7f7cf79dcbb996574e18cad86ebb54bd718e 100644
+index 90eb4927fa51ce3df86aa7b6c71f49150a03e337..3ea4920323606150548d6e9fc1ce67724f19dc60 100644
--- a/src/main/java/net/minecraft/server/level/ServerEntity.java
+++ b/src/main/java/net/minecraft/server/level/ServerEntity.java
-@@ -193,6 +193,7 @@ public class ServerEntity {
- boolean flag6 = k < -32768L || k > 32767L || l < -32768L || l > 32767L || i1 < -32768L || i1 > 32767L;
+@@ -207,6 +207,7 @@ public class ServerEntity {
+ boolean flag5 = i < -32768L || i > 32767L || j < -32768L || j > 32767L || k < -32768L || k > 32767L;
- if (!this.forceStateResync && !flag6 && this.teleportDelay <= 400 && !this.wasRiding && this.wasOnGround == this.entity.onGround()) { // Paper - fix desync when a player is added to the tracker
-+ if (flag2 || flag3 || this.entity instanceof AbstractArrow) { // Pufferfish
- if ((!flag2 || !flag3) && !(this.entity instanceof AbstractArrow)) {
- if (flag2) {
- packet1 = new ClientboundMoveEntityPacket.Pos(this.entity.getId(), (short) ((int) k), (short) ((int) l), (short) ((int) i1), this.entity.onGround());
-@@ -206,6 +207,7 @@ public class ServerEntity {
- flag4 = true;
- flag5 = true;
- }
-+ } // Pufferfish
- } else {
- this.wasOnGround = this.entity.onGround();
- this.teleportDelay = 0;
+ if (!this.forceStateResync && !flag5 && this.teleportDelay <= 400 && !this.wasRiding && this.wasOnGround == this.entity.onGround()) { // Paper - fix desync when a player is added to the tracker
++ if (flag2 || flag3 || this.entity instanceof AbstractArrow) { // Pufferfish
+ if ((!flag2 || !flag) && !(this.entity instanceof AbstractArrow)) {
+ if (flag2) {
+ packet1 = new ClientboundMoveEntityPacket.Pos(this.entity.getId(), (short) ((int) i), (short) ((int) j), (short) ((int) k), this.entity.onGround());
+@@ -220,6 +221,7 @@ public class ServerEntity {
+ flag3 = true;
+ flag4 = true;
+ }
++ } // Pufferfish
+ } else {
+ 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 f9abf63e12ea930275121b470e4e4906cff0fc12..2a8ffcdd262ea73844500846c6401cdda7153d61 100644
+index b4027f5cf90935a1fe3ab2c28b0bcbb55a7b541b..8091e78e56c0e4ea880e6f88ec9c15ca5e67b9b0 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
-@@ -715,6 +715,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
+@@ -792,6 +792,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
+
org.spigotmc.ActivationRange.activateEntities(this); // Spigot
- this.timings.entityTick.startTiming(); // Spigot
this.entityTickList.forEach((entity) -> {
+ entity.activatedPriorityReset = false; // Pufferfish - DAB
if (!entity.isRemoved()) {
- if (false && this.shouldDiscardEntity(entity)) { // CraftBukkit - We prevent spawning in general, so this butchering is not needed
- entity.discard();
-@@ -734,7 +735,20 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
+ if (!tickratemanager.isEntityFrozen(entity)) {
+ gameprofilerfiller.push("checkDespawn");
+@@ -809,7 +810,20 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
}
gameprofilerfiller.push("tick");
@@ -1400,23 +1231,20 @@ index f9abf63e12ea930275121b470e4e4906cff0fc12..2a8ffcdd262ea73844500846c6401cdd
gameprofilerfiller.pop();
}
}
-@@ -861,9 +875,9 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
- int j = chunkcoordintpair.getMinBlockX();
- int k = chunkcoordintpair.getMinBlockZ();
- ProfilerFiller gameprofilerfiller = this.getProfiler();
--
+@@ -930,7 +944,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
+ ProfilerFiller gameprofilerfiller = Profiler.get();
+
gameprofilerfiller.push("thunder");
-- 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
+- if (!this.paperConfig().environment.disableThunder && flag && this.isThundering() && this.spigotConfig.thunderChance > 0 && simpleRandom.nextInt(this.spigotConfig.thunderChance) == 0) { // Spigot // Paper - Option to disable thunder // Paper - optimise random ticking
++ if (!this.paperConfig().environment.disableThunder && flag && this.isThundering() && this.spigotConfig.thunderChance > 0 && /*simpleRandom.nextInt(this.spigotConfig.thunderChance) == 0*/ chunk.shouldDoLightning(this.simpleRandom)) { // Spigot // Paper - Option to disable thunder // Paper - optimise random ticking // Pufferfish - replace random with shouldDoLightning
BlockPos blockposition = this.findLightningTargetAround(this.getBlockRandomPos(j, 0, k, 15));
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 064d52d4479727c6a32bf357be8da32d1760e7fc..8f2214008d76d00267152b5db0cf0fbdd3fbbfb7 100644
+index cd1b6b539a62fa5237d6dab2d1c09a2e631d9941..56a6367245b133f3ac86af99a738325885f2e94a 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-@@ -1157,6 +1157,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
+@@ -1172,6 +1172,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
@Override
public void handleEditBook(ServerboundEditBookPacket packet) {
@@ -1425,175 +1253,46 @@ index 064d52d4479727c6a32bf357be8da32d1760e7fc..8f2214008d76d00267152b5db0cf0fbd
final io.papermc.paper.configuration.type.number.IntOr.Disabled pageMax = io.papermc.paper.configuration.GlobalConfiguration.get().itemValidation.bookSize.pageMax;
if (!this.cserver.isPrimaryThread() && pageMax.enabled()) {
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
-index 4b54d0ea31062972e68ee8fafe3cfaf68f65a5cd..8492421ed2186c0eab517a67f3140b9988f65250 100644
+index a15546e433ebba6c0de01bdaaef201a3d99a87b5..0a0d004699eeaae12852b197b32a449a86de3028 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
-@@ -429,6 +429,9 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
- private UUID originWorld;
+@@ -389,6 +389,9 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
public boolean freezeLocked = false; // Paper - Freeze Tick Lock API
public boolean fixedPose = false; // Paper - Expand Pose API
+ private final int despawnTime; // Paper - entity despawn time limit
+ public boolean activatedPriorityReset = false; // Pufferfish - DAB
+ public int activatedPriority = gg.pufferfish.pufferfish.PufferfishConfig.maximumActivationPrio; // Pufferfish - DAB (golf score)
+ public final BlockPos.MutableBlockPos cachedBlockPos = new BlockPos.MutableBlockPos(); // Pufferfish - reduce entity allocations
public void setOrigin(@javax.annotation.Nonnull Location location) {
this.origin = location.toVector();
-@@ -845,6 +848,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
- }
-
- public void tick() {
-+ // Pufferfish start - entity TTL
-+ if (type != EntityType.PLAYER && type.ttl >= 0 && this.tickCount >= type.ttl) {
-+ discard();
-+ return;
-+ }
-+ // Pufferfish end - entity TTL
- this.baseTick();
- }
-
-@@ -4452,16 +4461,18 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
- }
-
- public boolean updateFluidHeightAndDoFluidPushing(TagKey tag, double speed) {
-- if (this.touchingUnloadedChunk()) {
-+ if (false && this.touchingUnloadedChunk()) { // Pufferfish - cost of a lookup here is the same cost as below, so skip
- return false;
- } else {
- AABB axisalignedbb = this.getBoundingBox().deflate(0.001D);
-- int i = Mth.floor(axisalignedbb.minX);
-- int j = Mth.ceil(axisalignedbb.maxX);
-- int k = Mth.floor(axisalignedbb.minY);
-- int l = Mth.ceil(axisalignedbb.maxY);
-- int i1 = Mth.floor(axisalignedbb.minZ);
-- int j1 = Mth.ceil(axisalignedbb.maxZ);
-+ // Pufferfish start - rename
-+ int minBlockX = Mth.floor(axisalignedbb.minX);
-+ int maxBlockX = Mth.ceil(axisalignedbb.maxX);
-+ int minBlockY = Mth.floor(axisalignedbb.minY);
-+ int maxBlockY = Mth.ceil(axisalignedbb.maxY);
-+ int minBlockZ = Mth.floor(axisalignedbb.minZ);
-+ int maxBlockZ = Mth.ceil(axisalignedbb.maxZ);
-+ // Pufferfish end
- double d1 = 0.0D;
- boolean flag = this.isPushedByFluid();
- boolean flag1 = false;
-@@ -4469,14 +4480,61 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
- int k1 = 0;
- BlockPos.MutableBlockPos blockposition_mutableblockposition = new BlockPos.MutableBlockPos();
-
-- for (int l1 = i; l1 < j; ++l1) {
-- for (int i2 = k; i2 < l; ++i2) {
-- for (int j2 = i1; j2 < j1; ++j2) {
-- blockposition_mutableblockposition.set(l1, i2, j2);
-- FluidState fluid = this.level().getFluidState(blockposition_mutableblockposition);
-+ // Pufferfish start - based off CollisionUtil.getCollisionsForBlocksOrWorldBorder
-+ final int minSection = ca.spottedleaf.moonrise.common.util.WorldUtil.getMinSection(this.level());
-+ final int maxSection = ca.spottedleaf.moonrise.common.util.WorldUtil.getMaxSection(this.level());
-+ final int minBlock = minSection << 4;
-+ final int maxBlock = (maxSection << 4) | 15;
-+
-+ // special cases:
-+ if (minBlockY > maxBlock || maxBlockY < minBlock) {
-+ // no point in checking
-+ return false;
-+ }
-+
-+ int minYIterate = Math.max(minBlock, minBlockY);
-+ int maxYIterate = Math.min(maxBlock, maxBlockY);
-+
-+ int minChunkX = minBlockX >> 4;
-+ int maxChunkX = maxBlockX >> 4;
-+
-+ int minChunkZ = minBlockZ >> 4;
-+ int maxChunkZ = maxBlockZ >> 4;
-+
-+ for (int currChunkZ = minChunkZ; currChunkZ <= maxChunkZ; ++currChunkZ) {
-+ int minZ = currChunkZ == minChunkZ ? minBlockZ & 15 : 0; // coordinate in chunk
-+ int maxZ = currChunkZ == maxChunkZ ? maxBlockZ & 15 : 16; // coordinate in chunk
-+
-+ for (int currChunkX = minChunkX; currChunkX <= maxChunkX; ++currChunkX) {
-+ int minX = currChunkX == minChunkX ? minBlockX & 15 : 0; // coordinate in chunk
-+ int maxX = currChunkX == maxChunkX ? maxBlockX & 15 : 16; // coordinate in chunk
-+
-+ net.minecraft.world.level.chunk.ChunkAccess chunk = this.level().getChunkIfLoadedImmediately(currChunkX, currChunkZ);
-+ if (chunk == null) {
-+ return false; // if we're touching an unloaded chunk then it's false
-+ }
-+
-+ net.minecraft.world.level.chunk.LevelChunkSection[] sections = chunk.getSections();
-+
-+ for (int currY = minYIterate; currY < maxYIterate; ++currY) {
-+ net.minecraft.world.level.chunk.LevelChunkSection section = sections[(currY >> 4) - minSection];
-+
-+ if (section == null || section.hasOnlyAir() || section.fluidStateCount == 0) { // if no fluids, nothing in this section
-+ // empty
-+ // skip to next section
-+ currY = (currY & ~(15)) + 15; // increment by 15: iterator loop increments by the extra one
-+ continue;
-+ }
-+
-+ net.minecraft.world.level.chunk.PalettedContainer blocks = section.states;
-+
-+ for (int currZ = minZ; currZ < maxZ; ++currZ) {
-+ for (int currX = minX; currX < maxX; ++currX) {
-+ FluidState fluid = blocks.get(currX & 15, currY & 15, currZ & 15).getFluidState();
-
- if (fluid.is(tag)) {
-- double d2 = (double) ((float) i2 + fluid.getHeight(this.level(), blockposition_mutableblockposition));
-+ blockposition_mutableblockposition.set((currChunkX << 4) + currX, currY, (currChunkZ << 4) + currZ);
-+ double d2 = (double) ((float) currY + fluid.getHeight(this.level(), blockposition_mutableblockposition));
-
- if (d2 >= axisalignedbb.minY) {
- flag1 = true;
-@@ -4498,9 +4556,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
- // CraftBukkit end
- }
- }
-+ }
-+ }
- }
- }
- }
-+ // Pufferfish end
-
- if (vec3d.length() > 0.0D) {
- if (k1 > 0) {
diff --git a/src/main/java/net/minecraft/world/entity/EntityType.java b/src/main/java/net/minecraft/world/entity/EntityType.java
-index cb61462d4691a055a4b25f7b953609d8a154fdfe..f9440014ab2fe753c16b9383f5fffbb8adb76e79 100644
+index c8c2394558952d7ca57d29874485251b8f2b3400..7e7603680310976312050aaff5bdaa805901617f 100644
--- a/src/main/java/net/minecraft/world/entity/EntityType.java
+++ b/src/main/java/net/minecraft/world/entity/EntityType.java
-@@ -316,6 +316,8 @@ public class EntityType implements FeatureElement, EntityTypeT
- private final boolean canSpawnFarFromPlayer;
+@@ -385,6 +385,7 @@ public class EntityType implements FeatureElement, EntityTypeT
private final int clientTrackingRange;
private final int updateInterval;
+ private final String descriptionId;
+ public boolean dabEnabled = false; // Pufferfish
-+ public int ttl = -1; // Pufferfish
- @Nullable
- private String descriptionId;
@Nullable
+ private Component description;
+ private final Optional> lootTable;
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-index 2aa6374cd4a96efd85899be8cd3172a8257bfe6b..5132e108df37ca97ba94b8b72c0ef292cbb2ec94 100644
+index f36a075dbee2b96d01899e02460b1d8443e91749..e21e549e8102477aae599487acc6dd39616d6c26 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-@@ -157,7 +157,6 @@ import org.bukkit.event.entity.EntityTeleportEvent;
- import org.bukkit.event.player.PlayerItemConsumeEvent;
- // CraftBukkit end
+@@ -467,7 +467,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
--import co.aikar.timings.MinecraftTimings; // Paper
-
- public abstract class LivingEntity extends Entity implements Attackable {
-
-@@ -449,7 +448,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
- boolean flag = this instanceof net.minecraft.world.entity.player.Player;
-
- if (!this.level().isClientSide) {
+ if (world1 instanceof ServerLevel) {
+ worldserver1 = (ServerLevel) world1;
- if (this.isInWall()) {
+ if (shouldCheckForSuffocation() && this.isInWall()) { // Pufferfish - optimize suffocation
- this.hurt(this.damageSources().inWall(), 1.0F);
+ this.hurtServer(worldserver1, this.damageSources().inWall(), 1.0F);
} else if (flag && !this.level().getWorldBorder().isWithinBounds(this.getBoundingBox())) {
- double d0 = this.level().getWorldBorder().getDistanceToBorder(this) + this.level().getWorldBorder().getDamageSafeZone();
-@@ -1409,6 +1408,19 @@ public abstract class LivingEntity extends Entity implements Attackable {
- return this.getHealth() <= 0.0F;
+ double d1 = this.level().getWorldBorder().getDistanceToBorder(this) + this.level().getWorldBorder().getDamageSafeZone();
+@@ -564,6 +564,19 @@ public abstract class LivingEntity extends Entity implements Attackable {
+ gameprofilerfiller.pop();
}
+ // Pufferfish start - optimize suffocation
@@ -1610,9 +1309,9 @@ index 2aa6374cd4a96efd85899be8cd3172a8257bfe6b..5132e108df37ca97ba94b8b72c0ef292
+ // Pufferfish end
+
@Override
- public boolean hurt(DamageSource source, float amount) {
- if (this.isInvulnerableTo(source)) {
-@@ -2065,6 +2077,20 @@ public abstract class LivingEntity extends Entity implements Attackable {
+ protected float getBlockSpeedFactor() {
+ return Mth.lerp((float) this.getAttributeValue(Attributes.MOVEMENT_EFFICIENCY), super.getBlockSpeedFactor(), 1.0F);
+@@ -2120,6 +2133,20 @@ public abstract class LivingEntity extends Entity implements Attackable {
return this.lastClimbablePos;
}
@@ -1634,10 +1333,10 @@ index 2aa6374cd4a96efd85899be8cd3172a8257bfe6b..5132e108df37ca97ba94b8b72c0ef292
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 763abeea3f14f15c27d600e0bdae44b387687bb4..1f3a55d34f58964fb1f642ad59c9d7b7aa6fa4ff 100644
+index dbd321f3dc3cc80737830db63aed47a6935e8e89..237eed7259f0cedf5b96ea54c195c3359d286064 100644
--- a/src/main/java/net/minecraft/world/entity/Mob.java
+++ b/src/main/java/net/minecraft/world/entity/Mob.java
-@@ -232,14 +232,16 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab
+@@ -235,14 +235,16 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab
return this.lookControl;
}
@@ -1656,7 +1355,7 @@ index 763abeea3f14f15c27d600e0bdae44b387687bb4..1f3a55d34f58964fb1f642ad59c9d7b7
this.targetSelector.tick();
}
}
-@@ -929,16 +931,20 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab
+@@ -927,16 +929,20 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab
if (i % 2 != 0 && this.tickCount > 1) {
gameprofilerfiller.push("targetSelector");
@@ -1678,7 +1377,7 @@ index 763abeea3f14f15c27d600e0bdae44b387687bb4..1f3a55d34f58964fb1f642ad59c9d7b7
gameprofilerfiller.pop();
}
diff --git a/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java b/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java
-index 69992ebc999ea3ff9e47e4e049bcc514c01150ca..2c9aab24b51d2f0a50100089fe72093b501d383a 100644
+index 94d04a20f97405e02d7cccaabadc7a7e86e336f7..31aa4221de653f0695b21d438964bae20cffad07 100644
--- a/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java
+++ b/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java
@@ -23,9 +23,11 @@ public class AttributeMap {
@@ -1723,13 +1422,13 @@ index 758f62416ca9c02351348ac0d41deeb4624abc0e..69130969c9a434ec2361e573c9a1ec9f
}
}
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 9bdbf3e9453bc3ce96d52d04b8cde0d05f7356d8..e32c3120f9c5ddf429d8428c370ff61320a38de6 100644
+index 29ae74339a4831ccef3d01e8054931715ba192ad..5a439e3b0fdc1010884634c1e046e49d8b9aee17 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
-@@ -43,9 +43,12 @@ public class GoalSelector {
+@@ -38,9 +38,12 @@ public class GoalSelector {
}
- // Paper start
+ // Paper start - EAR 2
- public boolean inactiveTick() {
+ public boolean inactiveTick(int tickRate, boolean inactive) { // Pufferfish start
+ if (inactive && !gg.pufferfish.pufferfish.PufferfishConfig.dearEnabled) tickRate = 4; // reset to Paper's
@@ -1753,36 +1452,11 @@ index aee0147649d458b87d92496eda0c1723ebe570d2..89e9ea999d2fbd81a1d74382ef3fcd67
if (this.mob.isWithinRestriction(mutableBlockPos) && this.isValidTarget(this.mob.level(), mutableBlockPos)) {
this.blockPos = mutableBlockPos;
this.mob.movingTarget = mutableBlockPos == BlockPos.ZERO ? null : mutableBlockPos.immutable(); // Paper
-diff --git a/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java b/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java
-index aecb0ad814586bfc5e56755ee14379a69388b38c..00ef7f6d60bcaee2506cf111461f2c2f8eedd59a 100644
---- a/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java
-+++ b/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java
-@@ -76,9 +76,18 @@ public class TargetingConditions {
- }
-
- if (this.range > 0.0) {
-- double d = this.testInvisible ? targetEntity.getVisibilityPercent(baseEntity) : 1.0;
-- double e = Math.max((this.useFollowRange ? this.getFollowRange(baseEntity) : this.range) * d, 2.0); // Paper - Fix MC-145656
-+ // Pufferfish start - check range before getting visibility
-+ // d = invisibility percent, e = follow range adjusted for invisibility, f = distance
- double f = baseEntity.distanceToSqr(targetEntity.getX(), targetEntity.getY(), targetEntity.getZ());
-+ double followRangeRaw = this.useFollowRange ? this.getFollowRange(baseEntity) : this.range;
-+
-+ if (f > followRangeRaw * followRangeRaw) { // the actual follow range will always be this value or smaller, so if the distance is larger then it never will return true after getting invis
-+ return false;
-+ }
-+
-+ double d = this.testInvisible ? targetEntity.getVisibilityPercent(baseEntity) : 1.0;
-+ double e = Math.max((followRangeRaw) * d, 2.0); // Paper - Fix MC-145656
-+ // Pufferfish end
- if (f > e * e) {
- return false;
- }
diff --git a/src/main/java/net/minecraft/world/entity/ambient/Bat.java b/src/main/java/net/minecraft/world/entity/ambient/Bat.java
-index dc27ddf5131e7398a5390a5187261d4c7fb6ccaa..e44af851263f27aa0009b14a60bb2d0642a5ce74 100644
+index 60c2868f255d372226e0c1389caaa5477bbef41e..3de177a40649183b5b210e5f0c610a527287e9ec 100644
--- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java
+++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java
-@@ -239,13 +239,22 @@ public class Bat extends AmbientCreature {
+@@ -242,13 +242,22 @@ public class Bat extends AmbientCreature {
}
}
@@ -1807,90 +1481,99 @@ index dc27ddf5131e7398a5390a5187261d4c7fb6ccaa..e44af851263f27aa0009b14a60bb2d06
private void setupAnimationStates() {
if (this.isResting()) {
diff --git a/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java b/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java
-index 69986f75d3cf729204cca0c7e5428536af31f695..98a759dbe46e2ead39af0f340c9b73c8f4ddce1e 100644
+index 05c3d43fafc781e2c2d762dd5f509753df8da3b3..94692082aa85d7e4e52a4e16bb5e49b0bf6eb93f 100644
--- a/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java
+++ b/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java
-@@ -217,9 +217,11 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS
+@@ -219,11 +219,13 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS
return 0.4F;
}
+ private int behaviorTick = 0; // Pufferfish
@Override
- protected void customServerAiStep() {
- this.level().getProfiler().push("allayBrain");
+ protected void customServerAiStep(ServerLevel world) {
+ ProfilerFiller gameprofilerfiller = Profiler.get();
+
+ gameprofilerfiller.push("allayBrain");
+ if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish
- this.getBrain().tick((ServerLevel) this.level(), this);
- this.level().getProfiler().pop();
- this.level().getProfiler().push("allayActivityUpdate");
+ this.getBrain().tick(world, this);
+ gameprofilerfiller.pop();
+ gameprofilerfiller.push("allayActivityUpdate");
diff --git a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java
-index 01a0731e92d39c8718538244e34a271fb8717fc2..44937570f8e968ba4fe2822f69ca8f09679da89d 100644
+index 31b10cd404b672d7ce21c2107d8f83e32de26ef4..cb47876a13cb1990bb0ab4cff1bbe57b3b2d0a5e 100644
--- a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java
+++ b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java
-@@ -269,9 +269,11 @@ public class Axolotl extends Animal implements LerpingModel, VariantHolder, B
return true;
}
+ private int behaviorTick = 0; // Pufferfish
@Override
- protected void customServerAiStep() {
- this.level().getProfiler().push("axolotlBrain");
+ protected void customServerAiStep(ServerLevel world) {
+ ProfilerFiller gameprofilerfiller = Profiler.get();
+
+ gameprofilerfiller.push("axolotlBrain");
+ if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish
- this.getBrain().tick((ServerLevel) this.level(), this);
- this.level().getProfiler().pop();
- this.level().getProfiler().push("axolotlActivityUpdate");
+ this.getBrain().tick(world, this);
+ gameprofilerfiller.pop();
+ gameprofilerfiller.push("axolotlActivityUpdate");
diff --git a/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java b/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java
-index 816977990639ec0559b652fc9666afd5046f0a5d..714703519965e8dae42be7442f292b581cc7c049 100644
+index 36846ba6b6c7494c745ebd8b221479a9d02ff318..3461c7150fc44ee608169aa993f6ff44d4c978be 100644
--- a/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java
+++ b/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java
-@@ -181,9 +181,11 @@ public class Frog extends Animal implements VariantHolder> {
+@@ -184,10 +184,12 @@ public class Frog extends Animal implements VariantHolder> {
.ifPresent(this::setVariant);
}
+ private int behaviorTick = 0; // Pufferfish
@Override
- protected void customServerAiStep() {
- this.level().getProfiler().push("frogBrain");
+ protected void customServerAiStep(ServerLevel world) {
+ ProfilerFiller profilerFiller = Profiler.get();
+ profilerFiller.push("frogBrain");
+ if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish
- this.getBrain().tick((ServerLevel)this.level(), this);
- this.level().getProfiler().pop();
- this.level().getProfiler().push("frogActivityUpdate");
+ this.getBrain().tick(world, this);
+ profilerFiller.pop();
+ profilerFiller.push("frogActivityUpdate");
diff --git a/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java b/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java
-index 43046f4a0cff620834ac4647efdcde227185b2ff..90393485ebcf8a4c8c74802fff942b1af8cfbf00 100644
+index 48ac8c3f6e00c3c2dc67b6c994be7c0ac6dfcf81..cf326ef35bac732e7addf75537963593d5b268ae 100644
--- a/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java
+++ b/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java
-@@ -83,9 +83,11 @@ public class Tadpole extends AbstractFish {
+@@ -83,11 +83,13 @@ public class Tadpole extends AbstractFish {
return SoundEvents.TADPOLE_FLOP;
}
+ private int behaviorTick = 0; // Pufferfish
@Override
- protected void customServerAiStep() {
- this.level().getProfiler().push("tadpoleBrain");
+ protected void customServerAiStep(ServerLevel world) {
+ ProfilerFiller gameprofilerfiller = Profiler.get();
+
+ gameprofilerfiller.push("tadpoleBrain");
+ if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish
- this.getBrain().tick((ServerLevel) this.level(), this);
- this.level().getProfiler().pop();
- this.level().getProfiler().push("tadpoleActivityUpdate");
+ this.getBrain().tick(world, this);
+ gameprofilerfiller.pop();
+ gameprofilerfiller.push("tadpoleActivityUpdate");
diff --git a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
-index 376bcbc189008464f4d518c1e07643431ba96306..07bdea8a7d6706839a758afe0242202c7e841416 100644
+index 76aca47d8638d5c37c57d3a59fa7f8ceaa5a53b4..fb92cd4b0c15b614c0c06d2867039aee1a6212a2 100644
--- a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
+++ b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
-@@ -190,9 +190,11 @@ public class Goat extends Animal {
+@@ -192,11 +192,13 @@ public class Goat extends Animal {
return (Brain) super.getBrain(); // CraftBukkit - decompile error
}
+ private int behaviorTick = 0; // Pufferfish
@Override
- protected void customServerAiStep() {
- this.level().getProfiler().push("goatBrain");
+ protected void customServerAiStep(ServerLevel world) {
+ ProfilerFiller gameprofilerfiller = Profiler.get();
+
+ gameprofilerfiller.push("goatBrain");
+ if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish
- this.getBrain().tick((ServerLevel) this.level(), this);
- this.level().getProfiler().pop();
- this.level().getProfiler().push("goatActivityUpdate");
+ this.getBrain().tick(world, this);
+ gameprofilerfiller.pop();
+ gameprofilerfiller.push("goatActivityUpdate");
diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java
-index d3b4d492aee380dc17f4232d90eaae4f07bb9f86..82921c56c49edb0ca07425da563aa4876d4e6fb1 100644
+index 244e38db508efa3eebebb6392c4ebb0805367baf..d62c0d3c2bd5df5ee908bdcfdffaae9ce780810f 100644
--- a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java
+++ b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java
-@@ -154,6 +154,13 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob
+@@ -152,6 +152,13 @@ public class WitherBoss extends Monster implements RangedAttackMob {
this.bossEvent.setName(this.getDisplayName());
}
@@ -1905,21 +1588,21 @@ index d3b4d492aee380dc17f4232d90eaae4f07bb9f86..82921c56c49edb0ca07425da563aa487
protected SoundEvent getAmbientSound() {
return SoundEvents.WITHER_AMBIENT;
diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
-index 828c51477cd8f35d591367b30bf4feef6a250292..ace4959f818bf56882b290d109b8b97f2c145631 100644
+index 48dcd2bc12ce1d08cc5195bff5460dc0dd9902d3..c7153cfec847fca4ce5d9ec729628aed5bed11be 100644
--- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
+++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
-@@ -320,11 +320,17 @@ public class EnderMan extends Monster implements NeutralMob {
+@@ -307,11 +307,17 @@ public class EnderMan extends Monster implements NeutralMob {
private boolean teleport(double x, double y, double z) {
BlockPos.MutableBlockPos blockposition_mutableblockposition = new BlockPos.MutableBlockPos(x, y, z);
-- while (blockposition_mutableblockposition.getY() > this.level().getMinBuildHeight() && !this.level().getBlockState(blockposition_mutableblockposition).blocksMotion()) {
+- while (blockposition_mutableblockposition.getY() > this.level().getMinY() && !this.level().getBlockState(blockposition_mutableblockposition).blocksMotion()) {
+ // Pufferfish start - single chunk lookup
+ net.minecraft.world.level.chunk.LevelChunk chunk = this.level().getChunkIfLoaded(blockposition_mutableblockposition);
+ if (chunk == null) {
+ return false;
+ }
+ // Pufferfish end
-+ while (blockposition_mutableblockposition.getY() > this.level().getMinBuildHeight() && !chunk.getBlockState(blockposition_mutableblockposition).blocksMotion()) { // Pufferfish
++ while (blockposition_mutableblockposition.getY() > this.level().getMinY() && !chunk.getBlockState(blockposition_mutableblockposition).blocksMotion()) { // Pufferfish
blockposition_mutableblockposition.move(Direction.DOWN);
}
@@ -1929,60 +1612,63 @@ index 828c51477cd8f35d591367b30bf4feef6a250292..ace4959f818bf56882b290d109b8b97f
boolean flag1 = iblockdata.getFluidState().is(FluidTags.WATER);
diff --git a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java
-index d5e0c493f4c348724958193795ceb987765a465f..7de73564bc73d6504e18977e97a2ef5f46189e15 100644
+index 6ea90e54759dbeab025e0a1896ee834ea9986427..3f625cb9b1237ca8f782bca2f182dfe72853bd96 100644
--- a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java
+++ b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java
-@@ -153,9 +153,11 @@ public class Hoglin extends Animal implements Enemy, HoglinBase {
+@@ -156,10 +156,12 @@ public class Hoglin extends Animal implements Enemy, HoglinBase {
return (Brain)super.getBrain();
}
+ private int behaviorTick; // Pufferfish
@Override
- protected void customServerAiStep() {
- this.level().getProfiler().push("hoglinBrain");
+ protected void customServerAiStep(ServerLevel world) {
+ ProfilerFiller profilerFiller = Profiler.get();
+ profilerFiller.push("hoglinBrain");
+ if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish
- this.getBrain().tick((ServerLevel)this.level(), this);
- this.level().getProfiler().pop();
+ this.getBrain().tick(world, this);
+ profilerFiller.pop();
HoglinAi.updateActivity(this);
diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java
-index bc58323801ee16fe9b63c21332144ec002a902f2..b2ae7088f90bf3cd04a59c6ddfdba60c58c6e1c8 100644
+index e04d2c5e75dc774fe893a552474fdb8045c32693..d1870bf4c01c846a721480eb6611a67db9b98d02 100644
--- a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java
+++ b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java
-@@ -293,9 +293,11 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento
+@@ -304,11 +304,13 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento
return !this.cannotHunt;
}
+ private int behaviorTick; // Pufferfish
@Override
- protected void customServerAiStep() {
- this.level().getProfiler().push("piglinBrain");
+ protected void customServerAiStep(ServerLevel world) {
+ ProfilerFiller gameprofilerfiller = Profiler.get();
+
+ gameprofilerfiller.push("piglinBrain");
+ if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish
- this.getBrain().tick((ServerLevel) this.level(), this);
- this.level().getProfiler().pop();
+ this.getBrain().tick(world, this);
+ gameprofilerfiller.pop();
PiglinAi.updateActivity(this);
diff --git a/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java b/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java
-index 38bf417a9ad4647f4af24d969f3bf4fed9c4bad7..40bbd80b1ed4afede6f0769e7f3fcfc61200452f 100644
+index 6180019da58b19d2595da508aed3196af922d587..457f9f6bf6a8e8f2e0b4246a0589e344756370d2 100644
--- a/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java
+++ b/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java
-@@ -272,11 +272,13 @@ public class Warden extends Monster implements VibrationSystem {
+@@ -275,11 +275,13 @@ public class Warden extends Monster implements VibrationSystem {
}
+ private int behaviorTick = 0; // Pufferfish
@Override
- protected void customServerAiStep() {
- ServerLevel worldserver = (ServerLevel) this.level();
+ protected void customServerAiStep(ServerLevel world) {
+ ProfilerFiller gameprofilerfiller = Profiler.get();
- worldserver.getProfiler().push("wardenBrain");
+ gameprofilerfiller.push("wardenBrain");
+ if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish
- this.getBrain().tick(worldserver, this);
- this.level().getProfiler().pop();
- super.customServerAiStep();
+ this.getBrain().tick(world, this);
+ gameprofilerfiller.pop();
+ super.customServerAiStep(world);
diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java
-index 7e1871401ec5e3e9a85232053490259f132aec0a..a16d9c1661690de0374a4a3c31b119293d8fa52b 100644
+index b7a34f1c4d7b5ef3f7a843d152e33c839dcdedd5..d9a60871bce4da7e6dc7c3c986498602c355ac04 100644
--- a/src/main/java/net/minecraft/world/entity/npc/Villager.java
+++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java
-@@ -143,6 +143,8 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
+@@ -142,6 +142,8 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
return holder.is(PoiTypes.MEETING);
});
@@ -1991,32 +1677,32 @@ index 7e1871401ec5e3e9a85232053490259f132aec0a..a16d9c1661690de0374a4a3c31b11929
public Villager(EntityType extends Villager> entityType, Level world) {
this(entityType, world, VillagerType.PLAINS);
}
-@@ -246,6 +248,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
+@@ -245,6 +247,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
}
// Spigot End
+ private int behaviorTick = 0; // Pufferfish
@Override
- @Deprecated // Paper
- protected void customServerAiStep() {
+ protected void customServerAiStep(ServerLevel world) {
+ // Paper start - EAR 2
@@ -255,7 +258,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
- protected void customServerAiStep(final boolean inactive) {
- // Paper end
- this.level().getProfiler().push("villagerBrain");
-- if (!inactive) this.getBrain().tick((ServerLevel) this.level(), this); // Paper
+ ProfilerFiller gameprofilerfiller = Profiler.get();
+
+ gameprofilerfiller.push("villagerBrain");
+- if (!inactive) this.getBrain().tick(world, this);
+ // Pufferfish start
+ if (!inactive && this.behaviorTick++ % this.activatedPriority == 0) {
+ this.getBrain().tick((ServerLevel) this.level(), this); // Paper
+ }
+ // Pufferfish end
- this.level().getProfiler().pop();
+ gameprofilerfiller.pop();
if (this.assignProfessionWhenSpawned) {
this.assignProfessionWhenSpawned = false;
diff --git a/src/main/java/net/minecraft/world/entity/player/Inventory.java b/src/main/java/net/minecraft/world/entity/player/Inventory.java
-index 6e66141dca61f777b354854b5d0bac2570b8bf3b..abf231e6099cda766d73e67f31234e9f4cbc9545 100644
+index 0990bcf65f484b9a019c91fcdae1783bac6388da..99feda30fb85a7615560b6e9a3701d5dfeb3e524 100644
--- a/src/main/java/net/minecraft/world/entity/player/Inventory.java
+++ b/src/main/java/net/minecraft/world/entity/player/Inventory.java
-@@ -643,6 +643,8 @@ public class Inventory implements Container, Nameable {
+@@ -649,6 +649,8 @@ public class Inventory implements Container, Nameable {
}
public boolean contains(ItemStack stack) {
@@ -2025,7 +1711,7 @@ index 6e66141dca61f777b354854b5d0bac2570b8bf3b..abf231e6099cda766d73e67f31234e9f
Iterator iterator = this.compartments.iterator();
while (iterator.hasNext()) {
-@@ -657,6 +659,18 @@ public class Inventory implements Container, Nameable {
+@@ -663,6 +665,18 @@ public class Inventory implements Container, Nameable {
}
}
}
@@ -2045,10 +1731,10 @@ index 6e66141dca61f777b354854b5d0bac2570b8bf3b..abf231e6099cda766d73e67f31234e9f
return false;
}
diff --git a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java
-index 10ade433c083851d9ea4797c6ec618db122229f9..091ca20cc7e495dbff90f2fcaae51fb1b2bb33d5 100644
+index 6c2d4d6f3a36ab452dfd3c33f66e54f152906639..5a791fad8c27e4997d53f2e5d9a5aa28189fdf28 100644
--- a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java
+++ b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java
-@@ -52,6 +52,36 @@ public abstract class Projectile extends Entity implements TraceableEntity {
+@@ -58,6 +58,36 @@ public abstract class Projectile extends Entity implements TraceableEntity {
super(type, world);
}
@@ -2086,7 +1772,7 @@ index 10ade433c083851d9ea4797c6ec618db122229f9..091ca20cc7e495dbff90f2fcaae51fb1
if (entity != null) {
this.ownerUUID = entity.getUUID();
diff --git a/src/main/java/net/minecraft/world/item/EndCrystalItem.java b/src/main/java/net/minecraft/world/item/EndCrystalItem.java
-index 5f51e64cb0611a4ba6bdcdcacbcba1063a7f3a5c..cc1e5882bee94864ad189d7f01ce78223411e51d 100644
+index b62db8c7c8c57e43869ee239ebf4b02f112355d9..2bee342e59e600426c8681a3ce641a12f22790be 100644
--- a/src/main/java/net/minecraft/world/item/EndCrystalItem.java
+++ b/src/main/java/net/minecraft/world/item/EndCrystalItem.java
@@ -57,7 +57,7 @@ public class EndCrystalItem extends Item {
@@ -2099,32 +1785,24 @@ index 5f51e64cb0611a4ba6bdcdcacbcba1063a7f3a5c..cc1e5882bee94864ad189d7f01ce7822
}
}
diff --git a/src/main/java/net/minecraft/world/item/crafting/ShapelessRecipe.java b/src/main/java/net/minecraft/world/item/crafting/ShapelessRecipe.java
-index 213ee4aa988dd4c2a5a7be99b1d13f67338e5209..8e46753af60aa9fd8e4b4c0f955f7a55a77de314 100644
+index 12f95bee2a69fd5df7c4a165537e01299e60c5f6..d7ce86752e4138cdd3844b3374609753aa20f9ea 100644
--- a/src/main/java/net/minecraft/world/item/crafting/ShapelessRecipe.java
+++ b/src/main/java/net/minecraft/world/item/crafting/ShapelessRecipe.java
-@@ -10,6 +10,7 @@ import net.minecraft.core.HolderLookup;
- import net.minecraft.core.NonNullList;
- import net.minecraft.network.RegistryFriendlyByteBuf;
- import net.minecraft.network.codec.StreamCodec;
-+import net.minecraft.world.inventory.CraftingContainer;
- import net.minecraft.world.item.ItemStack;
- import net.minecraft.world.level.Level;
- // CraftBukkit start
-@@ -25,8 +26,13 @@ public class ShapelessRecipe extends io.papermc.paper.inventory.recipe.RecipeBoo
- final CraftingBookCategory category;
- final ItemStack result;
- final NonNullList ingredients;
+@@ -31,8 +31,13 @@ public class ShapelessRecipe implements CraftingRecipe {
+ final List ingredients;
+ @Nullable
+ private PlacementInfo placementInfo;
+ private final boolean isBukkit; // Pufferfish
+ // Pufferfish start
- public ShapelessRecipe(String group, CraftingBookCategory category, ItemStack result, NonNullList ingredients) {
+ public ShapelessRecipe(String group, CraftingBookCategory category, ItemStack result, List ingredients) {
+ this(group, category, result, ingredients, false);
+ }
-+ public ShapelessRecipe(String group, CraftingBookCategory category, ItemStack result, NonNullList ingredients, boolean isBukkit) { this.isBukkit = isBukkit; // Pufferfish end
++ public ShapelessRecipe(String group, CraftingBookCategory category, ItemStack result, List ingredients, boolean isBukkit) { this.isBukkit = isBukkit; // Pufferfish end
this.group = group;
this.category = category;
this.result = result;
-@@ -76,6 +82,28 @@ public class ShapelessRecipe extends io.papermc.paper.inventory.recipe.RecipeBoo
+@@ -80,6 +85,28 @@ public class ShapelessRecipe implements CraftingRecipe {
}
public boolean matches(CraftingInput input, Level world) {
@@ -2150,14 +1828,14 @@ index 213ee4aa988dd4c2a5a7be99b1d13f67338e5209..8e46753af60aa9fd8e4b4c0f955f7a55
+ }
+ // Pufferfish end
+
- // Paper start - unwrap ternary & better exact choice recipes
+ // Paper start - Improve exact choice recipe ingredients & unwrap ternary
if (input.ingredientCount() != this.ingredients.size()) {
return false;
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
-index 507671476c3d2d92a2fdb05be24443af27d26dcf..2479b47186202de40cdb4ae773c696a4adee9bad 100644
+index 0de2b79481352b52438dde284262019b29949ad8..eb9fdff179f59d49b17ee3af18cef7508d45987f 100644
--- a/src/main/java/net/minecraft/world/level/Level.java
+++ b/src/main/java/net/minecraft/world/level/Level.java
-@@ -1418,16 +1418,16 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
+@@ -1487,16 +1487,16 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
public void guardEntityTick(Consumer tickConsumer, T entity) {
try {
tickConsumer.accept(entity);
@@ -2177,21 +1855,13 @@ index 507671476c3d2d92a2fdb05be24443af27d26dcf..2479b47186202de40cdb4ae773c696a4
}
// Paper start - Option to prevent armor stands from doing entity lookups
@Override
-@@ -1961,6 +1961,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
- }
-
- public ProfilerFiller getProfiler() {
-+ if (gg.pufferfish.pufferfish.PufferfishConfig.disableMethodProfiler) return net.minecraft.util.profiling.InactiveProfiler.INSTANCE; // Pufferfish
- return (ProfilerFiller) this.profiler.get();
- }
-
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 7c11853c5090fbc4fa5b3e73a69acf166158fdec..00987d0e1ee8a9541b0610616ace1c84d50e5f1a 100644
+index 4640baec5bed6c2d53cc0f8ca1d273cc115abe9b..29e5234c008b8ac1df240a242ff7966057075171 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 implements ca.spottedleaf.moonrise.p
- private final LevelChunkTicks blockTicks;
+@@ -88,6 +88,18 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p
private final LevelChunkTicks fluidTicks;
+ private LevelChunk.UnsavedListener unsavedListener;
+ // Pufferfish start - instead of using a random every time the chunk is ticked, define when lightning strikes preemptively
+ private int lightningTick;
@@ -2208,7 +1878,7 @@ index 7c11853c5090fbc4fa5b3e73a69acf166158fdec..00987d0e1ee8a9541b0610616ace1c84
public LevelChunk(Level world, ChunkPos pos) {
this(world, pos, UpgradeData.EMPTY, new LevelChunkTicks<>(), new LevelChunkTicks<>(), 0L, (LevelChunkSection[]) null, (LevelChunk.PostLoadProcessor) null, (BlendingData) null);
}
-@@ -117,6 +129,8 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p
+@@ -121,6 +133,8 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p
this.debug = !empty && this.level.isDebug();
this.defaultBlockState = empty ? VOID_AIR_BLOCKSTATE : AIR_BLOCKSTATE;
// Paper end - get block chunk optimisation
@@ -2217,42 +1887,6 @@ index 7c11853c5090fbc4fa5b3e73a69acf166158fdec..00987d0e1ee8a9541b0610616ace1c84
}
// 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 c3b1caa352b988ec44fa2b2eb0536517711f5460..a28366b8ed0da356dad6941e0a817d0b7ec43738 100644
---- a/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java
-+++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java
-@@ -22,6 +22,7 @@ public class LevelChunkSection implements ca.spottedleaf.moonrise.patches.block_
- short nonEmptyBlockCount; // Paper - package private
- private short tickingBlockCount;
- private short tickingFluidCount;
-+ public short fluidStateCount; // Pufferfish
- public final PalettedContainer states;
- // CraftBukkit start - read/write
- private PalettedContainer> biomes;
-@@ -104,6 +105,7 @@ public class LevelChunkSection implements ca.spottedleaf.moonrise.patches.block_
-
- if (!fluid.isEmpty()) {
- --this.tickingFluidCount;
-+ --this.fluidStateCount; // Pufferfish
- }
-
- if (!state.isAir()) {
-@@ -115,6 +117,7 @@ public class LevelChunkSection implements ca.spottedleaf.moonrise.patches.block_
-
- if (!fluid1.isEmpty()) {
- ++this.tickingFluidCount;
-+ ++this.fluidStateCount; // Pufferfish
- }
-
- // Paper start - block counting
-@@ -208,6 +211,7 @@ public class LevelChunkSection implements ca.spottedleaf.moonrise.patches.block_
- if (fluid.isRandomlyTicking()) {
- this.tickingFluidCount += paletteCount;
- }
-+ this.fluidStateCount++; // Pufferfish
- }
- }
- }
diff --git a/src/main/java/net/minecraft/world/level/entity/EntityTickList.java b/src/main/java/net/minecraft/world/level/entity/EntityTickList.java
index d8b4196adf955f8d414688dc451caac2d9c609d9..80a43def4912a3228cd95117d5c2aac68798b4ec 100644
--- a/src/main/java/net/minecraft/world/level/entity/EntityTickList.java
@@ -2266,223 +1900,24 @@ index d8b4196adf955f8d414688dc451caac2d9c609d9..80a43def4912a3228cd95117d5c2aac6
private void ensureActiveIsNotIterated() {
// Paper - rewrite chunk system
-diff --git a/src/main/java/net/minecraft/world/level/material/FlowingFluid.java b/src/main/java/net/minecraft/world/level/material/FlowingFluid.java
-index 1c0712295695727ee9c4d430d4157b8e17cbd71f..6785baf574f233ed1c3bea8d406be8a524d9ff82 100644
---- a/src/main/java/net/minecraft/world/level/material/FlowingFluid.java
-+++ b/src/main/java/net/minecraft/world/level/material/FlowingFluid.java
-@@ -45,6 +45,8 @@ public abstract class FlowingFluid extends Fluid {
- public static final BooleanProperty FALLING = BlockStateProperties.FALLING;
- public static final IntegerProperty LEVEL = BlockStateProperties.LEVEL_FLOWING;
- private static final int CACHE_SIZE = 200;
-+ // Pufferfish start - use our own cache
-+ /*
- private static final ThreadLocal> OCCLUSION_CACHE = ThreadLocal.withInitial(() -> {
- Object2ByteLinkedOpenHashMap object2bytelinkedopenhashmap = new Object2ByteLinkedOpenHashMap(200) {
- protected void rehash(int i) {}
-@@ -53,6 +55,14 @@ public abstract class FlowingFluid extends Fluid {
- object2bytelinkedopenhashmap.defaultReturnValue((byte) 127);
- return object2bytelinkedopenhashmap;
- });
-+ */
-+
-+ private static final ThreadLocal> localFluidDirectionCache = ThreadLocal.withInitial(() -> {
-+ // Pufferfish todo - mess with this number for performance
-+ // with 2048 it seems very infrequent on a small world that it has to remove old entries
-+ return new gg.airplane.structs.FluidDirectionCache<>(2048);
-+ });
-+ // Pufferfish end
- private final Map shapes = Maps.newIdentityHashMap();
-
- public FlowingFluid() {}
-@@ -240,6 +250,8 @@ public abstract class FlowingFluid extends Fluid {
- }
-
- private boolean canPassThroughWall(Direction face, BlockGetter world, BlockPos pos, BlockState state, BlockPos fromPos, BlockState fromState) {
-+ // Pufferfish start - modify to use our cache
-+ /*
- Object2ByteLinkedOpenHashMap object2bytelinkedopenhashmap;
-
- if (!state.getBlock().hasDynamicShape() && !fromState.getBlock().hasDynamicShape()) {
-@@ -247,9 +259,16 @@ public abstract class FlowingFluid extends Fluid {
- } else {
- object2bytelinkedopenhashmap = null;
- }
-+ */
-+ gg.airplane.structs.FluidDirectionCache cache = null;
-+
-+ if (!state.getBlock().hasDynamicShape() && !fromState.getBlock().hasDynamicShape()) {
-+ cache = localFluidDirectionCache.get();
-+ }
-
- Block.BlockStatePairKey block_a;
-
-+ /*
- if (object2bytelinkedopenhashmap != null) {
- block_a = new Block.BlockStatePairKey(state, fromState, face);
- byte b0 = object2bytelinkedopenhashmap.getAndMoveToFirst(block_a);
-@@ -260,11 +279,22 @@ public abstract class FlowingFluid extends Fluid {
- } else {
- block_a = null;
- }
-+ */
-+ if (cache != null) {
-+ block_a = new Block.BlockStatePairKey(state, fromState, face);
-+ Boolean flag = cache.getValue(block_a);
-+ if (flag != null) {
-+ return flag;
-+ }
-+ } else {
-+ block_a = null;
-+ }
-
- VoxelShape voxelshape = state.getCollisionShape(world, pos);
- VoxelShape voxelshape1 = fromState.getCollisionShape(world, fromPos);
- boolean flag = !Shapes.mergedFaceOccludes(voxelshape, voxelshape1, face);
-
-+ /*
- if (object2bytelinkedopenhashmap != null) {
- if (object2bytelinkedopenhashmap.size() == 200) {
- object2bytelinkedopenhashmap.removeLastByte();
-@@ -272,6 +302,11 @@ public abstract class FlowingFluid extends Fluid {
-
- object2bytelinkedopenhashmap.putAndMoveToFirst(block_a, (byte) (flag ? 1 : 0));
- }
-+ */
-+ if (cache != null) {
-+ cache.putValue(block_a, flag);
-+ }
-+ // Pufferfish end
-
- return flag;
- }
-diff --git a/src/main/java/net/minecraft/world/level/storage/loot/LootParams.java b/src/main/java/net/minecraft/world/level/storage/loot/LootParams.java
-index 37a0002bbe6539648db5219bb373e0404ae48dc0..ca0571d232e102c4b177a1ea44b96f5f0f440211 100644
---- a/src/main/java/net/minecraft/world/level/storage/loot/LootParams.java
-+++ b/src/main/java/net/minecraft/world/level/storage/loot/LootParams.java
-@@ -21,8 +21,10 @@ public class LootParams {
-
- public LootParams(ServerLevel world, Map, Object> parameters, Map dynamicDrops, float luck) {
- this.level = world;
-- this.params = parameters;
-- this.dynamicDrops = dynamicDrops;
-+ // Pufferfish start - use unmodifiable maps instead of immutable ones to skip the copy
-+ this.params = java.util.Collections.unmodifiableMap(parameters);
-+ this.dynamicDrops = java.util.Collections.unmodifiableMap(dynamicDrops);
-+ // Pufferfish end
- this.luck = luck;
- }
-
-diff --git a/src/main/java/net/minecraft/world/phys/shapes/EntityCollisionContext.java b/src/main/java/net/minecraft/world/phys/shapes/EntityCollisionContext.java
-index 88a4a72bb390947dc17e5da09a99b2d1b3ac4621..284c76ddb9724b44bb2e93f590685c728e843e6d 100644
---- a/src/main/java/net/minecraft/world/phys/shapes/EntityCollisionContext.java
-+++ b/src/main/java/net/minecraft/world/phys/shapes/EntityCollisionContext.java
-@@ -17,50 +17,69 @@ public class EntityCollisionContext implements CollisionContext {
- return defaultValue;
- }
- };
-- private final boolean descending;
-- private final double entityBottom;
-- private final ItemStack heldItem;
-- private final Predicate canStandOnFluid;
-+ // Pufferfish start - remove these and pray no plugin uses them
-+ // private final boolean descending;
-+ // private final double entityBottom;
-+ // private final ItemStack heldItem;
-+ // private final Predicate canStandOnFluid;
-+ // Pufferfish end
- @Nullable
- private final Entity entity;
-
- protected EntityCollisionContext(boolean descending, double minY, ItemStack heldItem, Predicate walkOnFluidPredicate, @Nullable Entity entity) {
-- this.descending = descending;
-- this.entityBottom = minY;
-- this.heldItem = heldItem;
-- this.canStandOnFluid = walkOnFluidPredicate;
-+ // Pufferfish start - remove these
-+ // this.descending = descending;
-+ // this.entityBottom = minY;
-+ // this.heldItem = heldItem;
-+ // this.canStandOnFluid = walkOnFluidPredicate;
-+ // Pufferfish end
- this.entity = entity;
- }
-
- @Deprecated
- protected EntityCollisionContext(Entity entity) {
-- this(
-- entity.isDescending(),
-- entity.getY(),
-- entity instanceof LivingEntity ? ((LivingEntity)entity).getMainHandItem() : ItemStack.EMPTY,
-- entity instanceof LivingEntity ? ((LivingEntity)entity)::canStandOnFluid : fluidState -> false,
-- entity
-- );
-+ // Pufferfish start - remove this
-+ // this(
-+ // entity.isDescending(),
-+ // entity.getY(),
-+ // entity instanceof LivingEntity ? ((LivingEntity)entity).getMainHandItem() : ItemStack.EMPTY,
-+ // entity instanceof LivingEntity ? ((LivingEntity)entity)::canStandOnFluid : fluidState -> false,
-+ // entity
-+ // );
-+ // Pufferfish end
-+ this.entity = entity;
- }
-
- @Override
- public boolean isHoldingItem(Item item) {
-- return this.heldItem.is(item);
-+ // Pufferfish start
-+ Entity entity = this.entity;
-+ if (entity instanceof LivingEntity livingEntity) {
-+ return livingEntity.getMainHandItem().is(item);
-+ }
-+ return ItemStack.EMPTY.is(item);
-+ // Pufferfish end
- }
-
- @Override
- public boolean canStandOnFluid(FluidState stateAbove, FluidState state) {
-- return this.canStandOnFluid.test(state) && !stateAbove.getType().isSame(state.getType());
-+ // Pufferfish start
-+ Entity entity = this.entity;
-+ if (entity instanceof LivingEntity livingEntity) {
-+ return livingEntity.canStandOnFluid(state) && !stateAbove.getType().isSame(state.getType());
-+ }
-+ return false;
-+ // Pufferfish end
- }
-
- @Override
- public boolean isDescending() {
-- return this.descending;
-+ return this.entity != null && this.entity.isDescending(); // Pufferfish
- }
-
- @Override
- public boolean isAbove(VoxelShape shape, BlockPos pos, boolean defaultValue) {
-- return this.entityBottom > (double)pos.getY() + shape.max(Direction.Axis.Y) - 1.0E-5F;
-+ return (this.entity == null ? -Double.MAX_VALUE : entity.getY()) > (double)pos.getY() + shape.max(Direction.Axis.Y) - 1.0E-5F; // Pufferfish
- }
-
- @Nullable
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftShapelessRecipe.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftShapelessRecipe.java
-index 96d772eb02f79f8c478f5e6f065e387aa7665b18..c5ce412f321b8b4f31cc042893659e213b081f29 100644
+index 7c989318dc7ad89bb0d9143fcaac1e4bba6f5907..143a4d4efcc989ed4a4c73cc304e1978ad8f0699 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftShapelessRecipe.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftShapelessRecipe.java
-@@ -45,6 +45,6 @@ public class CraftShapelessRecipe extends ShapelessRecipe implements CraftRecipe
- data.set(i, this.toNMS(ingred.get(i), true));
+@@ -44,6 +44,6 @@ public class CraftShapelessRecipe extends ShapelessRecipe implements CraftRecipe
+ data.add(this.toNMS(i, true));
}
-- MinecraftServer.getServer().getRecipeManager().addRecipe(new RecipeHolder<>(CraftNamespacedKey.toMinecraft(this.getKey()), new net.minecraft.world.item.crafting.ShapelessRecipe(this.getGroup(), CraftRecipe.getCategory(this.getCategory()), CraftItemStack.asNMSCopy(this.getResult()), data)));
-+ MinecraftServer.getServer().getRecipeManager().addRecipe(new RecipeHolder<>(CraftNamespacedKey.toMinecraft(this.getKey()), new net.minecraft.world.item.crafting.ShapelessRecipe(this.getGroup(), CraftRecipe.getCategory(this.getCategory()), CraftItemStack.asNMSCopy(this.getResult()), data, true))); // Pufferfish
+- MinecraftServer.getServer().getRecipeManager().addRecipe(new RecipeHolder<>(CraftRecipe.toMinecraft(this.getKey()), new net.minecraft.world.item.crafting.ShapelessRecipe(this.getGroup(), CraftRecipe.getCategory(this.getCategory()), CraftItemStack.asNMSCopy(this.getResult()), data)));
++ MinecraftServer.getServer().getRecipeManager().addRecipe(new RecipeHolder<>(CraftRecipe.toMinecraft(this.getKey()), new net.minecraft.world.item.crafting.ShapelessRecipe(this.getGroup(), CraftRecipe.getCategory(this.getCategory()), CraftItemStack.asNMSCopy(this.getResult()), data, true))); // Pufferfish
}
}
diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
-index d06aab9bd5cd901c8367f9680f5d27ddb17b3dc4..8fa2b2a67891d34ec95f7eed2a4118ddd8a5be15 100644
+index 507f908916cbeb592496f963b46e4c2121a7b5e3..da306aab94697a86ac052f4536c9eff1ff23a92f 100644
--- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
+++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
-@@ -489,7 +489,7 @@ public final class CraftMagicNumbers implements UnsafeValues {
-
+@@ -505,7 +505,7 @@ public final class CraftMagicNumbers implements UnsafeValues {
+ // Paper start
@Override
public com.destroystokyo.paper.util.VersionFetcher getVersionFetcher() {
- return new com.destroystokyo.paper.PaperVersionFetcher();
@@ -2504,11 +1939,11 @@ 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 bf2d18f74b0f0da7c3c30310c74224a1c0853564..1461daa08c5b671b8556f29f90400b7e98285a44 100644
+index 1d438ef44cbe4d1eedfba36d8fe5d2ad53464921..bc525c7843b9cc0f7705c0dc6795c05f4e5b4bb1 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;
- import net.minecraft.world.entity.schedule.Activity;
+@@ -37,6 +37,10 @@ import net.minecraft.world.entity.projectile.ThrownTrident;
+ import net.minecraft.world.entity.raid.Raider;
import net.minecraft.world.level.Level;
import net.minecraft.world.phys.AABB;
+// Pufferfish start
@@ -2518,7 +1953,7 @@ index bf2d18f74b0f0da7c3c30310c74224a1c0853564..1461daa08c5b671b8556f29f90400b7e
public class ActivationRange
{
-@@ -223,6 +227,25 @@ public class ActivationRange
+@@ -221,6 +225,25 @@ public class ActivationRange
}
// Paper end - Configurable marker ticking
ActivationRange.activateEntity(entity);
@@ -2544,7 +1979,7 @@ index bf2d18f74b0f0da7c3c30310c74224a1c0853564..1461daa08c5b671b8556f29f90400b7e
}
// Paper end
}
-@@ -239,12 +262,12 @@ public class ActivationRange
+@@ -236,12 +259,12 @@ public class ActivationRange
if ( MinecraftServer.currentTick > entity.activatedTick )
{
if ( entity.defaultActivationState )
@@ -2559,7 +1994,7 @@ index bf2d18f74b0f0da7c3c30310c74224a1c0853564..1461daa08c5b671b8556f29f90400b7e
entity.activatedTick = MinecraftServer.currentTick;
}
}
-@@ -298,7 +321,7 @@ public class ActivationRange
+@@ -295,7 +318,7 @@ public class ActivationRange
if ( entity instanceof LivingEntity )
{
LivingEntity living = (LivingEntity) entity;
diff --git a/patches/unapplied-server/0002-Fix-pufferfish-issues.patch b/patches/server/0002-Fix-pufferfish-issues.patch
similarity index 78%
rename from patches/unapplied-server/0002-Fix-pufferfish-issues.patch
rename to patches/server/0002-Fix-pufferfish-issues.patch
index c6c5475ad..1236523e4 100644
--- a/patches/unapplied-server/0002-Fix-pufferfish-issues.patch
+++ b/patches/server/0002-Fix-pufferfish-issues.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Fix pufferfish issues
diff --git a/build.gradle.kts b/build.gradle.kts
-index fd1ac5dbc39068d4332fd264f3359e4845e529e1..f138c6fb5410c416d6af4d49ae51c9ac840515d6 100644
+index 1bb33b64bd73c8ea591c3ffdf5573c7c55a520f3..c8f5e9eaf5fb83148ffb8ff18cb33d51561a6610 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
-@@ -49,7 +49,7 @@ dependencies {
+@@ -62,7 +62,7 @@ dependencies {
// Pufferfish start
implementation("org.yaml:snakeyaml:1.32")
@@ -18,10 +18,10 @@ index fd1ac5dbc39068d4332fd264f3359e4845e529e1..f138c6fb5410c416d6af4d49ae51c9ac
}
// Pufferfish end
diff --git a/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java
-index d63994b04e8848c620024c148f72af9095cd93a3..92685ae1288fa509301c696bd7e49fcdab8062af 100644
+index f5a43a1e1a78b3eaabbcadc7af09750ee478eeb6..3175d421e39bf1315cf699f2df7c63a6535bb5b9 100644
--- a/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java
+++ b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java
-@@ -232,7 +232,7 @@ public class PufferfishConfig {
+@@ -229,7 +229,7 @@ public class PufferfishConfig {
public static int activationDistanceMod;
private static void dynamicActivationOfBrains() throws IOException {
@@ -30,7 +30,7 @@ index d63994b04e8848c620024c148f72af9095cd93a3..92685ae1288fa509301c696bd7e49fcd
startDistance = getInt("dab.start-distance", "activation-range.start-distance", 12,
"This value determines how far away an entity has to be",
"from the player to start being effected by DEAR.");
-@@ -276,7 +276,7 @@ public class PufferfishConfig {
+@@ -256,7 +256,7 @@ public class PufferfishConfig {
public static boolean throttleInactiveGoalSelectorTick;
private static void inactiveGoalSelectorThrottle() {
@@ -72,24 +72,11 @@ index 790bad0494454ca12ee152e3de6da3da634d9b20..bf1aacdfac2d501c62038a22cb9eac7f
}
@Override
-diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
-index 3f7812c55dae82433336d6e091aa83434615fa04..52af2341b1ce1ee358d60505f34018a5acd09176 100644
---- a/src/main/java/net/minecraft/world/entity/Entity.java
-+++ b/src/main/java/net/minecraft/world/entity/Entity.java
-@@ -850,7 +850,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
- public void tick() {
- // Pufferfish start - entity TTL
- if (type != EntityType.PLAYER && type.ttl >= 0 && this.tickCount >= type.ttl) {
-- discard();
-+ discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.DISCARD); // Purpur
- return;
- }
- // Pufferfish end - entity TTL
diff --git a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java
-index a694fe9cffe96fc425bbd29af430f67813ff8e8c..369452f3392b53a1e7e8b6e0e2048bc71274f439 100644
+index 5a791fad8c27e4997d53f2e5d9a5aa28189fdf28..af8dc4a57987cc84cb1002f2e5f25c28ec98173f 100644
--- a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java
+++ b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java
-@@ -71,7 +71,7 @@ public abstract class Projectile extends Entity implements TraceableEntity {
+@@ -77,7 +77,7 @@ public abstract class Projectile extends Entity implements TraceableEntity {
if (!isLoaded) {
if (Projectile.loadedThisTick > gg.pufferfish.pufferfish.PufferfishConfig.maxProjectileLoadsPerTick) {
if (++this.loadedLifetime > gg.pufferfish.pufferfish.PufferfishConfig.maxProjectileLoadsPerProjectile) {
@@ -99,10 +86,10 @@ index a694fe9cffe96fc425bbd29af430f67813ff8e8c..369452f3392b53a1e7e8b6e0e2048bc7
return;
}
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 8ccd3b8fcaa80f60b91a6c066e312542d349246a..db4bd5d94ba58ad0457bfd957f708f5354ce669b 100644
+index 29e5234c008b8ac1df240a242ff7966057075171..5c4843f6cfd13790a44fc0f928f1fbcef8a648ce 100644
--- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java
+++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java
-@@ -130,7 +130,7 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p
+@@ -134,7 +134,7 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p
this.defaultBlockState = empty ? VOID_AIR_BLOCKSTATE : AIR_BLOCKSTATE;
// Paper end - get block chunk optimisation
diff --git a/patches/server/0001-Rebrand.patch b/patches/server/0003-Rebrand.patch
similarity index 97%
rename from patches/server/0001-Rebrand.patch
rename to patches/server/0003-Rebrand.patch
index 3698dfe90..07d5b27c0 100644
--- a/patches/server/0001-Rebrand.patch
+++ b/patches/server/0003-Rebrand.patch
@@ -5,21 +5,21 @@ Subject: [PATCH] Rebrand
diff --git a/build.gradle.kts b/build.gradle.kts
-index faf3e3fd72e8c915e7a4803dacbe1bb576c6663e..c673a2cf682378aac38d047b999d8a1731f7569d 100644
+index c8f5e9eaf5fb83148ffb8ff18cb33d51561a6610..77602e4445b1b45a17e5552ac6a769e0ed46ebc7 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -25,7 +25,7 @@ abstract class MockitoAgentProvider : CommandLineArgumentProvider {
// Paper end - configure mockito agent that is needed in newer java versions
dependencies {
-- implementation(project(":paper-api"))
+- implementation(project(":pufferfish-api")) // Pufferfish // Paper
+ implementation(project(":purpur-api")) // Pufferfish // Paper // Purpur
// Paper start
implementation("org.jline:jline-terminal-ffm:3.27.1") // use ffm on java 22+
implementation("org.jline:jline-terminal-jni:3.27.1") // fall back to jni on java 21
-@@ -60,6 +60,10 @@ dependencies {
- runtimeOnly("org.apache.maven.resolver:maven-resolver-connector-basic:1.9.18")
- runtimeOnly("org.apache.maven.resolver:maven-resolver-transport-http:1.9.18")
+@@ -67,6 +67,10 @@ dependencies {
+ }
+ // Pufferfish end
+ implementation("org.mozilla:rhino-runtime:1.7.14") // Purpur
+ implementation("org.mozilla:rhino-engine:1.7.14") // Purpur
@@ -28,27 +28,27 @@ index faf3e3fd72e8c915e7a4803dacbe1bb576c6663e..c673a2cf682378aac38d047b999d8a17
testImplementation("io.github.classgraph:classgraph:4.8.47") // Paper - mob goal test
testImplementation("org.junit.jupiter:junit-jupiter:5.10.2")
testImplementation("org.junit.platform:junit-platform-suite-engine:1.10.0")
-@@ -99,14 +103,14 @@ tasks.jar {
+@@ -114,14 +118,14 @@ tasks.jar {
val gitBranch = git("rev-parse", "--abbrev-ref", "HEAD").getText().trim() // Paper
attributes(
"Main-Class" to "org.bukkit.craftbukkit.Main",
-- "Implementation-Title" to "Paper",
+- "Implementation-Title" to "Pufferfish", // Pufferfish
+ "Implementation-Title" to "Purpur", // Pufferfish // Purpur
"Implementation-Version" to implementationVersion,
"Implementation-Vendor" to date, // Paper
-- "Specification-Title" to "Paper",
+- "Specification-Title" to "Pufferfish", // Pufferfish
+ "Specification-Title" to "Purpur", // Pufferfish // Purpur
"Specification-Version" to project.version,
-- "Specification-Vendor" to "Paper Team",
-- "Brand-Id" to "papermc:paper",
-- "Brand-Name" to "Paper",
+- "Specification-Vendor" to "Pufferfish Studios LLC", // Pufferfish
+- "Brand-Id" to "pufferfish:pufferfish", // Pufferfish
+- "Brand-Name" to "Pufferfish", // Pufferfish
+ "Specification-Vendor" to "Purpur Team", // Pufferfish // Purpur
+ "Brand-Id" to "purpurmc:purpur", // Pufferfish // Purpur
+ "Brand-Name" to "Purpur", // Pufferfish // Purpur
"Build-Number" to (build ?: ""),
"Build-Time" to Instant.now().toString(),
"Git-Branch" to gitBranch, // Paper
-@@ -172,7 +176,7 @@ fun TaskContainer.registerRunTask(
+@@ -187,7 +191,7 @@ fun TaskContainer.registerRunTask(
name: String,
block: JavaExec.() -> Unit
): TaskProvider = register(name) {
@@ -151,35 +151,35 @@ index 6ee39b534b8d992655bc0cef3c299d12cbae0034..90b3526479320064378f2cde6c2f2b8e
.completer(new ConsoleCommandCompleter(this.server))
.option(LineReader.Option.COMPLETE_IN_WORD, true);
diff --git a/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java b/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java
-index 790bad0494454ca12ee152e3de6da3da634d9b20..a6e5950b5875cafd734300cdfbf58f5d3736f3c8 100644
+index bf1aacdfac2d501c62038a22cb9eac7f9b946619..3099c21ee589acf6edff5903a23673adf489024f 100644
--- a/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java
+++ b/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java
-@@ -31,6 +31,7 @@ public record ServerBuildInfoImpl(
- private static final String ATTRIBUTE_GIT_COMMIT = "Git-Commit";
+@@ -32,6 +32,7 @@ public record ServerBuildInfoImpl(
private static final String BRAND_PAPER_NAME = "Paper";
+ private static final String BRAND_PUFFERFISH_NAME = "Pufferfish"; // Purpur
+ private static final String BRAND_PURPUR_NAME = "Purpur"; // Purpur
private static final String BUILD_DEV = "DEV";
-@@ -42,9 +43,9 @@ public record ServerBuildInfoImpl(
+@@ -43,9 +44,9 @@ public record ServerBuildInfoImpl(
this(
getManifestAttribute(manifest, ATTRIBUTE_BRAND_ID)
.map(Key::key)
-- .orElse(BRAND_PAPER_ID),
+- .orElse(BRAND_PUFFERFISH_ID), // Purpur
+ .orElse(BRAND_PURPUR_ID), // Purpur
getManifestAttribute(manifest, ATTRIBUTE_BRAND_NAME)
-- .orElse(BRAND_PAPER_NAME),
+- .orElse(BRAND_PUFFERFISH_NAME), // Purpur
+ .orElse(BRAND_PURPUR_NAME), // Purpur
SharedConstants.getCurrentVersion().getId(),
SharedConstants.getCurrentVersion().getName(),
getManifestAttribute(manifest, ATTRIBUTE_BUILD_NUMBER)
-@@ -61,7 +62,7 @@ public record ServerBuildInfoImpl(
+@@ -62,7 +63,7 @@ public record ServerBuildInfoImpl(
@Override
public boolean isBrandCompatible(final @NotNull Key brandId) {
-- return brandId.equals(this.brandId);
-+ return brandId.equals(this.brandId) || brandId.equals(BRAND_PAPER_ID); // Purpur
+- return brandId.equals(this.brandId) || brandId.equals(BRAND_PAPER_ID); // Purpur
++ return brandId.equals(this.brandId) || brandId.equals(BRAND_PAPER_ID) || brandId.equals(BRAND_PUFFERFISH_ID); // Purpur
}
@Override
@@ -267,27 +267,27 @@ index 6fef86e47e37eab6721cfd67d494afb25a2ded68..c914e1e13c4f64f24efa5f825e58efb6
// (async tasks must live with race-conditions if they attempt to cancel between these few lines of code)
}
diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
-index 507f908916cbeb592496f963b46e4c2121a7b5e3..86ba02ba848ee20a2e2b52baab8986dd5a013f98 100644
+index da306aab94697a86ac052f4536c9eff1ff23a92f..86ba02ba848ee20a2e2b52baab8986dd5a013f98 100644
--- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
+++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
@@ -505,7 +505,7 @@ public final class CraftMagicNumbers implements UnsafeValues {
// Paper start
@Override
public com.destroystokyo.paper.util.VersionFetcher getVersionFetcher() {
-- return new com.destroystokyo.paper.PaperVersionFetcher();
+- return new gg.pufferfish.pufferfish.PufferfishVersionFetcher(); // Pufferfish
+ return new com.destroystokyo.paper.PaperVersionFetcher(); // Pufferfish // Purpur
}
@Override
diff --git a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java
-index 774556a62eb240da42e84db4502e2ed43495be17..99597258e8e88cd9e2c901c4ac3ff7faeeabee2b 100644
+index 80553face9c70c2a3d897681e7761df85b22d464..99597258e8e88cd9e2c901c4ac3ff7faeeabee2b 100644
--- a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java
+++ b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java
@@ -11,7 +11,7 @@ public final class Versioning {
public static String getBukkitVersion() {
String result = "Unknown-Version";
-- InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/io.papermc.paper/paper-api/pom.properties");
+- InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/gg.pufferfish.pufferfish/pufferfish-api/pom.properties"); // Pufferfish
+ InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/org.purpurmc.purpur/purpur-api/pom.properties"); // Pufferfish // Purpur
Properties properties = new Properties();
diff --git a/patches/server/0002-Purpur-config-files.patch b/patches/server/0004-Purpur-config-files.patch
similarity index 97%
rename from patches/server/0002-Purpur-config-files.patch
rename to patches/server/0004-Purpur-config-files.patch
index 1e18c50eb..e217ce420 100644
--- a/patches/server/0002-Purpur-config-files.patch
+++ b/patches/server/0004-Purpur-config-files.patch
@@ -5,14 +5,14 @@ Subject: [PATCH] Purpur config files
diff --git a/src/main/java/com/destroystokyo/paper/Metrics.java b/src/main/java/com/destroystokyo/paper/Metrics.java
-index 4b002e8b75d117b726b0de274a76d3596fce015b..8cde30544e14f8fc2dac32966ae3c21f8cf3a551 100644
+index 692c962193cf9fcc6801fc93f3220bdc673d527b..8cde30544e14f8fc2dac32966ae3c21f8cf3a551 100644
--- a/src/main/java/com/destroystokyo/paper/Metrics.java
+++ b/src/main/java/com/destroystokyo/paper/Metrics.java
@@ -593,7 +593,7 @@ public class Metrics {
boolean logFailedRequests = config.getBoolean("logFailedRequests", false);
// Only start Metrics, if it's enabled in the config
if (config.getBoolean("enabled", true)) {
-- Metrics metrics = new Metrics("Paper", serverUUID, logFailedRequests, Bukkit.getLogger());
+- Metrics metrics = new Metrics("Pufferfish", serverUUID, logFailedRequests, Bukkit.getLogger()); // Pufferfish
+ Metrics metrics = new Metrics("Purpur", serverUUID, logFailedRequests, Bukkit.getLogger()); // Pufferfish // Purpur
metrics.addCustomChart(new Metrics.SimplePie("minecraft_version", () -> {
@@ -26,11 +26,11 @@ index 4b002e8b75d117b726b0de274a76d3596fce015b..8cde30544e14f8fc2dac32966ae3c21f
- final String implVersion = org.bukkit.craftbukkit.Main.class.getPackage().getImplementationVersion();
- if (implVersion != null) {
- final String buildOrHash = implVersion.substring(implVersion.lastIndexOf('-') + 1);
-- paperVersion = "git-Paper-%s-%s".formatted(Bukkit.getServer().getMinecraftVersion(), buildOrHash);
+- paperVersion = "git-Pufferfish-%s-%s".formatted(Bukkit.getServer().getMinecraftVersion(), buildOrHash); // Pufferfish
- } else {
- paperVersion = "unknown";
- }
-- metrics.addCustomChart(new Metrics.SimplePie("paper_version", () -> paperVersion));
+- metrics.addCustomChart(new Metrics.SimplePie("pufferfish_version", () -> paperVersion)); // Pufferfish
+ metrics.addCustomChart(new Metrics.SimplePie("online_mode", () -> Bukkit.getOnlineMode() ? "online" : (io.papermc.paper.configuration.GlobalConfiguration.get().proxies.isProxyOnlineMode() ? "bungee" : "offline"))); // Purpur
+ metrics.addCustomChart(new Metrics.SimplePie("purpur_version", () -> (org.bukkit.craftbukkit.Main.class.getPackage().getImplementationVersion() != null) ? org.bukkit.craftbukkit.Main.class.getPackage().getImplementationVersion() : "unknown")); // Purpur
@@ -72,7 +72,7 @@ index 13bd145b1e8006a53c22f5dc0c78f29b540c7663..ae2d9c91afe13d07fd0de6d455b90a2a
boolean flag1 = this.source.acceptsSuccess() && !this.silent;
boolean flag2 = broadcastToOps && this.source.shouldInformAdmins() && !this.silent;
diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
-index 17a158ff6ce6520b69a5a0032ba4c05449dd0cf8..c4d6ffd9b1afee8405914bda5834bb3e7d909811 100644
+index d62f7375394409a278bc565c8263506c598ceeba..2a7fd4420467cce0c4ddca749955ba45e034e555 100644
--- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
+++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
@@ -235,6 +235,15 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
@@ -89,10 +89,10 @@ index 17a158ff6ce6520b69a5a0032ba4c05449dd0cf8..c4d6ffd9b1afee8405914bda5834bb3e
+ org.purpurmc.purpur.PurpurConfig.registerCommands();
+ // Purpur end
com.destroystokyo.paper.VersionHistoryManager.INSTANCE.getClass(); // Paper - load version history now
-
- this.setPvpAllowed(dedicatedserverproperties.pvp);
+ gg.pufferfish.pufferfish.PufferfishConfig.load(); // Pufferfish
+ gg.pufferfish.pufferfish.PufferfishCommand.init(); // Pufferfish
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
-index 2cc264f577fdd81d02783e0d6146bea9728789c7..23ee4e06f222b396e4eb2412eda09400edf18993 100644
+index eb9fdff179f59d49b17ee3af18cef7508d45987f..e7b9c8a473403002a75b6840250439c91ed12c1c 100644
--- a/src/main/java/net/minecraft/world/level/Level.java
+++ b/src/main/java/net/minecraft/world/level/Level.java
@@ -174,6 +174,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
diff --git a/patches/server/0003-Purpur-client-support.patch b/patches/server/0005-Purpur-client-support.patch
similarity index 97%
rename from patches/server/0003-Purpur-client-support.patch
rename to patches/server/0005-Purpur-client-support.patch
index 4a50da9a7..efb60b3fd 100644
--- a/patches/server/0003-Purpur-client-support.patch
+++ b/patches/server/0005-Purpur-client-support.patch
@@ -43,7 +43,7 @@ index b0bc66dc7248aae691dcab68b925b52a1695e63f..b6dd6bde947ac7502f25d31603995961
try {
String channels = payload.toString(com.google.common.base.Charsets.UTF_8);
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index 7aa3ba20f63be469ec82637e79f864262e41f3c6..cc0b99f87cdccaf899cb9da393d8e7dbef4f2e3c 100644
+index 554714e449d1d2439b05d7e15f72afccd17d4df5..3d2322233aff511bcc5c85b24230c2e08dc0bcd0 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -3580,4 +3580,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
diff --git a/patches/server/0004-MC-Utils.patch b/patches/server/0006-MC-Utils.patch
similarity index 100%
rename from patches/server/0004-MC-Utils.patch
rename to patches/server/0006-MC-Utils.patch
diff --git a/patches/server/0005-Fix-decompile-errors.patch b/patches/server/0007-Fix-decompile-errors.patch
similarity index 100%
rename from patches/server/0005-Fix-decompile-errors.patch
rename to patches/server/0007-Fix-decompile-errors.patch
diff --git a/patches/server/0006-Component-related-conveniences.patch b/patches/server/0008-Component-related-conveniences.patch
similarity index 96%
rename from patches/server/0006-Component-related-conveniences.patch
rename to patches/server/0008-Component-related-conveniences.patch
index 2ba07c998..e66d1c195 100644
--- a/patches/server/0006-Component-related-conveniences.patch
+++ b/patches/server/0008-Component-related-conveniences.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Component related conveniences
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
-index b9cad91aa728415a52a43d18301311e2c996da91..4cd799505ad4f9e02eef5f015a6c092af0efba14 100644
+index 77823507f99bc39181fe3c285cd077ca6ef0296b..785ea646cbefb8dc1e22a57bc3a18cdbee440e06 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -2253,6 +2253,26 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
@@ -57,7 +57,7 @@ index b9cad91aa728415a52a43d18301311e2c996da91..4cd799505ad4f9e02eef5f015a6c092a
this.sendSystemMessage(message, false);
}
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
-index 1fcd9cd9344b0d2c4752042b07142db7d727dce8..99472b1ae2261a53555c5212f5d8b0deebaa4c48 100644
+index 30de3d1a7792c38ae946f19cb0e14637919b5001..cf8b7f93a1ba027c00d7f45809fa51f1ab55a5de 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
@@ -991,6 +991,20 @@ public abstract class PlayerList {
diff --git a/patches/server/0007-Ridables.patch b/patches/server/0009-Ridables.patch
similarity index 98%
rename from patches/server/0007-Ridables.patch
rename to patches/server/0009-Ridables.patch
index 954a95b3a..841f042d4 100644
--- a/patches/server/0007-Ridables.patch
+++ b/patches/server/0009-Ridables.patch
@@ -22,10 +22,10 @@ index f58a94efafbc01d402cd03a108bb90f60930a316..21ea63da99c5b3e2e1ab9cc1049c903b
super(x, y, z);
}
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index c26e3a239441376f2694782d4f07943538677c71..5cd3d7b30a8dea820d0e9569219cbc5858c80f6c 100644
+index 05e49085d71e5e93a0033d3ca2a670981d6dfe75..69846993f5e5adef6ecf6c23f261b3dbabf6a193 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
-@@ -1855,6 +1855,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0; // Paper - Add EntityMoveEvent
net.minecraft.world.level.block.entity.HopperBlockEntity.skipHopperEvents = worldserver.paperConfig().hopper.disableMoveEvent || org.bukkit.event.inventory.InventoryMoveItemEvent.getHandlerList().getRegisteredListeners().length == 0; // Paper - Perf: Optimize Hoppers
worldserver.updateLagCompensationTick(); // Paper - lag compensation
@@ -34,7 +34,7 @@ index c26e3a239441376f2694782d4f07943538677c71..5cd3d7b30a8dea820d0e9569219cbc58
gameprofilerfiller.push(() -> {
String s = String.valueOf(worldserver);
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
-index b4027f5cf90935a1fe3ab2c28b0bcbb55a7b541b..4c4729292a6b0665412bdea1c1c70af6b4867b74 100644
+index 8091e78e56c0e4ea880e6f88ec9c15ca5e67b9b0..1f49d018683fa19f498c8e68dab8a7ddde6cfad0 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -231,6 +231,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -66,10 +66,10 @@ index 785ea646cbefb8dc1e22a57bc3a18cdbee440e06..749145ac5ee84b5ebbf4b1eba2df680c
private void updatePlayerAttributes() {
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-index cd1b6b539a62fa5237d6dab2d1c09a2e631d9941..52eb9238965a1c1522b2c523d48ac63e0db5d3d1 100644
+index 56a6367245b133f3ac86af99a738325885f2e94a..d2145df4e9b0dd16e7d394b8983c36fd073d3e31 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-@@ -2821,6 +2821,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
+@@ -2822,6 +2822,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
ServerGamePacketListenerImpl.this.cserver.getPluginManager().callEvent(event);
@@ -79,7 +79,7 @@ index cd1b6b539a62fa5237d6dab2d1c09a2e631d9941..52eb9238965a1c1522b2c523d48ac63e
if ((entity instanceof Bucketable && entity instanceof LivingEntity && origItem != null && origItem.asItem() == Items.WATER_BUCKET) && (event.isCancelled() || ServerGamePacketListenerImpl.this.player.getInventory().getSelected() == null || ServerGamePacketListenerImpl.this.player.getInventory().getSelected().getItem() != origItem)) {
entity.resendPossiblyDesyncedEntityData(ServerGamePacketListenerImpl.this.player); // Paper - The entire mob gets deleted, so resend it
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
-index a15546e433ebba6c0de01bdaaef201a3d99a87b5..b265a9c8b89c0026b6e74fc8aba10f4c03ca1750 100644
+index 0a0d004699eeaae12852b197b32a449a86de3028..0e084e2dcd0294274aa42b2a15fe58bee54ff393 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -340,7 +340,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -91,7 +91,7 @@ index a15546e433ebba6c0de01bdaaef201a3d99a87b5..b265a9c8b89c0026b6e74fc8aba10f4c
private float eyeHeight;
public boolean isInPowderSnow;
public boolean wasInPowderSnow;
-@@ -3294,6 +3294,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
+@@ -3297,6 +3297,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
this.passengers = ImmutableList.copyOf(list);
}
@@ -105,7 +105,7 @@ index a15546e433ebba6c0de01bdaaef201a3d99a87b5..b265a9c8b89c0026b6e74fc8aba10f4c
this.gameEvent(GameEvent.ENTITY_MOUNT, passenger);
}
}
-@@ -3333,6 +3340,14 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
+@@ -3336,6 +3343,14 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
return false;
}
// CraftBukkit end
@@ -120,7 +120,7 @@ index a15546e433ebba6c0de01bdaaef201a3d99a87b5..b265a9c8b89c0026b6e74fc8aba10f4c
if (this.passengers.size() == 1 && this.passengers.get(0) == entity) {
this.passengers = ImmutableList.of();
} else {
-@@ -5325,4 +5340,44 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
+@@ -5328,4 +5343,44 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
return ((net.minecraft.server.level.ServerLevel) this.level).isPositionEntityTicking(this.blockPosition());
}
// Paper end - Expose entity id counter
@@ -190,7 +190,7 @@ index b851c3ee1426bc0a259bf6c4a662af0c9883dd71..7c11b5e73d4f3c0be7c467f7522c2d97
protected ParticleOptions getInkParticle() {
return ParticleTypes.GLOW_SQUID_INK;
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-index f36a075dbee2b96d01899e02460b1d8443e91749..b027633d6c854f481fbd4a2e4b89ace4b9d7a398 100644
+index e21e549e8102477aae599487acc6dd39616d6c26..30ffb90dda6c95c6f3bc42d1b9747acef0f0f19a 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -248,9 +248,9 @@ public abstract class LivingEntity extends Entity implements Attackable {
@@ -223,7 +223,7 @@ index f36a075dbee2b96d01899e02460b1d8443e91749..b027633d6c854f481fbd4a2e4b89ace4
@Override
protected void checkFallDamage(double heightDifference, boolean onGround, BlockState state, BlockPos landedPosition) {
-@@ -3692,8 +3693,10 @@ public abstract class LivingEntity extends Entity implements Attackable {
+@@ -3719,8 +3720,10 @@ public abstract class LivingEntity extends Entity implements Attackable {
this.pushEntities();
gameprofilerfiller.pop();
// Paper start - Add EntityMoveEvent
@@ -236,7 +236,7 @@ index f36a075dbee2b96d01899e02460b1d8443e91749..b027633d6c854f481fbd4a2e4b89ace4
Location from = new Location(this.level().getWorld(), this.xo, this.yo, this.zo, this.yRotO, this.xRotO);
Location to = new Location(this.level().getWorld(), this.getX(), this.getY(), this.getZ(), this.getYRot(), this.getXRot());
io.papermc.paper.event.entity.EntityMoveEvent event = new io.papermc.paper.event.entity.EntityMoveEvent(this.getBukkitLivingEntity(), from, to.clone());
-@@ -3703,6 +3706,21 @@ public abstract class LivingEntity extends Entity implements Attackable {
+@@ -3730,6 +3733,21 @@ public abstract class LivingEntity extends Entity implements Attackable {
this.absMoveTo(event.getTo().getX(), event.getTo().getY(), event.getTo().getZ(), event.getTo().getYaw(), event.getTo().getPitch());
}
}
@@ -259,7 +259,7 @@ index f36a075dbee2b96d01899e02460b1d8443e91749..b027633d6c854f481fbd4a2e4b89ace4
// Paper end - Add EntityMoveEvent
world = this.level();
diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java
-index dbd321f3dc3cc80737830db63aed47a6935e8e89..bc2380a71aa65c40f326c1f6bdf15ee25346ffee 100644
+index 237eed7259f0cedf5b96ea54c195c3359d286064..6502676a94ebb663b6126a21896cda456066d55b 100644
--- a/src/main/java/net/minecraft/world/entity/Mob.java
+++ b/src/main/java/net/minecraft/world/entity/Mob.java
@@ -163,8 +163,8 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab
@@ -273,7 +273,7 @@ index dbd321f3dc3cc80737830db63aed47a6935e8e89..bc2380a71aa65c40f326c1f6bdf15ee2
this.jumpControl = new JumpControl(this);
this.bodyRotationControl = this.createBodyControl();
this.navigation = this.createNavigation(world);
-@@ -1496,7 +1496,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab
+@@ -1502,7 +1502,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab
protected void onOffspringSpawnedFromEgg(Player player, Mob child) {}
protected InteractionResult mobInteract(Player player, InteractionHand hand) {
@@ -282,7 +282,7 @@ index dbd321f3dc3cc80737830db63aed47a6935e8e89..bc2380a71aa65c40f326c1f6bdf15ee2
}
public boolean isWithinRestriction() {
-@@ -1813,4 +1813,58 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab
+@@ -1819,4 +1819,58 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab
public float[] getArmorDropChances() {
return this.armorDropChances;
}
@@ -342,13 +342,13 @@ index dbd321f3dc3cc80737830db63aed47a6935e8e89..bc2380a71aa65c40f326c1f6bdf15ee2
+ // Purpur end
}
diff --git a/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java b/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java
-index 94d04a20f97405e02d7cccaabadc7a7e86e336f7..06b890275d1a171d609b91a1d1a018c43b943ab2 100644
+index 31aa4221de653f0695b21d438964bae20cffad07..861591694785a6ff16f839fa91781791c275de14 100644
--- a/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java
+++ b/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java
-@@ -23,14 +23,21 @@ public class AttributeMap {
- private final Set attributesToSync = new ObjectOpenHashSet<>();
+@@ -24,15 +24,22 @@ public class AttributeMap {
private final Set attributesToUpdate = new ObjectOpenHashSet<>();
private final AttributeSupplier supplier;
+ private final java.util.function.Function, AttributeInstance> createInstance; // Pufferfish
+ private final net.minecraft.world.entity.LivingEntity entity; // Purpur
public AttributeMap(AttributeSupplier defaultAttributes) {
@@ -359,6 +359,7 @@ index 94d04a20f97405e02d7cccaabadc7a7e86e336f7..06b890275d1a171d609b91a1d1a018c4
+ this.entity = entity;
+ // Purpur end
this.supplier = defaultAttributes;
+ this.createInstance = attributex -> this.supplier.createInstance(this::onAttributeModified, attributex); // Pufferfish
}
private void onAttributeModified(AttributeInstance instance) {
@@ -368,7 +369,7 @@ index 94d04a20f97405e02d7cccaabadc7a7e86e336f7..06b890275d1a171d609b91a1d1a018c4
this.attributesToSync.add(instance);
}
}
-@@ -44,7 +51,7 @@ public class AttributeMap {
+@@ -46,7 +53,7 @@ public class AttributeMap {
}
public Collection getSyncableAttributes() {
@@ -376,7 +377,7 @@ index 94d04a20f97405e02d7cccaabadc7a7e86e336f7..06b890275d1a171d609b91a1d1a018c4
+ return this.attributes.values().stream().filter(attribute -> attribute.getAttribute().value().isClientSyncable() && (entity == null || entity.shouldSendAttribute(attribute.getAttribute().value()))).collect(Collectors.toList()); // Purpur
}
- @Nullable
+
diff --git a/src/main/java/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java b/src/main/java/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java
index 386f9bca728055f7b75fb690b307ff4510068105..157fe8979c780300b6f72cbaa17729031e3b386d 100644
--- a/src/main/java/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java
@@ -438,7 +439,7 @@ index fbfc2f2515ad709b2c1212aef9521e795547d66b..e77bd11af62682d5eca41f6c9e1aed30
this.lookAtCooldown--;
this.getYRotD().ifPresent(yaw -> this.mob.yHeadRot = this.rotateTowards(this.mob.yHeadRot, yaw + 20.0F, this.yMaxRotSpeed));
diff --git a/src/main/java/net/minecraft/world/entity/ambient/Bat.java b/src/main/java/net/minecraft/world/entity/ambient/Bat.java
-index 60c2868f255d372226e0c1389caaa5477bbef41e..d9d9ae5a60b47d60d8473689a2a85a81fc97cc8b 100644
+index 3de177a40649183b5b210e5f0c610a527287e9ec..1348ec21d1ede67026897563e5c09406c9902043 100644
--- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java
+++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java
@@ -47,12 +47,59 @@ public class Bat extends AmbientCreature {
@@ -2008,7 +2009,7 @@ index fb84ee1225cd762ef306d1fc3e1baed42c034a3c..04b6cb63bac767b386b8f67cf80a4d75
this.targetSelector.addGoal(2, new OwnerHurtTargetGoal(this));
this.targetSelector.addGoal(3, (new HurtByTargetGoal(this, new Class[0])).setAlertOthers());
diff --git a/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java b/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java
-index 05c3d43fafc781e2c2d762dd5f509753df8da3b3..218af0b8f3d2085c6adde1569feb6c3894aae676 100644
+index 94692082aa85d7e4e52a4e16bb5e49b0bf6eb93f..33ac6f9ae824395b745219f6b1bcedd2766fdb9b 100644
--- a/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java
+++ b/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java
@@ -104,10 +104,23 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS
@@ -2065,11 +2066,12 @@ index 05c3d43fafc781e2c2d762dd5f509753df8da3b3..218af0b8f3d2085c6adde1569feb6c38
@Override
protected Brain.Provider brainProvider() {
return Brain.provider(Allay.MEMORY_TYPES, Allay.SENSOR_TYPES);
-@@ -224,6 +259,7 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS
+@@ -225,7 +260,7 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS
ProfilerFiller gameprofilerfiller = Profiler.get();
gameprofilerfiller.push("allayBrain");
-+ //if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Purpur - TODO: Pufferfish
+- if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish
++ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider
this.getBrain().tick(world, this);
gameprofilerfiller.pop();
gameprofilerfiller.push("allayActivityUpdate");
@@ -2102,7 +2104,7 @@ index c1ef714096159608752d744b98f615cd45fe459a..c3fbe43451385bb7cf1d8996a7c95c22
protected void defineSynchedData(SynchedEntityData.Builder builder) {
super.defineSynchedData(builder);
diff --git a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java
-index 31b10cd404b672d7ce21c2107d8f83e32de26ef4..3053de1bbdeb12f939555d2cfb9361ed271c9b6a 100644
+index cb47876a13cb1990bb0ab4cff1bbe57b3b2d0a5e..a1c800d43ab938add855e94943a7d9dd9dc78460 100644
--- a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java
+++ b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java
@@ -100,6 +100,23 @@ public class Axolotl extends Animal implements VariantHolder, B
@@ -2129,15 +2131,16 @@ index 31b10cd404b672d7ce21c2107d8f83e32de26ef4..3053de1bbdeb12f939555d2cfb9361ed
@Override
public float getWalkTargetValue(BlockPos pos, LevelReader world) {
return 0.0F;
-@@ -297,6 +314,7 @@ public class Axolotl extends Animal implements VariantHolder, B
+@@ -298,7 +315,7 @@ public class Axolotl extends Animal implements VariantHolder, B
ProfilerFiller gameprofilerfiller = Profiler.get();
gameprofilerfiller.push("axolotlBrain");
-+ //if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Purpur - TODO: Pufferfish
+- if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish
++ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider
this.getBrain().tick(world, this);
gameprofilerfiller.pop();
gameprofilerfiller.push("axolotlActivityUpdate");
-@@ -520,14 +538,22 @@ public class Axolotl extends Animal implements VariantHolder, B
+@@ -522,14 +539,22 @@ public class Axolotl extends Animal implements VariantHolder, B
private static class AxolotlMoveControl extends SmoothSwimmingMoveControl {
private final Axolotl axolotl;
@@ -2160,7 +2163,7 @@ index 31b10cd404b672d7ce21c2107d8f83e32de26ef4..3053de1bbdeb12f939555d2cfb9361ed
if (!this.axolotl.isPlayingDead()) {
super.tick();
}
-@@ -542,9 +568,9 @@ public class Axolotl extends Animal implements VariantHolder, B
+@@ -544,9 +569,9 @@ public class Axolotl extends Animal implements VariantHolder, B
}
@Override
@@ -2191,7 +2194,7 @@ index f3c884ab9c09f04dd01cabf2ee9de3b5b620563d..3de689deceada1ccc06b9f6d2bb9ba91
public void addAdditionalSaveData(CompoundTag nbt) {
super.addAdditionalSaveData(nbt);
diff --git a/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java b/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java
-index 36846ba6b6c7494c745ebd8b221479a9d02ff318..e03598f985191350ce796dabd7641b8d0f6c081c 100644
+index 3461c7150fc44ee608169aa993f6ff44d4c978be..066006dc4fcdd03113242f3fa4bc8dc7b4add81a 100644
--- a/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java
+++ b/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java
@@ -106,6 +106,8 @@ public class Frog extends Animal implements VariantHolder> {
@@ -2259,15 +2262,16 @@ index 36846ba6b6c7494c745ebd8b221479a9d02ff318..e03598f985191350ce796dabd7641b8d
@Override
protected Brain.Provider brainProvider() {
-@@ -188,6 +238,7 @@ public class Frog extends Animal implements VariantHolder> {
+@@ -189,7 +239,7 @@ public class Frog extends Animal implements VariantHolder> {
protected void customServerAiStep(ServerLevel world) {
ProfilerFiller profilerFiller = Profiler.get();
profilerFiller.push("frogBrain");
-+ //if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Purpur - TODO: Pufferfish
+- if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish
++ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider
this.getBrain().tick(world, this);
profilerFiller.pop();
profilerFiller.push("frogActivityUpdate");
-@@ -384,7 +435,7 @@ public class Frog extends Animal implements VariantHolder> {
+@@ -386,7 +436,7 @@ public class Frog extends Animal implements VariantHolder> {
return world.getBlockState(pos.below()).is(BlockTags.FROGS_SPAWNABLE_ON) && isBrightEnoughToSpawn(world, pos);
}
@@ -2277,7 +2281,7 @@ index 36846ba6b6c7494c745ebd8b221479a9d02ff318..e03598f985191350ce796dabd7641b8d
super(entity);
}
diff --git a/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java b/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java
-index 48ac8c3f6e00c3c2dc67b6c994be7c0ac6dfcf81..fb91677fb03b7bc1decdf181b7b15d971ffacdc2 100644
+index cf326ef35bac732e7addf75537963593d5b268ae..7e92e8c4fec36c8838604f17cf366cc80e82b19b 100644
--- a/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java
+++ b/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java
@@ -51,13 +51,50 @@ public class Tadpole extends AbstractFish {
@@ -2332,16 +2336,17 @@ index 48ac8c3f6e00c3c2dc67b6c994be7c0ac6dfcf81..fb91677fb03b7bc1decdf181b7b15d97
@Override
protected PathNavigation createNavigation(Level world) {
return new WaterBoundPathNavigation(this, world);
-@@ -88,6 +125,7 @@ public class Tadpole extends AbstractFish {
+@@ -89,7 +126,7 @@ public class Tadpole extends AbstractFish {
ProfilerFiller gameprofilerfiller = Profiler.get();
gameprofilerfiller.push("tadpoleBrain");
-+ //if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // // Purpur - TODO: Pufferfish
+- if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish
++ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider
this.getBrain().tick(world, this);
gameprofilerfiller.pop();
gameprofilerfiller.push("tadpoleActivityUpdate");
diff --git a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
-index 76aca47d8638d5c37c57d3a59fa7f8ceaa5a53b4..ce697bce755f8ef147d189a8729c441aee5bbd21 100644
+index fb92cd4b0c15b614c0c06d2867039aee1a6212a2..2e9fb07b2974209cce5bd31aca095def474c51c2 100644
--- a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
+++ b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
@@ -93,6 +93,23 @@ public class Goat extends Animal {
@@ -2368,11 +2373,12 @@ index 76aca47d8638d5c37c57d3a59fa7f8ceaa5a53b4..ce697bce755f8ef147d189a8729c441a
@Override
protected Brain.Provider brainProvider() {
return Brain.provider(Goat.MEMORY_TYPES, Goat.SENSOR_TYPES);
-@@ -197,6 +214,7 @@ public class Goat extends Animal {
+@@ -198,7 +215,7 @@ public class Goat extends Animal {
ProfilerFiller gameprofilerfiller = Profiler.get();
gameprofilerfiller.push("goatBrain");
-+ //if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Purpur - TODO: Pufferfish
+- if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish
++ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider
this.getBrain().tick(world, this);
gameprofilerfiller.pop();
gameprofilerfiller.push("goatActivityUpdate");
@@ -2830,7 +2836,7 @@ index 2df8bf818345246cc1f88b93e4a3b62e61772efb..3a3106bd26947e8851d672a1a5c45c58
this.dragonFight.updateDragon(this);
}
diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java
-index 244e38db508efa3eebebb6392c4ebb0805367baf..82bea5b969e24f6938c95315c09c4e6287017e9f 100644
+index d62c0d3c2bd5df5ee908bdcfdffaae9ce780810f..754a87c9c7595a4bedf784fbbb6d62b1d0bca756 100644
--- a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java
+++ b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java
@@ -86,16 +86,30 @@ public class WitherBoss extends Monster implements RangedAttackMob {
@@ -2980,7 +2986,7 @@ index 244e38db508efa3eebebb6392c4ebb0805367baf..82bea5b969e24f6938c95315c09c4e62
this.targetSelector.addGoal(1, new HurtByTargetGoal(this, new Class[0]));
this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, LivingEntity.class, 0, false, false, WitherBoss.LIVING_ENTITY_SELECTOR));
}
-@@ -261,6 +376,15 @@ public class WitherBoss extends Monster implements RangedAttackMob {
+@@ -268,6 +383,15 @@ public class WitherBoss extends Monster implements RangedAttackMob {
@Override
protected void customServerAiStep(ServerLevel world) {
@@ -2996,7 +3002,7 @@ index 244e38db508efa3eebebb6392c4ebb0805367baf..82bea5b969e24f6938c95315c09c4e62
int i;
if (this.getInvulnerableTicks() > 0) {
-@@ -579,11 +703,11 @@ public class WitherBoss extends Monster implements RangedAttackMob {
+@@ -586,11 +710,11 @@ public class WitherBoss extends Monster implements RangedAttackMob {
}
public int getAlternativeTarget(int headIndex) {
@@ -3367,7 +3373,7 @@ index 378694a38115c012978e1fea59d049d1ebd04110..4364ac531826524fc3c099b9900406b2
return Guardian.createAttributes().add(Attributes.MOVEMENT_SPEED, 0.30000001192092896D).add(Attributes.ATTACK_DAMAGE, 8.0D).add(Attributes.MAX_HEALTH, 80.0D);
}
diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
-index 48dcd2bc12ce1d08cc5195bff5460dc0dd9902d3..bd08a90aa9128d7d31dbbe7e075d32a8b8aad724 100644
+index c7153cfec847fca4ce5d9ec729628aed5bed11be..9b0004497fdd8980ec571536ced9de947b3505b0 100644
--- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
+++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
@@ -95,9 +95,27 @@ public class EnderMan extends Monster implements NeutralMob {
@@ -3415,7 +3421,7 @@ index 48dcd2bc12ce1d08cc5195bff5460dc0dd9902d3..bd08a90aa9128d7d31dbbe7e075d32a8
float f = this.getLightLevelDependentMagicValue();
if (f > 0.5F && world.canSeeSky(this.blockPosition()) && this.random.nextFloat() * 30.0F < (f - 0.4F) * 2.0F && this.tryEscape(com.destroystokyo.paper.event.entity.EndermanEscapeEvent.Reason.RUNAWAY)) { // Paper - EndermanEscapeEvent
-@@ -383,6 +402,7 @@ public class EnderMan extends Monster implements NeutralMob {
+@@ -389,6 +408,7 @@ public class EnderMan extends Monster implements NeutralMob {
public boolean hurtServer(ServerLevel world, DamageSource source, float amount) {
if (this.isInvulnerableTo(world, source)) {
return false;
@@ -4803,7 +4809,7 @@ index 7b5f9284972b3a6bd8125891b23f73438e875c08..f935d475fd1aca407bde420e9ba80020
super(creaking);
}
diff --git a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java
-index 6ea90e54759dbeab025e0a1896ee834ea9986427..b92c65703dfc4ed95de97534b1e8195c627aa212 100644
+index 3f625cb9b1237ca8f782bca2f182dfe72853bd96..cde73e0bac71d1c37c3335f6a2294622f9453fbd 100644
--- a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java
+++ b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java
@@ -92,6 +92,23 @@ public class Hoglin extends Animal implements Enemy, HoglinBase {
@@ -4830,16 +4836,17 @@ index 6ea90e54759dbeab025e0a1896ee834ea9986427..b92c65703dfc4ed95de97534b1e8195c
@VisibleForTesting
public void setTimeInOverworld(int timeInOverworld) {
this.timeInOverworld = timeInOverworld;
-@@ -160,6 +177,7 @@ public class Hoglin extends Animal implements Enemy, HoglinBase {
+@@ -161,7 +178,7 @@ public class Hoglin extends Animal implements Enemy, HoglinBase {
protected void customServerAiStep(ServerLevel world) {
ProfilerFiller profilerFiller = Profiler.get();
profilerFiller.push("hoglinBrain");
-+ //if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Purpur - TODO: Pufferfish
+- if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish
++ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider
this.getBrain().tick(world, this);
profilerFiller.pop();
HoglinAi.updateActivity(this);
diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java
-index e04d2c5e75dc774fe893a552474fdb8045c32693..ef7614c49a7165505f32dc21164b7a1fd4836017 100644
+index d1870bf4c01c846a721480eb6611a67db9b98d02..9a3bc9c0ad1b0af3c8196a773dd93b069ca4e92c 100644
--- a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java
+++ b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java
@@ -96,6 +96,23 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento
@@ -4866,11 +4873,12 @@ index e04d2c5e75dc774fe893a552474fdb8045c32693..ef7614c49a7165505f32dc21164b7a1f
@Override
public void addAdditionalSaveData(CompoundTag nbt) {
super.addAdditionalSaveData(nbt);
-@@ -309,6 +326,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento
+@@ -310,7 +327,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento
ProfilerFiller gameprofilerfiller = Profiler.get();
gameprofilerfiller.push("piglinBrain");
-+ //if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // // Purpur - TODO: Pufferfish
+- if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish
++ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider
this.getBrain().tick(world, this);
gameprofilerfiller.pop();
PiglinAi.updateActivity(this);
@@ -4911,7 +4919,7 @@ index 24eaeb93284fe1a573026b85818a93a34fd9e1ec..d7578f7d4eba9d630feb589dd2761789
profilerFiller.pop();
PiglinBruteAi.updateActivity(this);
diff --git a/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java b/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java
-index 6180019da58b19d2595da508aed3196af922d587..fcfea2cdd5df9fe505df3f7c866cd8d27ad9b249 100644
+index 457f9f6bf6a8e8f2e0b4246a0589e344756370d2..5a62fe9c4f0cee9e8b4a48564f76afec609335b1 100644
--- a/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java
+++ b/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java
@@ -127,8 +127,32 @@ public class Warden extends Monster implements VibrationSystem {
@@ -4947,7 +4955,7 @@ index 6180019da58b19d2595da508aed3196af922d587..fcfea2cdd5df9fe505df3f7c866cd8d2
@Override
public Packet getAddEntityPacket(ServerEntity entityTrackerEntry) {
return new ClientboundAddEntityPacket(this, entityTrackerEntry, this.hasPose(Pose.EMERGING) ? 1 : 0);
-@@ -396,17 +420,14 @@ public class Warden extends Monster implements VibrationSystem {
+@@ -398,17 +422,14 @@ public class Warden extends Monster implements VibrationSystem {
@Contract("null->false")
public boolean canTargetEntity(@Nullable Entity entity) {
@@ -4969,10 +4977,10 @@ index 6180019da58b19d2595da508aed3196af922d587..fcfea2cdd5df9fe505df3f7c866cd8d2
public static void applyDarknessAround(ServerLevel world, Vec3 pos, @Nullable Entity entity, int range) {
diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java
-index b7a34f1c4d7b5ef3f7a843d152e33c839dcdedd5..845b53ed80446ba0b17298eeb26f615b63b67340 100644
+index d9a60871bce4da7e6dc7c3c986498602c355ac04..80b6deade244d5ac2a6245fd2f3575af216a302c 100644
--- a/src/main/java/net/minecraft/world/entity/npc/Villager.java
+++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java
-@@ -156,6 +156,28 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
+@@ -158,6 +158,28 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
this.setVillagerData(this.getVillagerData().setType(type).setProfession(VillagerProfession.NONE));
}
@@ -5001,16 +5009,18 @@ index b7a34f1c4d7b5ef3f7a843d152e33c839dcdedd5..845b53ed80446ba0b17298eeb26f615b
@Override
public Brain getBrain() {
return (Brain) super.getBrain(); // CraftBukkit - decompile error
-@@ -255,7 +277,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
- ProfilerFiller gameprofilerfiller = Profiler.get();
+@@ -259,8 +281,8 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
gameprofilerfiller.push("villagerBrain");
-- if (!inactive) this.getBrain().tick(world, this);
-+ if (!inactive && (getRider() == null || !this.isControllable())) this.getBrain().tick(world, this); // Purpur
+ // Pufferfish start
+- if (!inactive && this.behaviorTick++ % this.activatedPriority == 0) {
+- this.getBrain().tick((ServerLevel) this.level(), this); // Paper
++ if (!inactive && (getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) {
++ this.getBrain().tick(world, this); // Paper // Purpur
+ }
+ // Pufferfish end
gameprofilerfiller.pop();
- if (this.assignProfessionWhenSpawned) {
- this.assignProfessionWhenSpawned = false;
-@@ -312,7 +334,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
+@@ -319,7 +341,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
if (!itemstack.is(Items.VILLAGER_SPAWN_EGG) && this.isAlive() && !this.isTrading() && !this.isSleeping()) {
if (this.isBaby()) {
this.setUnhappy();
@@ -5019,7 +5029,7 @@ index b7a34f1c4d7b5ef3f7a843d152e33c839dcdedd5..845b53ed80446ba0b17298eeb26f615b
} else {
if (!this.level().isClientSide) {
boolean flag = this.getOffers().isEmpty();
-@@ -326,9 +348,10 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
+@@ -333,9 +355,10 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
}
if (flag) {
diff --git a/patches/server/0008-Configurable-entity-base-attributes.patch b/patches/server/0010-Configurable-entity-base-attributes.patch
similarity index 99%
rename from patches/server/0008-Configurable-entity-base-attributes.patch
rename to patches/server/0010-Configurable-entity-base-attributes.patch
index 6efce90a4..cd4fa80e6 100644
--- a/patches/server/0008-Configurable-entity-base-attributes.patch
+++ b/patches/server/0010-Configurable-entity-base-attributes.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Configurable entity base attributes
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
-index 697c8c8fd0cdca4bb8bc3db62f7de8999785ec1e..90a51b05c80d079af07133a3e509aada57927a26 100644
+index 0e084e2dcd0294274aa42b2a15fe58bee54ff393..163af180a12bf2847d6eab87e1fa77aef7cd3550 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -177,7 +177,7 @@ import org.bukkit.plugin.PluginManager;
@@ -34,7 +34,7 @@ index 7c11b5e73d4f3c0be7c467f7522c2d974ab330f3..27aee968718af1ae78e2076ddc890114
protected ParticleOptions getInkParticle() {
return ParticleTypes.GLOW_SQUID_INK;
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-index b027633d6c854f481fbd4a2e4b89ace4b9d7a398..f4cc9ff863079f5546cce1bfa0f1dcab022bb293 100644
+index 30ffb90dda6c95c6f3bc42d1b9747acef0f0f19a..1077eae6e0952d09410518a856ebece808aefef5 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -326,6 +326,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
@@ -55,7 +55,7 @@ index b027633d6c854f481fbd4a2e4b89ace4b9d7a398..f4cc9ff863079f5546cce1bfa0f1dcab
return this.brain;
}
diff --git a/src/main/java/net/minecraft/world/entity/ambient/Bat.java b/src/main/java/net/minecraft/world/entity/ambient/Bat.java
-index d9d9ae5a60b47d60d8473689a2a85a81fc97cc8b..e16eea0be67c59e4b5af9e387e1acaa258cf1fce 100644
+index 1348ec21d1ede67026897563e5c09406c9902043..656088e81781a5711521edec565f4e34313b7bc6 100644
--- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java
+++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java
@@ -268,6 +268,19 @@ public class Bat extends AmbientCreature {
@@ -478,7 +478,7 @@ index 04b6cb63bac767b386b8f67cf80a4d75df9d7fe5..40a766e20d1a2111d561cc05aa49e2ac
protected void registerGoals() {
this.goalSelector.addGoal(1, new FloatGoal(this));
diff --git a/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java b/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java
-index 218af0b8f3d2085c6adde1569feb6c3894aae676..5904b82b87bcdbe41367843885f7c1bd1272d1f1 100644
+index 33ac6f9ae824395b745219f6b1bcedd2766fdb9b..0a173040c56fea6d8f83998b7c66aa8daaf648f2 100644
--- a/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java
+++ b/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java
@@ -154,6 +154,12 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS
@@ -512,7 +512,7 @@ index c3fbe43451385bb7cf1d8996a7c95c226bd2c511..a7fdb54b1bda83e7a365447f2cb57012
@Override
diff --git a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java
-index 3053de1bbdeb12f939555d2cfb9361ed271c9b6a..8293679fbe5df093610c30094de389fb7ff79658 100644
+index a1c800d43ab938add855e94943a7d9dd9dc78460..79102c8819ce3d49538306db3ce4a723ea5d765d 100644
--- a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java
+++ b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java
@@ -115,6 +115,12 @@ public class Axolotl extends Animal implements VariantHolder, B
@@ -838,7 +838,7 @@ index 3a3106bd26947e8851d672a1a5c45c58f5c7f179..0faae8faeba4300a44b8dadedc73c9f1
}
}
diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java
-index 82bea5b969e24f6938c95315c09c4e6287017e9f..f55842cf85dec8e5c26cd5ac52c63599f3b19cf3 100644
+index 754a87c9c7595a4bedf784fbbb6d62b1d0bca756..19a7f7926eeb9c4e4d5bbd5e4768d99c456e8f71 100644
--- a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java
+++ b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java
@@ -114,6 +114,12 @@ public class WitherBoss extends Monster implements RangedAttackMob {
@@ -854,7 +854,7 @@ index 82bea5b969e24f6938c95315c09c4e6287017e9f..f55842cf85dec8e5c26cd5ac52c63599
@Override
protected PathNavigation createNavigation(Level world) {
FlyingPathNavigation navigationflying = new FlyingPathNavigation(this, world);
-@@ -426,7 +432,7 @@ public class WitherBoss extends Monster implements RangedAttackMob {
+@@ -433,7 +439,7 @@ public class WitherBoss extends Monster implements RangedAttackMob {
this.setInvulnerableTicks(i);
if (this.tickCount % 10 == 0) {
@@ -971,7 +971,7 @@ index 4364ac531826524fc3c099b9900406b2bc3a5540..1cfb85a72e270a953c13102490dc38f3
return Guardian.createAttributes().add(Attributes.MOVEMENT_SPEED, 0.30000001192092896D).add(Attributes.ATTACK_DAMAGE, 8.0D).add(Attributes.MAX_HEALTH, 80.0D);
}
diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
-index bd08a90aa9128d7d31dbbe7e075d32a8b8aad724..4265dc40f7337e565d236eb3c04847a87494fc86 100644
+index 9b0004497fdd8980ec571536ced9de947b3505b0..f1d4e32085085b06a07fec88737e1ad9e9da2adf 100644
--- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
+++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
@@ -112,6 +112,12 @@ public class EnderMan extends Monster implements NeutralMob {
@@ -1570,7 +1570,7 @@ index f935d475fd1aca407bde420e9ba8002002ea55f6..9bf251915c8a126ba480f44ea203f1a4
protected SoundEvent getHurtSound(DamageSource source) {
return SoundEvents.CREAKING_SWAY;
diff --git a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java
-index b92c65703dfc4ed95de97534b1e8195c627aa212..08c4a32b1195820eb574cdf4a499107565a551d6 100644
+index cde73e0bac71d1c37c3335f6a2294622f9453fbd..b94cde5e03ef98eb78386acc59b1b864054d97b7 100644
--- a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java
+++ b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java
@@ -107,6 +107,12 @@ public class Hoglin extends Animal implements Enemy, HoglinBase {
@@ -1587,7 +1587,7 @@ index b92c65703dfc4ed95de97534b1e8195c627aa212..08c4a32b1195820eb574cdf4a4991075
@VisibleForTesting
diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java
-index ef7614c49a7165505f32dc21164b7a1fd4836017..33326839175d2826eaa61eb7bc1e110d1ff6bc94 100644
+index 9a3bc9c0ad1b0af3c8196a773dd93b069ca4e92c..23673d9ce87acda718d12fce9af0ef5f27983f1a 100644
--- a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java
+++ b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java
@@ -113,6 +113,12 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento
@@ -1621,10 +1621,10 @@ index d7578f7d4eba9d630feb589dd2761789f8bcfde9..6459e588e6feb6d7bcf999e36b658bba
return Monster.createMonsterAttributes()
.add(Attributes.MAX_HEALTH, 50.0)
diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java
-index 845b53ed80446ba0b17298eeb26f615b63b67340..37c26008486ffdf7f1d6bdfd0253067a1c6bf942 100644
+index 80b6deade244d5ac2a6245fd2f3575af216a302c..9505402564893b3046b86f95fa1e34a64ac98e8e 100644
--- a/src/main/java/net/minecraft/world/entity/npc/Villager.java
+++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java
-@@ -178,6 +178,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
+@@ -180,6 +180,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
}
// Purpur end
diff --git a/patches/server/0009-Barrels-and-enderchests-6-rows.patch b/patches/server/0011-Barrels-and-enderchests-6-rows.patch
similarity index 100%
rename from patches/server/0009-Barrels-and-enderchests-6-rows.patch
rename to patches/server/0011-Barrels-and-enderchests-6-rows.patch
diff --git a/patches/server/0010-Llama-API.patch b/patches/server/0012-Llama-API.patch
similarity index 97%
rename from patches/server/0010-Llama-API.patch
rename to patches/server/0012-Llama-API.patch
index 39a3cc127..65d260b7b 100644
--- a/patches/server/0010-Llama-API.patch
+++ b/patches/server/0012-Llama-API.patch
@@ -25,7 +25,7 @@ index df695b444fa2a993d381e2f197182c3e91a68502..eb0faf58fa1a408f294fc62120b140de
double d = this.llama.distanceToSqr(this.llama.getCaravanHead());
if (d > 676.0) {
diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java
-index eab57ab99168b1b9ae8df6c8b2b6dd623b1871fb..7ff446ea2163d3b3b9f7fd826939dda21e07c99f 100644
+index f9774491bd49bb37d3581cebbcedfc1878cf15b5..4a412a8a582e092a920029791a48c085527cbbd0 100644
--- a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java
+++ b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java
@@ -72,6 +72,7 @@ public class Llama extends AbstractChestedHorse implements VariantHolder implements FeatureElement, EntityTypeT
+@@ -405,6 +405,16 @@ public class EntityType implements FeatureElement, EntityTypeT
return EntityType.register(EntityType.vanillaEntityId(id), type);
}
@@ -25,7 +25,7 @@ index c8c2394558952d7ca57d29874485251b8f2b3400..48386124487a1f0fdc1d476895fa1181
public static ResourceLocation getKey(EntityType> type) {
return BuiltInRegistries.ENTITY_TYPE.getKey(type);
}
-@@ -604,6 +614,16 @@ public class EntityType implements FeatureElement, EntityTypeT
+@@ -605,6 +615,16 @@ public class EntityType implements FeatureElement, EntityTypeT
return this.category;
}
diff --git a/patches/server/0016-Anvil-API.patch b/patches/server/0018-Anvil-API.patch
similarity index 100%
rename from patches/server/0016-Anvil-API.patch
rename to patches/server/0018-Anvil-API.patch
diff --git a/patches/server/0017-Alternative-Keepalive-Handling.patch b/patches/server/0019-Alternative-Keepalive-Handling.patch
similarity index 100%
rename from patches/server/0017-Alternative-Keepalive-Handling.patch
rename to patches/server/0019-Alternative-Keepalive-Handling.patch
diff --git a/patches/server/0018-Enchantment-convenience-methods.patch b/patches/server/0020-Enchantment-convenience-methods.patch
similarity index 100%
rename from patches/server/0018-Enchantment-convenience-methods.patch
rename to patches/server/0020-Enchantment-convenience-methods.patch
diff --git a/patches/server/0019-Silk-touch-spawners.patch b/patches/server/0021-Silk-touch-spawners.patch
similarity index 99%
rename from patches/server/0019-Silk-touch-spawners.patch
rename to patches/server/0021-Silk-touch-spawners.patch
index 1bcddb1d2..7f106b8fd 100644
--- a/patches/server/0019-Silk-touch-spawners.patch
+++ b/patches/server/0021-Silk-touch-spawners.patch
@@ -100,7 +100,7 @@ index 4f190a40b8474aa06a92c8afcc06d0044120ff7b..80ee7a6f010cc838625674007a3ea908
int i = 15 + worldserver.random.nextInt(15) + worldserver.random.nextInt(15);
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 42bff6f2d864a31dcb1c0087a4e0c9027ece001e..9d6a90b11ef09900de9405cd3233e1ee5dd6e31e 100644
+index 9b1a4502aa6c26c7524ec17697250317b7f381fd..d6b1b49102ae4421e273f6c781e25a3b18fe13f7 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -109,6 +109,38 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0020-Add-turtle-egg-block-options.patch b/patches/server/0022-Add-turtle-egg-block-options.patch
similarity index 96%
rename from patches/server/0020-Add-turtle-egg-block-options.patch
rename to patches/server/0022-Add-turtle-egg-block-options.patch
index 628c2f46a..99dface32 100644
--- a/patches/server/0020-Add-turtle-egg-block-options.patch
+++ b/patches/server/0022-Add-turtle-egg-block-options.patch
@@ -36,7 +36,7 @@ index 953ddb2ea6fd48e57712e30a6addf23e188e5312..bae4931fff0db56aa125248e17b29f7c
}
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 65c41d9c757819f3da4c0549f4e5fe002992b4d4..cdef3af8a48d640a8180b5a5658b0ef46087095f 100644
+index d6b1b49102ae4421e273f6c781e25a3b18fe13f7..f6186c65468953756da9c381c6ee712115a244f7 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -141,6 +141,15 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0021-Logger-settings-suppressing-pointless-logs.patch b/patches/server/0023-Logger-settings-suppressing-pointless-logs.patch
similarity index 100%
rename from patches/server/0021-Logger-settings-suppressing-pointless-logs.patch
rename to patches/server/0023-Logger-settings-suppressing-pointless-logs.patch
diff --git a/patches/server/0022-Disable-outdated-build-check.patch b/patches/server/0024-Disable-outdated-build-check.patch
similarity index 92%
rename from patches/server/0022-Disable-outdated-build-check.patch
rename to patches/server/0024-Disable-outdated-build-check.patch
index bd3532fcb..845632208 100644
--- a/patches/server/0022-Disable-outdated-build-check.patch
+++ b/patches/server/0024-Disable-outdated-build-check.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Disable outdated build check
diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java
-index bc0353e4f41680d04f4d5e2dd85640d9e0f06736..b2d60b214b58d9a5fadf3629e5ebc358c904d1c6 100644
+index 9ad9239ae0804cc7a4a9ea4a05401b303ae9b372..5bce26e9671aab15ac4bac9a0d00b5184bef74ea 100644
--- a/src/main/java/org/bukkit/craftbukkit/Main.java
+++ b/src/main/java/org/bukkit/craftbukkit/Main.java
@@ -267,7 +267,7 @@ public class Main {
diff --git a/patches/server/0023-Giants-AI-settings.patch b/patches/server/0025-Giants-AI-settings.patch
similarity index 100%
rename from patches/server/0023-Giants-AI-settings.patch
rename to patches/server/0025-Giants-AI-settings.patch
diff --git a/patches/server/0024-Zombie-horse-naturally-spawn.patch b/patches/server/0026-Zombie-horse-naturally-spawn.patch
similarity index 95%
rename from patches/server/0024-Zombie-horse-naturally-spawn.patch
rename to patches/server/0026-Zombie-horse-naturally-spawn.patch
index ed77c8a8f..57847a580 100644
--- a/patches/server/0024-Zombie-horse-naturally-spawn.patch
+++ b/patches/server/0026-Zombie-horse-naturally-spawn.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Zombie horse naturally spawn
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
-index 32339a18345feddb49cffe5ed1f18a2bfaf931ba..a0ff876d951f62eb172ee3763a9bc7ba5b191034 100644
+index 1f49d018683fa19f498c8e68dab8a7ddde6cfad0..c05d0d836ced6db6b4a3e85fe0973dd7b1aaad81 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
-@@ -939,10 +939,18 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
+@@ -953,10 +953,18 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
boolean flag1 = this.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING) && this.random.nextDouble() < (double) difficultydamagescaler.getEffectiveDifficulty() * this.paperConfig().entities.spawning.skeletonHorseThunderSpawnChance.or(0.01D) && !this.getBlockState(blockposition.below()).is(Blocks.LIGHTNING_ROD); // Paper - Configurable spawn chances for skeleton horses
if (flag1) {
diff --git a/patches/server/0025-Charged-creeper-naturally-spawn.patch b/patches/server/0027-Charged-creeper-naturally-spawn.patch
similarity index 100%
rename from patches/server/0025-Charged-creeper-naturally-spawn.patch
rename to patches/server/0027-Charged-creeper-naturally-spawn.patch
diff --git a/patches/server/0026-Rabbit-naturally-spawn-toast-and-killer.patch b/patches/server/0028-Rabbit-naturally-spawn-toast-and-killer.patch
similarity index 100%
rename from patches/server/0026-Rabbit-naturally-spawn-toast-and-killer.patch
rename to patches/server/0028-Rabbit-naturally-spawn-toast-and-killer.patch
diff --git a/patches/server/0027-Fix-outdated-server-showing-in-ping-before-server-fu.patch b/patches/server/0029-Fix-outdated-server-showing-in-ping-before-server-fu.patch
similarity index 100%
rename from patches/server/0027-Fix-outdated-server-showing-in-ping-before-server-fu.patch
rename to patches/server/0029-Fix-outdated-server-showing-in-ping-before-server-fu.patch
diff --git a/patches/server/0028-Tulips-change-fox-type.patch b/patches/server/0030-Tulips-change-fox-type.patch
similarity index 100%
rename from patches/server/0028-Tulips-change-fox-type.patch
rename to patches/server/0030-Tulips-change-fox-type.patch
diff --git a/patches/server/0029-Breedable-Polar-Bears.patch b/patches/server/0031-Breedable-Polar-Bears.patch
similarity index 100%
rename from patches/server/0029-Breedable-Polar-Bears.patch
rename to patches/server/0031-Breedable-Polar-Bears.patch
diff --git a/patches/server/0030-Chickens-can-retaliate.patch b/patches/server/0032-Chickens-can-retaliate.patch
similarity index 97%
rename from patches/server/0030-Chickens-can-retaliate.patch
rename to patches/server/0032-Chickens-can-retaliate.patch
index cdd46320d..326987d93 100644
--- a/patches/server/0030-Chickens-can-retaliate.patch
+++ b/patches/server/0032-Chickens-can-retaliate.patch
@@ -52,7 +52,7 @@ index 9d3c5340b9e16117fbc63f184fe92cf7ae0998be..798a59046c3ac9a3838f7bcaf7bb21e7
@Override
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index fe9b0ff2a73dc0f49b46738f07a7c58b622399d6..6d3b41da6210699869839826e037a038a637c4c3 100644
+index efa453fdde735158b4c6324546ca83bdd2935746..dcc8e4880c1bfff1abdc1b542000d61e3378d4f1 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -343,6 +343,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0031-Add-option-to-set-armorstand-step-height.patch b/patches/server/0033-Add-option-to-set-armorstand-step-height.patch
similarity index 94%
rename from patches/server/0031-Add-option-to-set-armorstand-step-height.patch
rename to patches/server/0033-Add-option-to-set-armorstand-step-height.patch
index 44409cdea..cf4d6f0b9 100644
--- a/patches/server/0031-Add-option-to-set-armorstand-step-height.patch
+++ b/patches/server/0033-Add-option-to-set-armorstand-step-height.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Add option to set armorstand step height
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
-index 99ac631aaa51ab67b5f3356175656c81add3c637..80160d15c9dd62e2a0fba0ad7787b3a5069c7279 100644
+index 163af180a12bf2847d6eab87e1fa77aef7cd3550..1057497963a615ae1aaafa5aac1f53471a00c763 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -300,6 +300,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -16,7 +16,7 @@ index 99ac631aaa51ab67b5f3356175656c81add3c637..80160d15c9dd62e2a0fba0ad7787b3a5
public boolean noPhysics;
private boolean wasOnFire;
public final RandomSource random;
-@@ -5139,7 +5140,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
+@@ -5142,7 +5143,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
}
public float maxUpStep() {
diff --git a/patches/server/0032-Cat-spawning-options.patch b/patches/server/0034-Cat-spawning-options.patch
similarity index 97%
rename from patches/server/0032-Cat-spawning-options.patch
rename to patches/server/0034-Cat-spawning-options.patch
index 23be7998d..1cb7e3901 100644
--- a/patches/server/0032-Cat-spawning-options.patch
+++ b/patches/server/0034-Cat-spawning-options.patch
@@ -46,7 +46,7 @@ index b0236c7bf9441aa84d3795ffed05dd6099f29636..796dcc0dcf9022b455b8847e045266b8
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index e5c4ca83392f398e24be193a0ed77daa85db9913..7da688e575a1c4ca35c0d23401bf52f3bbbed6ae 100644
+index 149360f01139fa4b14e27e5b34fe3fe7682c7ffc..b3284dfbcdc240919776f47a780a824c406c2781 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -312,6 +312,9 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0033-Cows-eat-mushrooms.patch b/patches/server/0035-Cows-eat-mushrooms.patch
similarity index 98%
rename from patches/server/0033-Cows-eat-mushrooms.patch
rename to patches/server/0035-Cows-eat-mushrooms.patch
index ea5ec8f3f..4aea692cc 100644
--- a/patches/server/0033-Cows-eat-mushrooms.patch
+++ b/patches/server/0035-Cows-eat-mushrooms.patch
@@ -96,7 +96,7 @@ index 8229a99d4454df64def52bbf686183284d62c900..e6fa66a8c88d4f20a7383e8fd5b3df44
+ // Purpur end
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 2f76feed632f4b637bf2bfa792683f5d09b001b7..a64d4b1f839f7b5c457ad4bd5295ff8222b24643 100644
+index b3284dfbcdc240919776f47a780a824c406c2781..6eb25a9b4bb634e57f6de015c9a9f2fc78d0b86f 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -390,6 +390,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0034-Fix-cow-rotation-when-shearing-mooshroom.patch b/patches/server/0036-Fix-cow-rotation-when-shearing-mooshroom.patch
similarity index 100%
rename from patches/server/0034-Fix-cow-rotation-when-shearing-mooshroom.patch
rename to patches/server/0036-Fix-cow-rotation-when-shearing-mooshroom.patch
diff --git a/patches/server/0035-Pigs-give-saddle-back.patch b/patches/server/0037-Pigs-give-saddle-back.patch
similarity index 100%
rename from patches/server/0035-Pigs-give-saddle-back.patch
rename to patches/server/0037-Pigs-give-saddle-back.patch
diff --git a/patches/server/0036-Snowman-drop-and-put-back-pumpkin.patch b/patches/server/0038-Snowman-drop-and-put-back-pumpkin.patch
similarity index 100%
rename from patches/server/0036-Snowman-drop-and-put-back-pumpkin.patch
rename to patches/server/0038-Snowman-drop-and-put-back-pumpkin.patch
diff --git a/patches/server/0037-Ender-dragon-always-drop-full-exp.patch b/patches/server/0039-Ender-dragon-always-drop-full-exp.patch
similarity index 100%
rename from patches/server/0037-Ender-dragon-always-drop-full-exp.patch
rename to patches/server/0039-Ender-dragon-always-drop-full-exp.patch
diff --git a/patches/server/0038-Allow-soil-to-moisten-from-water-directly-under-it.patch b/patches/server/0040-Allow-soil-to-moisten-from-water-directly-under-it.patch
similarity index 94%
rename from patches/server/0038-Allow-soil-to-moisten-from-water-directly-under-it.patch
rename to patches/server/0040-Allow-soil-to-moisten-from-water-directly-under-it.patch
index 2d05767e5..ad5151bfc 100644
--- a/patches/server/0038-Allow-soil-to-moisten-from-water-directly-under-it.patch
+++ b/patches/server/0040-Allow-soil-to-moisten-from-water-directly-under-it.patch
@@ -18,7 +18,7 @@ index c3dba0c2c94f3804338f86621dc42405e380a6b3..df89b18f0d5d2dad5745ec65bcd9e4a7
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 89cfedcbb45cd9a3ff9e795828bbc5ae8efa7d6d..c5b3a04d81834d6bdf7c4acd06ce4929d7a25769 100644
+index a21ced5b26dd176863d26c90c5aa083e64f3cd6a..1cc5c2f6b2d110174a2c79d26386f96301050834 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -146,6 +146,11 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0039-Minecart-settings-and-WASD-controls.patch b/patches/server/0041-Minecart-settings-and-WASD-controls.patch
similarity index 97%
rename from patches/server/0039-Minecart-settings-and-WASD-controls.patch
rename to patches/server/0041-Minecart-settings-and-WASD-controls.patch
index a0a488a9d..e7fb47d39 100644
--- a/patches/server/0039-Minecart-settings-and-WASD-controls.patch
+++ b/patches/server/0041-Minecart-settings-and-WASD-controls.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Minecart settings and WASD controls
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
-index a9228aa69e31b0e69f0b07170de0ac99b64fe0fe..b5054c762382bb81fa83069a97467af08946f6e5 100644
+index d4ed1dd4e4c56cf40632b0857af82a944579da65..a91a4602b5bc72dc0162fd2d60eebf3a05df4065 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -1442,6 +1442,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
@@ -17,7 +17,7 @@ index a9228aa69e31b0e69f0b07170de0ac99b64fe0fe..b5054c762382bb81fa83069a97467af0
if (!flag && this.spawnInvulnerableTime > 0 && !source.is(DamageTypeTags.BYPASSES_INVULNERABILITY)) {
diff --git a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java
-index ce91809d66007def728a127a0a9d33f6235cc94d..bd4e4f03c4b70247c7fc887854e0aa01a8af81c6 100644
+index cdc8606ffe5c75ee19d92e9f86f26b2a502d765e..b0e13160b185151e08f2e5430aa7e96977965a04 100644
--- a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java
+++ b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java
@@ -92,6 +92,7 @@ public abstract class AbstractMinecart extends VehicleEntity {
@@ -150,7 +150,7 @@ index 99fd67a78539133adf78d65e2c520ff3dd260301..6b987ee220d94b482d2aeb4ff6bf2718
protected final String descriptionId;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index b70a0bdb06a0fa930b525cac44b5bd62e318367b..a97dadd4c0b04833282f9fc484ef760da712974d 100644
+index 1cc5c2f6b2d110174a2c79d26386f96301050834..21e3931d64d32e69b8ba6f7e6d1a9bf044c7c9a8 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -96,6 +96,68 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0040-Disable-loot-drops-on-death-by-cramming.patch b/patches/server/0042-Disable-loot-drops-on-death-by-cramming.patch
similarity index 87%
rename from patches/server/0040-Disable-loot-drops-on-death-by-cramming.patch
rename to patches/server/0042-Disable-loot-drops-on-death-by-cramming.patch
index b9d4dcd3d..6e1b88dee 100644
--- a/patches/server/0040-Disable-loot-drops-on-death-by-cramming.patch
+++ b/patches/server/0042-Disable-loot-drops-on-death-by-cramming.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Disable loot drops on death by cramming
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-index f4cc9ff863079f5546cce1bfa0f1dcab022bb293..952b498b3514205accf48104da37ff713074e484 100644
+index 1077eae6e0952d09410518a856ebece808aefef5..af017da528924bae0542dd0e59d23c3bf59aa7b3 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-@@ -1914,6 +1914,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
+@@ -1927,6 +1927,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
this.dropEquipment(world); // CraftBukkit - from below
if (this.shouldDropLoot() && world.getGameRules().getBoolean(GameRules.RULE_DOMOBLOOT)) {
@@ -16,7 +16,7 @@ index f4cc9ff863079f5546cce1bfa0f1dcab022bb293..952b498b3514205accf48104da37ff71
this.dropFromLootTable(world, damageSource, flag);
// Paper start
final boolean prev = this.clearEquipmentSlots;
-@@ -1922,6 +1923,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
+@@ -1935,6 +1936,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
// Paper end
this.dropCustomDeathLoot(world, damageSource, flag);
this.clearEquipmentSlots = prev; // Paper
@@ -25,7 +25,7 @@ index f4cc9ff863079f5546cce1bfa0f1dcab022bb293..952b498b3514205accf48104da37ff71
// CraftBukkit start - Call death event // Paper start - call advancement triggers with correct entity equipment
org.bukkit.event.entity.EntityDeathEvent deathEvent = CraftEventFactory.callEntityDeathEvent(this, damageSource, this.drops, () -> {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index a97dadd4c0b04833282f9fc484ef760da712974d..03f5aea7bc98984ced82c7dce93cc4ea4c48179f 100644
+index 21e3931d64d32e69b8ba6f7e6d1a9bf044c7c9a8..983523dfff2773799640347ff047e600fb25044e 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -96,6 +96,11 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0041-Option-to-toggle-milk-curing-bad-omen.patch b/patches/server/0043-Option-to-toggle-milk-curing-bad-omen.patch
similarity index 95%
rename from patches/server/0041-Option-to-toggle-milk-curing-bad-omen.patch
rename to patches/server/0043-Option-to-toggle-milk-curing-bad-omen.patch
index eacc9572e..881bdbc1d 100644
--- a/patches/server/0041-Option-to-toggle-milk-curing-bad-omen.patch
+++ b/patches/server/0043-Option-to-toggle-milk-curing-bad-omen.patch
@@ -22,7 +22,7 @@ index 0651c2af040e3f248860cfb3c5effce91589380e..d884df481b4bbb978113a4ac7a1feac3
// CraftBukkit end
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 03f5aea7bc98984ced82c7dce93cc4ea4c48179f..dc90d85b1c9e44163a92d25590d2e82901e32262 100644
+index 983523dfff2773799640347ff047e600fb25044e..6daa99bb60723af0eb38b625ab0cd24d33d7552a 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -97,8 +97,10 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0042-Skip-events-if-there-s-no-listeners.patch b/patches/server/0044-Skip-events-if-there-s-no-listeners.patch
similarity index 100%
rename from patches/server/0042-Skip-events-if-there-s-no-listeners.patch
rename to patches/server/0044-Skip-events-if-there-s-no-listeners.patch
diff --git a/patches/server/0043-Add-permission-for-F3-N-debug.patch b/patches/server/0045-Add-permission-for-F3-N-debug.patch
similarity index 89%
rename from patches/server/0043-Add-permission-for-F3-N-debug.patch
rename to patches/server/0045-Add-permission-for-F3-N-debug.patch
index 14affcf66..fc63dee39 100644
--- a/patches/server/0043-Add-permission-for-F3-N-debug.patch
+++ b/patches/server/0045-Add-permission-for-F3-N-debug.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Add permission for F3+N debug
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
-index 718b9f237448685900cbb722510c93353a8c28b2..54e8d35edd45afd2dc152e60cc4ac96dd2916d55 100644
+index 595302e0177824c1e3ad54e9a088337eeb2d872b..73c83770e1acd6c57742405a04ffa7a733aea4f6 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
@@ -1108,6 +1108,7 @@ public abstract class PlayerList {
diff --git a/patches/server/0044-Configurable-TPS-Catchup.patch b/patches/server/0046-Configurable-TPS-Catchup.patch
similarity index 66%
rename from patches/server/0044-Configurable-TPS-Catchup.patch
rename to patches/server/0046-Configurable-TPS-Catchup.patch
index 0a7f850bb..97ab38788 100644
--- a/patches/server/0044-Configurable-TPS-Catchup.patch
+++ b/patches/server/0046-Configurable-TPS-Catchup.patch
@@ -5,20 +5,18 @@ Subject: [PATCH] Configurable TPS Catchup
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index efeda71653e51e350daaabef103d89ff33fb384f..d6b1ab5c380f044fd11f5639e1422a55459a2e30 100644
+index 95300ce21d9e5ddfcd6cbf7cc4bb1034c9284b43..ea823be49f1782e6e1dd1ebb66a3bf7642e43e40 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
-@@ -1342,6 +1342,10 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop {
return itemstack.isEmpty() || entity.getEquipmentSlotForItem(itemstack) == slot;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 6668d186ff2f8e94ac7a7ce1de9fa0ee86757380..4a3fd89f79d539dd167fe3b616a0e0c539a9ac8f 100644
+index f62000475acb9e48f3c86c6ed267ed3b2038529a..04b3b0661143d4d600dd34cd91498acbc929b10d 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -221,6 +221,11 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0055-Add-option-for-boats-to-eject-players-on-land.patch b/patches/server/0057-Add-option-for-boats-to-eject-players-on-land.patch
similarity index 95%
rename from patches/server/0055-Add-option-for-boats-to-eject-players-on-land.patch
rename to patches/server/0057-Add-option-for-boats-to-eject-players-on-land.patch
index 9fbf0da7c..2e231b4f0 100644
--- a/patches/server/0055-Add-option-for-boats-to-eject-players-on-land.patch
+++ b/patches/server/0057-Add-option-for-boats-to-eject-players-on-land.patch
@@ -17,7 +17,7 @@ index 1fdbef16cd29c8fc74578ac3328f985eca61088d..e523f651e8776a89ffba015921d708f5
} else {
return AbstractBoat.Status.IN_AIR;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 4a3fd89f79d539dd167fe3b616a0e0c539a9ac8f..968ac3249b4971c68be4e32ce35ae9456a92e52f 100644
+index 04b3b0661143d4d600dd34cd91498acbc929b10d..3e78e57f29e98db2dde7d650b65ee23f99238ff7 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -96,10 +96,12 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0056-Mending-mends-most-damages-equipment-first.patch b/patches/server/0058-Mending-mends-most-damages-equipment-first.patch
similarity index 98%
rename from patches/server/0056-Mending-mends-most-damages-equipment-first.patch
rename to patches/server/0058-Mending-mends-most-damages-equipment-first.patch
index 1239e5826..216a93a51 100644
--- a/patches/server/0056-Mending-mends-most-damages-equipment-first.patch
+++ b/patches/server/0058-Mending-mends-most-damages-equipment-first.patch
@@ -110,7 +110,7 @@ index d8fc10f9cd0ab2c26e64613006569a86ce201550..73241113e50dc8be89ef8850d49d95ec
+ // Purpur end - Add option to mend the most damaged equipment first
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 968ac3249b4971c68be4e32ce35ae9456a92e52f..2aa4a46418d37fd53ab215cf1bb4438f5efd8df7 100644
+index 3e78e57f29e98db2dde7d650b65ee23f99238ff7..6b7a6a7889353f9557c6e3bfa8ff8caf66416c1b 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -96,11 +96,13 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0057-Add-5-second-tps-average-in-tps.patch b/patches/server/0059-Add-5-second-tps-average-in-tps.patch
similarity index 96%
rename from patches/server/0057-Add-5-second-tps-average-in-tps.patch
rename to patches/server/0059-Add-5-second-tps-average-in-tps.patch
index aa588ab1b..6f01a651f 100644
--- a/patches/server/0057-Add-5-second-tps-average-in-tps.patch
+++ b/patches/server/0059-Add-5-second-tps-average-in-tps.patch
@@ -26,7 +26,7 @@ index 12b327eea95e0de9e9c39b7d039badee8ec46508..849ecc5af70901f1e40cb6c419f33f1c
}
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index d752b590138da346113b9bf732f91761e58502a6..b1e9f023f643f070a638e064df4245ad95039ef3 100644
+index dac1d0d5ca1222e9922316b17370ba8c9b9cb77f..8b1e5fab163268796c24c40c2454d355b7cac615 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -324,7 +324,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop pages, int slotId) {
@@ -45,7 +45,7 @@ index 58540f1b04e569198c09ada7415a48b9af69147a..97caf27fe92ff6e34e2edba77abd3fa4
itemstack.set(DataComponents.WRITABLE_BOOK_CONTENT, new WritableBookContent(list1));
this.player.getInventory().setItem(slotId, CraftEventFactory.handleEditBookEvent(this.player, slotId, handItem, itemstack)); // CraftBukkit // Paper - Don't ignore result (see other callsite for handleEditBookEvent)
-@@ -1273,6 +1282,11 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
+@@ -1274,6 +1283,11 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
}
private void signBook(FilteredText title, List pages, int slotId) {
@@ -57,7 +57,7 @@ index 58540f1b04e569198c09ada7415a48b9af69147a..97caf27fe92ff6e34e2edba77abd3fa4
ItemStack itemstack = this.player.getInventory().getItem(slotId);
if (itemstack.has(DataComponents.WRITABLE_BOOK_CONTENT)) {
-@@ -1280,10 +1294,10 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
+@@ -1281,10 +1295,10 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
itemstack1.remove(DataComponents.WRITABLE_BOOK_CONTENT);
List> list1 = (List>) (List) pages.stream().map((filteredtext1) -> { // CraftBukkit - decompile error
@@ -70,7 +70,7 @@ index 58540f1b04e569198c09ada7415a48b9af69147a..97caf27fe92ff6e34e2edba77abd3fa4
CraftEventFactory.handleEditBookEvent(this.player, slotId, itemstack, itemstack1); // CraftBukkit
this.player.getInventory().setItem(slotId, itemstack); // CraftBukkit - event factory updates the hand book
}
-@@ -1293,6 +1307,16 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
+@@ -1294,6 +1308,16 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
return this.player.isTextFilteringEnabled() ? Filterable.passThrough(message.filteredOrEmpty()) : Filterable.from(message);
}
diff --git a/patches/server/0070-Entity-lifespan.patch b/patches/server/0072-Entity-lifespan.patch
similarity index 87%
rename from patches/server/0070-Entity-lifespan.patch
rename to patches/server/0072-Entity-lifespan.patch
index cb291d89a..2d401d832 100644
--- a/patches/server/0070-Entity-lifespan.patch
+++ b/patches/server/0072-Entity-lifespan.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Entity lifespan
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-index 97caf27fe92ff6e34e2edba77abd3fa42211b00a..c5f36e6a37d1d718e145de85b9a0a89114790d36 100644
+index 99a023e87428ee200fcb3b663c2ab6a1077b3bf0..f11dc92d796d3044adc8cbd97edf00e047ba72f1 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-@@ -2856,6 +2856,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
+@@ -2857,6 +2857,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
AABB axisalignedbb = entity.getBoundingBox();
if (this.player.canInteractWithEntity(axisalignedbb, io.papermc.paper.configuration.GlobalConfiguration.get().misc.clientInteractionLeniencyDistance.or(3.0D))) { // Paper - configurable lenience value for interact range
@@ -17,7 +17,7 @@ index 97caf27fe92ff6e34e2edba77abd3fa42211b00a..c5f36e6a37d1d718e145de85b9a0a891
private void performInteraction(InteractionHand enumhand, ServerGamePacketListenerImpl.EntityInteraction playerconnection_a, PlayerInteractEntityEvent event) { // CraftBukkit
ItemStack itemstack = ServerGamePacketListenerImpl.this.player.getItemInHand(enumhand);
diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java
-index bc2380a71aa65c40f326c1f6bdf15ee25346ffee..8ce316292850353231e529f75630d3fde290a161 100644
+index 6502676a94ebb663b6126a21896cda456066d55b..e99b72b89abdded3e988bd1a92d36055fb1a84dc 100644
--- a/src/main/java/net/minecraft/world/entity/Mob.java
+++ b/src/main/java/net/minecraft/world/entity/Mob.java
@@ -148,6 +148,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab
@@ -28,7 +28,7 @@ index bc2380a71aa65c40f326c1f6bdf15ee25346ffee..8ce316292850353231e529f75630d3fd
public boolean aware = true; // CraftBukkit
protected Mob(EntityType extends Mob> type, Level world) {
-@@ -334,6 +335,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab
+@@ -336,6 +337,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab
entityliving = null;
}
}
@@ -36,7 +36,7 @@ index bc2380a71aa65c40f326c1f6bdf15ee25346ffee..8ce316292850353231e529f75630d3fd
this.target = entityliving;
return true;
// CraftBukkit end
-@@ -378,8 +380,28 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab
+@@ -380,8 +382,28 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab
}
gameprofilerfiller.pop();
@@ -65,7 +65,7 @@ index bc2380a71aa65c40f326c1f6bdf15ee25346ffee..8ce316292850353231e529f75630d3fd
@Override
protected void playHurtSound(DamageSource damageSource) {
this.resetAmbientSoundTime();
-@@ -547,6 +569,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab
+@@ -549,6 +571,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab
}
nbt.putBoolean("Bukkit.Aware", this.aware); // CraftBukkit
@@ -73,7 +73,7 @@ index bc2380a71aa65c40f326c1f6bdf15ee25346ffee..8ce316292850353231e529f75630d3fd
}
@Override
-@@ -624,6 +647,11 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab
+@@ -626,6 +649,11 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab
this.aware = nbt.getBoolean("Bukkit.Aware");
}
// CraftBukkit end
@@ -85,7 +85,7 @@ index bc2380a71aa65c40f326c1f6bdf15ee25346ffee..8ce316292850353231e529f75630d3fd
}
@Override
-@@ -1735,6 +1763,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab
+@@ -1741,6 +1769,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab
this.playAttackSound();
}
@@ -94,7 +94,7 @@ index bc2380a71aa65c40f326c1f6bdf15ee25346ffee..8ce316292850353231e529f75630d3fd
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index df753eb03c427268d404598b96b8285a00460e2d..722c95adbed966ddec57250a5fdc1978594fd499 100644
+index 6e68accdf6d4067f69cf7b29381ee2eab7a2b20c..bfd03c3cdc2b80415730aa1a18fad5afe838df25 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -120,6 +120,11 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0071-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch b/patches/server/0073-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch
similarity index 97%
rename from patches/server/0071-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch
rename to patches/server/0073-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch
index 528460b9b..1e5f575d2 100644
--- a/patches/server/0071-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch
+++ b/patches/server/0073-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch
@@ -36,7 +36,7 @@ index a91a4602b5bc72dc0162fd2d60eebf3a05df4065..cbe608df708d5530813230cddd78568c
+ // Purpur end
}
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-index 37f9e79cef4d2b68af61b4a1fbd42199bec6e28e..5e5fc866a9126f5909e04c257139cbf34fd31d2d 100644
+index c1a3103aa692bb5dfb4e162159c77a03d9c9a0e8..2007dd29cc2c1ee4cf88db27e0082c3548ebf344 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -479,6 +479,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
diff --git a/patches/server/0072-Squid-EAR-immunity.patch b/patches/server/0074-Squid-EAR-immunity.patch
similarity index 93%
rename from patches/server/0072-Squid-EAR-immunity.patch
rename to patches/server/0074-Squid-EAR-immunity.patch
index 0c7beebbe..21dbb94d6 100644
--- a/patches/server/0072-Squid-EAR-immunity.patch
+++ b/patches/server/0074-Squid-EAR-immunity.patch
@@ -25,10 +25,10 @@ index b5d714f137257810ced4b4457bd5bb01123d3452..0d4eaa2933d2b6501eeb64a0d95b2d4d
public boolean spiderRidable = false;
diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java
-index 24d7eca3f0b06602a1026eda3432f0a4255d8b01..9d8d0a99f0b2a8e3452c4c86e6c53c66d58c5b3d 100644
+index a017374f2027946ef465cf41fd6ed6de7f00e19f..9b1a16747aa23b18e4cff986efaac6ce64b6ddb9 100644
--- a/src/main/java/org/spigotmc/ActivationRange.java
+++ b/src/main/java/org/spigotmc/ActivationRange.java
-@@ -378,6 +378,7 @@ public class ActivationRange
+@@ -401,6 +401,7 @@ public class ActivationRange
*/
public static boolean checkIfActive(Entity entity)
{
diff --git a/patches/server/0073-Phantoms-burn-in-light.patch b/patches/server/0075-Phantoms-burn-in-light.patch
similarity index 100%
rename from patches/server/0073-Phantoms-burn-in-light.patch
rename to patches/server/0075-Phantoms-burn-in-light.patch
diff --git a/patches/server/0074-Configurable-villager-breeding.patch b/patches/server/0076-Configurable-villager-breeding.patch
similarity index 93%
rename from patches/server/0074-Configurable-villager-breeding.patch
rename to patches/server/0076-Configurable-villager-breeding.patch
index b77cfcd3e..36aeada30 100644
--- a/patches/server/0074-Configurable-villager-breeding.patch
+++ b/patches/server/0076-Configurable-villager-breeding.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Configurable villager breeding
diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java
-index 329db0049e0792b2c066349849ebd7c26a9178d7..c50cfa8225d5098f978da42cdf6c6860e93e9f2a 100644
+index 394c8667cfe57fa1fba93231a1ebb5be6dc63c63..3528cc251ebae1011ec3dac4b893157e446a1e22 100644
--- a/src/main/java/net/minecraft/world/entity/npc/Villager.java
+++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java
-@@ -762,7 +762,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
+@@ -769,7 +769,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
@Override
public boolean canBreed() {
diff --git a/patches/server/0075-Redstone-deactivates-spawners.patch b/patches/server/0077-Redstone-deactivates-spawners.patch
similarity index 94%
rename from patches/server/0075-Redstone-deactivates-spawners.patch
rename to patches/server/0077-Redstone-deactivates-spawners.patch
index 15279b020..45960bcc7 100644
--- a/patches/server/0075-Redstone-deactivates-spawners.patch
+++ b/patches/server/0077-Redstone-deactivates-spawners.patch
@@ -17,7 +17,7 @@ index 7de66aa435dd36899b80f4ecc64480680e474d94..bb4411cfdf1bc7adc12c2f918d2eec83
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 436f04b56ac6795e393008e4eeae4fc09cd2e2a9..8bd53ffbf41b45a2aa62f115884f2ec55574ec21 100644
+index 83af43e5f1d3e80170104771b2d38526d1ab3e3a..be44e9597b595f8a4b63a9a198f63e7db411b6ce 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -347,6 +347,11 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0076-Totems-work-in-inventory.patch b/patches/server/0078-Totems-work-in-inventory.patch
similarity index 91%
rename from patches/server/0076-Totems-work-in-inventory.patch
rename to patches/server/0078-Totems-work-in-inventory.patch
index e9fda6ae3..451905d38 100644
--- a/patches/server/0076-Totems-work-in-inventory.patch
+++ b/patches/server/0078-Totems-work-in-inventory.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Totems work in inventory
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-index ba9fc0f5d9979aee43dcf716cf25ff42928a9f1b..7de429f377fa4880c3b0cfb9b72df06a9b89722e 100644
+index 2007dd29cc2c1ee4cf88db27e0082c3548ebf344..f8ec83a135feab4140ec075ee45250ebfc511993 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-@@ -1707,6 +1707,18 @@ public abstract class LivingEntity extends Entity implements Attackable {
+@@ -1720,6 +1720,18 @@ public abstract class LivingEntity extends Entity implements Attackable {
}
}
@@ -28,7 +28,7 @@ index ba9fc0f5d9979aee43dcf716cf25ff42928a9f1b..7de429f377fa4880c3b0cfb9b72df06a
EntityResurrectEvent event = new EntityResurrectEvent((org.bukkit.entity.LivingEntity) this.getBukkitEntity(), handSlot);
event.setCancelled(itemstack == null);
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 8bd53ffbf41b45a2aa62f115884f2ec55574ec21..575d9dd236287ce26a1c080df2d05fa27849845e 100644
+index be44e9597b595f8a4b63a9a198f63e7db411b6ce..35ce3c0385f72feea1a0741ee055994f5cf0190a 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -238,6 +238,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0077-Add-vindicator-johnny-spawn-chance.patch b/patches/server/0079-Add-vindicator-johnny-spawn-chance.patch
similarity index 100%
rename from patches/server/0077-Add-vindicator-johnny-spawn-chance.patch
rename to patches/server/0079-Add-vindicator-johnny-spawn-chance.patch
diff --git a/patches/server/0078-Dispensers-place-anvils-option.patch b/patches/server/0080-Dispensers-place-anvils-option.patch
similarity index 96%
rename from patches/server/0078-Dispensers-place-anvils-option.patch
rename to patches/server/0080-Dispensers-place-anvils-option.patch
index b6fe7a408..19c022075 100644
--- a/patches/server/0078-Dispensers-place-anvils-option.patch
+++ b/patches/server/0080-Dispensers-place-anvils-option.patch
@@ -32,7 +32,7 @@ index 0d12605dc84dad49faa18bf1fd058c3c168623ee..c6490554a3025f4de3f3218178fad76c
}
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 4ea6246187a94e596800f0c26c604c5bfb644823..729123a4eb3323457819961685a6a088ca650de3 100644
+index a4c20f7b679150425b192a9e4411fa987aed8e1f..efebca2a6dd217d853a27516c29be89421c1df68 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -310,8 +310,10 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0079-Allow-anvil-colors.patch b/patches/server/0081-Allow-anvil-colors.patch
similarity index 96%
rename from patches/server/0079-Allow-anvil-colors.patch
rename to patches/server/0081-Allow-anvil-colors.patch
index 22f80aa3c..2e7bac233 100644
--- a/patches/server/0079-Allow-anvil-colors.patch
+++ b/patches/server/0081-Allow-anvil-colors.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Allow anvil colors
diff --git a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java
-index 0dfcce766872d9b1a9b898f56e6f4d9179a46bc4..f1834eec821a14ef6a7f42f827b7e0b8284ae5a2 100644
+index f8c0a4fd95f341cbf8f6a06dfae408d505b0f018..a7c3338ed6edcd26fce869ec66fdcaa4c32c0e4f 100644
--- a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java
+++ b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java
@@ -285,6 +285,54 @@ public class AnvilMenu extends ItemCombinerMenu {
@@ -64,7 +64,7 @@ index 0dfcce766872d9b1a9b898f56e6f4d9179a46bc4..f1834eec821a14ef6a7f42f827b7e0b8
}
} else if (itemstack.has(DataComponents.CUSTOM_NAME)) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 729123a4eb3323457819961685a6a088ca650de3..1264d6e7304db19e8e10bace19d750fcf51fc995 100644
+index efebca2a6dd217d853a27516c29be89421c1df68..7a7b8725f7a0b1a193b4e19510c386b46604f006 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -288,6 +288,13 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0080-Add-option-to-disable-dolphin-treasure-searching.patch b/patches/server/0082-Add-option-to-disable-dolphin-treasure-searching.patch
similarity index 100%
rename from patches/server/0080-Add-option-to-disable-dolphin-treasure-searching.patch
rename to patches/server/0082-Add-option-to-disable-dolphin-treasure-searching.patch
diff --git a/patches/server/0081-Short-enderman-height.patch b/patches/server/0083-Short-enderman-height.patch
similarity index 89%
rename from patches/server/0081-Short-enderman-height.patch
rename to patches/server/0083-Short-enderman-height.patch
index 715a5839a..a30c63635 100644
--- a/patches/server/0081-Short-enderman-height.patch
+++ b/patches/server/0083-Short-enderman-height.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Short enderman height
diff --git a/src/main/java/net/minecraft/world/entity/EntityType.java b/src/main/java/net/minecraft/world/entity/EntityType.java
-index 48386124487a1f0fdc1d476895fa118102fb4003..5796f9bdde43d5b681ee2aaa7bc47076114af321 100644
+index 23b921a79bd563fd0a1bf7afd55a8e52ff1da521..40ae00146381a9a1ec70ffae5c683b46c72c56ff 100644
--- a/src/main/java/net/minecraft/world/entity/EntityType.java
+++ b/src/main/java/net/minecraft/world/entity/EntityType.java
-@@ -388,7 +388,8 @@ public class EntityType implements FeatureElement, EntityTypeT
+@@ -389,7 +389,8 @@ public class EntityType implements FeatureElement, EntityTypeT
@Nullable
private Component description;
private final Optional> lootTable;
@@ -19,10 +19,10 @@ index 48386124487a1f0fdc1d476895fa118102fb4003..5796f9bdde43d5b681ee2aaa7bc47076
private final FeatureFlagSet requiredFeatures;
diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
-index a356e7ac34aca1d14cb922565206304d14e90c8b..8933b1f16617f0373cc99f93254533cc7d1e923f 100644
+index 04fdefe4c38ef9ed3001f95b34d1632944fcae85..257eac851b6f4628b94784cab7a5cd4ec804944a 100644
--- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
+++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
-@@ -409,6 +409,7 @@ public class EnderMan extends Monster implements NeutralMob {
+@@ -415,6 +415,7 @@ public class EnderMan extends Monster implements NeutralMob {
if (this.isInvulnerableTo(world, source)) {
return false;
} else if (getRider() != null && this.isControllable()) { return super.hurtServer(world, source, amount); // Purpur - no teleporting on damage
diff --git a/patches/server/0082-Stop-squids-floating-on-top-of-water.patch b/patches/server/0084-Stop-squids-floating-on-top-of-water.patch
similarity index 96%
rename from patches/server/0082-Stop-squids-floating-on-top-of-water.patch
rename to patches/server/0084-Stop-squids-floating-on-top-of-water.patch
index 3604859e9..5dc27aa8e 100644
--- a/patches/server/0082-Stop-squids-floating-on-top-of-water.patch
+++ b/patches/server/0084-Stop-squids-floating-on-top-of-water.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Stop squids floating on top of water
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
-index afa4d11c44e2159dfad080c6a45256e9b66fa18c..3e16f8ec52ff60f696a4a29dfbb9217b0c29106b 100644
+index 56225797f1cf0294c1e6aa824d8c146dca530e9f..bf22cfc2b770fd4dc73168745d535fb6598412ca 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
-@@ -4745,6 +4745,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
+@@ -4748,6 +4748,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
return Mth.lerp(delta, this.yRotO, this.yRot);
}
diff --git a/patches/server/0083-Crying-obsidian-valid-for-portal-frames.patch b/patches/server/0085-Crying-obsidian-valid-for-portal-frames.patch
similarity index 100%
rename from patches/server/0083-Crying-obsidian-valid-for-portal-frames.patch
rename to patches/server/0085-Crying-obsidian-valid-for-portal-frames.patch
diff --git a/patches/server/0084-Entities-can-use-portals.patch b/patches/server/0086-Entities-can-use-portals.patch
similarity index 92%
rename from patches/server/0084-Entities-can-use-portals.patch
rename to patches/server/0086-Entities-can-use-portals.patch
index 558e6dcfa..d93019c33 100644
--- a/patches/server/0084-Entities-can-use-portals.patch
+++ b/patches/server/0086-Entities-can-use-portals.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Entities can use portals
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
-index 3e16f8ec52ff60f696a4a29dfbb9217b0c29106b..59000a7519071010d03063359c4508426753fe7c 100644
+index bf22cfc2b770fd4dc73168745d535fb6598412ca..c5880e627ff48e5e176baf483c08f35a1af488f8 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
-@@ -3438,7 +3438,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
+@@ -3441,7 +3441,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
public void setAsInsidePortal(Portal portal, BlockPos pos) {
if (this.isOnPortalCooldown()) {
this.setPortalCooldown();
@@ -17,7 +17,7 @@ index 3e16f8ec52ff60f696a4a29dfbb9217b0c29106b..59000a7519071010d03063359c450842
if (this.portalProcess != null && this.portalProcess.isSamePortal(portal)) {
if (!this.portalProcess.isInsidePortalThisTick()) {
this.portalProcess.updateEntryPosition(pos.immutable());
-@@ -4157,7 +4157,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
+@@ -4160,7 +4160,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
// CraftBukkit end
public boolean canUsePortal(boolean allowVehicles) {
diff --git a/patches/server/0085-Customizable-wither-health-and-healing.patch b/patches/server/0087-Customizable-wither-health-and-healing.patch
similarity index 94%
rename from patches/server/0085-Customizable-wither-health-and-healing.patch
rename to patches/server/0087-Customizable-wither-health-and-healing.patch
index 08d32928c..a2a40749c 100644
--- a/patches/server/0085-Customizable-wither-health-and-healing.patch
+++ b/patches/server/0087-Customizable-wither-health-and-healing.patch
@@ -6,10 +6,10 @@ Subject: [PATCH] Customizable wither health and healing
Adds the ability to customize the health of the wither, as well as the amount that it heals, and how often.
diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java
-index f55842cf85dec8e5c26cd5ac52c63599f3b19cf3..2ec12ec298446b556132785d4d376130594a7cb6 100644
+index 19a7f7926eeb9c4e4d5bbd5e4768d99c456e8f71..e808cd292afc9531d5ec6025e1e83076ba487c0f 100644
--- a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java
+++ b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java
-@@ -519,8 +519,10 @@ public class WitherBoss extends Monster implements RangedAttackMob {
+@@ -526,8 +526,10 @@ public class WitherBoss extends Monster implements RangedAttackMob {
}
}
diff --git a/patches/server/0086-Allow-toggling-special-MobSpawners-per-world.patch b/patches/server/0088-Allow-toggling-special-MobSpawners-per-world.patch
similarity index 96%
rename from patches/server/0086-Allow-toggling-special-MobSpawners-per-world.patch
rename to patches/server/0088-Allow-toggling-special-MobSpawners-per-world.patch
index 6cde0c50a..601bc43a7 100644
--- a/patches/server/0086-Allow-toggling-special-MobSpawners-per-world.patch
+++ b/patches/server/0088-Allow-toggling-special-MobSpawners-per-world.patch
@@ -6,7 +6,7 @@ Subject: [PATCH] Allow toggling special MobSpawners per world
In vanilla, these are all hardcoded on for world type 0 (overworld) and hardcoded off for every other world type. Default config behaviour matches this.
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
-index a0ff876d951f62eb172ee3763a9bc7ba5b191034..d49e26a1b719ff4dae6a3a10fc3695c39f400465 100644
+index c05d0d836ced6db6b4a3e85fe0973dd7b1aaad81..7f12f6a0f8ea0a2570ccb8f6e7f786197ee0ef11 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -605,7 +605,24 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -59,7 +59,7 @@ index a728dcbf956f108f01c966c7531449a506a14a87..4c1378132201c1e5d1bc01f8c0cbba91
if (spawnplacementtype.isSpawnPositionOk(world, blockposition2, EntityType.WANDERING_TRADER)) {
blockposition1 = blockposition2;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 26e89ab042792a627efdb5a8cee5c5972bba80ef..35c8798e3c839656758f11bf55f09983da337815 100644
+index e323914f8694043e7b08a2518169695f582bc1a8..9072bdd2fdb1c15ea1dbc599cb96fd82750ddcc6 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -70,6 +70,12 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0087-Raid-cooldown-setting.patch b/patches/server/0089-Raid-cooldown-setting.patch
similarity index 97%
rename from patches/server/0087-Raid-cooldown-setting.patch
rename to patches/server/0089-Raid-cooldown-setting.patch
index 7c38302e4..b1805bb7b 100644
--- a/patches/server/0087-Raid-cooldown-setting.patch
+++ b/patches/server/0089-Raid-cooldown-setting.patch
@@ -49,7 +49,7 @@ index 439d61d8689fabe940006b9b317a6810175dccfb..6b30941a84054efb5fcccb5d9e6c80d7
if (!raid.isStarted() && !this.raidMap.containsKey(raid.getId())) {
this.raidMap.put(raid.getId(), raid);
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 35c8798e3c839656758f11bf55f09983da337815..2d34c9dc0f1bbd2b6c56ed80f088b604793b9a2a 100644
+index 9072bdd2fdb1c15ea1dbc599cb96fd82750ddcc6..0e7473973fe06f51e28bb8651856ed52a9a51d92 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -108,6 +108,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0088-Add-option-to-disable-zombie-aggressiveness-towards-.patch b/patches/server/0090-Add-option-to-disable-zombie-aggressiveness-towards-.patch
similarity index 100%
rename from patches/server/0088-Add-option-to-disable-zombie-aggressiveness-towards-.patch
rename to patches/server/0090-Add-option-to-disable-zombie-aggressiveness-towards-.patch
diff --git a/patches/server/0089-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch b/patches/server/0091-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch
similarity index 96%
rename from patches/server/0089-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch
rename to patches/server/0091-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch
index c821e5997..8a33fca32 100644
--- a/patches/server/0089-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch
+++ b/patches/server/0091-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Add predicate to recipe's ExactChoice ingredient
diff --git a/src/main/java/net/minecraft/world/item/crafting/Ingredient.java b/src/main/java/net/minecraft/world/item/crafting/Ingredient.java
-index 2dce801e06687c218be3333ac9f000bae09f0caf..ed9548341eb226cf5a5d2370419a01208cf0f742 100644
+index 812f919a7a7e309c8513f44104f092496037608f..10730b307971915f52b3e41068a864b8ee1352b4 100644
--- a/src/main/java/net/minecraft/world/item/crafting/Ingredient.java
+++ b/src/main/java/net/minecraft/world/item/crafting/Ingredient.java
@@ -45,6 +45,7 @@ public final class Ingredient implements Predicate {
diff --git a/patches/server/0090-Flying-squids-Oh-my.patch b/patches/server/0092-Flying-squids-Oh-my.patch
similarity index 100%
rename from patches/server/0090-Flying-squids-Oh-my.patch
rename to patches/server/0092-Flying-squids-Oh-my.patch
diff --git a/patches/server/0091-Infinity-bow-settings.patch b/patches/server/0093-Infinity-bow-settings.patch
similarity index 96%
rename from patches/server/0091-Infinity-bow-settings.patch
rename to patches/server/0093-Infinity-bow-settings.patch
index bca5a8f9b..727127486 100644
--- a/patches/server/0091-Infinity-bow-settings.patch
+++ b/patches/server/0093-Infinity-bow-settings.patch
@@ -30,7 +30,7 @@ index bb593209c95c9cf1f9c5d52d52fab4a33ddbabcf..1d4d0799a86b9940b5e3b614c5a188ad
} else {
user.startUsingItem(hand);
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 32ceab27543b01a0340796255b6f48bc2834de9d..b78f6b3e8b70a10f260c233be93947ac27e9edbd 100644
+index fea279b9fbd7f989bf26f0fc1254b1ecb8ac4342..0716bd2728be4fcaa4f13485591008ce270ecf82 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -135,6 +135,11 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0092-Configurable-daylight-cycle.patch b/patches/server/0094-Configurable-daylight-cycle.patch
similarity index 90%
rename from patches/server/0092-Configurable-daylight-cycle.patch
rename to patches/server/0094-Configurable-daylight-cycle.patch
index 2bae55372..758b71bb3 100644
--- a/patches/server/0092-Configurable-daylight-cycle.patch
+++ b/patches/server/0094-Configurable-daylight-cycle.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Configurable daylight cycle
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index 7aef829dbda80d6b2ced79e46db26083f9205ccc..1ce5cd0fdade08093e03033fb15687dc098c8ba1 100644
+index 8b1e5fab163268796c24c40c2454d355b7cac615..d0f1ca68d25cdac127dc6385b29aa1e99438b866 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
-@@ -1854,7 +1854,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop recipe, SingleRecipeInput input, NonNullList inventory, int maxCount) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index c895c2e2bbdcc0cbdd69b2086e2d2d76a105f225..d1a7e79ca23ad7a9b589578c91b2dd3427545a05 100644
+index 1060208faaa18020c5762a2eb4851f6148b5f215..fda9fcf681927334937d25706c9127fbbecd2ed5 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -365,6 +365,17 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0094-Arrows-should-not-reset-despawn-counter.patch b/patches/server/0096-Arrows-should-not-reset-despawn-counter.patch
similarity index 91%
rename from patches/server/0094-Arrows-should-not-reset-despawn-counter.patch
rename to patches/server/0096-Arrows-should-not-reset-despawn-counter.patch
index beaac476f..d46cf5ff0 100644
--- a/patches/server/0094-Arrows-should-not-reset-despawn-counter.patch
+++ b/patches/server/0096-Arrows-should-not-reset-despawn-counter.patch
@@ -7,7 +7,7 @@ This prevents keeping arrows alive indefinitely (such as when the block
the arrow is stuck in gets removed, like a piston head going up/down)
diff --git a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java
-index accc246f441c8bf5e1a755cfc0db8f97c0c01c6b..75d65b795a7802c0c5b5bd4a6ed429209f987452 100644
+index 571f0699772eecbe02d71845da82a142321f2142..b7dccbf33feb978b3937522bb0d62d154699ae9f 100644
--- a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java
+++ b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java
@@ -371,7 +371,7 @@ public abstract class AbstractArrow extends Projectile {
@@ -20,7 +20,7 @@ index accc246f441c8bf5e1a755cfc0db8f97c0c01c6b..75d65b795a7802c0c5b5bd4a6ed42920
public boolean isInGround() {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index d1a7e79ca23ad7a9b589578c91b2dd3427545a05..af54385705cb2a52cb50e939c4517339b1da5cac 100644
+index fda9fcf681927334937d25706c9127fbbecd2ed5..2e807c72b8469210c4acdc591386368589913e61 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -102,6 +102,11 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0095-Ability-to-re-add-farmland-mechanics-from-Alpha.patch b/patches/server/0097-Ability-to-re-add-farmland-mechanics-from-Alpha.patch
similarity index 95%
rename from patches/server/0095-Ability-to-re-add-farmland-mechanics-from-Alpha.patch
rename to patches/server/0097-Ability-to-re-add-farmland-mechanics-from-Alpha.patch
index c46ae9179..31c06b3c7 100644
--- a/patches/server/0095-Ability-to-re-add-farmland-mechanics-from-Alpha.patch
+++ b/patches/server/0097-Ability-to-re-add-farmland-mechanics-from-Alpha.patch
@@ -24,7 +24,7 @@ index df89b18f0d5d2dad5745ec65bcd9e4a7bf2f1f2b..e744a117d2f25ad24c87263ba2ab7f76
return;
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index af54385705cb2a52cb50e939c4517339b1da5cac..cbab2382562e3fc4a275433f1ffca879c563e09a 100644
+index 2e807c72b8469210c4acdc591386368589913e61..acc45259de6b0178408146b71ebaf4de9d1891bd 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -366,8 +366,10 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0096-Add-adjustable-breeding-cooldown-to-config.patch b/patches/server/0098-Add-adjustable-breeding-cooldown-to-config.patch
similarity index 97%
rename from patches/server/0096-Add-adjustable-breeding-cooldown-to-config.patch
rename to patches/server/0098-Add-adjustable-breeding-cooldown-to-config.patch
index 81566a006..e0c16be97 100644
--- a/patches/server/0096-Add-adjustable-breeding-cooldown-to-config.patch
+++ b/patches/server/0098-Add-adjustable-breeding-cooldown-to-config.patch
@@ -42,7 +42,7 @@ index 5677dc97ed83652f261100cf391883cfac7d16fe..4637d062b6a4c4d6de2ef54ec3cfdeb4
EntityBreedEvent entityBreedEvent = org.bukkit.craftbukkit.event.CraftEventFactory.callEntityBreedEvent(entityageable, this, other, breeder, this.breedItem, experience);
if (entityBreedEvent.isCancelled()) {
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
-index 6847be7f95dc37e6259d6903798e6db20702cea8..c2aff2f03451b97f1ec6bd4ee987bb729177320a 100644
+index 77093e49fd60993e7cb6bf5712ec53e0fe221776..34e8eb828be517d9ee3973597c74c5cac3d75c99 100644
--- a/src/main/java/net/minecraft/world/level/Level.java
+++ b/src/main/java/net/minecraft/world/level/Level.java
@@ -182,6 +182,49 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
@@ -104,7 +104,7 @@ index 6847be7f95dc37e6259d6903798e6db20702cea8..c2aff2f03451b97f1ec6bd4ee987bb72
this.world = new CraftWorld((ServerLevel) this, gen, biomeProvider, env);
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index cbab2382562e3fc4a275433f1ffca879c563e09a..7895ad54e7c22cb25edb45d7ce38e87306673578 100644
+index acc45259de6b0178408146b71ebaf4de9d1891bd..6805a2f2803bb4e859afba5369308dd4d2ac5165 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -114,6 +114,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0097-Make-entity-breeding-times-configurable.patch b/patches/server/0099-Make-entity-breeding-times-configurable.patch
similarity index 99%
rename from patches/server/0097-Make-entity-breeding-times-configurable.patch
rename to patches/server/0099-Make-entity-breeding-times-configurable.patch
index 9c463af59..b54f120e6 100644
--- a/patches/server/0097-Make-entity-breeding-times-configurable.patch
+++ b/patches/server/0099-Make-entity-breeding-times-configurable.patch
@@ -316,7 +316,7 @@ index a7fdb54b1bda83e7a365447f2cb5701238ba6847..9ef53608f1608e88de7a7b3e96b43d8d
@Override
diff --git a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java
-index 8293679fbe5df093610c30094de389fb7ff79658..b8077a31ed67050a45b5668ea759cf386f085271 100644
+index 79102c8819ce3d49538306db3ce4a723ea5d765d..f6b3bb53a0f6ad596322d6270bf27c5749d13c7b 100644
--- a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java
+++ b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java
@@ -121,6 +121,11 @@ public class Axolotl extends Animal implements VariantHolder, B
@@ -347,7 +347,7 @@ index 9b9e7c9048f453d01ccf13ffdc7ee0f2151155a9..dbce71f45c008da883b6d244a06343d8
@Override
diff --git a/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java b/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java
-index e03598f985191350ce796dabd7641b8d0f6c081c..49915ec0ee5fb6e7d25b079e0410942d44aa1e33 100644
+index 066006dc4fcdd03113242f3fa4bc8dc7b4add81a..02581f47d1ca58c2b8abffc478adf48343585c8b 100644
--- a/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java
+++ b/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java
@@ -165,6 +165,10 @@ public class Frog extends Animal implements VariantHolder> {
@@ -362,7 +362,7 @@ index e03598f985191350ce796dabd7641b8d0f6c081c..49915ec0ee5fb6e7d25b079e0410942d
protected Brain.Provider brainProvider() {
return Brain.provider(MEMORY_TYPES, SENSOR_TYPES);
diff --git a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
-index ce697bce755f8ef147d189a8729c441aee5bbd21..54e880fb1c03a8b578fd1d2929bc174edb9918c5 100644
+index 2e9fb07b2974209cce5bd31aca095def474c51c2..3d862b7a0acc75b4f5ac502e5ef756fde8fe183e 100644
--- a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
+++ b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
@@ -110,6 +110,11 @@ public class Goat extends Animal {
@@ -522,7 +522,7 @@ index 6a45a62c578f033558c26935681f7de74dd98bac..0cc49b0a600a5e6fb4fc21e698e3a5fe
BlockPos.MutableBlockPos blockposition_mutableblockposition = pos.mutable();
diff --git a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java
-index 08c4a32b1195820eb574cdf4a499107565a551d6..0220fb517d99e8c9629d191eb554799a1dc8d7bc 100644
+index b94cde5e03ef98eb78386acc59b1b864054d97b7..e7f762682a57f13b3a1c00d37d88eb80233baace 100644
--- a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java
+++ b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java
@@ -120,6 +120,11 @@ public class Hoglin extends Animal implements Enemy, HoglinBase {
diff --git a/patches/server/0098-Apply-display-names-from-item-forms-of-entities-to-e.patch b/patches/server/0100-Apply-display-names-from-item-forms-of-entities-to-e.patch
similarity index 99%
rename from patches/server/0098-Apply-display-names-from-item-forms-of-entities-to-e.patch
rename to patches/server/0100-Apply-display-names-from-item-forms-of-entities-to-e.patch
index ab5ff4819..2ad0ca4d6 100644
--- a/patches/server/0098-Apply-display-names-from-item-forms-of-entities-to-e.patch
+++ b/patches/server/0100-Apply-display-names-from-item-forms-of-entities-to-e.patch
@@ -126,7 +126,7 @@ index cdc17ad948d8ac5de62f14b1a561433d33211f32..44a7cee7df2927a923455e8cedaab593
if (((HangingEntity) object).survives()) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 295db9e5854f0a936832046f8ad436f722e8cacf..509eac0592bcb5b67b8f1fcb68b53caa0e10a37b 100644
+index e363a93bdfcef7408ecdd5618b63c345ab9525b4..4efb19a627b3735fe2ded2108576d76296b605f3 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -98,8 +98,10 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0099-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch b/patches/server/0101-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch
similarity index 96%
rename from patches/server/0099-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch
rename to patches/server/0101-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch
index f6bc20b4e..6ec3820a3 100644
--- a/patches/server/0099-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch
+++ b/patches/server/0101-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch
@@ -17,7 +17,7 @@ index 000d1863bfba98b5132dfc6743362d687b2f54f3..20fece9908382f40b4082f7b1fb7d419
// Paper end - Add PlayerNameEntityEvent
mob.setPersistenceRequired();
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 509eac0592bcb5b67b8f1fcb68b53caa0e10a37b..07e997fd9adb318820e6acafc781a8bfa9d2d0d8 100644
+index 4efb19a627b3735fe2ded2108576d76296b605f3..c6f4b6e14616aed688269c56aa9ddf11f097abaf 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -99,9 +99,11 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0100-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch b/patches/server/0102-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch
similarity index 93%
rename from patches/server/0100-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch
rename to patches/server/0102-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch
index 6106974f8..008853b5e 100644
--- a/patches/server/0100-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch
+++ b/patches/server/0102-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch
@@ -8,10 +8,10 @@ This should help to reduce the amount of dirt, gravel, grass, and etc.
that Endermen like to randomly place all over the world.
diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
-index 8933b1f16617f0373cc99f93254533cc7d1e923f..02336ee7a002a620cd76570c84d1d53194a23668 100644
+index 257eac851b6f4628b94784cab7a5cd4ec804944a..a8e2a2096f209fcd24e7921947556691fe6c254a 100644
--- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
+++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
-@@ -468,7 +468,7 @@ public class EnderMan extends Monster implements NeutralMob {
+@@ -474,7 +474,7 @@ public class EnderMan extends Monster implements NeutralMob {
@Override
public boolean requiresCustomPersistence() {
diff --git a/patches/server/0101-Add-configurable-snowball-damage.patch b/patches/server/0103-Add-configurable-snowball-damage.patch
similarity index 94%
rename from patches/server/0101-Add-configurable-snowball-damage.patch
rename to patches/server/0103-Add-configurable-snowball-damage.patch
index 5e655b1f7..80a91011e 100644
--- a/patches/server/0101-Add-configurable-snowball-damage.patch
+++ b/patches/server/0103-Add-configurable-snowball-damage.patch
@@ -18,7 +18,7 @@ index 70961e151666a0ecf5b791853f4581eaebbdcc8b..8c853b6fbbc966ee6ba9ad3770d4e2e2
entity.hurt(this.damageSources().thrown(this, this.getOwner()), (float) i);
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 5e3240a67fac56631b5611176d9bf8fd426ad97b..c005d1932f41b2b4959b7753e14f0463d2eccec5 100644
+index cdcc44e381dee9189f951e3f1984272b0f0f60b0..3ec8e7ea1cf1eb5dd8fec5fefa7a77d68cb75632 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -339,6 +339,11 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0102-Changeable-Mob-Left-Handed-Chance.patch b/patches/server/0104-Changeable-Mob-Left-Handed-Chance.patch
similarity index 86%
rename from patches/server/0102-Changeable-Mob-Left-Handed-Chance.patch
rename to patches/server/0104-Changeable-Mob-Left-Handed-Chance.patch
index f8220fca1..366814408 100644
--- a/patches/server/0102-Changeable-Mob-Left-Handed-Chance.patch
+++ b/patches/server/0104-Changeable-Mob-Left-Handed-Chance.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Changeable Mob Left Handed Chance
diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java
-index 8ce316292850353231e529f75630d3fde290a161..43a37611c046c70833349c2ff5313f312bebf25b 100644
+index e99b72b89abdded3e988bd1a92d36055fb1a84dc..784bf7754c43b02d337da61d6dd7bed134465d11 100644
--- a/src/main/java/net/minecraft/world/entity/Mob.java
+++ b/src/main/java/net/minecraft/world/entity/Mob.java
-@@ -1422,7 +1422,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab
+@@ -1428,7 +1428,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab
attributemodifiable.addPermanentModifier(new AttributeModifier(Mob.RANDOM_SPAWN_BONUS_ID, randomsource.triangle(0.0D, 0.11485000000000001D), AttributeModifier.Operation.ADD_MULTIPLIED_BASE));
}
@@ -18,7 +18,7 @@ index 8ce316292850353231e529f75630d3fde290a161..43a37611c046c70833349c2ff5313f31
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index c005d1932f41b2b4959b7753e14f0463d2eccec5..23ee0ca0ce934e3cd30c0ad86481988223698372 100644
+index 3ec8e7ea1cf1eb5dd8fec5fefa7a77d68cb75632..897fac3caeab051cf2634d4e8b3dca62b389acd8 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -152,8 +152,10 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0103-Add-boat-fall-damage-config.patch b/patches/server/0105-Add-boat-fall-damage-config.patch
similarity index 94%
rename from patches/server/0103-Add-boat-fall-damage-config.patch
rename to patches/server/0105-Add-boat-fall-damage-config.patch
index ef761a46d..b09926310 100644
--- a/patches/server/0103-Add-boat-fall-damage-config.patch
+++ b/patches/server/0105-Add-boat-fall-damage-config.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Add boat fall damage config
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
-index 3d05da7985402f1cf361182084b62145c9bf9856..3b9ebf98eab678938e2b619eb42025c0322bf5dd 100644
+index cbe608df708d5530813230cddd78568c1a63b448..36058eac6f861ae919bbe8ae6386e8f841586ac2 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -1442,7 +1442,16 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
@@ -27,7 +27,7 @@ index 3d05da7985402f1cf361182084b62145c9bf9856..3b9ebf98eab678938e2b619eb42025c0
if (!flag && this.spawnInvulnerableTime > 0 && !source.is(DamageTypeTags.BYPASSES_INVULNERABILITY)) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 23ee0ca0ce934e3cd30c0ad86481988223698372..db63c982a19e8e95f4601dadc17cd5f52f29253a 100644
+index 897fac3caeab051cf2634d4e8b3dca62b389acd8..3bd6931d3b19bd9687cdaee2b245cd3f2e9df0bc 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -113,6 +113,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0104-Snow-Golem-rate-of-fire-config.patch b/patches/server/0106-Snow-Golem-rate-of-fire-config.patch
similarity index 100%
rename from patches/server/0104-Snow-Golem-rate-of-fire-config.patch
rename to patches/server/0106-Snow-Golem-rate-of-fire-config.patch
diff --git a/patches/server/0105-EMC-Configurable-disable-give-dropping.patch b/patches/server/0107-EMC-Configurable-disable-give-dropping.patch
similarity index 100%
rename from patches/server/0105-EMC-Configurable-disable-give-dropping.patch
rename to patches/server/0107-EMC-Configurable-disable-give-dropping.patch
diff --git a/patches/server/0106-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch b/patches/server/0108-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch
similarity index 98%
rename from patches/server/0106-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch
rename to patches/server/0108-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch
index 2c61c7334..4e8e82f3e 100644
--- a/patches/server/0106-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch
+++ b/patches/server/0108-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch
@@ -136,10 +136,10 @@ index a0e0692d17760f440fe81d52887284c787e562db..ab9bebc07b5228dbc0d3ba4b0f7d1bbe
brain.setMemory(MemoryModuleType.SECONDARY_JOB_SITE, list);
} else {
diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java
-index c50cfa8225d5098f978da42cdf6c6860e93e9f2a..55472c14eec2c3c08a42af865ae044a5a0a115d3 100644
+index 3528cc251ebae1011ec3dac4b893157e446a1e22..280f35782e4b336465ed45373e7843dd9f697d85 100644
--- a/src/main/java/net/minecraft/world/entity/npc/Villager.java
+++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java
-@@ -225,7 +225,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
+@@ -227,7 +227,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
brain.addActivity(Activity.PLAY, VillagerGoalPackages.getPlayPackage(0.5F));
} else {
brain.setSchedule(Schedule.VILLAGER_DEFAULT);
@@ -148,7 +148,7 @@ index c50cfa8225d5098f978da42cdf6c6860e93e9f2a..55472c14eec2c3c08a42af865ae044a5
}
brain.addActivity(Activity.CORE, VillagerGoalPackages.getCorePackage(villagerprofession, 0.5F));
-@@ -941,6 +941,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
+@@ -948,6 +948,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
public boolean hasFarmSeeds() {
return this.getInventory().hasAnyMatching((itemstack) -> {
diff --git a/patches/server/0107-Toggle-for-Zombified-Piglin-death-always-counting-as.patch b/patches/server/0109-Toggle-for-Zombified-Piglin-death-always-counting-as.patch
similarity index 100%
rename from patches/server/0107-Toggle-for-Zombified-Piglin-death-always-counting-as.patch
rename to patches/server/0109-Toggle-for-Zombified-Piglin-death-always-counting-as.patch
diff --git a/patches/server/0108-Configurable-chance-for-wolves-to-spawn-rabid.patch b/patches/server/0110-Configurable-chance-for-wolves-to-spawn-rabid.patch
similarity index 100%
rename from patches/server/0108-Configurable-chance-for-wolves-to-spawn-rabid.patch
rename to patches/server/0110-Configurable-chance-for-wolves-to-spawn-rabid.patch
diff --git a/patches/server/0109-Configurable-default-collar-color.patch b/patches/server/0111-Configurable-default-collar-color.patch
similarity index 100%
rename from patches/server/0109-Configurable-default-collar-color.patch
rename to patches/server/0111-Configurable-default-collar-color.patch
diff --git a/patches/server/0110-Phantom-flames-on-swoop.patch b/patches/server/0112-Phantom-flames-on-swoop.patch
similarity index 100%
rename from patches/server/0110-Phantom-flames-on-swoop.patch
rename to patches/server/0112-Phantom-flames-on-swoop.patch
diff --git a/patches/server/0111-Option-for-chests-to-open-even-with-a-solid-block-on.patch b/patches/server/0113-Option-for-chests-to-open-even-with-a-solid-block-on.patch
similarity index 94%
rename from patches/server/0111-Option-for-chests-to-open-even-with-a-solid-block-on.patch
rename to patches/server/0113-Option-for-chests-to-open-even-with-a-solid-block-on.patch
index ec055c788..c2d638857 100644
--- a/patches/server/0111-Option-for-chests-to-open-even-with-a-solid-block-on.patch
+++ b/patches/server/0113-Option-for-chests-to-open-even-with-a-solid-block-on.patch
@@ -17,7 +17,7 @@ index edef8fc62f8dba1b57214d8d7d805ff0d83f4114..663eb96b8227f000448957b5d8ea13ca
return world.getBlockState(blockposition1).isRedstoneConductor(world, blockposition1);
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 7e32f0ec92b9309ca61a0c773d75b996768d3b74..bae2bb894cc068cbf738849b9e46ce8d8b78f919 100644
+index 739402d4e7b2b99ced75f62df33e4f4b4b9bdd6c..012bdd66052eb30a185804a36e4cbde323bb1d68 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -376,6 +376,11 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0112-Implement-TPSBar.patch b/patches/server/0114-Implement-TPSBar.patch
similarity index 97%
rename from patches/server/0112-Implement-TPSBar.patch
rename to patches/server/0114-Implement-TPSBar.patch
index d3bc68616..4876b7dbc 100644
--- a/patches/server/0112-Implement-TPSBar.patch
+++ b/patches/server/0114-Implement-TPSBar.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Implement TPSBar
diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java
-index 24c2568db30f970aed1a4897cfbc7d07297047d3..5d94b71bd54f99040b76cca74964a32d55339767 100644
+index 02c7b57eef9a4462af413415ff268b9daeea0b93..632fd1b7d3474889b700b153d9cb49676f801b07 100644
--- a/src/main/java/net/minecraft/commands/Commands.java
+++ b/src/main/java/net/minecraft/commands/Commands.java
@@ -258,6 +258,7 @@ public class Commands {
@@ -17,10 +17,10 @@ index 24c2568db30f970aed1a4897cfbc7d07297047d3..5d94b71bd54f99040b76cca74964a32d
if (environment.includeIntegrated) {
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index a094ca4ba0b1b8e671c9337df4cd22d3d5be17de..76ad795439dbaf8c39975639f3b9b5a7419391e6 100644
+index d0f1ca68d25cdac127dc6385b29aa1e99438b866..3b5121bf06ea5ae528778ae643bc5e4c3bb736ae 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
-@@ -1156,6 +1156,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop byteAllowed) {
diff --git a/patches/server/0115-Full-netherite-armor-grants-fire-resistance.patch b/patches/server/0117-Full-netherite-armor-grants-fire-resistance.patch
similarity index 97%
rename from patches/server/0115-Full-netherite-armor-grants-fire-resistance.patch
rename to patches/server/0117-Full-netherite-armor-grants-fire-resistance.patch
index 8589146b5..9d0818491 100644
--- a/patches/server/0115-Full-netherite-armor-grants-fire-resistance.patch
+++ b/patches/server/0117-Full-netherite-armor-grants-fire-resistance.patch
@@ -27,7 +27,7 @@ index 773be9c116a664e4d0349c58c00df34f203f8ebf..ae5f7c275003b6fb9f6c5a0277482b4f
this.updatePlayerPose();
if (this.currentImpulseContextResetGraceTime > 0) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index cd61cf137bfe39633414c59beaf7e4fb303fa2f1..afd52da926501e8a99b7d889e8fdbb8c5d20f5cc 100644
+index c0b9a7a7cd1e4acf151b12d308627d4ff2202018..19c6572a82de81b5a3aacad4bd77878d6c21ddc8 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -285,6 +285,19 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0116-Add-mobGriefing-bypass-to-everything-affected.patch b/patches/server/0118-Add-mobGriefing-bypass-to-everything-affected.patch
similarity index 97%
rename from patches/server/0116-Add-mobGriefing-bypass-to-everything-affected.patch
rename to patches/server/0118-Add-mobGriefing-bypass-to-everything-affected.patch
index 2306b9343..e8805486c 100644
--- a/patches/server/0116-Add-mobGriefing-bypass-to-everything-affected.patch
+++ b/patches/server/0118-Add-mobGriefing-bypass-to-everything-affected.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add mobGriefing bypass to everything affected
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-index 8baea988394e16e826bd8696af138babf31adec4..07a72184dedccbc366e93ad49824fc48acaa528a 100644
+index f8ec83a135feab4140ec075ee45250ebfc511993..0b9ece407fb90636d3869e85cd8c6c0a5626e8fa 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-@@ -1890,7 +1890,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
+@@ -1903,7 +1903,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
boolean flag = false;
if (this.dead && adversary instanceof WitherBoss) { // Paper
@@ -18,10 +18,10 @@ index 8baea988394e16e826bd8696af138babf31adec4..07a72184dedccbc366e93ad49824fc48
BlockState iblockdata = Blocks.WITHER_ROSE.defaultBlockState();
diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java
-index 43a37611c046c70833349c2ff5313f312bebf25b..081ba208be712263de22d06f3b20326509b226fc 100644
+index 784bf7754c43b02d337da61d6dd7bed134465d11..01da954d982b59bca8d8b76e66021ee04138a923 100644
--- a/src/main/java/net/minecraft/world/entity/Mob.java
+++ b/src/main/java/net/minecraft/world/entity/Mob.java
-@@ -704,7 +704,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab
+@@ -706,7 +706,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab
Level world = this.level();
if (world instanceof ServerLevel worldserver) {
@@ -144,10 +144,10 @@ index f356110850dd71d066243ec29853f547d94e4400..cb9f73605e5cfbbff9935340529a2daa
// flag1 = worldserver.removeBlock(blockposition, false) || flag1;
flag1 = true;
diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java
-index 2ec12ec298446b556132785d4d376130594a7cb6..1786d3978c8a9d66dd16b667de4d4604c35231db 100644
+index e808cd292afc9531d5ec6025e1e83076ba487c0f..92711d5460b128310739188347f68be884635ec3 100644
--- a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java
+++ b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java
-@@ -492,7 +492,7 @@ public class WitherBoss extends Monster implements RangedAttackMob {
+@@ -499,7 +499,7 @@ public class WitherBoss extends Monster implements RangedAttackMob {
if (this.destroyBlocksTick > 0) {
--this.destroyBlocksTick;
@@ -157,10 +157,10 @@ index 2ec12ec298446b556132785d4d376130594a7cb6..1786d3978c8a9d66dd16b667de4d4604
j = Mth.floor(this.getBbWidth() / 2.0F + 1.0F);
diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
-index 02336ee7a002a620cd76570c84d1d53194a23668..025f6b327b63f4e71490f01cd22fc043400a882a 100644
+index a8e2a2096f209fcd24e7921947556691fe6c254a..b150e41077ecf23dca828a519a545f93d256eb7c 100644
--- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
+++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
-@@ -516,7 +516,15 @@ public class EnderMan extends Monster implements NeutralMob {
+@@ -522,7 +522,15 @@ public class EnderMan extends Monster implements NeutralMob {
@Override
public boolean canUse() {
if (!enderman.level().purpurConfig.endermanAllowGriefing) return false; // Purpur
@@ -177,7 +177,7 @@ index 02336ee7a002a620cd76570c84d1d53194a23668..025f6b327b63f4e71490f01cd22fc043
}
@Override
-@@ -562,7 +570,15 @@ public class EnderMan extends Monster implements NeutralMob {
+@@ -568,7 +576,15 @@ public class EnderMan extends Monster implements NeutralMob {
@Override
public boolean canUse() {
if (!enderman.level().purpurConfig.endermanAllowGriefing) return false; // Purpur
@@ -249,10 +249,10 @@ index c31a72bad0b75940ea550acf47fab2220ff669ff..9c58d01fc7ba148d4e5d50731eaee71a
BlockPos blockposition = BlockPos.containing(this.mob.getX(), this.mob.getY() + 0.5D, this.mob.getZ()).relative(this.selectedDirection);
BlockState iblockdata = this.mob.level().getBlockState(blockposition);
diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java
-index 33326839175d2826eaa61eb7bc1e110d1ff6bc94..c58fe83deb0d5cb9e4f5700b75b7073ff261f051 100644
+index 23673d9ce87acda718d12fce9af0ef5f27983f1a..f0decc0f4421a6dcd640ad8f0bfb56249bf31944 100644
--- a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java
+++ b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java
-@@ -429,7 +429,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento
+@@ -430,7 +430,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento
@Override
public boolean wantsToPickUp(ServerLevel world, ItemStack stack) {
@@ -291,10 +291,10 @@ index 2f00676f62478897ae4931ea06e047567c407535..55ea7f82fac9a3de6d7e0725a9b6ea08
// CraftBukkit start - fire ExplosionPrimeEvent
ExplosionPrimeEvent event = new ExplosionPrimeEvent((org.bukkit.entity.Explosive) this.getBukkitEntity());
diff --git a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java
-index 6c2d4d6f3a36ab452dfd3c33f66e54f152906639..0c38b139f9b92219bc4af2bbd4840eb846cfea1e 100644
+index af8dc4a57987cc84cb1002f2e5f25c28ec98173f..a7df9c2a3f210bc944cf76cdcc8d2a9484704bd1 100644
--- a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java
+++ b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java
-@@ -480,7 +480,7 @@ public abstract class Projectile extends Entity implements TraceableEntity {
+@@ -510,7 +510,7 @@ public abstract class Projectile extends Entity implements TraceableEntity {
public boolean mayInteract(ServerLevel world, BlockPos pos) {
Entity entity = this.getOwner();
diff --git a/patches/server/0117-Config-to-allow-Note-Block-sounds-when-blocked.patch b/patches/server/0119-Config-to-allow-Note-Block-sounds-when-blocked.patch
similarity index 96%
rename from patches/server/0117-Config-to-allow-Note-Block-sounds-when-blocked.patch
rename to patches/server/0119-Config-to-allow-Note-Block-sounds-when-blocked.patch
index 3b172052e..47931c0fe 100644
--- a/patches/server/0117-Config-to-allow-Note-Block-sounds-when-blocked.patch
+++ b/patches/server/0119-Config-to-allow-Note-Block-sounds-when-blocked.patch
@@ -22,7 +22,7 @@ index 6582db84c5307257f16c321453491cf24e40c9c7..f9015d4e478efeec8a796b7a897638f7
// org.bukkit.event.block.NotePlayEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callNotePlayEvent(world, pos, state.getValue(NoteBlock.INSTRUMENT), state.getValue(NoteBlock.NOTE));
// if (event.isCancelled()) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 9b0bdd1d70f7c50e81d273612919e7ccf7721df8..6843771f4946ca459ade3617d7320a05cc57e24d 100644
+index 4f31d65962618a29b0a52ec7c51fba2267d63a05..a71a380f20dad2f43183d128e7a487420248a671 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -124,6 +124,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0118-Add-EntityTeleportHinderedEvent.patch b/patches/server/0120-Add-EntityTeleportHinderedEvent.patch
similarity index 99%
rename from patches/server/0118-Add-EntityTeleportHinderedEvent.patch
rename to patches/server/0120-Add-EntityTeleportHinderedEvent.patch
index d472f9ac8..16d595c91 100644
--- a/patches/server/0118-Add-EntityTeleportHinderedEvent.patch
+++ b/patches/server/0120-Add-EntityTeleportHinderedEvent.patch
@@ -83,7 +83,7 @@ index 0d835621a7af64563c86c17358632aa26ac281cd..ac4064172f982a6efc25378fbd088cca
}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index 5aa46971f19cfac6d2d3a2947badedcbc32711ba..67a3bc89c790a436310972f2fe08b73bafd01070 100644
+index 358f42585c865efbd814787879f919f70234e5c4..6abf043faf27d1385ad45c264822a9f49974863d 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -1440,6 +1440,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
diff --git a/patches/server/0119-Farmland-trampling-changes.patch b/patches/server/0121-Farmland-trampling-changes.patch
similarity index 94%
rename from patches/server/0119-Farmland-trampling-changes.patch
rename to patches/server/0121-Farmland-trampling-changes.patch
index 2847186fe..086d795e7 100644
--- a/patches/server/0119-Farmland-trampling-changes.patch
+++ b/patches/server/0121-Farmland-trampling-changes.patch
@@ -12,7 +12,7 @@ necessary to trample in the first place. Feather Falling 1 requires
you to fall over 3+ blocks to trample. FF 2 requires 4+, etc.
diff --git a/src/main/java/net/minecraft/world/level/block/FarmBlock.java b/src/main/java/net/minecraft/world/level/block/FarmBlock.java
-index e1abec46177887a92726de80f66226fe7fbbb4a2..bc149eb17695ac727aa8db08db6209497f7d20bf 100644
+index 0c990005661762245426e90c464bd84ae81eb3ca..af135f8b70b0e2af470afce9053976c3a1e03477 100644
--- a/src/main/java/net/minecraft/world/level/block/FarmBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/FarmBlock.java
@@ -127,12 +127,20 @@ public class FarmBlock extends Block {
@@ -37,7 +37,7 @@ index e1abec46177887a92726de80f66226fe7fbbb4a2..bc149eb17695ac727aa8db08db620949
if (!CraftEventFactory.callEntityChangeBlockEvent(entity, pos, Blocks.DIRT.defaultBlockState())) {
return;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 4fcb78a5dee5c7a12ba443c4d52b39a28ea9c061..2431777ccdf0e2aa0f8488e13da3f64baa079c11 100644
+index 07bbe52a858fa3f0cc9c9de709bf2ef013ac33f5..3739561c633627ba3fe80f89bce84a243705f4bc 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -418,10 +418,16 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0120-Movement-options-for-armor-stands.patch b/patches/server/0122-Movement-options-for-armor-stands.patch
similarity index 96%
rename from patches/server/0120-Movement-options-for-armor-stands.patch
rename to patches/server/0122-Movement-options-for-armor-stands.patch
index 216c0bac4..1d4bf9307 100644
--- a/patches/server/0120-Movement-options-for-armor-stands.patch
+++ b/patches/server/0122-Movement-options-for-armor-stands.patch
@@ -17,10 +17,10 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see .
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
-index 59000a7519071010d03063359c4508426753fe7c..41237e06a0053b0a61af83b4c1d7cb4d18825884 100644
+index c5880e627ff48e5e176baf483c08f35a1af488f8..70581da7310da5c78e20c6257c3423168704fbc4 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
-@@ -2014,7 +2014,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
+@@ -2017,7 +2017,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
return this.isInWater() || flag;
}
diff --git a/patches/server/0121-Fix-stuck-in-portals.patch b/patches/server/0123-Fix-stuck-in-portals.patch
similarity index 96%
rename from patches/server/0121-Fix-stuck-in-portals.patch
rename to patches/server/0123-Fix-stuck-in-portals.patch
index 53303fc78..0fdc5f365 100644
--- a/patches/server/0121-Fix-stuck-in-portals.patch
+++ b/patches/server/0123-Fix-stuck-in-portals.patch
@@ -17,10 +17,10 @@ index 80426ba728016273990f00db638ea327b75c1883..70a82e80d686337cbe19365ec2d858fe
this.connection.internalTeleport(PositionMoveRotation.of(teleportTarget), teleportTarget.relatives()); // CraftBukkit - use internal teleport without event
this.connection.resetPosition();
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
-index 41237e06a0053b0a61af83b4c1d7cb4d18825884..e613dd28453795184049e7dfcf2ce9e9e978c5ca 100644
+index 70581da7310da5c78e20c6257c3423168704fbc4..a8884300f2b9483e74036cacd98356c818578bd4 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
-@@ -3435,14 +3435,17 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
+@@ -3438,14 +3438,17 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
return Vec3.directionFromRotation(this.getRotationVector());
}
diff --git a/patches/server/0122-Toggle-for-water-sensitive-mob-damage.patch b/patches/server/0124-Toggle-for-water-sensitive-mob-damage.patch
similarity index 99%
rename from patches/server/0122-Toggle-for-water-sensitive-mob-damage.patch
rename to patches/server/0124-Toggle-for-water-sensitive-mob-damage.patch
index c0976c8a6..984702312 100644
--- a/patches/server/0122-Toggle-for-water-sensitive-mob-damage.patch
+++ b/patches/server/0124-Toggle-for-water-sensitive-mob-damage.patch
@@ -21,7 +21,7 @@ index 0f5be53c6f6a66c61dc3f2bebeb18ca61d06c10d..a83187312422b0e087785d89f4a49b4c
protected ParticleOptions getInkParticle() {
return ParticleTypes.GLOW_SQUID_INK;
diff --git a/src/main/java/net/minecraft/world/entity/ambient/Bat.java b/src/main/java/net/minecraft/world/entity/ambient/Bat.java
-index e16eea0be67c59e4b5af9e387e1acaa258cf1fce..a65286044be79e351bd5c80114a2f9fc5dacc11b 100644
+index 656088e81781a5711521edec565f4e34313b7bc6..29445156f8660d84bb9840c6ac85e0e2188f443d 100644
--- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java
+++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java
@@ -281,6 +281,11 @@ public class Bat extends AmbientCreature {
@@ -411,7 +411,7 @@ index 89566a88a98af2e4ec2b062ed12d4828a32b576d..6e3ed974f6e55aed8ae83fc90e8ae8a7
protected void registerGoals() {
this.goalSelector.addGoal(1, new FloatGoal(this));
diff --git a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java
-index b8077a31ed67050a45b5668ea759cf386f085271..0d22a05cf611569d69a26b04a6db01dffc4ad9f3 100644
+index f6b3bb53a0f6ad596322d6270bf27c5749d13c7b..aca3c02c6d23d9666cf7e0e06dd2e8b6455eb2ac 100644
--- a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java
+++ b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java
@@ -126,6 +126,11 @@ public class Axolotl extends Animal implements VariantHolder, B
@@ -427,7 +427,7 @@ index b8077a31ed67050a45b5668ea759cf386f085271..0d22a05cf611569d69a26b04a6db01df
@Override
diff --git a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
-index 54e880fb1c03a8b578fd1d2929bc174edb9918c5..4f7b2511a401e0c8818f11fba7b39ef2f1b4797f 100644
+index 3d862b7a0acc75b4f5ac502e5ef756fde8fe183e..89dcb65db9993cfba6a6563eb9ad39501fac5bde 100644
--- a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
+++ b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
@@ -115,6 +115,11 @@ public class Goat extends Animal {
@@ -571,7 +571,7 @@ index cb9f73605e5cfbbff9935340529a2daa782ed10b..9aeee3b61bb33d378d7ace77c1cb02bb
return Mob.createMobAttributes().add(Attributes.MAX_HEALTH, 200.0D);
}
diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java
-index 1786d3978c8a9d66dd16b667de4d4604c35231db..6124c72380f2a95ad70b453a1e4f1b416bc8bfe6 100644
+index 92711d5460b128310739188347f68be884635ec3..6e65fbad43baa8338b6732d8f78422e80f82331c 100644
--- a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java
+++ b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java
@@ -120,6 +120,11 @@ public class WitherBoss extends Monster implements RangedAttackMob {
@@ -673,7 +673,7 @@ index 1cfb85a72e270a953c13102490dc38f3dbfb76d1..a0c76ffa16edffdfa75fd539e58282d3
return Guardian.createAttributes().add(Attributes.MOVEMENT_SPEED, 0.30000001192092896D).add(Attributes.ATTACK_DAMAGE, 8.0D).add(Attributes.MAX_HEALTH, 80.0D);
}
diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
-index 025f6b327b63f4e71490f01cd22fc043400a882a..6d437ddf91444a4dc1bbbfa0d02783d023047497 100644
+index b150e41077ecf23dca828a519a545f93d256eb7c..62a2249e9611bd3801b8adb880929e3ba9693b73 100644
--- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
+++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
@@ -92,7 +92,7 @@ public class EnderMan extends Monster implements NeutralMob {
@@ -1119,7 +1119,7 @@ index cb47b15d197b1167dcbac1b989903bbf84b079b4..4cd470db5a427e0c0bec0fe2a7c7307c
public boolean jockeyOnlyBaby() {
return level().purpurConfig.zombifiedPiglinJockeyOnlyBaby;
diff --git a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java
-index 0220fb517d99e8c9629d191eb554799a1dc8d7bc..f3f77e5e219d6a3a831ac9b1a642e77ec67ce770 100644
+index e7f762682a57f13b3a1c00d37d88eb80233baace..c01813b752ee2d23062806cf14b586807cc056d3 100644
--- a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java
+++ b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java
@@ -125,6 +125,11 @@ public class Hoglin extends Animal implements Enemy, HoglinBase {
@@ -1135,7 +1135,7 @@ index 0220fb517d99e8c9629d191eb554799a1dc8d7bc..f3f77e5e219d6a3a831ac9b1a642e77e
public boolean canBeLeashed() {
return true;
diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java
-index c58fe83deb0d5cb9e4f5700b75b7073ff261f051..6cef7eb84ddb02a273024f6b30bc7e33712d742a 100644
+index f0decc0f4421a6dcd640ad8f0bfb56249bf31944..39cf09e03cd178471757e51334b07b4daffb43be 100644
--- a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java
+++ b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java
@@ -119,6 +119,11 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento
@@ -1167,10 +1167,10 @@ index 6459e588e6feb6d7bcf999e36b658bbad4069af2..9c196b0cf49cb6f69bd17748fd13ce59
return Monster.createMonsterAttributes()
.add(Attributes.MAX_HEALTH, 50.0)
diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java
-index 55472c14eec2c3c08a42af865ae044a5a0a115d3..35622b60a6b98251080fec444b335ecf617a4cce 100644
+index 280f35782e4b336465ed45373e7843dd9f697d85..22a015f46aa1bb7ef8076fe34d2b69d9870780f1 100644
--- a/src/main/java/net/minecraft/world/entity/npc/Villager.java
+++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java
-@@ -191,6 +191,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
+@@ -193,6 +193,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
this.getAttribute(Attributes.TEMPT_RANGE).setBaseValue(this.level().purpurConfig.villagerTemptRange); // Purpur
}
diff --git a/patches/server/0123-Config-to-always-tame-in-Creative.patch b/patches/server/0125-Config-to-always-tame-in-Creative.patch
similarity index 96%
rename from patches/server/0123-Config-to-always-tame-in-Creative.patch
rename to patches/server/0125-Config-to-always-tame-in-Creative.patch
index 279e6a049..26e3292f4 100644
--- a/patches/server/0123-Config-to-always-tame-in-Creative.patch
+++ b/patches/server/0125-Config-to-always-tame-in-Creative.patch
@@ -46,7 +46,7 @@ index b3dab2eda7aa109c4715e027fd6bba6ac320a106..9c7e29307b811d859a0d743b232463e1
this.level().broadcastEntityEvent(this, (byte) 7);
} else {
diff --git a/src/main/java/net/minecraft/world/entity/animal/Wolf.java b/src/main/java/net/minecraft/world/entity/animal/Wolf.java
-index 91474a8a795a278493c07002bd99ec75effa659c..15675dd5df0ec88636019ac57fd0540bef3af5f6 100644
+index 6e3ed974f6e55aed8ae83fc90e8ae8a7ee2bb8a8..5fea6f7e9b7c5d2b4845effdd1b9d40b5b8033b3 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java
@@ -637,7 +637,7 @@ public class Wolf extends TamableAnimal implements NeutralMob, VariantHolder
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
-index 7751488ea7c2ebce1b51567e144e519781f2d060..f271660fb1cdace49ec050fb1ea55e3791336eba 100644
+index 8d0e578c5ee54af4e9f183b2865573881a3f9062..c1ba5eab15bb4b7599c1e5e23b90dfb361af93b6 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
-@@ -575,6 +575,22 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
+@@ -578,6 +578,22 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
}
// Purpur end
@@ -33,7 +33,7 @@ index 7751488ea7c2ebce1b51567e144e519781f2d060..f271660fb1cdace49ec050fb1ea55e37
this.id = Entity.ENTITY_COUNTER.incrementAndGet();
this.despawnTime = type == EntityType.PLAYER ? -1 : world.paperConfig().entities.spawning.despawnTime.getOrDefault(type, io.papermc.paper.configuration.type.number.IntOr.Disabled.DISABLED).or(-1); // Paper - entity despawn time limit
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-index 7aed6ce92a6cb7e70525688d9f07d974e01879a8..4e737547c0082d30837ac1a68d31dde62d2375d5 100644
+index 0b99628d51df2c4df7ddf1c4c9f54e6dc3612533..3dade05c9299f339f94b8a29475dc5ba646b26c8 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -297,6 +297,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
@@ -44,7 +44,7 @@ index 7aed6ce92a6cb7e70525688d9f07d974e01879a8..4e737547c0082d30837ac1a68d31dde6
@Override
public float getBukkitYaw() {
-@@ -839,6 +840,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
+@@ -852,6 +853,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
dataresult.resultOrPartial(logger::error).ifPresent((nbtbase) -> {
nbt.put("Brain", nbtbase);
});
@@ -52,7 +52,7 @@ index 7aed6ce92a6cb7e70525688d9f07d974e01879a8..4e737547c0082d30837ac1a68d31dde6
}
@Override
-@@ -927,6 +929,11 @@ public abstract class LivingEntity extends Entity implements Attackable {
+@@ -940,6 +942,11 @@ public abstract class LivingEntity extends Entity implements Attackable {
this.brain = this.makeBrain(new Dynamic(NbtOps.INSTANCE, nbt.get("Brain")));
}
@@ -64,7 +64,7 @@ index 7aed6ce92a6cb7e70525688d9f07d974e01879a8..4e737547c0082d30837ac1a68d31dde6
}
// CraftBukkit start
-@@ -3777,6 +3784,34 @@ public abstract class LivingEntity extends Entity implements Attackable {
+@@ -3804,6 +3811,34 @@ public abstract class LivingEntity extends Entity implements Attackable {
}
}
@@ -100,10 +100,10 @@ index 7aed6ce92a6cb7e70525688d9f07d974e01879a8..4e737547c0082d30837ac1a68d31dde6
public boolean isSensitiveToWater() {
diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java
-index 081ba208be712263de22d06f3b20326509b226fc..d0babc1b7b8cf1feacc279a6a32cb6e218df55d6 100644
+index 01da954d982b59bca8d8b76e66021ee04138a923..7ca12a1128661ea36e2e33cda204c7d2df55a21c 100644
--- a/src/main/java/net/minecraft/world/entity/Mob.java
+++ b/src/main/java/net/minecraft/world/entity/Mob.java
-@@ -1770,17 +1770,8 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab
+@@ -1776,17 +1776,8 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab
protected void playAttackSound() {}
public boolean isSunBurnTick() {
diff --git a/patches/server/0167-Config-MobEffect-by-world.patch b/patches/server/0169-Config-MobEffect-by-world.patch
similarity index 98%
rename from patches/server/0167-Config-MobEffect-by-world.patch
rename to patches/server/0169-Config-MobEffect-by-world.patch
index d3fd4c516..367e8410c 100644
--- a/patches/server/0167-Config-MobEffect-by-world.patch
+++ b/patches/server/0169-Config-MobEffect-by-world.patch
@@ -72,7 +72,7 @@ index 303cefba51e19ac43b1f6188ad64ef480715ebaf..98ec88751b3e71c2e7aad633096b7f41
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 398cb3dfc7baac5ee610475b3709fdd3252c02e9..54cc4795be1f76bcd00294a8a9a84c2d24f99c4b 100644
+index 1083c6cc35206e09b57ae993623bffa5eecfb1f6..cf3480e98912271cc057d944c8e6931651e9da33 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -324,6 +324,21 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0168-Beacon-Activation-Range-Configurable.patch b/patches/server/0170-Beacon-Activation-Range-Configurable.patch
similarity index 96%
rename from patches/server/0168-Beacon-Activation-Range-Configurable.patch
rename to patches/server/0170-Beacon-Activation-Range-Configurable.patch
index a970877ab..80500d956 100644
--- a/patches/server/0168-Beacon-Activation-Range-Configurable.patch
+++ b/patches/server/0170-Beacon-Activation-Range-Configurable.patch
@@ -26,7 +26,7 @@ index 0e0d178f2793ab014358f534c8dc53218b89f083..fbc6b0099af34b0247f6144a9cef020f
} else {
return effectRange;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 54cc4795be1f76bcd00294a8a9a84c2d24f99c4b..91620b1d72e8109422946efa97e60c386baa6e4f 100644
+index cf3480e98912271cc057d944c8e6931651e9da33..f6f645b2d7449fdf3e6bdc618ad2fb38c05846ae 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -464,6 +464,17 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0169-Make-lightning-rod-range-configurable.patch b/patches/server/0171-Make-lightning-rod-range-configurable.patch
similarity index 93%
rename from patches/server/0169-Make-lightning-rod-range-configurable.patch
rename to patches/server/0171-Make-lightning-rod-range-configurable.patch
index 68b1c49c4..a9dc77207 100644
--- a/patches/server/0169-Make-lightning-rod-range-configurable.patch
+++ b/patches/server/0171-Make-lightning-rod-range-configurable.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Make lightning rod range configurable
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
-index a244a37e573bbadf1fbb83b89ab766ab2a6f9a1e..a4370361d9f834fbb475f881adae5ff50b25cf14 100644
+index ad4f51ed28c797cae83a80234837203ac5dd9017..cbca8b51a38f54caa81a6265eef2cdf93205f55b 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
-@@ -1072,7 +1072,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
+@@ -1086,7 +1086,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
return holder.is(PoiTypes.LIGHTNING_ROD);
}, (blockposition1) -> {
return blockposition1.getY() == this.getHeight(Heightmap.Types.WORLD_SURFACE, blockposition1.getX(), blockposition1.getZ()) - 1;
diff --git a/patches/server/0170-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch b/patches/server/0172-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch
similarity index 98%
rename from patches/server/0170-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch
rename to patches/server/0172-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch
index 67601846a..499ed123b 100644
--- a/patches/server/0170-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch
+++ b/patches/server/0172-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch
@@ -80,7 +80,7 @@ index 648c2510beb162e73aed236a3169d0bbb8fc5050..3563a241c0b697dc0167cf7b1aa73fef
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 91620b1d72e8109422946efa97e60c386baa6e4f..8f075735eaefe238cd776e0bb8ee848f2f2b78d4 100644
+index f6f645b2d7449fdf3e6bdc618ad2fb38c05846ae..8fb83dae4c835ffbdd77fb55c518e37124815743 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -381,6 +381,8 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0171-Allow-player-join-full-server-by-permission.patch b/patches/server/0173-Allow-player-join-full-server-by-permission.patch
similarity index 93%
rename from patches/server/0171-Allow-player-join-full-server-by-permission.patch
rename to patches/server/0173-Allow-player-join-full-server-by-permission.patch
index 5ba758362..6d33d24eb 100644
--- a/patches/server/0171-Allow-player-join-full-server-by-permission.patch
+++ b/patches/server/0173-Allow-player-join-full-server-by-permission.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Allow player join full server by permission
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
-index 5476701392abb1b6fb70ab90e72b59a8bfbef02b..7d57f9b7fc4837f0f44f5c1cb76a5751a15b9254 100644
+index af6ddb3231083244455d750f91bd3e4b2b4b5a0d..d823c9dc6d898f55e677dc320c84a4d8696671b1 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
@@ -711,7 +711,7 @@ public abstract class PlayerList {
diff --git a/patches/server/0172-Add-portal-permission-bypass.patch b/patches/server/0174-Add-portal-permission-bypass.patch
similarity index 96%
rename from patches/server/0172-Add-portal-permission-bypass.patch
rename to patches/server/0174-Add-portal-permission-bypass.patch
index d03a1a846..917381934 100644
--- a/patches/server/0172-Add-portal-permission-bypass.patch
+++ b/patches/server/0174-Add-portal-permission-bypass.patch
@@ -30,7 +30,7 @@ index 10e747edebd6463cdfcea592cec1c232d837f21b..02bcba52e28f757b59e2f384d5744834
return 0;
}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java
-index 4312290ad970f71e1dc25b707ab312c597a481a9..e0cbf2e2c17c87af23495e6365ff9378f7c861da 100644
+index e345cdbfab44a0f5da80d738798dbb4424b7ab5c..856f12eb276c214f2f57a58a89a4da9eea34db2d 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java
@@ -273,6 +273,7 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
diff --git a/patches/server/0173-Shulker-spawn-from-bullet-options.patch b/patches/server/0175-Shulker-spawn-from-bullet-options.patch
similarity index 98%
rename from patches/server/0173-Shulker-spawn-from-bullet-options.patch
rename to patches/server/0175-Shulker-spawn-from-bullet-options.patch
index d4b62d144..7d010504e 100644
--- a/patches/server/0173-Shulker-spawn-from-bullet-options.patch
+++ b/patches/server/0175-Shulker-spawn-from-bullet-options.patch
@@ -68,7 +68,7 @@ index 79dc7cf5bfe92b4df21d164f39726dfe618331e4..6721432f9cdd11c9658c34f0ac407be2
+ // Purpur end
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 6bbde7e866410de77eabc0295518e89be45ca825..7b076c637f85107883c889d1b5e2639d58a91cd8 100644
+index 8fb83dae4c835ffbdd77fb55c518e37124815743..54c9a86cea5978215159c59fc882bf003143eec2 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -1991,6 +1991,11 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0174-Eating-glow-berries-adds-glow-effect.patch b/patches/server/0176-Eating-glow-berries-adds-glow-effect.patch
similarity index 97%
rename from patches/server/0174-Eating-glow-berries-adds-glow-effect.patch
rename to patches/server/0176-Eating-glow-berries-adds-glow-effect.patch
index 67116c030..819332d97 100644
--- a/patches/server/0174-Eating-glow-berries-adds-glow-effect.patch
+++ b/patches/server/0176-Eating-glow-berries-adds-glow-effect.patch
@@ -18,7 +18,7 @@ index bf7d12594375d5b252db540a6d669a6e6aca7de8..580bd63fdbf9555f867362d3c1f39f41
public static final Item CAMPFIRE = registerBlock(Blocks.CAMPFIRE, settings -> settings.component(DataComponents.CONTAINER, ItemContainerContents.EMPTY));
public static final Item SOUL_CAMPFIRE = registerBlock(
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index adb3a868bac580e65a72560c863f0d948bc6e5b5..35f0bd3947ef9152ee0392d87a1d2abb64ca6d43 100644
+index 54c9a86cea5978215159c59fc882bf003143eec2..18cf2be9270623e6088e02aaeace6b9b4711fe0a 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -213,6 +213,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0175-Option-to-make-drowned-break-doors.patch b/patches/server/0177-Option-to-make-drowned-break-doors.patch
similarity index 96%
rename from patches/server/0175-Option-to-make-drowned-break-doors.patch
rename to patches/server/0177-Option-to-make-drowned-break-doors.patch
index bae279106..905476de4 100644
--- a/patches/server/0175-Option-to-make-drowned-break-doors.patch
+++ b/patches/server/0177-Option-to-make-drowned-break-doors.patch
@@ -17,7 +17,7 @@ index 1f41e4a88fb41347b8b1ac6b3d1c454ad35ebfc4..ec00c6b2a8b6a5e0ef030d65f86d4a7d
this.targetSelector.addGoal(1, new HurtByTargetGoal(this, Drowned.class).setAlertOthers(ZombifiedPiglin.class));
this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, (target, world) -> this.okTarget(target)));
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 46c953354b9c37de378408b18cddd8d1dbd44d7a..84f9031091bbdbd42247d4ecf10894e029bff141 100644
+index 18cf2be9270623e6088e02aaeace6b9b4711fe0a..acbe91bba0b245fcd4940ea19795babaaf438c80 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -1081,6 +1081,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0176-Configurable-hunger-starvation-damage.patch b/patches/server/0178-Configurable-hunger-starvation-damage.patch
similarity index 95%
rename from patches/server/0176-Configurable-hunger-starvation-damage.patch
rename to patches/server/0178-Configurable-hunger-starvation-damage.patch
index b3045016a..5f112ab89 100644
--- a/patches/server/0176-Configurable-hunger-starvation-damage.patch
+++ b/patches/server/0178-Configurable-hunger-starvation-damage.patch
@@ -18,7 +18,7 @@ index 4f8ee2e5db3352306f3c035052866d95630f4aaf..b8b0b89b7f0a21ecff4ab6286f8a114e
this.tickTimer = 0;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 84f9031091bbdbd42247d4ecf10894e029bff141..60aa7a970cd43ce82a26b06e45f36a077acfa15b 100644
+index acbe91bba0b245fcd4940ea19795babaaf438c80..51aee36c56a8fc36c3f827ea972ed10dc7130c17 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -2703,4 +2703,9 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0177-Enhance-SysoutCatcher.patch b/patches/server/0179-Enhance-SysoutCatcher.patch
similarity index 100%
rename from patches/server/0177-Enhance-SysoutCatcher.patch
rename to patches/server/0179-Enhance-SysoutCatcher.patch
diff --git a/patches/server/0178-Add-uptime-command.patch b/patches/server/0180-Add-uptime-command.patch
similarity index 97%
rename from patches/server/0178-Add-uptime-command.patch
rename to patches/server/0180-Add-uptime-command.patch
index cbd163144..464266444 100644
--- a/patches/server/0178-Add-uptime-command.patch
+++ b/patches/server/0180-Add-uptime-command.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Add uptime command
diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java
-index 5d94b71bd54f99040b76cca74964a32d55339767..0090243f7e1a966534e489cebb88d71d9cbab7bb 100644
+index 632fd1b7d3474889b700b153d9cb49676f801b07..068fa5baf5b031358a1ff71e7ac376448c0ec95c 100644
--- a/src/main/java/net/minecraft/commands/Commands.java
+++ b/src/main/java/net/minecraft/commands/Commands.java
@@ -258,6 +258,7 @@ public class Commands {
@@ -17,7 +17,7 @@ index 5d94b71bd54f99040b76cca74964a32d55339767..0090243f7e1a966534e489cebb88d71d
}
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index 509175e1dd9f64d1a4f343cc21e0dc6d04dea68d..11a93d772164bd104be860ac9e8855ba5b6904c3 100644
+index 3b5121bf06ea5ae528778ae643bc5e4c3bb736ae..6d843cf9b326ded0152702802e2c7bd94b0fe936 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -314,6 +314,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { // Paper
if (!level.isClientSide()) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 8c065c6a4c26cd048fbaebb47f844837fe772b0c..ab67708d127cb4309d40969fb8064360da5199b8 100644
+index 51aee36c56a8fc36c3f827ea972ed10dc7130c17..ff9bb8f21d6da7f8d3b0a726098227d95e6e3207 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -463,6 +463,280 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0180-Store-placer-on-Block-when-placed.patch b/patches/server/0182-Store-placer-on-Block-when-placed.patch
similarity index 100%
rename from patches/server/0180-Store-placer-on-Block-when-placed.patch
rename to patches/server/0182-Store-placer-on-Block-when-placed.patch
diff --git a/patches/server/0181-Summoner-API.patch b/patches/server/0183-Summoner-API.patch
similarity index 98%
rename from patches/server/0181-Summoner-API.patch
rename to patches/server/0183-Summoner-API.patch
index b7ac71f2e..91ee02057 100644
--- a/patches/server/0181-Summoner-API.patch
+++ b/patches/server/0183-Summoner-API.patch
@@ -49,7 +49,7 @@ index db8420f6d1356d400699bd09e67e580546295af7..c6e638cf4463db972a99054cb11b0799
}
diff --git a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java
-index 0d6eca127532cf0bc2a4495df1fcd50e3d97f85e..798aafe6153a711b979f05745d1cd65e6f43192b 100644
+index 02cf5a92ff56ada1198e157e0f87f243ad65e488..f445a96eb3991410103225d1b9289261399182ff 100644
--- a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java
+++ b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java
@@ -50,6 +50,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM
@@ -93,7 +93,7 @@ index 0d6eca127532cf0bc2a4495df1fcd50e3d97f85e..798aafe6153a711b979f05745d1cd65e
}
diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java
-index 8ecb72f6cd12d1e12f5ae9b240ccd6d9e4f6c248..4e59cbd95d2ee1b69a38fc23015a6262d1a2c53b 100644
+index f94bb66eb1118a2de2aa89a1b42c3ba24b769d4d..f19d9fc0a993739e34a2d55bbab9f4736f7688b8 100644
--- a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java
+++ b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java
@@ -86,6 +86,7 @@ public class WitherBoss extends Monster implements RangedAttackMob {
diff --git a/patches/server/0182-Customizable-sleeping-actionbar-messages.patch b/patches/server/0184-Customizable-sleeping-actionbar-messages.patch
similarity index 95%
rename from patches/server/0182-Customizable-sleeping-actionbar-messages.patch
rename to patches/server/0184-Customizable-sleeping-actionbar-messages.patch
index b1a235c84..477bba82c 100644
--- a/patches/server/0182-Customizable-sleeping-actionbar-messages.patch
+++ b/patches/server/0184-Customizable-sleeping-actionbar-messages.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Customizable sleeping actionbar messages
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
-index a4370361d9f834fbb475f881adae5ff50b25cf14..679066abd94261fc49b749a4e3dc91cc24d5cd5d 100644
+index cbca8b51a38f54caa81a6265eef2cdf93205f55b..139bc93411fb8bafedf283c92161bc5905e7e982 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
-@@ -1121,11 +1121,27 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
+@@ -1135,11 +1135,27 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
if (this.canSleepThroughNights()) {
if (!this.getServer().isSingleplayer() || this.getServer().isPublished()) {
int i = this.getGameRules().getInt(GameRules.RULE_PLAYERS_SLEEPING_PERCENTAGE);
@@ -38,7 +38,7 @@ index a4370361d9f834fbb475f881adae5ff50b25cf14..679066abd94261fc49b749a4e3dc91cc
}
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
-index 50c78ed8197eb1dc7a1d9a54b0d720602c3a895b..0191f47b2f02fe7b13474c5d5ba5a80ec9432917 100644
+index 76c6624ba6233b951f7ded4e0ecc1a93fc81b331..6a4ced206570f8c1c609e772c0b7d1cf5a6ff9ce 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -1839,7 +1839,19 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
diff --git a/patches/server/0183-option-to-disable-shulker-box-items-from-dropping-co.patch b/patches/server/0185-option-to-disable-shulker-box-items-from-dropping-co.patch
similarity index 96%
rename from patches/server/0183-option-to-disable-shulker-box-items-from-dropping-co.patch
rename to patches/server/0185-option-to-disable-shulker-box-items-from-dropping-co.patch
index 123ebbe04..3e583a17f 100644
--- a/patches/server/0183-option-to-disable-shulker-box-items-from-dropping-co.patch
+++ b/patches/server/0185-option-to-disable-shulker-box-items-from-dropping-co.patch
@@ -18,7 +18,7 @@ index b5b7f1db21a22f16f06ced775c8173f90e36a91c..33d9b5fb6897fefb0f7b9009df733934
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index ab67708d127cb4309d40969fb8064360da5199b8..0d6385d74468307d4b9e151bf1ce8e0eaf86220b 100644
+index ff9bb8f21d6da7f8d3b0a726098227d95e6e3207..277c1be1ede46b50f865a2c1d1b38ab22cae9ef9 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -214,6 +214,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0184-Big-dripleaf-tilt-delay.patch b/patches/server/0186-Big-dripleaf-tilt-delay.patch
similarity index 96%
rename from patches/server/0184-Big-dripleaf-tilt-delay.patch
rename to patches/server/0186-Big-dripleaf-tilt-delay.patch
index f9e982b45..91dfbb94b 100644
--- a/patches/server/0184-Big-dripleaf-tilt-delay.patch
+++ b/patches/server/0186-Big-dripleaf-tilt-delay.patch
@@ -24,7 +24,7 @@ index 9e3f1441d62128535112621bf259c24f1a90595b..2535e6d71b690f8dfde41a7d9cb76b6f
if (i != -1) {
world.scheduleTick(blockposition, (Block) this, i);
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 0d6385d74468307d4b9e151bf1ce8e0eaf86220b..366f19dd6622dec26d856ca1e7f0ee42f37da038 100644
+index 277c1be1ede46b50f865a2c1d1b38ab22cae9ef9..133ffdbb1d042bca487b2fe74e66a6dad9165966 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -778,6 +778,22 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0185-Player-ridable-in-water-option.patch b/patches/server/0187-Player-ridable-in-water-option.patch
similarity index 96%
rename from patches/server/0185-Player-ridable-in-water-option.patch
rename to patches/server/0187-Player-ridable-in-water-option.patch
index aa55c4630..cac1c9248 100644
--- a/patches/server/0185-Player-ridable-in-water-option.patch
+++ b/patches/server/0187-Player-ridable-in-water-option.patch
@@ -23,7 +23,7 @@ index 81f88c838f35860fdb7d7f62ed1b98f5734c766e..d7d5ce7ea223248ebda0a3e4b104baed
if (!this.isPassenger() && this.onGround() && !this.isInWater() && !this.isInPowderSnow) {
if (this.getShoulderEntityLeft().isEmpty()) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 366f19dd6622dec26d856ca1e7f0ee42f37da038..e70f67fe1c038490983026fc21ccaed8b761d279 100644
+index 133ffdbb1d042bca487b2fe74e66a6dad9165966..5ae832b108c05e8940e2dc0c7d6094742915fb1e 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -387,6 +387,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0186-Config-to-disable-Enderman-teleport-on-projectile-hi.patch b/patches/server/0188-Config-to-disable-Enderman-teleport-on-projectile-hi.patch
similarity index 90%
rename from patches/server/0186-Config-to-disable-Enderman-teleport-on-projectile-hi.patch
rename to patches/server/0188-Config-to-disable-Enderman-teleport-on-projectile-hi.patch
index 71e940e77..b9516e183 100644
--- a/patches/server/0186-Config-to-disable-Enderman-teleport-on-projectile-hi.patch
+++ b/patches/server/0188-Config-to-disable-Enderman-teleport-on-projectile-hi.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Config to disable Enderman teleport on projectile hit
diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
-index 6f3ccd2d437bacf7a7e828b62b51533eebc82b02..dcc3b145aaaa208f4949d673333625928468717c 100644
+index 7adfc08d511efcb69f954fc1f4b4eba90b9d15df..5d2ac5334899935e032f7c882710914906ddc94d 100644
--- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
+++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
-@@ -424,6 +424,7 @@ public class EnderMan extends Monster implements NeutralMob {
+@@ -430,6 +430,7 @@ public class EnderMan extends Monster implements NeutralMob {
} else {
flag1 = flag && this.hurtWithCleanWater(world, source, (ThrownPotion) source.getDirectEntity(), amount);
@@ -17,7 +17,7 @@ index 6f3ccd2d437bacf7a7e828b62b51533eebc82b02..dcc3b145aaaa208f4949d67333362592
for (int i = 0; i < 64; ++i) {
if (this.teleport()) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index ef15b1c0502634da03ed239ee9bc12b395c58693..21841f15aae1816dab5a3fb81148e54877a3419c 100644
+index 5ae832b108c05e8940e2dc0c7d6094742915fb1e..36d6d52a83f4b5b9273661d816424025f76f4596 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -1455,6 +1455,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0187-Add-compass-command.patch b/patches/server/0189-Add-compass-command.patch
similarity index 99%
rename from patches/server/0187-Add-compass-command.patch
rename to patches/server/0189-Add-compass-command.patch
index 058dc085e..1765a9cb9 100644
--- a/patches/server/0187-Add-compass-command.patch
+++ b/patches/server/0189-Add-compass-command.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Add compass command
diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java
-index 0090243f7e1a966534e489cebb88d71d9cbab7bb..d8ee4422a13c7f09b84e9bbe8b57f0c139caac32 100644
+index 068fa5baf5b031358a1ff71e7ac376448c0ec95c..eedb3707523b47ab79db326f6d7382cca60c5393 100644
--- a/src/main/java/net/minecraft/commands/Commands.java
+++ b/src/main/java/net/minecraft/commands/Commands.java
@@ -260,6 +260,7 @@ public class Commands {
diff --git a/patches/server/0188-Toggle-for-kinetic-damage.patch b/patches/server/0190-Toggle-for-kinetic-damage.patch
similarity index 88%
rename from patches/server/0188-Toggle-for-kinetic-damage.patch
rename to patches/server/0190-Toggle-for-kinetic-damage.patch
index 90b3ae885..419982cd2 100644
--- a/patches/server/0188-Toggle-for-kinetic-damage.patch
+++ b/patches/server/0190-Toggle-for-kinetic-damage.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Toggle for kinetic damage
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-index b3be740bbffc16622da64d7ea609adacdab176bd..58be94a164c3413dad4b3a7bb1a1544edb88e9ba 100644
+index 3dade05c9299f339f94b8a29475dc5ba646b26c8..c23ca02f9adbbbf32b0bf9f8a82f55781468aade 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-@@ -3201,6 +3201,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
+@@ -3228,6 +3228,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
if (f > 0.0F) {
this.playSound(this.getFallDamageSound((int) f), 1.0F, 1.0F);
@@ -17,7 +17,7 @@ index b3be740bbffc16622da64d7ea609adacdab176bd..58be94a164c3413dad4b3a7bb1a1544e
}
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index b621943e9cdeaa6a547216c9525978e6d0f7c02f..ff6da1fcbae5c41aeaf4a21eee77541f5e80df43 100644
+index 74515ad36cae0e838224caee3853d2f3d8bc0b11..1522df03dab1e9e8e6d471f62067a15350b909d9 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -182,11 +182,13 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0189-Add-Option-for-disable-observer-clocks.patch b/patches/server/0191-Add-Option-for-disable-observer-clocks.patch
similarity index 95%
rename from patches/server/0189-Add-Option-for-disable-observer-clocks.patch
rename to patches/server/0191-Add-Option-for-disable-observer-clocks.patch
index 4cbb1e122..ce40ddde1 100644
--- a/patches/server/0189-Add-Option-for-disable-observer-clocks.patch
+++ b/patches/server/0191-Add-Option-for-disable-observer-clocks.patch
@@ -18,7 +18,7 @@ index 93ed9406c34804831b86d006dbd6087db9948f08..26cb9990b91991e0a2eadc2dcbbf229e
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index ff6da1fcbae5c41aeaf4a21eee77541f5e80df43..7066d1b294ef907cdfe49359a610a48171fb1ba8 100644
+index 1522df03dab1e9e8e6d471f62067a15350b909d9..1dcd7031ba7f5e759b98533736218c5c0e28be23 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -362,6 +362,11 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0190-Customizeable-Zombie-Villager-curing-times.patch b/patches/server/0192-Customizeable-Zombie-Villager-curing-times.patch
similarity index 96%
rename from patches/server/0190-Customizeable-Zombie-Villager-curing-times.patch
rename to patches/server/0192-Customizeable-Zombie-Villager-curing-times.patch
index f7784531d..a8b06aa05 100644
--- a/patches/server/0190-Customizeable-Zombie-Villager-curing-times.patch
+++ b/patches/server/0192-Customizeable-Zombie-Villager-curing-times.patch
@@ -18,7 +18,7 @@ index 7298ba35cb27269e778de6b265933baed3077b36..623e8ef53d6336b3e3c83fd37eda1324
return InteractionResult.SUCCESS_SERVER;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 3aa4cc24ca6465c2cc475c9473548f0b6680d51f..e12bbc0974890eea0f5fbeebeeb0a713e8e698d2 100644
+index 1dcd7031ba7f5e759b98533736218c5c0e28be23..2710709349c9d32b4b7e83bbb1cc9b1fde29310a 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -2961,6 +2961,8 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0191-Option-for-sponges-to-work-on-lava-and-mud.patch b/patches/server/0193-Option-for-sponges-to-work-on-lava-and-mud.patch
similarity index 96%
rename from patches/server/0191-Option-for-sponges-to-work-on-lava-and-mud.patch
rename to patches/server/0193-Option-for-sponges-to-work-on-lava-and-mud.patch
index c3eb1f40e..3f92a8a7a 100644
--- a/patches/server/0191-Option-for-sponges-to-work-on-lava-and-mud.patch
+++ b/patches/server/0193-Option-for-sponges-to-work-on-lava-and-mud.patch
@@ -30,7 +30,7 @@ index d82c62cdb219cee0bbc3083e38e18b7615ad09ef..4c5bc71fef307d13b640e534ace0b441
if (!iblockdata.is(Blocks.KELP) && !iblockdata.is(Blocks.KELP_PLANT) && !iblockdata.is(Blocks.SEAGRASS) && !iblockdata.is(Blocks.TALL_SEAGRASS)) {
return false;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 5b0bea76d109d7dcf3fe20aab5e2d0e7efb87713..019ca3f4a506b5b964f78b4efb79111ea1b5fd76 100644
+index 2710709349c9d32b4b7e83bbb1cc9b1fde29310a..afad9ec6ea76ba66cad2f895ce04cc704e8d3235 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -964,9 +964,13 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0192-Toggle-for-Wither-s-spawn-sound.patch b/patches/server/0194-Toggle-for-Wither-s-spawn-sound.patch
similarity index 89%
rename from patches/server/0192-Toggle-for-Wither-s-spawn-sound.patch
rename to patches/server/0194-Toggle-for-Wither-s-spawn-sound.patch
index 5f02cb3ce..368feb102 100644
--- a/patches/server/0192-Toggle-for-Wither-s-spawn-sound.patch
+++ b/patches/server/0194-Toggle-for-Wither-s-spawn-sound.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Toggle for Wither's spawn sound
diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java
-index 780aa3e8580f9df24c56af1f2eb474d3ccf7a823..8f78d9a45770bd7114c6d08a4e818442e329eee4 100644
+index f19d9fc0a993739e34a2d55bbab9f4736f7688b8..a1be1d02bfd8155752e5ea66aa2aaa29361a213a 100644
--- a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java
+++ b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java
-@@ -424,7 +424,7 @@ public class WitherBoss extends Monster implements RangedAttackMob {
+@@ -431,7 +431,7 @@ public class WitherBoss extends Monster implements RangedAttackMob {
}
// CraftBukkit end
@@ -18,7 +18,7 @@ index 780aa3e8580f9df24c56af1f2eb474d3ccf7a823..8f78d9a45770bd7114c6d08a4e818442
// worldserver.globalLevelEvent(1023, new BlockPosition(this), 0);
int viewDistance = world.getCraftServer().getViewDistance() * 16;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 89a4e9f78f71f2b3e853a555bb8d8284cf6a6cb0..9111f026f6499eeada8a7c22d3c433e41a72d869 100644
+index afad9ec6ea76ba66cad2f895ce04cc704e8d3235..5ffcb25ea8c96c5087ece87a67802e25312cccc9 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -2796,6 +2796,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0193-Cactus-breaks-from-solid-neighbors-config.patch b/patches/server/0195-Cactus-breaks-from-solid-neighbors-config.patch
similarity index 95%
rename from patches/server/0193-Cactus-breaks-from-solid-neighbors-config.patch
rename to patches/server/0195-Cactus-breaks-from-solid-neighbors-config.patch
index afb026cda..bcfa418ed 100644
--- a/patches/server/0193-Cactus-breaks-from-solid-neighbors-config.patch
+++ b/patches/server/0195-Cactus-breaks-from-solid-neighbors-config.patch
@@ -18,7 +18,7 @@ index c045b1cccf0047dbef8c04d5a28d31d53389054f..bbfd8f5d404d0add94f0d8ac89a29646
return false;
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 28a444c0ed6b8dffedf00a4bc95d6351d4a08212..a2ee88ca23bbaad1e4566ae3b18d0ef549636580 100644
+index 5ffcb25ea8c96c5087ece87a67802e25312cccc9..081a8a388b354210f3ea04e8a4b6428fc97a9d84 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -805,6 +805,11 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0194-Config-to-remove-curse-of-binding-with-weakness.patch b/patches/server/0196-Config-to-remove-curse-of-binding-with-weakness.patch
similarity index 96%
rename from patches/server/0194-Config-to-remove-curse-of-binding-with-weakness.patch
rename to patches/server/0196-Config-to-remove-curse-of-binding-with-weakness.patch
index e1d3da093..c1b9d0408 100644
--- a/patches/server/0194-Config-to-remove-curse-of-binding-with-weakness.patch
+++ b/patches/server/0196-Config-to-remove-curse-of-binding-with-weakness.patch
@@ -18,7 +18,7 @@ index 6c0b6abb1698fac9bb902f695b725d4ab783ee90..091e3c3514fcb378b68098114106d09f
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index a2ee88ca23bbaad1e4566ae3b18d0ef549636580..eb09366f743a2f471f126259e2ef608d14639377 100644
+index 081a8a388b354210f3ea04e8a4b6428fc97a9d84..55d2c1729f639ef2bbb41e72ddd0945dd5662aaf 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -397,6 +397,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0195-Conduit-behavior-configuration.patch b/patches/server/0197-Conduit-behavior-configuration.patch
similarity index 98%
rename from patches/server/0195-Conduit-behavior-configuration.patch
rename to patches/server/0197-Conduit-behavior-configuration.patch
index ec1b9eb5d..3cffc1546 100644
--- a/patches/server/0195-Conduit-behavior-configuration.patch
+++ b/patches/server/0197-Conduit-behavior-configuration.patch
@@ -97,7 +97,7 @@ index c1759aeb3e6ad0e4eb66cba3da1b120dd1dce812..1a91bc2e422db0eba65694ac046f1b36
@Override
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 915dcd176f058dd04ea980fd3790ac339ffd2de4..7161b90c101062bd9e30639c782c514aac15202c 100644
+index 55d2c1729f639ef2bbb41e72ddd0945dd5662aaf..d42047c0e5495a52d324eb6ec2f293bec4b6c472 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -3030,4 +3030,27 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0196-Cauldron-fill-chances.patch b/patches/server/0198-Cauldron-fill-chances.patch
similarity index 97%
rename from patches/server/0196-Cauldron-fill-chances.patch
rename to patches/server/0198-Cauldron-fill-chances.patch
index a563dbc50..3daf2f1ed 100644
--- a/patches/server/0196-Cauldron-fill-chances.patch
+++ b/patches/server/0198-Cauldron-fill-chances.patch
@@ -47,7 +47,7 @@ index 53cea36ec931de89e0060613acf87beb51dc16ec..fd5489993dca0f940da69e9163f78e5c
if (dripChance < f1) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 7161b90c101062bd9e30639c782c514aac15202c..970954ee212526c767fe1dd84bbaaa459f071398 100644
+index d42047c0e5495a52d324eb6ec2f293bec4b6c472..7b9bf48039c457f95f23b4d0b80f095a65c55e22 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -3053,4 +3053,15 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0197-Config-to-allow-mobs-to-pathfind-over-rails.patch b/patches/server/0199-Config-to-allow-mobs-to-pathfind-over-rails.patch
similarity index 96%
rename from patches/server/0197-Config-to-allow-mobs-to-pathfind-over-rails.patch
rename to patches/server/0199-Config-to-allow-mobs-to-pathfind-over-rails.patch
index b9b8046b0..f69ddd658 100644
--- a/patches/server/0197-Config-to-allow-mobs-to-pathfind-over-rails.patch
+++ b/patches/server/0199-Config-to-allow-mobs-to-pathfind-over-rails.patch
@@ -18,7 +18,7 @@ index c84fd369d92932903c76bb2012602617d3e2d213..f6291ff377b38cb84692a9fd564b4b1a
&& pathType != PathType.POWDER_SNOW) {
node = this.tryJumpOn(x, y, z, maxYStep, prevFeetY, direction, nodeType, mutableBlockPos);
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 87374995aef0061ffbd64a1ee7a88e21935e6759..8392bed4344d6880b2e2a00e42e12b705095b3cd 100644
+index 7b9bf48039c457f95f23b4d0b80f095a65c55e22..3cf70e3e79b581d97a0e76e88075600aaa2af7d4 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -139,6 +139,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0198-Shulker-change-color-with-dye.patch b/patches/server/0200-Shulker-change-color-with-dye.patch
similarity index 96%
rename from patches/server/0198-Shulker-change-color-with-dye.patch
rename to patches/server/0200-Shulker-change-color-with-dye.patch
index a431c4ca3..539c8d324 100644
--- a/patches/server/0198-Shulker-change-color-with-dye.patch
+++ b/patches/server/0200-Shulker-change-color-with-dye.patch
@@ -29,7 +29,7 @@ index 79bf3d04fa2c7bcadfff08dc9a464e589866f7db..131c7d7e85a3d9ac0e485fd8e56bd419
protected void registerGoals() {
this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index a2e3f6781ec6af4874d5c08d387f3e57409418cb..c74d3cec817ebedd2cb4cdb0d8781510335c6963 100644
+index 3cf70e3e79b581d97a0e76e88075600aaa2af7d4..cf0ca3f712e825898cda9ca0a8d6699195d6f26c 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -2318,6 +2318,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0199-Extended-OfflinePlayer-API.patch b/patches/server/0201-Extended-OfflinePlayer-API.patch
similarity index 99%
rename from patches/server/0199-Extended-OfflinePlayer-API.patch
rename to patches/server/0201-Extended-OfflinePlayer-API.patch
index 95a468bf4..3a73bd938 100644
--- a/patches/server/0199-Extended-OfflinePlayer-API.patch
+++ b/patches/server/0201-Extended-OfflinePlayer-API.patch
@@ -243,7 +243,7 @@ index 94ca0407303c4493ab4928b12ec6ecc75aaca549..a138e1b6b66d99f2035de054137a607a
+ // Purpur end - OfflinePlayer API
}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index 67a3bc89c790a436310972f2fe08b73bafd01070..3d824ed7b53b30493d0fc1714fc1b247f4a9ad9c 100644
+index 6abf043faf27d1385ad45c264822a9f49974863d..7be5b26b3d9e4d38838ecca8f65f8671c3c17ed2 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -2775,6 +2775,28 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
diff --git a/patches/server/0200-Added-the-ability-to-add-combustible-items.patch b/patches/server/0202-Added-the-ability-to-add-combustible-items.patch
similarity index 100%
rename from patches/server/0200-Added-the-ability-to-add-combustible-items.patch
rename to patches/server/0202-Added-the-ability-to-add-combustible-items.patch
diff --git a/patches/server/0201-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch b/patches/server/0203-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch
similarity index 90%
rename from patches/server/0201-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch
rename to patches/server/0203-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch
index db2fa8ee9..9b6817cbb 100644
--- a/patches/server/0201-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch
+++ b/patches/server/0203-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Option for if rain and thunder should stop on sleep
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
-index 679066abd94261fc49b749a4e3dc91cc24d5cd5d..0188f1e9c571a6949f922c53047ccc32253454f5 100644
+index 139bc93411fb8bafedf283c92161bc5905e7e982..4c076428c85e66fae9bf658cc816c2f9ef6b47c4 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
-@@ -1281,6 +1281,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
+@@ -1295,6 +1295,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@VisibleForTesting
public void resetWeatherCycle() {
// CraftBukkit start
@@ -16,7 +16,7 @@ index 679066abd94261fc49b749a4e3dc91cc24d5cd5d..0188f1e9c571a6949f922c53047ccc32
this.serverLevelData.setRaining(false, org.bukkit.event.weather.WeatherChangeEvent.Cause.SLEEP); // Paper - Add cause to Weather/ThunderChangeEvents
// If we stop due to everyone sleeping we should reset the weather duration to some other random value.
// Not that everyone ever manages to get the whole server to sleep at the same time....
-@@ -1288,6 +1289,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
+@@ -1302,6 +1303,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
this.serverLevelData.setRainTime(0);
}
// CraftBukkit end
@@ -25,7 +25,7 @@ index 679066abd94261fc49b749a4e3dc91cc24d5cd5d..0188f1e9c571a6949f922c53047ccc32
// CraftBukkit start
// If we stop due to everyone sleeping we should reset the weather duration to some other random value.
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index cff0dfea430955ea4211d06ea2cff8db7ca4159a..316beb19c6ee2e5b1f2bd1e7b849992c69a26b94 100644
+index cf0ca3f712e825898cda9ca0a8d6699195d6f26c..16d2dbafb996932dd99edbe6eea37c7036f4b77e 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -140,6 +140,8 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0202-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch b/patches/server/0204-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch
similarity index 97%
rename from patches/server/0202-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch
rename to patches/server/0204-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch
index c2e00aabc..503fb7766 100644
--- a/patches/server/0202-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch
+++ b/patches/server/0204-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch
@@ -50,7 +50,7 @@ index 66a07f7cbf1c1d6ecbe055cbf4f63eb07d93e90c..63d67d46d30ed8ed57cdc0e59b6cb6b7
.sound(SoundType.FLOWERING_AZALEA)
.noOcclusion()
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 316beb19c6ee2e5b1f2bd1e7b849992c69a26b94..3083bfce93ea0b059c0abe823920eca75872f916 100644
+index 16d2dbafb996932dd99edbe6eea37c7036f4b77e..ea1314eb2ac0f8c1dd681b85951bcdd2cead1bf6 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -765,6 +765,11 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0203-Shift-right-click-to-use-exp-for-mending.patch b/patches/server/0205-Shift-right-click-to-use-exp-for-mending.patch
similarity index 94%
rename from patches/server/0203-Shift-right-click-to-use-exp-for-mending.patch
rename to patches/server/0205-Shift-right-click-to-use-exp-for-mending.patch
index b0a35cb5f..ff1898ae1 100644
--- a/patches/server/0203-Shift-right-click-to-use-exp-for-mending.patch
+++ b/patches/server/0205-Shift-right-click-to-use-exp-for-mending.patch
@@ -36,10 +36,10 @@ index 7315e604a2f9cb068eb5bbca744e44eeabac09c9..88eb3774f688bcff383efa7f113bd0b1
+ // Purpur end
}
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-index 37515387f91c9493dd259b677e9a6aa2dc19912d..35b9951554a41213003badfa38e6db7825097055 100644
+index abec164f413342bf1d2d25479ea8a42fce6a66c7..1e1b42f60679c8b8b27b3255feda4c6cf77d5536 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-@@ -2093,6 +2093,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
+@@ -2094,6 +2094,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
boolean cancelled;
if (movingobjectposition == null || movingobjectposition.getType() != HitResult.Type.BLOCK) {
@@ -48,7 +48,7 @@ index 37515387f91c9493dd259b677e9a6aa2dc19912d..35b9951554a41213003badfa38e6db78
cancelled = event.useItemInHand() == Event.Result.DENY;
} else {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 3083bfce93ea0b059c0abe823920eca75872f916..948712e75fe4f0083178a8f5bcd918e9fcabd8df 100644
+index ea1314eb2ac0f8c1dd681b85951bcdd2cead1bf6..e351feee5916492edebb92f9af47c87e582b239d 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -404,6 +404,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0204-Dolphins-naturally-aggressive-to-players-chance.patch b/patches/server/0206-Dolphins-naturally-aggressive-to-players-chance.patch
similarity index 98%
rename from patches/server/0204-Dolphins-naturally-aggressive-to-players-chance.patch
rename to patches/server/0206-Dolphins-naturally-aggressive-to-players-chance.patch
index d515a8f71..b12f651ba 100644
--- a/patches/server/0204-Dolphins-naturally-aggressive-to-players-chance.patch
+++ b/patches/server/0206-Dolphins-naturally-aggressive-to-players-chance.patch
@@ -48,7 +48,7 @@ index bcc6435c177189aa59a3fbe67795ae5092685133..fad0b8157a9c30a0e9b35fe32b6a9f2e
public static AttributeSupplier.Builder createAttributes() {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 4075b1c719007965d487a6c033dc7198bc4cfc08..7fd68ad9c8506d45e000172f8cc97eca33c3af3a 100644
+index e351feee5916492edebb92f9af47c87e582b239d..2fd6f601524f8fc748be73a38edf4df06c5e9459 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -1358,6 +1358,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0205-Cows-naturally-aggressive-to-players-chance.patch b/patches/server/0207-Cows-naturally-aggressive-to-players-chance.patch
similarity index 98%
rename from patches/server/0205-Cows-naturally-aggressive-to-players-chance.patch
rename to patches/server/0207-Cows-naturally-aggressive-to-players-chance.patch
index 0d34eb3cb..2f132fc44 100644
--- a/patches/server/0205-Cows-naturally-aggressive-to-players-chance.patch
+++ b/patches/server/0207-Cows-naturally-aggressive-to-players-chance.patch
@@ -61,7 +61,7 @@ index 4ad3571403ee8044d17f53987bd47b6c43d42f0e..380bd41336d8d24bffd4e10885e46c95
@Override
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index f3029600ef5eb73166a220f405bf5f8b62933436..4a3b4711aa82149299fb88301d69a23ada34e116 100644
+index 2fd6f601524f8fc748be73a38edf4df06c5e9459..26c7ccd547430f04dad6495ba7db5be5c0349a8f 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -1290,7 +1290,14 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0206-Option-for-beds-to-explode-on-villager-sleep.patch b/patches/server/0208-Option-for-beds-to-explode-on-villager-sleep.patch
similarity index 90%
rename from patches/server/0206-Option-for-beds-to-explode-on-villager-sleep.patch
rename to patches/server/0208-Option-for-beds-to-explode-on-villager-sleep.patch
index 579927300..8e0f6b390 100644
--- a/patches/server/0206-Option-for-beds-to-explode-on-villager-sleep.patch
+++ b/patches/server/0208-Option-for-beds-to-explode-on-villager-sleep.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Option for beds to explode on villager sleep
diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java
-index 9efd57ffc088e5239a0c94bd8da30c6fd32a5ad6..ba42a5643f3cae5dcf392927733fa79e2b47f822 100644
+index fd319cf5ac1a3aa8f3562bbab4bf2a8e15b10ae2..b2ea56e3e2a0b7534bd9e16106402c6581057e43 100644
--- a/src/main/java/net/minecraft/world/entity/npc/Villager.java
+++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java
-@@ -1073,6 +1073,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
+@@ -1080,6 +1080,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
@Override
public void startSleeping(BlockPos pos) {
@@ -22,7 +22,7 @@ index 9efd57ffc088e5239a0c94bd8da30c6fd32a5ad6..ba42a5643f3cae5dcf392927733fa79e
this.brain.setMemory(MemoryModuleType.LAST_SLEPT, this.level().getGameTime()); // CraftBukkit - decompile error
this.brain.eraseMemory(MemoryModuleType.WALK_TARGET);
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 0522131a030e9a461716e0696939312169032914..6f2f173c386ffba9b2e104612ee5e9c3c8957eb0 100644
+index 26c7ccd547430f04dad6495ba7db5be5c0349a8f..efecfd2379d5e955d78c48fb9771197f52263fd6 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -784,6 +784,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0207-Halloween-options-and-optimizations.patch b/patches/server/0209-Halloween-options-and-optimizations.patch
similarity index 89%
rename from patches/server/0207-Halloween-options-and-optimizations.patch
rename to patches/server/0209-Halloween-options-and-optimizations.patch
index aa6907eab..7eff0c6eb 100644
--- a/patches/server/0207-Halloween-options-and-optimizations.patch
+++ b/patches/server/0209-Halloween-options-and-optimizations.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Halloween options and optimizations
diff --git a/src/main/java/net/minecraft/world/entity/ambient/Bat.java b/src/main/java/net/minecraft/world/entity/ambient/Bat.java
-index a65286044be79e351bd5c80114a2f9fc5dacc11b..25c877481f3006afcdeb3634739e8f37accd27cd 100644
+index 29445156f8660d84bb9840c6ac85e0e2188f443d..7b773edc6fa661e75964a80dcb6820d1b5def54d 100644
--- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java
+++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java
@@ -305,7 +305,7 @@ public class Bat extends AmbientCreature {
@@ -17,18 +17,14 @@ index a65286044be79e351bd5c80114a2f9fc5dacc11b..25c877481f3006afcdeb3634739e8f37
b0 = 7;
} else if (random.nextBoolean()) {
return false;
-@@ -315,6 +315,11 @@ public class Bat extends AmbientCreature {
- }
- }
-
-+ // Pufferfish start - only check for spooky season once an hour
-+ private static boolean isSpookySeason = false;
-+ private static final int ONE_HOUR = 20 * 60 * 60;
-+ private static int lastSpookyCheck = -ONE_HOUR;
+@@ -319,6 +319,7 @@ public class Bat extends AmbientCreature {
+ private static boolean isSpookySeason = false;
+ private static final int ONE_HOUR = 20 * 60 * 60;
+ private static int lastSpookyCheck = -ONE_HOUR;
+ public static boolean isHalloweenSeason(Level level) { return level.purpurConfig.forceHalloweenSeason || isHalloween(); } // Purpur
private static boolean isHalloween() {
+ if (net.minecraft.server.MinecraftServer.currentTick - lastSpookyCheck > ONE_HOUR) {
LocalDate localdate = LocalDate.now();
- int i = localdate.get(ChronoField.DAY_OF_MONTH);
diff --git a/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java b/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java
index bbe4c1cb4244ab813ef7d56c46c3ae62701c4824..2cadbc0d56908ca978e1735eff07f5e634548606 100644
--- a/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java
@@ -64,7 +60,7 @@ index b34dec421adc3ce56c0720a839a43ce42faeefaf..98e7b57a45ae3cae704c65ec6db5f715
this.armorDropChances[EquipmentSlot.HEAD.getIndex()] = 0.0F;
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 55574dcdf112a3310c23425060009b1394449c3a..0e698fa909db87571ed4985840517abba39ab668 100644
+index efecfd2379d5e955d78c48fb9771197f52263fd6..8c2fa8ef4630f69998cb8e893a94a6470b035506 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -1721,6 +1721,13 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0208-Config-for-grindstones.patch b/patches/server/0210-Config-for-grindstones.patch
similarity index 100%
rename from patches/server/0208-Config-for-grindstones.patch
rename to patches/server/0210-Config-for-grindstones.patch
diff --git a/patches/server/0209-UPnP-Port-Forwarding.patch b/patches/server/0211-UPnP-Port-Forwarding.patch
similarity index 93%
rename from patches/server/0209-UPnP-Port-Forwarding.patch
rename to patches/server/0211-UPnP-Port-Forwarding.patch
index 365a26172..e9b26ac94 100644
--- a/patches/server/0209-UPnP-Port-Forwarding.patch
+++ b/patches/server/0211-UPnP-Port-Forwarding.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] UPnP Port Forwarding
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index 3ae09a3459c804c57ce08001216120ee2d0fead2..3901b66cb8f3c2629b8f6094160498610e7686b9 100644
+index 6d843cf9b326ded0152702802e2c7bd94b0fe936..93a6edc65513753db7ee4127451a495ea3f45548 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -330,6 +330,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop, B
@@ -421,7 +421,7 @@ index 0d22a05cf611569d69a26b04a6db01dffc4ad9f3..91768d49c3cbef0a135cfd0e60bdb4e8
@Override
diff --git a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
-index 4f7b2511a401e0c8818f11fba7b39ef2f1b4797f..7f196e8a8b5094375c9b13fe6e7311a3450dbb5f 100644
+index 89dcb65db9993cfba6a6563eb9ad39501fac5bde..752f44048ed4f61ce8e2cce67d0680b7837cdd29 100644
--- a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
+++ b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
@@ -120,6 +120,11 @@ public class Goat extends Animal {
@@ -549,7 +549,7 @@ index 5ffb2ca8dd4cd1d32f7d239a767ac68d01ab3d3a..2b7b0d766ceba4b2261be2d8308170ae
return createBaseHorseAttributes().add(Attributes.MAX_HEALTH, 15.0).add(Attributes.MOVEMENT_SPEED, 0.2F);
}
diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java
-index 8f78d9a45770bd7114c6d08a4e818442e329eee4..ac8f05e20e810e61e4c77aa7a6e41008779563dc 100644
+index a1be1d02bfd8155752e5ea66aa2aaa29361a213a..5e134b3cf939fe396c060797883613812ad73c31 100644
--- a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java
+++ b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java
@@ -135,6 +135,11 @@ public class WitherBoss extends Monster implements RangedAttackMob {
@@ -645,7 +645,7 @@ index a0c76ffa16edffdfa75fd539e58282d3115f473b..a000304e3ac4c34b020f7457aa2589c8
return Guardian.createAttributes().add(Attributes.MOVEMENT_SPEED, 0.30000001192092896D).add(Attributes.ATTACK_DAMAGE, 8.0D).add(Attributes.MAX_HEALTH, 80.0D);
}
diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
-index dcc3b145aaaa208f4949d673333625928468717c..1016ddd75b783484865fa814bb267eff9ae2ceb5 100644
+index 5d2ac5334899935e032f7c882710914906ddc94d..476aaa0d9899eb56ea29b1fcf15565b58f78479d 100644
--- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
+++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
@@ -118,6 +118,11 @@ public class EnderMan extends Monster implements NeutralMob {
@@ -1077,7 +1077,7 @@ index 4cd470db5a427e0c0bec0fe2a7c7307cac47b39b..8c3271dcc8c9aa58e2e007eba282c11e
public void setPersistentAngerTarget(@Nullable UUID angryAt) {
this.persistentAngerTarget = angryAt;
diff --git a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java
-index f3f77e5e219d6a3a831ac9b1a642e77ec67ce770..7520ab7ec5902f083aefd68895a7d9c47bf4e418 100644
+index c01813b752ee2d23062806cf14b586807cc056d3..9550fd212bdf53a566940a42d85cc3f8a729b20b 100644
--- a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java
+++ b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java
@@ -130,6 +130,11 @@ public class Hoglin extends Animal implements Enemy, HoglinBase {
@@ -1093,7 +1093,7 @@ index f3f77e5e219d6a3a831ac9b1a642e77ec67ce770..7520ab7ec5902f083aefd68895a7d9c4
public boolean canBeLeashed() {
return true;
diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java
-index 6cef7eb84ddb02a273024f6b30bc7e33712d742a..7aca25b8d898b97fd331d61ab901f2ebc0ed7039 100644
+index 39cf09e03cd178471757e51334b07b4daffb43be..20608fb46a0af85739e3c0caa843c1a9d45c9659 100644
--- a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java
+++ b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java
@@ -124,6 +124,11 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento
@@ -1125,10 +1125,10 @@ index 9c196b0cf49cb6f69bd17748fd13ce5960094f88..bc3b0eb21200eae7e419b2571871b36f
return Monster.createMonsterAttributes()
.add(Attributes.MAX_HEALTH, 50.0)
diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java
-index 0504d4d562205d6628cef970ef1a2aedcde974c9..0f79a5560a6bacde786a1eacbdcbe0d946e03674 100644
+index b2ea56e3e2a0b7534bd9e16106402c6581057e43..32479bf58040ee980b20e99bb384bb84ef92624f 100644
--- a/src/main/java/net/minecraft/world/entity/npc/Villager.java
+++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java
-@@ -196,6 +196,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
+@@ -198,6 +198,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
return this.level().purpurConfig.villagerTakeDamageFromWater;
}
diff --git a/patches/server/0217-Grindstone-API.patch b/patches/server/0219-Grindstone-API.patch
similarity index 100%
rename from patches/server/0217-Grindstone-API.patch
rename to patches/server/0219-Grindstone-API.patch
diff --git a/patches/server/0218-Ability-for-hoe-to-replant-crops-and-nether-warts.patch b/patches/server/0220-Ability-for-hoe-to-replant-crops-and-nether-warts.patch
similarity index 96%
rename from patches/server/0218-Ability-for-hoe-to-replant-crops-and-nether-warts.patch
rename to patches/server/0220-Ability-for-hoe-to-replant-crops-and-nether-warts.patch
index dff0db32f..eebdee1ee 100644
--- a/patches/server/0218-Ability-for-hoe-to-replant-crops-and-nether-warts.patch
+++ b/patches/server/0220-Ability-for-hoe-to-replant-crops-and-nether-warts.patch
@@ -34,7 +34,7 @@ index eb324fda54ada3ed7941713a784ed2d686ec8c4b..09cc76f3fee4a767c9ec3fa592f2c3c6
+ // Purpur end
}
diff --git a/src/main/java/net/minecraft/world/level/block/CropBlock.java b/src/main/java/net/minecraft/world/level/block/CropBlock.java
-index ab58c4dbe9deb8807478a8e66e01f81a30221532..4f64011262eef6a24a8e8595ace1e4d1d82923e5 100644
+index 3f7440eb164ea7593844de6c496ee1a998759347..33c27909290ff3ab483226cf65b1a1bc2e983cbc 100644
--- a/src/main/java/net/minecraft/world/level/block/CropBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/CropBlock.java
@@ -216,4 +216,15 @@ public class CropBlock extends BushBlock implements BonemealableBlock {
@@ -74,7 +74,7 @@ index acbd60a2f162fe0e254e36d0e8e7face3fc8a7b3..da1c7999ca64199387054de46489d3ff
+ // Purpur end
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index ce2c25871cacd7de0f22ac8942ada42daab2ebab..46c55ace74524aacaba1bbc453b16821b7922e0c 100644
+index 744730583ec613adc8e31565780fbcae72a9b69c..931e2a3d04e2ec43b5389144c675914cb595b04d 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -507,6 +507,8 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0219-Turtle-eggs-random-tick-crack-chance.patch b/patches/server/0221-Turtle-eggs-random-tick-crack-chance.patch
similarity index 91%
rename from patches/server/0219-Turtle-eggs-random-tick-crack-chance.patch
rename to patches/server/0221-Turtle-eggs-random-tick-crack-chance.patch
index 8efd358f7..2f552ce6f 100644
--- a/patches/server/0219-Turtle-eggs-random-tick-crack-chance.patch
+++ b/patches/server/0221-Turtle-eggs-random-tick-crack-chance.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Turtle eggs random tick crack chance
diff --git a/src/main/java/net/minecraft/world/level/block/TurtleEggBlock.java b/src/main/java/net/minecraft/world/level/block/TurtleEggBlock.java
-index 4eb0f7a9cf6b12c02d0bd42980ae302dd56c1b8a..e1c984ec64565584c78fe0a6c7db3537108bac59 100644
+index a265c5bf1a4d6f3c84cad20f9b3c285dcebd0372..72c89f14977844e1460e9a914f39e896c9d498fd 100644
--- a/src/main/java/net/minecraft/world/level/block/TurtleEggBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/TurtleEggBlock.java
@@ -171,7 +171,7 @@ public class TurtleEggBlock extends Block {
@@ -18,7 +18,7 @@ index 4eb0f7a9cf6b12c02d0bd42980ae302dd56c1b8a..e1c984ec64565584c78fe0a6c7db3537
@Override
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 46c55ace74524aacaba1bbc453b16821b7922e0c..212ae6988d67fac1354ebd6a8cb7cd252f261c2f 100644
+index 931e2a3d04e2ec43b5389144c675914cb595b04d..0e3c1b37d386a7115cdfa027a5afb235ec4d363f 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -1034,11 +1034,13 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0220-Mob-head-visibility-percent.patch b/patches/server/0222-Mob-head-visibility-percent.patch
similarity index 96%
rename from patches/server/0220-Mob-head-visibility-percent.patch
rename to patches/server/0222-Mob-head-visibility-percent.patch
index bb98ce0ce..0949000c0 100644
--- a/patches/server/0220-Mob-head-visibility-percent.patch
+++ b/patches/server/0222-Mob-head-visibility-percent.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Mob head visibility percent
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-index d3adb23808c110862cd7090229c459deb6a34fa2..ccde673f203ca17f726c67d009ea4cf4eb9040ac 100644
+index c23ca02f9adbbbf32b0bf9f8a82f55781468aade..19cc0ba32472384bf10662d41fecf23ebfc9876c 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-@@ -1069,9 +1069,20 @@ public abstract class LivingEntity extends Entity implements Attackable {
+@@ -1082,9 +1082,20 @@ public abstract class LivingEntity extends Entity implements Attackable {
ItemStack itemstack = this.getItemBySlot(EquipmentSlot.HEAD);
EntityType> entitytypes = entity.getType();
@@ -32,7 +32,7 @@ index d3adb23808c110862cd7090229c459deb6a34fa2..ccde673f203ca17f726c67d009ea4cf4
// Purpur start
if (entity instanceof LivingEntity entityliving) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 535f310811ae11878d3a6c5bd90c5b1ffd1097ca..516d20e07dba216e82cbbba6aea67a8b758de512 100644
+index 0e3c1b37d386a7115cdfa027a5afb235ec4d363f..b49d8ef5fe4a3b4bd99124cca2e5e661762552ff 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -1392,6 +1392,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0221-Configurable-valid-characters-for-usernames.patch b/patches/server/0223-Configurable-valid-characters-for-usernames.patch
similarity index 100%
rename from patches/server/0221-Configurable-valid-characters-for-usernames.patch
rename to patches/server/0223-Configurable-valid-characters-for-usernames.patch
diff --git a/patches/server/0222-Stop-bees-from-dying-after-stinging.patch b/patches/server/0224-Stop-bees-from-dying-after-stinging.patch
similarity index 95%
rename from patches/server/0222-Stop-bees-from-dying-after-stinging.patch
rename to patches/server/0224-Stop-bees-from-dying-after-stinging.patch
index 65eddc8d3..e69c912c4 100644
--- a/patches/server/0222-Stop-bees-from-dying-after-stinging.patch
+++ b/patches/server/0224-Stop-bees-from-dying-after-stinging.patch
@@ -17,7 +17,7 @@ index db382cf32d215f1b98b960e0c1a8dfaf6e19422f..4b32a783cabf05f5bae0dba22eea8ac7
++this.timeSinceSting;
if (this.timeSinceSting % 5 == 0 && this.random.nextInt(Mth.clamp(1200 - this.timeSinceSting, 1, 1200)) == 0) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 7863dda1663e2d6794e0c5fa6ee4fe1628c5afd3..cd53426663b15a1c077b27db6fc28f722cd2bb41 100644
+index b49d8ef5fe4a3b4bd99124cca2e5e661762552ff..01306ed51e4ca205bc58c171e6df5594c96aa22e 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -1153,6 +1153,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0223-Give-bee-counts-in-beehives-to-Purpur-clients.patch b/patches/server/0225-Give-bee-counts-in-beehives-to-Purpur-clients.patch
similarity index 95%
rename from patches/server/0223-Give-bee-counts-in-beehives-to-Purpur-clients.patch
rename to patches/server/0225-Give-bee-counts-in-beehives-to-Purpur-clients.patch
index 1290313bd..148810f80 100644
--- a/patches/server/0223-Give-bee-counts-in-beehives-to-Purpur-clients.patch
+++ b/patches/server/0225-Give-bee-counts-in-beehives-to-Purpur-clients.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Give bee counts in beehives to Purpur clients
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index 3901b66cb8f3c2629b8f6094160498610e7686b9..4c46d084befe48ec1f98a956033a58ee2f2c0bbc 100644
+index 93a6edc65513753db7ee4127451a495ea3f45548..66cbaad4c92750ecf0c74ab52e6eae4a818da972 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
-@@ -1168,6 +1168,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop> {
diff --git a/patches/server/0229-Configurable-minimum-demand-for-trades.patch b/patches/server/0231-Configurable-minimum-demand-for-trades.patch
similarity index 92%
rename from patches/server/0229-Configurable-minimum-demand-for-trades.patch
rename to patches/server/0231-Configurable-minimum-demand-for-trades.patch
index a258a0aec..699196ea1 100644
--- a/patches/server/0229-Configurable-minimum-demand-for-trades.patch
+++ b/patches/server/0231-Configurable-minimum-demand-for-trades.patch
@@ -9,10 +9,10 @@ This patch adds a config option to allow the minimum demand to instead
be configurable.
diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java
-index 0f79a5560a6bacde786a1eacbdcbe0d946e03674..e9032364c78514e7a0a2aa162ba564dc0598a3c4 100644
+index 32479bf58040ee980b20e99bb384bb84ef92624f..5943b0c059b41ab84d7841a764ff2ace6e6ca89b 100644
--- a/src/main/java/net/minecraft/world/entity/npc/Villager.java
+++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java
-@@ -540,7 +540,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
+@@ -547,7 +547,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
while (iterator.hasNext()) {
MerchantOffer merchantrecipe = (MerchantOffer) iterator.next();
@@ -40,7 +40,7 @@ index 0efc8d997b34302c3e0a5d7ec73a11a940dbeefe..af157881d440b34cfe79fbc9b03cc9ef
public ItemStack assemble() {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index b16d7e3f76d05fd834a62c564b2b8688397c2832..c49e93d6afd7fe6c7c8397154a9580ab023ed529 100644
+index af9e6ee31e0ad8436a0a43b6d914445ca7737d9d..70258ae10d19f0aac01e3a550ec0d538f598d077 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -2905,6 +2905,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0230-Lobotomize-stuck-villagers.patch b/patches/server/0232-Lobotomize-stuck-villagers.patch
similarity index 92%
rename from patches/server/0230-Lobotomize-stuck-villagers.patch
rename to patches/server/0232-Lobotomize-stuck-villagers.patch
index d1991cc28..54e859285 100644
--- a/patches/server/0230-Lobotomize-stuck-villagers.patch
+++ b/patches/server/0232-Lobotomize-stuck-villagers.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Lobotomize stuck villagers
diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java
-index e9032364c78514e7a0a2aa162ba564dc0598a3c4..f787aec8bfa291447b3bca297239f44a9fe342a7 100644
+index 5943b0c059b41ab84d7841a764ff2ace6e6ca89b..ca5504ba8a10a3ed384cb9f5a3c550466c2688f1 100644
--- a/src/main/java/net/minecraft/world/entity/npc/Villager.java
+++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java
@@ -141,6 +141,8 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
@@ -15,9 +15,9 @@ index e9032364c78514e7a0a2aa162ba564dc0598a3c4..f787aec8bfa291447b3bca297239f44a
+ private boolean isLobotomized = false; public boolean isLobotomized() { return this.isLobotomized; } // Purpur
+ private int notLobotomizedCount = 0; // Purpur
- public Villager(EntityType extends Villager> entityType, Level world) {
- this(entityType, world, VillagerType.PLAINS);
-@@ -201,6 +203,48 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
+ public long nextGolemPanic = -1; // Pufferfish
+
+@@ -203,6 +205,48 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
return this.level().purpurConfig.villagerAlwaysDropExp;
}
@@ -66,7 +66,7 @@ index e9032364c78514e7a0a2aa162ba564dc0598a3c4..f787aec8bfa291447b3bca297239f44a
@Override
public Brain getBrain() {
return (Brain) super.getBrain(); // CraftBukkit - decompile error
-@@ -295,11 +339,19 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
+@@ -298,11 +342,19 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
// Paper start - EAR 2
this.customServerAiStep(world, false);
}
@@ -84,9 +84,9 @@ index e9032364c78514e7a0a2aa162ba564dc0598a3c4..f787aec8bfa291447b3bca297239f44a
+ this.isLobotomized = false;
+ }
+ // Purpur end
- if (!inactive && (getRider() == null || !this.isControllable())) this.getBrain().tick(world, this); // Purpur
- gameprofilerfiller.pop();
- if (this.assignProfessionWhenSpawned) {
+ // Pufferfish start
+ if (!inactive && (getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) {
+ this.getBrain().tick(world, this); // Paper // Purpur
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java
index 8e895d6f84f7d84b219f2424909dd42e5f08dec4..53dcce0701d713c5dd097340a91b8be4806de4b8 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java
@@ -104,7 +104,7 @@ index 8e895d6f84f7d84b219f2424909dd42e5f08dec4..53dcce0701d713c5dd097340a91b8be4
+ // Purpur end
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index c49e93d6afd7fe6c7c8397154a9580ab023ed529..a1c3e7d57d716f785e9ba677c8f259ffe030a165 100644
+index 70258ae10d19f0aac01e3a550ec0d538f598d077..f23ac725c57006176564c97b30d348551dd9444f 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -2906,6 +2906,9 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0231-Option-for-villager-display-trade-item.patch b/patches/server/0233-Option-for-villager-display-trade-item.patch
similarity index 96%
rename from patches/server/0231-Option-for-villager-display-trade-item.patch
rename to patches/server/0233-Option-for-villager-display-trade-item.patch
index d4b820b7d..49e1c4a79 100644
--- a/patches/server/0231-Option-for-villager-display-trade-item.patch
+++ b/patches/server/0233-Option-for-villager-display-trade-item.patch
@@ -17,7 +17,7 @@ index 18dad0825616c4167a0a7555689ee64910a87e09..6945992491027d43eca4f1ca697ad45c
&& this.lookTime > 0
&& entity.getBrain().getMemory(MemoryModuleType.INTERACTION_TARGET).isPresent();
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index a1c3e7d57d716f785e9ba677c8f259ffe030a165..18874f9a5bc41d312059c553ae4d188c76b94936 100644
+index f23ac725c57006176564c97b30d348551dd9444f..fc357473f30258a54a2ee36dc0d63c2a52f2eaea 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -2909,6 +2909,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0232-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch b/patches/server/0234-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch
similarity index 95%
rename from patches/server/0232-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch
rename to patches/server/0234-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch
index 35918ac1a..ac1de5cf8 100644
--- a/patches/server/0232-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch
+++ b/patches/server/0234-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch
@@ -17,7 +17,7 @@ index 8c4532a250f8679d729a35c17e9b5bd339264450..2b8336bd88641cfb29e94c8f01abfbdb
}
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 19624a2e4f6cf83b9e43f338cb8fcafb2dfa562e..e414b6d00b67d902ac782753a3c1ad84228de3d1 100644
+index fc357473f30258a54a2ee36dc0d63c2a52f2eaea..f4584785ce8b16d3acc27c848eb79cc55bf08a18 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -1021,8 +1021,10 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0233-Config-for-mob-last-hurt-by-player-time.patch b/patches/server/0235-Config-for-mob-last-hurt-by-player-time.patch
similarity index 93%
rename from patches/server/0233-Config-for-mob-last-hurt-by-player-time.patch
rename to patches/server/0235-Config-for-mob-last-hurt-by-player-time.patch
index a2ef132f8..e9dbed438 100644
--- a/patches/server/0233-Config-for-mob-last-hurt-by-player-time.patch
+++ b/patches/server/0235-Config-for-mob-last-hurt-by-player-time.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Config for mob last hurt by player time
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-index 9790c3ad54ff28ccb85db224b799bbdb08a34ba5..199a2619de1b6754edf89ffe0c63c0e5104e3055 100644
+index 19cc0ba32472384bf10662d41fecf23ebfc9876c..71f735d2c91d08ab652ddc8f3fe37bbb3b425ba4 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-@@ -1601,13 +1601,13 @@ public abstract class LivingEntity extends Entity implements Attackable {
+@@ -1614,13 +1614,13 @@ public abstract class LivingEntity extends Entity implements Attackable {
if (entity1 instanceof net.minecraft.world.entity.player.Player) {
net.minecraft.world.entity.player.Player entityhuman = (net.minecraft.world.entity.player.Player) entity1;
@@ -38,7 +38,7 @@ index bf84c9664ca6d6c3d862e592c39bcc59374b63fe..051ffc663317fe5a4fafe0750c89fafd
// Paper end
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index e414b6d00b67d902ac782753a3c1ad84228de3d1..5e8476fd89a1cf12ec5baa94c41fda8c494db694 100644
+index f4584785ce8b16d3acc27c848eb79cc55bf08a18..74373b7875906bd79595ca02b86add222d9645e0 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -144,6 +144,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0234-Anvil-repair-damage-options.patch b/patches/server/0236-Anvil-repair-damage-options.patch
similarity index 98%
rename from patches/server/0234-Anvil-repair-damage-options.patch
rename to patches/server/0236-Anvil-repair-damage-options.patch
index d8cfcd68b..c6788bfe3 100644
--- a/patches/server/0234-Anvil-repair-damage-options.patch
+++ b/patches/server/0236-Anvil-repair-damage-options.patch
@@ -63,7 +63,7 @@ index 50c907c962f936d2035bb7550750cdbd220b29c2..f9a2d2d4f798efa0d691996ec5ff7fe0
protected InteractionResult useWithoutItem(BlockState state, Level world, BlockPos pos, Player player, BlockHitResult hit) {
if (!world.isClientSide) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 5e8476fd89a1cf12ec5baa94c41fda8c494db694..68585a9a1a1c62e7e6b075c6b12ca0397d43eb5a 100644
+index 74373b7875906bd79595ca02b86add222d9645e0..f34de537ab3bd3727572313f7e8004703c73f641 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -788,9 +788,13 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0235-Option-to-disable-turtle-egg-trampling-with-feather-.patch b/patches/server/0237-Option-to-disable-turtle-egg-trampling-with-feather-.patch
similarity index 96%
rename from patches/server/0235-Option-to-disable-turtle-egg-trampling-with-feather-.patch
rename to patches/server/0237-Option-to-disable-turtle-egg-trampling-with-feather-.patch
index d7aca65c2..4827bbbd0 100644
--- a/patches/server/0235-Option-to-disable-turtle-egg-trampling-with-feather-.patch
+++ b/patches/server/0237-Option-to-disable-turtle-egg-trampling-with-feather-.patch
@@ -24,7 +24,7 @@ index 72c89f14977844e1460e9a914f39e896c9d498fd..f1dfb23160ff70e0da4dd2af2d83e879
return world.purpurConfig.turtleEggsBypassMobGriefing ^ world.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING);
// Purpur end
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index def9267df2cf09e2f2798581e7bb98ee358f7f16..a81fdeb38abaf03eb7231ed2ba4e8b693e378a4f 100644
+index f34de537ab3bd3727572313f7e8004703c73f641..a50e634a83234a3396a5e1471706f77dcfbb5d7c 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -1049,12 +1049,14 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0236-Add-toggle-for-enchant-level-clamping.patch b/patches/server/0238-Add-toggle-for-enchant-level-clamping.patch
similarity index 100%
rename from patches/server/0236-Add-toggle-for-enchant-level-clamping.patch
rename to patches/server/0238-Add-toggle-for-enchant-level-clamping.patch
diff --git a/patches/server/0237-Skip-junit-tests-for-purpur-commands.patch b/patches/server/0239-Skip-junit-tests-for-purpur-commands.patch
similarity index 100%
rename from patches/server/0237-Skip-junit-tests-for-purpur-commands.patch
rename to patches/server/0239-Skip-junit-tests-for-purpur-commands.patch
diff --git a/patches/server/0238-Implement-configurable-search-radius-for-villagers-t.patch b/patches/server/0240-Implement-configurable-search-radius-for-villagers-t.patch
similarity index 91%
rename from patches/server/0238-Implement-configurable-search-radius-for-villagers-t.patch
rename to patches/server/0240-Implement-configurable-search-radius-for-villagers-t.patch
index 3d76570dd..ff77f240d 100644
--- a/patches/server/0238-Implement-configurable-search-radius-for-villagers-t.patch
+++ b/patches/server/0240-Implement-configurable-search-radius-for-villagers-t.patch
@@ -6,10 +6,10 @@ Subject: [PATCH] Implement configurable search radius for villagers to spawn
diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java
-index f787aec8bfa291447b3bca297239f44a9fe342a7..38594d3f520b4d75db441cfdde121ac65d2295cc 100644
+index ca5504ba8a10a3ed384cb9f5a3c550466c2688f1..0ee456972923e90905732ffc5d77bb027cf6c0fc 100644
--- a/src/main/java/net/minecraft/world/entity/npc/Villager.java
+++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java
-@@ -1066,6 +1066,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
+@@ -1073,6 +1073,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
}
public void spawnGolemIfNeeded(ServerLevel world, long time, int requiredCount) {
@@ -18,7 +18,7 @@ index f787aec8bfa291447b3bca297239f44a9fe342a7..38594d3f520b4d75db441cfdde121ac6
AABB axisalignedbb = this.getBoundingBox().inflate(10.0D, 10.0D, 10.0D);
List list = world.getEntitiesOfClass(Villager.class, axisalignedbb);
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index e1fb914b6569d3061321cfe9a42b873b9aee247c..c57b4ed2f136c290ee5a323bd343ddc04bd7e60a 100644
+index a50e634a83234a3396a5e1471706f77dcfbb5d7c..011ac10466da8720800f2764a316a9cc9bb50fd9 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -2920,6 +2920,8 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0239-Stonecutter-damage.patch b/patches/server/0241-Stonecutter-damage.patch
similarity index 97%
rename from patches/server/0239-Stonecutter-damage.patch
rename to patches/server/0241-Stonecutter-damage.patch
index f0b810f67..bb9114b57 100644
--- a/patches/server/0239-Stonecutter-damage.patch
+++ b/patches/server/0241-Stonecutter-damage.patch
@@ -115,7 +115,7 @@ index f6291ff377b38cb84692a9fd564b4b1a9780cf4f..224896124706764412033c8726c822e1
} else if (blockState.is(Blocks.HONEY_BLOCK)) {
return PathType.STICKY_HONEY;
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-index 26d7e7ace4491c444c31dc11359427259c04f93c..1f22e7cf584bf7361f3ca078b9935a096d1acba6 100644
+index e3013916952012e69a23ac2efe9fc5e31a2b3d87..763d06265c7d0000e4c641c3aaba785bb0efb23e 100644
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
@@ -1140,7 +1140,7 @@ public class CraftEventFactory {
@@ -143,7 +143,7 @@ index 2090ecfebe8bc164239d198c1c50b134c7bc60c5..dba6a69891f50ba057187a8138ff227a
public static boolean advancementOnlyBroadcastToAffectedPlayer = false;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 3bfdb3c2c1f67a1281cfca44eb1eae6c888d8e92..52cb5982fc9550c5aea98b6926fbefbe32051b3c 100644
+index 011ac10466da8720800f2764a316a9cc9bb50fd9..30b11ecbf75e5a4752d6d117f738828273b63b2f 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -1044,6 +1044,11 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0240-Configurable-damage-settings-for-magma-blocks.patch b/patches/server/0242-Configurable-damage-settings-for-magma-blocks.patch
similarity index 95%
rename from patches/server/0240-Configurable-damage-settings-for-magma-blocks.patch
rename to patches/server/0242-Configurable-damage-settings-for-magma-blocks.patch
index 1ce277c74..f6ee0cdc9 100644
--- a/patches/server/0240-Configurable-damage-settings-for-magma-blocks.patch
+++ b/patches/server/0242-Configurable-damage-settings-for-magma-blocks.patch
@@ -18,7 +18,7 @@ index 7ffdcf18bf4bd8b5325c76945b2d80ca3fe52958..dfa931316fde0b2e80068a0edd1427ff
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 52cb5982fc9550c5aea98b6926fbefbe32051b3c..21898260e674dc1508a9c0689479be36826834b6 100644
+index 30b11ecbf75e5a4752d6d117f738828273b63b2f..8893ce54385e8b6d9de6b87ebf203efde140fff4 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -985,6 +985,11 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0241-Add-config-for-snow-on-blue-ice.patch b/patches/server/0243-Add-config-for-snow-on-blue-ice.patch
similarity index 95%
rename from patches/server/0241-Add-config-for-snow-on-blue-ice.patch
rename to patches/server/0243-Add-config-for-snow-on-blue-ice.patch
index a5bfa21c1..31a57db21 100644
--- a/patches/server/0241-Add-config-for-snow-on-blue-ice.patch
+++ b/patches/server/0243-Add-config-for-snow-on-blue-ice.patch
@@ -22,7 +22,7 @@ index 9908a0b5b1fec5f9de518a733f7abbbff7e1a9f9..0ad444cf7f798f63e9140a42c5d5d8ca
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 21898260e674dc1508a9c0689479be36826834b6..7ac4f4f07fc6a7421706526d940ed22c28c2cf8d 100644
+index 8893ce54385e8b6d9de6b87ebf203efde140fff4..4a6646711c1aa32a7123396126933d74d2cb5173 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -966,9 +966,11 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0242-Skeletons-eat-wither-roses.patch b/patches/server/0244-Skeletons-eat-wither-roses.patch
similarity index 98%
rename from patches/server/0242-Skeletons-eat-wither-roses.patch
rename to patches/server/0244-Skeletons-eat-wither-roses.patch
index 36f06db57..d061e8efc 100644
--- a/patches/server/0242-Skeletons-eat-wither-roses.patch
+++ b/patches/server/0244-Skeletons-eat-wither-roses.patch
@@ -90,7 +90,7 @@ index 61b5f27c1125ed1b183dd3b86b44a10b7098f91c..3cbe4c1ed514936a00e0181cb1e647fb
+ // Purpur end
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index ec4ceb85458391697d348030ea7775f2cfa7caeb..61420c97c19eb7b72cb80d2b3c5170831f9c919a 100644
+index 4a6646711c1aa32a7123396126933d74d2cb5173..647852226244c862735c113e16fcf4410d39698d 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -2580,6 +2580,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0243-Enchantment-Table-Persists-Lapis.patch b/patches/server/0245-Enchantment-Table-Persists-Lapis.patch
similarity index 98%
rename from patches/server/0243-Enchantment-Table-Persists-Lapis.patch
rename to patches/server/0245-Enchantment-Table-Persists-Lapis.patch
index 4b8b22884..7cc5ca196 100644
--- a/patches/server/0243-Enchantment-Table-Persists-Lapis.patch
+++ b/patches/server/0245-Enchantment-Table-Persists-Lapis.patch
@@ -136,7 +136,7 @@ index 39aac959775afeaeea211f21d498cb0ddf0a3fcb..6349a342c023f378af431a73a62fb017
+ // Purpur
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 61420c97c19eb7b72cb80d2b3c5170831f9c919a..7cee836cbc33fcc604fbb864d38315be2e56ceb8 100644
+index 647852226244c862735c113e16fcf4410d39698d..37dc3ba688e546f3feb64927134b6ef926929a5f 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -1556,6 +1556,11 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0244-Option-to-disable-kick-for-out-of-order-chat.patch b/patches/server/0246-Option-to-disable-kick-for-out-of-order-chat.patch
similarity index 100%
rename from patches/server/0244-Option-to-disable-kick-for-out-of-order-chat.patch
rename to patches/server/0246-Option-to-disable-kick-for-out-of-order-chat.patch
diff --git a/patches/server/0245-Config-for-sculk-shrieker-can_summon-state.patch b/patches/server/0247-Config-for-sculk-shrieker-can_summon-state.patch
similarity index 95%
rename from patches/server/0245-Config-for-sculk-shrieker-can_summon-state.patch
rename to patches/server/0247-Config-for-sculk-shrieker-can_summon-state.patch
index 4e201b760..cadf9a2bb 100644
--- a/patches/server/0245-Config-for-sculk-shrieker-can_summon-state.patch
+++ b/patches/server/0247-Config-for-sculk-shrieker-can_summon-state.patch
@@ -18,7 +18,7 @@ index 0e05bfef55dcacb50766bba8328ffeb8a5394c31..e00fcea07e74de647c26ff9eb32bc682
@Override
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 9b777b356044241951fed1990e166735100ff1fb..92d6494169e34d5d7c29dd60835c647ce0dd36df 100644
+index 37dc3ba688e546f3feb64927134b6ef926929a5f..1b55aacef555565308b9182a7664bed4d98ac18c 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -1023,6 +1023,11 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0246-Config-to-not-let-coral-die.patch b/patches/server/0248-Config-to-not-let-coral-die.patch
similarity index 96%
rename from patches/server/0246-Config-to-not-let-coral-die.patch
rename to patches/server/0248-Config-to-not-let-coral-die.patch
index 4145370bc..0231549f0 100644
--- a/patches/server/0246-Config-to-not-let-coral-die.patch
+++ b/patches/server/0248-Config-to-not-let-coral-die.patch
@@ -29,7 +29,7 @@ index a59b23f4062fa896836dec72cbd5097411774ad1..c526ea13a726624adaa654f09ff84c89
int i = aenumdirection.length;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 92d6494169e34d5d7c29dd60835c647ce0dd36df..26b8f6f80e06e5c71c41c438e96de84e4cd59024 100644
+index 1b55aacef555565308b9182a7664bed4d98ac18c..e13d1e6d15cdfc58f4655ff288d9393e4c134a51 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -872,6 +872,11 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0247-Add-local-difficulty-api.patch b/patches/server/0249-Add-local-difficulty-api.patch
similarity index 100%
rename from patches/server/0247-Add-local-difficulty-api.patch
rename to patches/server/0249-Add-local-difficulty-api.patch
diff --git a/patches/server/0248-Add-toggle-for-RNG-manipulation.patch b/patches/server/0250-Add-toggle-for-RNG-manipulation.patch
similarity index 95%
rename from patches/server/0248-Add-toggle-for-RNG-manipulation.patch
rename to patches/server/0250-Add-toggle-for-RNG-manipulation.patch
index a71330b30..df00ac4b4 100644
--- a/patches/server/0248-Add-toggle-for-RNG-manipulation.patch
+++ b/patches/server/0250-Add-toggle-for-RNG-manipulation.patch
@@ -7,10 +7,10 @@ Paper patches RNG maniplulation by using a shared (and locked) random source.
This comes with a performance gain, but technical players may prefer the ability to manipulate RNG.
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
-index f271660fb1cdace49ec050fb1ea55e3791336eba..9d81ae0320426f20d7078a3d1fe8b3ff31ccfebc 100644
+index c1ba5eab15bb4b7599c1e5e23b90dfb361af93b6..2b612bfe6da7cc6d6447c60aa6f4b72b2616b72d 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
-@@ -599,7 +599,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
+@@ -602,7 +602,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
this.bb = Entity.INITIAL_AABB;
this.stuckSpeedMultiplier = Vec3.ZERO;
this.nextStep = 1.0F;
diff --git a/patches/server/0249-Add-more-logger-output-for-invalid-movement-kicks.patch b/patches/server/0251-Add-more-logger-output-for-invalid-movement-kicks.patch
similarity index 94%
rename from patches/server/0249-Add-more-logger-output-for-invalid-movement-kicks.patch
rename to patches/server/0251-Add-more-logger-output-for-invalid-movement-kicks.patch
index c4b0a4622..eeec00f5d 100644
--- a/patches/server/0249-Add-more-logger-output-for-invalid-movement-kicks.patch
+++ b/patches/server/0251-Add-more-logger-output-for-invalid-movement-kicks.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Add more logger output for invalid movement kicks
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-index 35b9951554a41213003badfa38e6db7825097055..50bc64000f24aa2ae0df2ce7fc77f27d760b8764 100644
+index 1e1b42f60679c8b8b27b3255feda4c6cf77d5536..9ae16e24013ea5664d4ea6d52ed7dd188404890f 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -761,6 +761,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
@@ -16,7 +16,7 @@ index 35b9951554a41213003badfa38e6db7825097055..50bc64000f24aa2ae0df2ce7fc77f27d
this.disconnect((Component) Component.translatable("multiplayer.disconnect.invalid_player_movement"), org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PLAYER_MOVEMENT); // Paper - kick event cause
return;
}
-@@ -1371,7 +1372,15 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
+@@ -1372,7 +1373,15 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
@Override
public void handleMovePlayer(ServerboundMovePlayerPacket packet) {
PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel());
diff --git a/patches/server/0250-Add-Bee-API.patch b/patches/server/0252-Add-Bee-API.patch
similarity index 100%
rename from patches/server/0250-Add-Bee-API.patch
rename to patches/server/0252-Add-Bee-API.patch
diff --git a/patches/server/0251-Debug-Marker-API.patch b/patches/server/0253-Debug-Marker-API.patch
similarity index 98%
rename from patches/server/0251-Debug-Marker-API.patch
rename to patches/server/0253-Debug-Marker-API.patch
index 22bb205fe..8a2db1a13 100644
--- a/patches/server/0251-Debug-Marker-API.patch
+++ b/patches/server/0253-Debug-Marker-API.patch
@@ -99,7 +99,7 @@ index 10413e550895f21cac43f5a15eaf51e51313b06f..bbd2da3a646421d1b05e7c8154a7aa7f
@Override
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index 3d824ed7b53b30493d0fc1714fc1b247f4a9ad9c..8369c1b9a7330ae3649a4ca644868c68d251ad10 100644
+index 7be5b26b3d9e4d38838ecca8f65f8671c3c17ed2..674df8d09988b2509adf93d75b2b37009a709410 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -3629,5 +3629,43 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
diff --git a/patches/server/0252-mob-spawning-option-to-ignore-creative-players.patch b/patches/server/0254-mob-spawning-option-to-ignore-creative-players.patch
similarity index 92%
rename from patches/server/0252-mob-spawning-option-to-ignore-creative-players.patch
rename to patches/server/0254-mob-spawning-option-to-ignore-creative-players.patch
index aa743a75b..e818a14f2 100644
--- a/patches/server/0252-mob-spawning-option-to-ignore-creative-players.patch
+++ b/patches/server/0254-mob-spawning-option-to-ignore-creative-players.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] mob spawning option to ignore creative players
diff --git a/src/main/java/net/minecraft/world/level/NaturalSpawner.java b/src/main/java/net/minecraft/world/level/NaturalSpawner.java
-index 5297798c2be1ba85569c2b92ed221956bf75477a..e9e919fdcd61cb59e8b02a0ac5b33c8a1c7ca240 100644
+index c1b76a1ebc1eea7ab70cf61d8175a31794dd122a..dc15c15951e4ca30b8341d24f813259a77f41c77 100644
--- a/src/main/java/net/minecraft/world/level/NaturalSpawner.java
+++ b/src/main/java/net/minecraft/world/level/NaturalSpawner.java
@@ -280,7 +280,7 @@ public final class NaturalSpawner {
@@ -18,7 +18,7 @@ index 5297798c2be1ba85569c2b92ed221956bf75477a..e9e919fdcd61cb59e8b02a0ac5b33c8a
if (entityhuman != null) {
double d2 = entityhuman.distanceToSqr(d0, (double) i, d1);
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index aa68b09686aec0ea58e04835baa33ddc7a5b5bad..92b5eecbb2474f5dbb4a9eca55bde27abced5680 100644
+index 47b29febec2af1f3a8ef7b9afc6a4982df08eb47..e94c9fb93191d880b7cbd1b293a8da5c1074aba4 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -378,6 +378,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0253-Add-skeleton-bow-accuracy-option.patch b/patches/server/0255-Add-skeleton-bow-accuracy-option.patch
similarity index 97%
rename from patches/server/0253-Add-skeleton-bow-accuracy-option.patch
rename to patches/server/0255-Add-skeleton-bow-accuracy-option.patch
index 8ec4bac6d..bc59e9a17 100644
--- a/patches/server/0253-Add-skeleton-bow-accuracy-option.patch
+++ b/patches/server/0255-Add-skeleton-bow-accuracy-option.patch
@@ -18,7 +18,7 @@ index 2cadbc0d56908ca978e1735eff07f5e634548606..39d02cf0e31832e30c4f034b0b5385e3
// CraftBukkit end
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 1a9fcd289a68c7f3d7d858eade65cc414880cd8d..f28ad02b026e25a560ed24f236627113a55066c1 100644
+index e94c9fb93191d880b7cbd1b293a8da5c1074aba4..b38c114e063c3f49cdf19f9c489ee92bcb7006ed 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -2600,6 +2600,8 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0254-Add-death-screen-API.patch b/patches/server/0256-Add-death-screen-API.patch
similarity index 92%
rename from patches/server/0254-Add-death-screen-API.patch
rename to patches/server/0256-Add-death-screen-API.patch
index 9c39bba21..22e53757c 100644
--- a/patches/server/0254-Add-death-screen-API.patch
+++ b/patches/server/0256-Add-death-screen-API.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Add death screen API
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index 8369c1b9a7330ae3649a4ca644868c68d251ad10..68afb2464069f1ee8220df6d4e474be45d0ce8ef 100644
+index 674df8d09988b2509adf93d75b2b37009a709410..02339cdd1e8cd6496cb466eb4b1c7ce2d9b6f064 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -3667,5 +3667,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
diff --git a/patches/unapplied-server/0260-Make-pufferfish-config-relocatable.patch b/patches/server/0257-Make-pufferfish-config-relocatable.patch
similarity index 85%
rename from patches/unapplied-server/0260-Make-pufferfish-config-relocatable.patch
rename to patches/server/0257-Make-pufferfish-config-relocatable.patch
index 6df9e6105..4b22dded7 100644
--- a/patches/unapplied-server/0260-Make-pufferfish-config-relocatable.patch
+++ b/patches/server/0257-Make-pufferfish-config-relocatable.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Make pufferfish config relocatable
diff --git a/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java
-index bcaf4932c82b0e6702450e2feb09828edf58cbf0..8f1645573780d12bf29d441d31eab1b76cd9e70f 100644
+index 3175d421e39bf1315cf699f2df7c63a6535bb5b9..411c81a88b8a008b2aaf0ca62fb7ffa1dd9e32a4 100644
--- a/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java
+++ b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java
-@@ -28,6 +28,7 @@ public class PufferfishConfig {
+@@ -25,6 +25,7 @@ public class PufferfishConfig {
private static final YamlFile config = new YamlFile();
private static int updates = 0;
@@ -16,7 +16,7 @@ index bcaf4932c82b0e6702450e2feb09828edf58cbf0..8f1645573780d12bf29d441d31eab1b7
private static ConfigurationSection convertToBukkit(org.simpleyaml.configuration.ConfigurationSection section) {
ConfigurationSection newSection = new MemoryConfiguration();
-@@ -50,7 +51,7 @@ public class PufferfishConfig {
+@@ -47,7 +48,7 @@ public class PufferfishConfig {
}
public static void load() throws IOException {
@@ -26,10 +26,10 @@ index bcaf4932c82b0e6702450e2feb09828edf58cbf0..8f1645573780d12bf29d441d31eab1b7
if (configFile.exists()) {
try {
diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
-index 430418990e218bca55fd7c817086bf7a6866fa1a..4bd75f2a4f932fc63efd4e4d884aa834184250fa 100644
+index 8eb51119d60979f85bc98a9413d318522c732693..08a81a45371fd273fb35956bef3bb7947bb4c5b6 100644
--- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
+++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
-@@ -248,6 +248,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
+@@ -245,6 +245,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
this.server.spark.registerCommandBeforePlugins(this.server); // Paper - spark
com.destroystokyo.paper.Metrics.PaperMetrics.startMetrics(); // Paper - start metrics
com.destroystokyo.paper.VersionHistoryManager.INSTANCE.getClass(); // Paper - load version history now
@@ -38,7 +38,7 @@ index 430418990e218bca55fd7c817086bf7a6866fa1a..4bd75f2a4f932fc63efd4e4d884aa834
gg.pufferfish.pufferfish.PufferfishCommand.init(); // Pufferfish
diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java
-index 316c5e1460ccf3386c4c8623eabb7f087df8c4b9..e35a562eec4b65335723c50180fe1471f858ae60 100644
+index 5bce26e9671aab15ac4bac9a0d00b5184bef74ea..430407b0cf06ba337c59cd576c7e40a8e5fe8229 100644
--- a/src/main/java/org/bukkit/craftbukkit/Main.java
+++ b/src/main/java/org/bukkit/craftbukkit/Main.java
@@ -182,6 +182,12 @@ public class Main {
diff --git a/patches/server/0255-Implement-ram-and-rambar-commands.patch b/patches/server/0258-Implement-ram-and-rambar-commands.patch
similarity index 99%
rename from patches/server/0255-Implement-ram-and-rambar-commands.patch
rename to patches/server/0258-Implement-ram-and-rambar-commands.patch
index 514fca4fc..bd842583a 100644
--- a/patches/server/0255-Implement-ram-and-rambar-commands.patch
+++ b/patches/server/0258-Implement-ram-and-rambar-commands.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Implement ram and rambar commands
diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java
-index d8ee4422a13c7f09b84e9bbe8b57f0c139caac32..96449b0d153ce4124403368e406354fb2412e353 100644
+index eedb3707523b47ab79db326f6d7382cca60c5393..db455a0fc7e1fc004215b718ff470bd2f74eae1b 100644
--- a/src/main/java/net/minecraft/commands/Commands.java
+++ b/src/main/java/net/minecraft/commands/Commands.java
@@ -261,6 +261,8 @@ public class Commands {
diff --git a/patches/server/0256-Configurable-block-blast-resistance.patch b/patches/server/0259-Configurable-block-blast-resistance.patch
similarity index 100%
rename from patches/server/0256-Configurable-block-blast-resistance.patch
rename to patches/server/0259-Configurable-block-blast-resistance.patch
diff --git a/patches/server/0257-Configurable-block-fall-damage-modifiers.patch b/patches/server/0260-Configurable-block-fall-damage-modifiers.patch
similarity index 100%
rename from patches/server/0257-Configurable-block-fall-damage-modifiers.patch
rename to patches/server/0260-Configurable-block-fall-damage-modifiers.patch
diff --git a/patches/server/0258-Language-API.patch b/patches/server/0261-Language-API.patch
similarity index 100%
rename from patches/server/0258-Language-API.patch
rename to patches/server/0261-Language-API.patch
diff --git a/patches/server/0259-Milk-Keeps-Beneficial-Effects.patch b/patches/server/0262-Milk-Keeps-Beneficial-Effects.patch
similarity index 91%
rename from patches/server/0259-Milk-Keeps-Beneficial-Effects.patch
rename to patches/server/0262-Milk-Keeps-Beneficial-Effects.patch
index 1776f4b91..854e0a880 100644
--- a/patches/server/0259-Milk-Keeps-Beneficial-Effects.patch
+++ b/patches/server/0262-Milk-Keeps-Beneficial-Effects.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Milk Keeps Beneficial Effects
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-index 34f3ae000a794da60bdfe3072071143b3fdfd971..1e312afb4abcc9581c2a6097532a8dfbe67c019f 100644
+index 71f735d2c91d08ab652ddc8f3fe37bbb3b425ba4..f4604e543a980d6aeb485252da5a4e755aa12bfa 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-@@ -1149,6 +1149,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
+@@ -1162,6 +1162,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
while (iterator.hasNext()) {
MobEffectInstance effect = iterator.next();
@@ -17,7 +17,7 @@ index 34f3ae000a794da60bdfe3072071143b3fdfd971..1e312afb4abcc9581c2a6097532a8dfb
if (event.isCancelled()) {
continue;
diff --git a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java
-index a8cbf8cc21b0835a040901ee34f240cd327ad073..b6a866438b582adabe8395e0d4167d2187042e65 100644
+index 37ba31724fb3630c9c7d8040f47be36e037d4e48..42c91e52060fad4a7a598f9e9ef88fd0e0ff8475 100644
--- a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java
+++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java
@@ -123,7 +123,7 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill
@@ -30,7 +30,7 @@ index a8cbf8cc21b0835a040901ee34f240cd327ad073..b6a866438b582adabe8395e0d4167d21
this.goalSelector.addGoal(1, new TradeWithPlayerGoal(this));
this.goalSelector.addGoal(1, new AvoidEntityGoal<>(this, Zombie.class, 8.0F, 0.5D, 0.5D));
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 2ef8e8de90e2e0ebc92f060264c9353906763516..11b79fae9ea84d6e25b4f69aa428faa75c4f9aac 100644
+index b38c114e063c3f49cdf19f9c489ee92bcb7006ed..446cdd50d4b5d5ed2e58f4bc4fbb13810399754d 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -145,6 +145,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0260-MC-121706-Fix-mobs-not-looking-up-and-down-when-stra.patch b/patches/server/0263-MC-121706-Fix-mobs-not-looking-up-and-down-when-stra.patch
similarity index 100%
rename from patches/server/0260-MC-121706-Fix-mobs-not-looking-up-and-down-when-stra.patch
rename to patches/server/0263-MC-121706-Fix-mobs-not-looking-up-and-down-when-stra.patch
diff --git a/patches/server/0261-Add-log-suppression-for-LibraryLoader.patch b/patches/server/0264-Add-log-suppression-for-LibraryLoader.patch
similarity index 100%
rename from patches/server/0261-Add-log-suppression-for-LibraryLoader.patch
rename to patches/server/0264-Add-log-suppression-for-LibraryLoader.patch
diff --git a/patches/server/0262-Add-an-option-to-fix-MC-3304-projectile-looting.patch b/patches/server/0265-Add-an-option-to-fix-MC-3304-projectile-looting.patch
similarity index 96%
rename from patches/server/0262-Add-an-option-to-fix-MC-3304-projectile-looting.patch
rename to patches/server/0265-Add-an-option-to-fix-MC-3304-projectile-looting.patch
index 8a7fa6705..62b9e1c03 100644
--- a/patches/server/0262-Add-an-option-to-fix-MC-3304-projectile-looting.patch
+++ b/patches/server/0265-Add-an-option-to-fix-MC-3304-projectile-looting.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Add an option to fix MC-3304 (projectile looting)
diff --git a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java
-index 75d65b795a7802c0c5b5bd4a6ed429209f987452..f91519f73e766cf891351a95d76abb416da2f957 100644
+index b7dccbf33feb978b3937522bb0d62d154699ae9f..d8b69ed256c18e264cffc0097936029e5bd33dd8 100644
--- a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java
+++ b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java
@@ -80,6 +80,7 @@ public abstract class AbstractArrow extends Projectile {
@@ -43,7 +43,7 @@ index 78ba170a83f8c026bd110eae494c52577182ed61..c2ae50872cead7202246b9cce4db6e0a
}
diff --git a/src/main/java/net/minecraft/world/item/TridentItem.java b/src/main/java/net/minecraft/world/item/TridentItem.java
-index 4e863ae1f94291b391a142e04e0c41e83417ab70..d7eb680b977656556a618431b1511c1050f6db5e 100644
+index 9134c4aada4e0cd7b51810a59405c07d433f7c78..23e04d0d68ffa0e07ab295e7121f8a4963f4914a 100644
--- a/src/main/java/net/minecraft/world/item/TridentItem.java
+++ b/src/main/java/net/minecraft/world/item/TridentItem.java
@@ -100,6 +100,9 @@ public class TridentItem extends Item implements ProjectileItem {
diff --git a/patches/server/0263-Add-option-to-allow-creeper-to-encircle-target-when-.patch b/patches/server/0266-Add-option-to-allow-creeper-to-encircle-target-when-.patch
similarity index 96%
rename from patches/server/0263-Add-option-to-allow-creeper-to-encircle-target-when-.patch
rename to patches/server/0266-Add-option-to-allow-creeper-to-encircle-target-when-.patch
index 578c66492..e9f26f096 100644
--- a/patches/server/0263-Add-option-to-allow-creeper-to-encircle-target-when-.patch
+++ b/patches/server/0266-Add-option-to-allow-creeper-to-encircle-target-when-.patch
@@ -24,7 +24,7 @@ index 137ec75ee803789deb7b1ca93dd9369c9af362b9..ca95d25af3e9a0536868b0c7fd8e7d2f
}
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 913efd04720e7321fafe75c0f9eceed03e91044e..d617a76d673370286c5a55e3a02f2ed4f5fdc9c3 100644
+index 446cdd50d4b5d5ed2e58f4bc4fbb13810399754d..342d5111bd3d4b434071f7499467a860a278ee08 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -1439,6 +1439,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0264-Fire-Immunity-API.patch b/patches/server/0267-Fire-Immunity-API.patch
similarity index 84%
rename from patches/server/0264-Fire-Immunity-API.patch
rename to patches/server/0267-Fire-Immunity-API.patch
index 84d23d2b5..cff36eb81 100644
--- a/patches/server/0264-Fire-Immunity-API.patch
+++ b/patches/server/0267-Fire-Immunity-API.patch
@@ -5,18 +5,18 @@ Subject: [PATCH] Fire Immunity API
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
-index 9d81ae0320426f20d7078a3d1fe8b3ff31ccfebc..c377339088c536255e319ee058e30d68e00c30f5 100644
+index 2b612bfe6da7cc6d6447c60aa6f4b72b2616b72d..193c888d0ff2a8c2ef1a7fc8fd8af5d26e701092 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
-@@ -390,6 +390,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
- public boolean freezeLocked = false; // Paper - Freeze Tick Lock API
- public boolean fixedPose = false; // Paper - Expand Pose API
- private final int despawnTime; // Paper - entity despawn time limit
+@@ -393,6 +393,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
+ public boolean activatedPriorityReset = false; // Pufferfish - DAB
+ public int activatedPriority = gg.pufferfish.pufferfish.PufferfishConfig.maximumActivationPrio; // Pufferfish - DAB (golf score)
+ public final BlockPos.MutableBlockPos cachedBlockPos = new BlockPos.MutableBlockPos(); // Pufferfish - reduce entity allocations
+ public @Nullable Boolean immuneToFire = null; // Purpur - Fire immune API
public void setOrigin(@javax.annotation.Nonnull Location location) {
this.origin = location.toVector();
-@@ -1957,7 +1958,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
+@@ -1960,7 +1961,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
}
public boolean fireImmune() {
@@ -25,7 +25,7 @@ index 9d81ae0320426f20d7078a3d1fe8b3ff31ccfebc..c377339088c536255e319ee058e30d68
}
public boolean causeFallDamage(float fallDistance, float damageMultiplier, DamageSource damageSource) {
-@@ -2712,6 +2713,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
+@@ -2715,6 +2716,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
nbttagcompound.putBoolean("Paper.FreezeLock", true);
}
// Paper end
@@ -37,7 +37,7 @@ index 9d81ae0320426f20d7078a3d1fe8b3ff31ccfebc..c377339088c536255e319ee058e30d68
return nbttagcompound;
} catch (Throwable throwable) {
CrashReport crashreport = CrashReport.forThrowable(throwable, "Saving entity NBT");
-@@ -2860,6 +2866,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
+@@ -2863,6 +2869,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
freezeLocked = nbt.getBoolean("Paper.FreezeLock");
}
// Paper end
diff --git a/patches/server/0265-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch b/patches/server/0268-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch
similarity index 93%
rename from patches/server/0265-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch
rename to patches/server/0268-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch
index 32f6094a1..0cee4abec 100644
--- a/patches/server/0265-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch
+++ b/patches/server/0268-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add option to teleport to spawn on nether ceiling damage
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
-index c377339088c536255e319ee058e30d68e00c30f5..31326cc83130e4226aee443be880c00c2adc7ab0 100644
+index 193c888d0ff2a8c2ef1a7fc8fd8af5d26e701092..aa171a1afb9800e6ec84f6b4f1b28e44177752f7 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
-@@ -997,6 +997,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
+@@ -1000,6 +1000,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
&& this.level.paperConfig().environment.netherCeilingVoidDamageHeight.test(v -> this.getY() >= v)
&& (!(this instanceof Player player) || !player.getAbilities().invulnerable))) {
// Paper end - Configurable nether ceiling damage
diff --git a/patches/server/0266-Added-got-ram-event.patch b/patches/server/0269-Added-got-ram-event.patch
similarity index 86%
rename from patches/server/0266-Added-got-ram-event.patch
rename to patches/server/0269-Added-got-ram-event.patch
index c5bdff62e..df9927329 100644
--- a/patches/server/0266-Added-got-ram-event.patch
+++ b/patches/server/0269-Added-got-ram-event.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Added got ram event
diff --git a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
-index 7f196e8a8b5094375c9b13fe6e7311a3450dbb5f..0a7042924aca35722fba4b46086a34c7e3ec04ad 100644
+index 752f44048ed4f61ce8e2cce67d0680b7837cdd29..d508cb2a61866c8fd7f381f8deb558ed86f7c845 100644
--- a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
+++ b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
-@@ -432,6 +432,7 @@ public class Goat extends Animal {
+@@ -433,6 +433,7 @@ public class Goat extends Animal {
// Paper start - Goat ram API
public void ram(net.minecraft.world.entity.LivingEntity entity) {
diff --git a/patches/server/0267-Log-skipped-entity-s-position.patch b/patches/server/0270-Log-skipped-entity-s-position.patch
similarity index 86%
rename from patches/server/0267-Log-skipped-entity-s-position.patch
rename to patches/server/0270-Log-skipped-entity-s-position.patch
index 70ff6ce7b..a18c62cbf 100644
--- a/patches/server/0267-Log-skipped-entity-s-position.patch
+++ b/patches/server/0270-Log-skipped-entity-s-position.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Log skipped entity's position
diff --git a/src/main/java/net/minecraft/world/entity/EntityType.java b/src/main/java/net/minecraft/world/entity/EntityType.java
-index 5796f9bdde43d5b681ee2aaa7bc47076114af321..c1a870fd22b193388513aad0ac4f3ce0ad7c8195 100644
+index 40ae00146381a9a1ec70ffae5c683b46c72c56ff..1d50b03246d114c6583815205eeacb7ac8549aec 100644
--- a/src/main/java/net/minecraft/world/entity/EntityType.java
+++ b/src/main/java/net/minecraft/world/entity/EntityType.java
-@@ -682,6 +682,12 @@ public class EntityType implements FeatureElement, EntityTypeT
+@@ -683,6 +683,12 @@ public class EntityType implements FeatureElement, EntityTypeT
entity.load(nbt);
}, () -> {
EntityType.LOGGER.warn("Skipping Entity with id {}", nbt.getString("id"));
diff --git a/patches/server/0268-End-Crystal-Cramming.patch b/patches/server/0271-End-Crystal-Cramming.patch
similarity index 96%
rename from patches/server/0268-End-Crystal-Cramming.patch
rename to patches/server/0271-End-Crystal-Cramming.patch
index 97205e860..9b1469291 100644
--- a/patches/server/0268-End-Crystal-Cramming.patch
+++ b/patches/server/0271-End-Crystal-Cramming.patch
@@ -17,7 +17,7 @@ index 305c3350116f656c3d0e6134e4d8023eac50f3ad..b1db1e92de3a88a0f0e0fdb42b0bf973
// Purpur start
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index f083d0efb0f0aee24779fc866204cbb936d3f55f..ed1089ac29f9c8d19f69ac64974bfbe64fa8de41 100644
+index 89e80073eb911e72d0bac5b50119421a91cd3a16..991d13948d90039a4a344b51317b52f882b34e5f 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -915,6 +915,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0269-Option-to-allow-beacon-effects-when-covered-by-tinte.patch b/patches/server/0272-Option-to-allow-beacon-effects-when-covered-by-tinte.patch
similarity index 97%
rename from patches/server/0269-Option-to-allow-beacon-effects-when-covered-by-tinte.patch
rename to patches/server/0272-Option-to-allow-beacon-effects-when-covered-by-tinte.patch
index 0c4daaaa5..65e8b4064 100644
--- a/patches/server/0269-Option-to-allow-beacon-effects-when-covered-by-tinte.patch
+++ b/patches/server/0272-Option-to-allow-beacon-effects-when-covered-by-tinte.patch
@@ -36,7 +36,7 @@ index fbc6b0099af34b0247f6144a9cef020f9ccddeef..2d190b3a6378b8cbadfa65510df1ccfb
BeaconBlockEntity.playSound(world, pos, SoundEvents.BEACON_AMBIENT);
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index ed1089ac29f9c8d19f69ac64974bfbe64fa8de41..5030f8e746cf92619483a4b93f0398aa05182784 100644
+index 991d13948d90039a4a344b51317b52f882b34e5f..5fb1b4ca45faaf9d172adb8f3a7879322ae29117 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -814,11 +814,13 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0270-Add-attribute-clamping-and-armor-limit-config.patch b/patches/server/0273-Add-attribute-clamping-and-armor-limit-config.patch
similarity index 100%
rename from patches/server/0270-Add-attribute-clamping-and-armor-limit-config.patch
rename to patches/server/0273-Add-attribute-clamping-and-armor-limit-config.patch
diff --git a/patches/server/0271-Config-to-remove-explosion-radius-clamp.patch b/patches/server/0274-Config-to-remove-explosion-radius-clamp.patch
similarity index 96%
rename from patches/server/0271-Config-to-remove-explosion-radius-clamp.patch
rename to patches/server/0274-Config-to-remove-explosion-radius-clamp.patch
index e30da58f8..cb419f62f 100644
--- a/patches/server/0271-Config-to-remove-explosion-radius-clamp.patch
+++ b/patches/server/0274-Config-to-remove-explosion-radius-clamp.patch
@@ -27,7 +27,7 @@ index bbbd451ff184be8fa13bd93d53c89a9502f9951a..913f7d5fd9823eea9fad2d4e6689511f
}
// CraftBukkit end
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 5030f8e746cf92619483a4b93f0398aa05182784..0c6e22dffa5e286ded2ca277c3c0a3a60014305c 100644
+index 5fb1b4ca45faaf9d172adb8f3a7879322ae29117..12ccac3893097d428c3c7f9cfdfc67e78dd9d691 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -225,6 +225,11 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0272-bonemealable-sugarcane-cactus-and-netherwart.patch b/patches/server/0275-bonemealable-sugarcane-cactus-and-netherwart.patch
similarity index 98%
rename from patches/server/0272-bonemealable-sugarcane-cactus-and-netherwart.patch
rename to patches/server/0275-bonemealable-sugarcane-cactus-and-netherwart.patch
index b75a9c9be..fa46c7cbb 100644
--- a/patches/server/0272-bonemealable-sugarcane-cactus-and-netherwart.patch
+++ b/patches/server/0275-bonemealable-sugarcane-cactus-and-netherwart.patch
@@ -137,7 +137,7 @@ index 547ea09ed84595286c97c128b3b96f6d387ae25f..d0f8a13f27132257ece6dadf736c2dc6
+ // Purpur end
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 0c6e22dffa5e286ded2ca277c3c0a3a60014305c..be88a9c0847349d3460d1e7b851c2e9d673ff093 100644
+index 12ccac3893097d428c3c7f9cfdfc67e78dd9d691..4ef5aaa033f6ba5a4260345df12426954b8d6fbe 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -868,8 +868,20 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0273-Add-PreExplodeEvents.patch b/patches/server/0276-Add-PreExplodeEvents.patch
similarity index 100%
rename from patches/server/0273-Add-PreExplodeEvents.patch
rename to patches/server/0276-Add-PreExplodeEvents.patch
diff --git a/patches/server/0274-Improve-output-of-plugins-command.patch b/patches/server/0277-Improve-output-of-plugins-command.patch
similarity index 100%
rename from patches/server/0274-Improve-output-of-plugins-command.patch
rename to patches/server/0277-Improve-output-of-plugins-command.patch
diff --git a/patches/server/0275-Make-GUI-Great-Again.patch b/patches/server/0278-Make-GUI-Great-Again.patch
similarity index 99%
rename from patches/server/0275-Make-GUI-Great-Again.patch
rename to patches/server/0278-Make-GUI-Great-Again.patch
index 930449976..f4e7508d5 100644
--- a/patches/server/0275-Make-GUI-Great-Again.patch
+++ b/patches/server/0278-Make-GUI-Great-Again.patch
@@ -96,7 +96,7 @@ index 0000000000000000000000000000000000000000..15a226e3854d731f7724025ea3459c8a
+ }
+}
diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
-index 3ddc5f213954f181e0e3b8d44808ea12765e8e55..e9ad8e2ac267c46df80e884308df8bb12d0deeff 100644
+index 08a81a45371fd273fb35956bef3bb7947bb4c5b6..7a442fb4cf78bcb1268359ee41a6de138edb76b6 100644
--- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
+++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
@@ -111,6 +111,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
diff --git a/patches/server/0276-Stored-Bee-API.patch b/patches/server/0279-Stored-Bee-API.patch
similarity index 100%
rename from patches/server/0276-Stored-Bee-API.patch
rename to patches/server/0279-Stored-Bee-API.patch
diff --git a/patches/server/0277-Shears-can-defuse-TNT.patch b/patches/server/0280-Shears-can-defuse-TNT.patch
similarity index 97%
rename from patches/server/0277-Shears-can-defuse-TNT.patch
rename to patches/server/0280-Shears-can-defuse-TNT.patch
index 34320e7f5..f3c819cc2 100644
--- a/patches/server/0277-Shears-can-defuse-TNT.patch
+++ b/patches/server/0280-Shears-can-defuse-TNT.patch
@@ -44,7 +44,7 @@ index de87483600e55d88176fe25db621bbd3e464729f..287ba483614e79e78022e703ef891f59
+ // Purpur end - Shears can defuse TNT
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 869e6dc3dad0591af777762a4560c9b6e205feb4..9dc7eef416a0c97364d6db7f0a9e2fcadeb06a45 100644
+index 4ef5aaa033f6ba5a4260345df12426954b8d6fbe..f8c49f69297fac41f65c3d37ba0e1020fa3f0736 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -3414,4 +3414,11 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0278-Explorer-Map-API.patch b/patches/server/0281-Explorer-Map-API.patch
similarity index 100%
rename from patches/server/0278-Explorer-Map-API.patch
rename to patches/server/0281-Explorer-Map-API.patch
diff --git a/patches/server/0279-Option-Ocelot-Spawn-Under-Sea-Level.patch b/patches/server/0282-Option-Ocelot-Spawn-Under-Sea-Level.patch
similarity index 95%
rename from patches/server/0279-Option-Ocelot-Spawn-Under-Sea-Level.patch
rename to patches/server/0282-Option-Ocelot-Spawn-Under-Sea-Level.patch
index d17f79ea6..671fa61b4 100644
--- a/patches/server/0279-Option-Ocelot-Spawn-Under-Sea-Level.patch
+++ b/patches/server/0282-Option-Ocelot-Spawn-Under-Sea-Level.patch
@@ -18,7 +18,7 @@ index 14634de26c218a3d26afd3e7e6ca89c1a0595178..dee59cb4b87845c940ee089aa932aa69
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 9dc7eef416a0c97364d6db7f0a9e2fcadeb06a45..14bcd0038c9d16e9de9c16d0edbdde0c0e614d97 100644
+index f8c49f69297fac41f65c3d37ba0e1020fa3f0736..29c934fa57da481730d80601bf86a90d5b8def09 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -2150,6 +2150,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0280-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch b/patches/server/0283-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch
similarity index 96%
rename from patches/server/0280-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch
rename to patches/server/0283-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch
index 8bf85a006..5a27bad09 100644
--- a/patches/server/0280-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch
+++ b/patches/server/0283-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch
@@ -29,7 +29,7 @@ index e283b1296c1e831376bfe9491cbf02ed4b3fffe4..27a6de70530c2a1cbe2f77a7fb493038
piglin.getBrain().eraseMemory(MemoryModuleType.WALK_TARGET);
piglin.getNavigation().stop();
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 14bcd0038c9d16e9de9c16d0edbdde0c0e614d97..14346bf253cf1f420e024eb119ea26e45a7c9a59 100644
+index 29c934fa57da481730d80601bf86a90d5b8def09..a040f13bd39bd9e0b24ac9be4a95a093930977d1 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -2327,6 +2327,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0281-Add-option-for-always-showing-item-in-player-death-m.patch b/patches/server/0284-Add-option-for-always-showing-item-in-player-death-m.patch
similarity index 100%
rename from patches/server/0281-Add-option-for-always-showing-item-in-player-death-m.patch
rename to patches/server/0284-Add-option-for-always-showing-item-in-player-death-m.patch
diff --git a/patches/server/0282-place-end-crystal-on-any-block.patch b/patches/server/0285-place-end-crystal-on-any-block.patch
similarity index 92%
rename from patches/server/0282-place-end-crystal-on-any-block.patch
rename to patches/server/0285-place-end-crystal-on-any-block.patch
index f64fdeef0..75ce23242 100644
--- a/patches/server/0282-place-end-crystal-on-any-block.patch
+++ b/patches/server/0285-place-end-crystal-on-any-block.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] place end crystal on any block
diff --git a/src/main/java/net/minecraft/world/item/EndCrystalItem.java b/src/main/java/net/minecraft/world/item/EndCrystalItem.java
-index b62db8c7c8c57e43869ee239ebf4b02f112355d9..f60e39e56a5dab2de62ae9cfd7a30a70b4985c09 100644
+index 2bee342e59e600426c8681a3ce641a12f22790be..e75930f26604b772a141a93c6f4b77828abc4503 100644
--- a/src/main/java/net/minecraft/world/item/EndCrystalItem.java
+++ b/src/main/java/net/minecraft/world/item/EndCrystalItem.java
@@ -27,7 +27,7 @@ public class EndCrystalItem extends Item {
@@ -18,7 +18,7 @@ index b62db8c7c8c57e43869ee239ebf4b02f112355d9..f60e39e56a5dab2de62ae9cfd7a30a70
} else {
BlockPos blockposition1 = blockposition.above(); final BlockPos aboveBlockPosition = blockposition1; // Paper - OBFHELPER
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 80561650178b5cb3c49422fb2b0d30aeca55fdd0..cc3258704c5093bc6005d5d807c16a0bb3748052 100644
+index a040f13bd39bd9e0b24ac9be4a95a093930977d1..c9ad3129146f5f29f1a1d0afbbc911d92bb4e8fb 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -935,6 +935,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0283-Add-option-to-disable-the-copper-oxidation-proximity.patch b/patches/server/0286-Add-option-to-disable-the-copper-oxidation-proximity.patch
similarity index 96%
rename from patches/server/0283-Add-option-to-disable-the-copper-oxidation-proximity.patch
rename to patches/server/0286-Add-option-to-disable-the-copper-oxidation-proximity.patch
index 13ce167d0..82df86634 100644
--- a/patches/server/0283-Add-option-to-disable-the-copper-oxidation-proximity.patch
+++ b/patches/server/0286-Add-option-to-disable-the-copper-oxidation-proximity.patch
@@ -18,7 +18,7 @@ index daae7fd6e0148cfba8e359d990748a0c83a3376e..0e06b1bcd906e92c083dc74d56d6d0a2
return random.nextFloat() < f1 ? this.getNext(state) : Optional.empty();
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index cc3258704c5093bc6005d5d807c16a0bb3748052..6bf2555fb77163f0a8243809095b72f2d13bc95d 100644
+index c9ad3129146f5f29f1a1d0afbbc911d92bb4e8fb..9b3e2d1ab8ad0b388a0bd3947feea43e602b8781 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -146,6 +146,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0284-register-minecraft-debug-commands.patch b/patches/server/0287-register-minecraft-debug-commands.patch
similarity index 96%
rename from patches/server/0284-register-minecraft-debug-commands.patch
rename to patches/server/0287-register-minecraft-debug-commands.patch
index 66d6ddad8..21200a889 100644
--- a/patches/server/0284-register-minecraft-debug-commands.patch
+++ b/patches/server/0287-register-minecraft-debug-commands.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] register minecraft debug commands
diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java
-index 96449b0d153ce4124403368e406354fb2412e353..6a8248b43bf739b691c7e888ebf964cad0a92623 100644
+index db455a0fc7e1fc004215b718ff470bd2f74eae1b..8d82425ccbc30b3f4a59767ca72bf37311ddeda0 100644
--- a/src/main/java/net/minecraft/commands/Commands.java
+++ b/src/main/java/net/minecraft/commands/Commands.java
@@ -226,8 +226,8 @@ public class Commands {
diff --git a/patches/server/0285-Configurable-villager-search-radius.patch b/patches/server/0288-Configurable-villager-search-radius.patch
similarity index 97%
rename from patches/server/0285-Configurable-villager-search-radius.patch
rename to patches/server/0288-Configurable-villager-search-radius.patch
index 19b05c0ed..4fc65ed59 100644
--- a/patches/server/0285-Configurable-villager-search-radius.patch
+++ b/patches/server/0288-Configurable-villager-search-radius.patch
@@ -31,7 +31,7 @@ index 92731b6b593289e9f583c9b705b219e81fcd8e73..9104d7010bda6f9f73b478c11490ef9c
// Paper end - optimise POI access
if (path != null && path.canReach()) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 77947debf981eb44cc116b6bb930a9f07ffaef16..e863b5cc35bbef332f430b6a7eaab53996b2d574 100644
+index 9b3e2d1ab8ad0b388a0bd3947feea43e602b8781..d396a9fee2326620a0222ff91dba63f187907525 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -3004,6 +3004,8 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0286-option-to-make-ravagers-afraid-of-rabbits.patch b/patches/server/0289-option-to-make-ravagers-afraid-of-rabbits.patch
similarity index 96%
rename from patches/server/0286-option-to-make-ravagers-afraid-of-rabbits.patch
rename to patches/server/0289-option-to-make-ravagers-afraid-of-rabbits.patch
index a3744efb9..ae28a292c 100644
--- a/patches/server/0286-option-to-make-ravagers-afraid-of-rabbits.patch
+++ b/patches/server/0289-option-to-make-ravagers-afraid-of-rabbits.patch
@@ -18,7 +18,7 @@ index 1c8cb19a8b25593d16518006247bdf0e71e16ab1..98c1934b4895a86cd8748edf906aaa72
this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, 0.4D));
this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F));
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index e863b5cc35bbef332f430b6a7eaab53996b2d574..b7743b7b37293fd458b56f5e17359d2383719c90 100644
+index d396a9fee2326620a0222ff91dba63f187907525..57ddb4e6a464567cc67e09ce06218cc25af4ddf9 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -2485,6 +2485,7 @@ public class PurpurWorldConfig {
diff --git a/patches/server/0287-config-for-startup-commands.patch b/patches/server/0290-config-for-startup-commands.patch
similarity index 93%
rename from patches/server/0287-config-for-startup-commands.patch
rename to patches/server/0290-config-for-startup-commands.patch
index c5de60f51..7d4d91f0b 100644
--- a/patches/server/0287-config-for-startup-commands.patch
+++ b/patches/server/0290-config-for-startup-commands.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] config for startup commands
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index 4c46d084befe48ec1f98a956033a58ee2f2c0bbc..2274a9c6c6db0a04a6e7ba6783a55db67f80e5ba 100644
+index 66cbaad4c92750ecf0c74ab52e6eae4a818da972..74504331648e016a5f0233f1b5311b558f6cb611 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
-@@ -1291,6 +1291,17 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop