diff --git a/build-data/paper.at b/build-data/paper.at
index f486c0ba6..876726349 100644
--- a/build-data/paper.at
+++ b/build-data/paper.at
@@ -6,6 +6,9 @@
# Leave out the member and it will apply to the class itself
# More info, see here https://mcforge.readthedocs.io/en/latest/advanced/accesstransformers/#access-modifiers
+# Remap/Decompile fix (unclear why this is happening)
+public net.minecraft.server.MinecraftServer doRunTask(Lnet/minecraft/server/TickTask;)V
+
# Paper config files
public org.spigotmc.SpigotWorldConfig getBoolean(Ljava/lang/String;Z)Z
public org.spigotmc.SpigotWorldConfig getDouble(Ljava/lang/String;)D
@@ -178,9 +181,6 @@ public net.minecraft.util.thread.BlockableEventLoop runAllTasks()V
public net.minecraft.server.level.ChunkMap entitiesInLevel
public net.minecraft.server.level.ServerLevel players
-# Improve block entity unload performance
-public net.minecraft.Util$IdentityStrategy
-
# Chunk priority urgency system
public net.minecraft.server.level.ChunkMap$ChunkDistanceManager
diff --git a/patches/server/0001-Setup-Gradle-project.patch b/patches/server/0001-Setup-Gradle-project.patch
index f0e88eb22..9f84d3b17 100644
--- a/patches/server/0001-Setup-Gradle-project.patch
+++ b/patches/server/0001-Setup-Gradle-project.patch
@@ -155,3 +155,481 @@ index 0000000000000000000000000000000000000000..84af6353d060c65d5f125559becc011a
+ return PLUGIN_CACHE_FILE == element.name || element.name == "Log4j2Plugins.dat"
+ }
+}
+diff --git a/pom.xml b/pom.xml
+deleted file mode 100644
+index 2f0e513c9e5d78a22e7d1e1a5aa64bb8f0f360d2..0000000000000000000000000000000000000000
+--- a/pom.xml
++++ /dev/null
+@@ -1,472 +0,0 @@
+-
+- 4.0.0
+- org.spigotmc
+- spigot
+- jar
+- 1.17-R0.1-SNAPSHOT
+- Spigot
+- https://www.spigotmc.org/
+-
+-
+- true
+- UTF-8
+- unknown
+- git
+- 1_17_R1
+- 1.8
+- 1.8
+-
+-
+-
+- org.spigotmc
+- spigot-parent
+- dev-SNAPSHOT
+- ../pom.xml
+-
+-
+-
+-
+- org.spigotmc
+- spigot-api
+- ${project.version}
+- compile
+-
+-
+- org.spigotmc
+- minecraft-server
+- ${project.version}
+- compile
+-
+-
+- jline
+- jline
+- 2.12.1
+- compile
+-
+-
+- org.apache.logging.log4j
+- log4j-iostreams
+- 2.14.1
+- compile
+-
+-
+-
+- org.apache.logging.log4j
+- log4j-api
+-
+-
+-
+-
+- org.ow2.asm
+- asm
+- 9.1
+- compile
+-
+-
+-
+- com.googlecode.json-simple
+- json-simple
+- 1.1.1
+- runtime
+-
+-
+- org.xerial
+- sqlite-jdbc
+- 3.34.0
+- runtime
+-
+-
+- mysql
+- mysql-connector-java
+- 5.1.49
+- runtime
+-
+-
+-
+- org.apache.maven
+- maven-resolver-provider
+- 3.8.1
+- runtime
+-
+-
+- org.apache.maven.resolver
+- maven-resolver-connector-basic
+- 1.7.0
+- runtime
+-
+-
+- org.apache.maven.resolver
+- maven-resolver-transport-http
+- 1.7.0
+- runtime
+-
+-
+-
+- junit
+- junit
+- 4.13.1
+- test
+-
+-
+- org.hamcrest
+- hamcrest-library
+- 1.3
+- test
+-
+-
+-
+-
+-
+-
+-
+- net.md-5
+- scriptus
+- 0.4.1
+-
+-
+- ex-spigot
+-
+- ${bt.name}-Spigot-%s
+- ../
+- spigot.desc
+-
+- initialize
+-
+- describe
+-
+-
+-
+- ex-craftbukkit
+-
+- -%s
+- ../../CraftBukkit
+- craftbukkit.desc
+-
+- initialize
+-
+- describe
+-
+-
+-
+-
+-
+- org.apache.maven.plugins
+- maven-clean-plugin
+- 3.1.0
+-
+-
+- initialize
+-
+- clean
+-
+-
+-
+-
+-
+- org.apache.maven.plugins
+- maven-jar-plugin
+- 3.2.0
+-
+-
+-
+- false
+-
+-
+- org.bukkit.craftbukkit.Main
+- CraftBukkit
+- ${spigot.desc}${craftbukkit.desc}
+- ${project.build.outputTimestamp}
+- Bukkit
+- ${api.version}
+- Bukkit Team
+- true
+-
+-
+-
+- net/bukkit/
+-
+- true
+-
+-
+-
+- com/bukkit/
+-
+- true
+-
+-
+-
+- org/bukkit/
+-
+- true
+-
+-
+-
+-
+-
+-
+-
+- org.apache.maven.plugins
+- maven-shade-plugin
+- 3.2.4
+-
+-
+- org.ow2.asm
+- asm
+- 9.1
+-
+-
+- org.ow2.asm
+- asm-commons
+- 9.1
+-
+-
+-
+-
+- package
+-
+- shade
+-
+-
+- ${shadeSourcesJar}
+-
+-
+- org.spigotmc:minecraft-server
+-
+- com/google/common/**
+- com/google/gson/**
+- com/google/thirdparty/**
+-
+-
+-
+- org.eclipse.sisu:org.eclipse.sisu.inject
+-
+- META-INF/services/javax.annotation.processing.Processor
+-
+-
+-
+-
+-
+-
+-
+- jline
+- org.bukkit.craftbukkit.libs.jline
+-
+-
+- it.unimi
+- org.bukkit.craftbukkit.libs.it.unimi
+-
+-
+- org.apache.commons.codec
+- org.bukkit.craftbukkit.libs.org.apache.commons.codec
+-
+-
+- org.apache.commons.io
+- org.bukkit.craftbukkit.libs.org.apache.commons.io
+-
+-
+- org.apache.commons.lang3
+- org.bukkit.craftbukkit.libs.org.apache.commons.lang3
+-
+-
+- org.apache.http
+- org.bukkit.craftbukkit.libs.org.apache.http
+-
+-
+- org.apache.maven
+- org.bukkit.craftbukkit.libs.org.apache.maven
+-
+-
+- org.codehaus.plexus
+- org.bukkit.craftbukkit.libs.org.codehaus.plexus
+-
+-
+- org.eclipse.aether
+- org.bukkit.craftbukkit.libs.org.eclipse.aether
+-
+-
+- org.eclipse.sisu
+- org.bukkit.craftbukkit.libs.org.eclipse.sisu
+-
+-
+- org.objectweb.asm
+- org.bukkit.craftbukkit.libs.org.objectweb.asm
+-
+-
+- org.bukkit.craftbukkit
+- org.bukkit.craftbukkit.v${minecraft_version}
+-
+- org.bukkit.craftbukkit.Main*
+-
+-
+-
+-
+-
+- META-INF/services/java.sql.Driver
+-
+-
+-
+-
+-
+-
+-
+- net.md-5
+- specialsource-maven-plugin
+- 1.2.2
+-
+-
+- package
+-
+- remap
+-
+- remap-fields
+-
+- org.spigotmc:minecraft-server:${project.version}:csrg:maps-spigot-fields
+- true
+-
+-
+-
+-
+-
+- org.apache.maven.plugins
+- maven-compiler-plugin
+- 3.8.1
+-
+-
+- eclipse
+-
+-
+-
+- org.codehaus.plexus
+- plexus-compiler-eclipse
+- 2.8.8
+-
+-
+- org.eclipse.jdt
+- ecj
+- 3.24.0
+-
+-
+-
+-
+- org.apache.maven.plugins
+- maven-surefire-plugin
+- 2.12.4
+-
+- ${basedir}/target/test-server
+-
+- org/bukkit/craftbukkit/inventory/ItemStack*Test.java
+-
+-
+-
+-
+-
+-
+-
+-
+- shadeSourcesJar
+-
+- true
+- true
+-
+-
+-
+- development
+-
+- false
+-
+-
+-
+-
+- org.apache.maven.plugins
+- maven-checkstyle-plugin
+- 3.1.1
+-
+-
+- process-classes
+-
+- check
+-
+-
+-
+-
+- checkstyle.xml
+- true
+-
+-
+-
+- com.puppycrawl.tools
+- checkstyle
+- 8.39
+-
+-
+-
+-
+- org.codehaus.mojo
+- animal-sniffer-maven-plugin
+- 1.20
+-
+-
+- process-classes
+-
+- check
+-
+-
+-
+-
+-
+- org.codehaus.mojo.signature
+- java18
+- 1.0
+-
+-
+-
+-
+-
+-
+-
+- remapped
+-
+-
+-
+- net.md-5
+- specialsource-maven-plugin
+-
+-
+- package
+-
+- remap
+-
+- remap-obf
+-
+- org.spigotmc:minecraft-server:${project.version}:csrg:maps-spigot
+- true
+- true
+- remapped-obf
+-
+-
+-
+- package
+-
+- remap
+-
+- remap-mojang
+-
+- ${project.build.directory}/${project.artifactId}-${project.version}-remapped-obf.jar
+- org.spigotmc:minecraft-server:${project.version}:txt:maps-mojang
+- true
+- remapped-mojang
+-
+-
+-
+-
+-
+-
+-
+-
+-
diff --git a/patches/server/0002-Decompile-fixes.patch b/patches/server/0002-Remap-fixes.patch
similarity index 80%
rename from patches/server/0002-Decompile-fixes.patch
rename to patches/server/0002-Remap-fixes.patch
index bfd4cefec..10d763001 100644
--- a/patches/server/0002-Decompile-fixes.patch
+++ b/patches/server/0002-Remap-fixes.patch
@@ -1,11 +1,11 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Kyle Wood
Date: Fri, 11 Jun 2021 05:25:03 -0500
-Subject: [PATCH] Decompile fixes
+Subject: [PATCH] Remap fixes
diff --git a/src/main/java/net/minecraft/core/BlockPos.java b/src/main/java/net/minecraft/core/BlockPos.java
-index 1bd6ef643b17b059eb525035496b816a098279c4..891fc7f4cbea8eccd580f371715478265339c0cc 100644
+index 1bd6ef643b17b059eb525035496b816a098279c4..754e65f322ded875ae7614066bab30a8da2aa4a9 100644
--- a/src/main/java/net/minecraft/core/BlockPos.java
+++ b/src/main/java/net/minecraft/core/BlockPos.java
@@ -270,9 +270,11 @@ public class BlockPos extends Vec3i {
@@ -15,7 +15,7 @@ index 1bd6ef643b17b059eb525035496b816a098279c4..891fc7f4cbea8eccd580f37171547826
- int j = center.getX();
- int k = center.getY();
- int l = center.getZ();
-+ // Paper start - rename variables to fix conflict with anonymous class (decompile fix)
++ // Paper start - rename variables to fix conflict with anonymous class (remap fix)
+ int centerX = center.getX();
+ int centerY = center.getY();
+ int centerZ = center.getZ();
@@ -28,7 +28,7 @@ index 1bd6ef643b17b059eb525035496b816a098279c4..891fc7f4cbea8eccd580f37171547826
if (this.zMirror) {
this.zMirror = false;
- this.cursor.setZ(l - (this.cursor.getZ() - l));
-+ this.cursor.setZ(centerZ - (this.cursor.getZ() - centerZ)); // Paper - decompile fix
++ this.cursor.setZ(centerZ - (this.cursor.getZ() - centerZ)); // Paper - remap fix
return this.cursor;
} else {
BlockPos blockPos;
@@ -37,25 +37,12 @@ index 1bd6ef643b17b059eb525035496b816a098279c4..891fc7f4cbea8eccd580f37171547826
if (k <= rangeZ) {
this.zMirror = k != 0;
- blockPos = this.cursor.set(j + i, k + j, l + k);
-+ blockPos = this.cursor.set(centerX + i, centerY + j, centerZ + k); // Paper - decompile fix
++ blockPos = this.cursor.set(centerX + i, centerY + j, centerZ + k); // Paper - remap fix
}
}
-diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index 0000a0057ec4ee2db72e4ea1bf421f95d9d9fdc6..729e55535d833f8f6ff65bf226aac5ecdec44990 100644
---- a/src/main/java/net/minecraft/server/MinecraftServer.java
-+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
-@@ -1139,7 +1139,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop {
- entity1.moveTo(pos.x, pos.y, pos.z, entity1.getYRot(), entity1.getXRot());
- return entity1;
-+ Entity entity1 = EntityType.loadEntityRecursive(nbttagcompound1, worldserver, (loadedEntity) -> { // Paper - decomp fix
-+ loadedEntity.moveTo(pos.x, pos.y, pos.z, loadedEntity.getYRot(), loadedEntity.getXRot()); // Paper - decomp fix
-+ return loadedEntity; // Paper - decomp fix
++ Entity entity1 = EntityType.loadEntityRecursive(nbttagcompound1, worldserver, (loadedEntity) -> { // Paper - remap fix
++ loadedEntity.moveTo(pos.x, pos.y, pos.z, loadedEntity.getYRot(), loadedEntity.getXRot()); // Paper - remap fix
++ return loadedEntity; // Paper - remap fix
});
if (entity1 == null) {
diff --git a/src/main/java/net/minecraft/world/entity/ai/behavior/BehaviorUtils.java b/src/main/java/net/minecraft/world/entity/ai/behavior/BehaviorUtils.java
-index 88a8c2bc4aa30f478122a05fd119486a0107db82..5f00e3f4c86196db47bf1007973445d40866afdd 100644
+index 88a8c2bc4aa30f478122a05fd119486a0107db82..ef17f21574ce37b9ce6f72b9585034db473502c7 100644
--- a/src/main/java/net/minecraft/world/entity/ai/behavior/BehaviorUtils.java
+++ b/src/main/java/net/minecraft/world/entity/ai/behavior/BehaviorUtils.java
@@ -169,8 +169,8 @@ public class BehaviorUtils {
@@ -81,13 +68,13 @@ index 88a8c2bc4aa30f478122a05fd119486a0107db82..5f00e3f4c86196db47bf1007973445d4
return ((ServerLevel) entity.level).getEntity(uuid);
- }).map((entity) -> {
- return entity instanceof LivingEntity ? (LivingEntity) entity : null;
-+ }).map((entity2) -> { // Paper - decomp fix
-+ return entity2 instanceof LivingEntity ? (LivingEntity) entity2 : null; // Paper - decomp fix
++ }).map((entity2) -> { // Paper - remap fix
++ return entity2 instanceof LivingEntity ? (LivingEntity) entity2 : null; // Paper - remap fix
});
}
diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java
-index c88dc823ca0c2f83bc10886208d498ea77523d68..dcfd0b107ac7bd1633f3b681cd5f5e26ce87bd63 100644
+index 6552c7c30d02a99420b5c8c14595c62f2f896ed2..5df9ad398ba173bb0ff4770673f8eb5967325c5a 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java
@@ -522,7 +522,7 @@ public class Phantom extends FlyingMob implements Enemy {
@@ -95,12 +82,12 @@ index c88dc823ca0c2f83bc10886208d498ea77523d68..dcfd0b107ac7bd1633f3b681cd5f5e26
if (!list.isEmpty()) {
- list.sort(Comparator.comparing(Entity::getY).reversed());
-+ list.sort(Comparator.comparing(Entity::getY).reversed()); // Paper - decomp fix
++ list.sort(Comparator.comparing(Entity::getY).reversed()); // Paper - remap fix
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
diff --git a/src/main/java/net/minecraft/world/item/crafting/RecipeManager.java b/src/main/java/net/minecraft/world/item/crafting/RecipeManager.java
-index efb37470d4927def456c382420775a815594aa58..9bc0ccf6acccd5505bac7b8a6bfb7597a43570cf 100644
+index efb37470d4927def456c382420775a815594aa58..38dd114fbfa07a18987cd774ae05060d723247e4 100644
--- a/src/main/java/net/minecraft/world/item/crafting/RecipeManager.java
+++ b/src/main/java/net/minecraft/world/item/crafting/RecipeManager.java
@@ -172,7 +172,7 @@ public class RecipeManager extends SimpleJsonResourceReloadListener {
@@ -108,12 +95,12 @@ index efb37470d4927def456c382420775a815594aa58..9bc0ccf6acccd5505bac7b8a6bfb7597
recipes.forEach((irecipe) -> {
- Map> map1 = (Map) map.computeIfAbsent(irecipe.getType(), (recipes) -> {
-+ Map> map1 = (Map) map.computeIfAbsent(irecipe.getType(), (recipes_) -> { // Paper - decomp fix
++ Map> map1 = (Map) map.computeIfAbsent(irecipe.getType(), (recipes_) -> { // Paper - remap fix
return new Object2ObjectLinkedOpenHashMap<>(); // CraftBukkit
});
Recipe> irecipe1 = (Recipe) map1.put(irecipe.getId(), irecipe);
diff --git a/src/test/java/org/bukkit/DyeColorsTest.java b/src/test/java/org/bukkit/DyeColorsTest.java
-index ad52c3fc6210939a39ef77a382c640a24ee44838..5d811797ce8e14195a23fc71c8a3afbdca7691eb 100644
+index ad52c3fc6210939a39ef77a382c640a24ee44838..6b7dd01778f0a5d3a96d2d04af4b525d17efbfba 100644
--- a/src/test/java/org/bukkit/DyeColorsTest.java
+++ b/src/test/java/org/bukkit/DyeColorsTest.java
@@ -4,7 +4,6 @@ import static org.hamcrest.Matchers.*;
@@ -129,7 +116,7 @@ index ad52c3fc6210939a39ef77a382c640a24ee44838..5d811797ce8e14195a23fc71c8a3afbd
public void checkColor() {
Color color = this.dye.getColor();
- float[] nmsColorArray = DyeColor.byId(this.dye.getWoolData()).getTextureDiffuseColors();
-+ float[] nmsColorArray = net.minecraft.world.item.DyeColor.byId(this.dye.getWoolData()).getTextureDiffuseColors();
++ float[] nmsColorArray = net.minecraft.world.item.DyeColor.byId(this.dye.getWoolData()).getTextureDiffuseColors(); // Paper - remap fix
Color nmsColor = Color.fromRGB((int) (nmsColorArray[0] * 255), (int) (nmsColorArray[1] * 255), (int) (nmsColorArray[2] * 255));
assertThat(color, is(nmsColor));
}
@@ -138,12 +125,12 @@ index ad52c3fc6210939a39ef77a382c640a24ee44838..5d811797ce8e14195a23fc71c8a3afbd
public void checkFireworkColor() {
Color color = this.dye.getFireworkColor();
- int nmsColor = DyeColor.byId(this.dye.getWoolData()).getFireworkColor();
-+ int nmsColor = net.minecraft.world.item.DyeColor.byId(this.dye.getWoolData()).getFireworkColor();
++ int nmsColor = net.minecraft.world.item.DyeColor.byId(this.dye.getWoolData()).getFireworkColor(); // Paper - remap fix
assertThat(color, is(Color.fromRGB(nmsColor)));
}
}
diff --git a/src/test/java/org/bukkit/PerMaterialTest.java b/src/test/java/org/bukkit/PerMaterialTest.java
-index 90baf6e3329d64495da9edd580d5fbc80df8c165..185fa8bf7308bb2980a0feecf0d7696a59e507ac 100644
+index 90baf6e3329d64495da9edd580d5fbc80df8c165..e2fb8a0183885b4ad81d5284297be7a35946aa9c 100644
--- a/src/test/java/org/bukkit/PerMaterialTest.java
+++ b/src/test/java/org/bukkit/PerMaterialTest.java
@@ -221,7 +221,7 @@ public class PerMaterialTest extends AbstractTestingBase {
@@ -151,12 +138,12 @@ index 90baf6e3329d64495da9edd580d5fbc80df8c165..185fa8bf7308bb2980a0feecf0d7696a
assertThat(this.material.isInteractable(),
is(!CraftMagicNumbers.getBlock(material).getClass()
- .getMethod("interact", BlockState.class, net.minecraft.world.level.Level.class, BlockPos.class, Player.class, InteractionHand.class, BlockHitResult.class)
-+ .getMethod("use", BlockState.class, net.minecraft.world.level.Level.class, BlockPos.class, Player.class, InteractionHand.class, BlockHitResult.class)
++ .getMethod("use", BlockState.class, net.minecraft.world.level.Level.class, BlockPos.class, Player.class, InteractionHand.class, BlockHitResult.class) // Paper - remap fix
.getDeclaringClass().equals(BlockBehaviour.class)));
} else {
assertFalse(this.material.isInteractable());
diff --git a/src/test/java/org/bukkit/entity/EntityTypesTest.java b/src/test/java/org/bukkit/entity/EntityTypesTest.java
-index 8c4ad718e113f24a30fd11b345d34d6ca1ef73b0..085b0c17fb54fd8229838fee666120d9e59d942b 100644
+index 8c4ad718e113f24a30fd11b345d34d6ca1ef73b0..1e84f541683ddb619c2a8dfcd2a141fba2bd851d 100644
--- a/src/test/java/org/bukkit/entity/EntityTypesTest.java
+++ b/src/test/java/org/bukkit/entity/EntityTypesTest.java
@@ -5,7 +5,6 @@ import java.util.Set;
@@ -173,13 +160,13 @@ index 8c4ad718e113f24a30fd11b345d34d6ca1ef73b0..085b0c17fb54fd8229838fee666120d9
- for (EntityType> nms : Registry.ENTITY_TYPE) {
- ResourceLocation key = EntityType.getKey(nms);
-+ for (net.minecraft.world.entity.EntityType> nms : Registry.ENTITY_TYPE) {
-+ ResourceLocation key = net.minecraft.world.entity.EntityType.getKey(nms);
++ for (net.minecraft.world.entity.EntityType> nms : Registry.ENTITY_TYPE) { // Paper - remap fix
++ ResourceLocation key = net.minecraft.world.entity.EntityType.getKey(nms); // Paper - remap fix
org.bukkit.entity.EntityType bukkit = org.bukkit.entity.EntityType.fromName(key.getPath());
Assert.assertNotNull("Missing nms->bukkit " + key, bukkit);
diff --git a/src/test/java/org/bukkit/entity/PandaGeneTest.java b/src/test/java/org/bukkit/entity/PandaGeneTest.java
-index 76e2ad676ae68846bdff3c3ef711751445fb0f3c..bee1bd015f161a00df1311b6ef272739fcff6834 100644
+index 76e2ad676ae68846bdff3c3ef711751445fb0f3c..feee17192bca55a9cf1b2fc5b9609b888db77763 100644
--- a/src/test/java/org/bukkit/entity/PandaGeneTest.java
+++ b/src/test/java/org/bukkit/entity/PandaGeneTest.java
@@ -1,6 +1,5 @@
@@ -194,7 +181,7 @@ index 76e2ad676ae68846bdff3c3ef711751445fb0f3c..bee1bd015f161a00df1311b6ef272739
public void testBukkit() {
for (Panda.Gene gene : Panda.Gene.values()) {
- Panda.Gene nms = CraftPanda.toNms(gene);
-+ net.minecraft.world.entity.animal.Panda.Gene nms = CraftPanda.toNms(gene);
++ net.minecraft.world.entity.animal.Panda.Gene nms = CraftPanda.toNms(gene); // Paper - remap fix
Assert.assertNotNull("NMS gene null for " + gene, nms);
Assert.assertEquals("Recessive status did not match " + gene, gene.isRecessive(), nms.isRecessive());
@@ -203,7 +190,7 @@ index 76e2ad676ae68846bdff3c3ef711751445fb0f3c..bee1bd015f161a00df1311b6ef272739
@Test
public void testNMS() {
- for (Panda.Gene gene : Panda.Gene.values()) {
-+ for (net.minecraft.world.entity.animal.Panda.Gene gene : net.minecraft.world.entity.animal.Panda.Gene.values()) {
++ for (net.minecraft.world.entity.animal.Panda.Gene gene : net.minecraft.world.entity.animal.Panda.Gene.values()) { // Paper - remap fix
org.bukkit.entity.Panda.Gene bukkit = CraftPanda.fromNms(gene);
Assert.assertNotNull("Bukkit gene null for " + gene, bukkit);
diff --git a/patches/server/0158-Handle-plugin-prefixes-using-Log4J-configuration.patch b/patches/server/0158-Handle-plugin-prefixes-using-Log4J-configuration.patch
index 0f1eedfd8..1d909e5a1 100644
--- a/patches/server/0158-Handle-plugin-prefixes-using-Log4J-configuration.patch
+++ b/patches/server/0158-Handle-plugin-prefixes-using-Log4J-configuration.patch
@@ -15,7 +15,7 @@ This may cause additional prefixes to be disabled for plugins bypassing
the plugin logger.
diff --git a/build.gradle.kts b/build.gradle.kts
-index a3e4d9d5a1829533f1419f9ca124c5209a489938..7f34898ab177269803246a2be39763e3438b514c 100644
+index f82546e7bb2b10b33e45f547ca4eb4e38ebab568..2946f2bd0b12846929c8d708cabe019c2bbf2297 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -30,7 +30,7 @@ dependencies {
@@ -27,19 +27,6 @@ index a3e4d9d5a1829533f1419f9ca124c5209a489938..7f34898ab177269803246a2be39763e3
// Paper end
implementation("org.apache.logging.log4j:log4j-iostreams:2.14.1") // Paper
implementation("org.apache.logging.log4j:log4j-api:2.14.1") // Paper
-diff --git a/pom.xml b/pom.xml
-index 2f0e513c9e5d78a22e7d1e1a5aa64bb8f0f360d2..f5e74f74e32095c4ad1f8094a0dd64be8e193f0c 100644
---- a/pom.xml
-+++ b/pom.xml
-@@ -68,7 +68,7 @@
- com.googlecode.json-simple
- json-simple
- 1.1.1
-- runtime
-+ compile
-
-
- org.xerial
diff --git a/src/main/java/org/spigotmc/SpigotConfig.java b/src/main/java/org/spigotmc/SpigotConfig.java
index 2d226fd06759ed92bf5591259fc86f34f606a3ec..e7586c325290ceb8669f9f9d430c73080a37dd05 100644
--- a/src/main/java/org/spigotmc/SpigotConfig.java
diff --git a/patches/server/0167-Fix-MC-117075-TE-Unload-Lag-Spike.patch b/patches/server/0167-Fix-MC-117075-TE-Unload-Lag-Spike.patch
index 34e6cd2ee..87eae68d1 100644
--- a/patches/server/0167-Fix-MC-117075-TE-Unload-Lag-Spike.patch
+++ b/patches/server/0167-Fix-MC-117075-TE-Unload-Lag-Spike.patch
@@ -5,14 +5,14 @@ Subject: [PATCH] Fix MC-117075: TE Unload Lag Spike
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
-index a86b5272c0ac4dd64f796f7fd025c7a34a5d2f8d..e8ec98aa4598af6733b94a58a196190c9e0839d2 100644
+index a86b5272c0ac4dd64f796f7fd025c7a34a5d2f8d..f8554943783754618bc04cbbe7df61cebfc98b80 100644
--- a/src/main/java/net/minecraft/world/level/Level.java
+++ b/src/main/java/net/minecraft/world/level/Level.java
@@ -724,6 +724,8 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
// Spigot start
// Iterator iterator = this.blockEntityTickers.iterator();
int tilesThisCycle = 0;
-+ it.unimi.dsi.fastutil.objects.ObjectOpenCustomHashSet toRemove = new it.unimi.dsi.fastutil.objects.ObjectOpenCustomHashSet(net.minecraft.Util.IdentityStrategy.INSTANCE); // Paper - use removeAll
++ var toRemove = new it.unimi.dsi.fastutil.objects.ObjectOpenCustomHashSet(net.minecraft.Util.identityStrategy()); // Paper - use removeAll
+ toRemove.add(null);
for (tileTickPosition = 0; tileTickPosition < this.blockEntityTickers.size(); tileTickPosition++) { // Paper - Disable tick limiters
this.tileTickPosition = (this.tileTickPosition < this.blockEntityTickers.size()) ? this.tileTickPosition : 0;
diff --git a/patches/server/0225-Use-asynchronous-Log4j-2-loggers.patch b/patches/server/0225-Use-asynchronous-Log4j-2-loggers.patch
index 513658374..848d77d52 100644
--- a/patches/server/0225-Use-asynchronous-Log4j-2-loggers.patch
+++ b/patches/server/0225-Use-asynchronous-Log4j-2-loggers.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Use asynchronous Log4j 2 loggers
diff --git a/build.gradle.kts b/build.gradle.kts
-index 7f34898ab177269803246a2be39763e3438b514c..98899f57a859a78dc4445dae6c5448818e3cdd2d 100644
+index 2946f2bd0b12846929c8d708cabe019c2bbf2297..bac1ed67b41fd0f63a1e4f511d62144791360550 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -42,6 +42,7 @@ dependencies {
@@ -16,24 +16,6 @@ index 7f34898ab177269803246a2be39763e3438b514c..98899f57a859a78dc4445dae6c544881
runtimeOnly("org.apache.maven:maven-resolver-provider:3.8.1")
runtimeOnly("org.apache.maven.resolver:maven-resolver-connector-basic:1.7.0")
-diff --git a/pom.xml b/pom.xml
-index f5e74f74e32095c4ad1f8094a0dd64be8e193f0c..86cce7143abd317326cc755118bf61435e82e479 100644
---- a/pom.xml
-+++ b/pom.xml
-@@ -57,6 +57,13 @@
-
-
-
-+
-+
-+ com.lmax
-+ disruptor
-+ 3.4.2
-+ runtime
-+
-
- org.ow2.asm
- asm
diff --git a/src/main/java/com/destroystokyo/paper/log/LogFullPolicy.java b/src/main/java/com/destroystokyo/paper/log/LogFullPolicy.java
new file mode 100644
index 0000000000000000000000000000000000000000..db652a1f7abc80bc751fd94925abaec58ab1a563
diff --git a/patches/server/0432-Implement-Mob-Goal-API.patch b/patches/server/0432-Implement-Mob-Goal-API.patch
index c1421da81..8a8c883f7 100644
--- a/patches/server/0432-Implement-Mob-Goal-API.patch
+++ b/patches/server/0432-Implement-Mob-Goal-API.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Implement Mob Goal API
diff --git a/build.gradle.kts b/build.gradle.kts
-index 81e176070c1f5bbc3deb062a4663bdf66bee14b5..44fd50b5c566c218b83d602f941f33436afe2f39 100644
+index 40e1b4322db6bf79ae9511fbf8abab60bde9f127..2e8424beaa1f8a14d3541dad9c258da80ab915d5 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -52,6 +52,7 @@ dependencies {
@@ -16,24 +16,6 @@ index 81e176070c1f5bbc3deb062a4663bdf66bee14b5..44fd50b5c566c218b83d602f941f3343
testImplementation("junit:junit:4.13.1")
testImplementation("org.hamcrest:hamcrest-library:1.3")
}
-diff --git a/pom.xml b/pom.xml
-index 86cce7143abd317326cc755118bf61435e82e479..4233698d499b520dfc07c4184cefca633a95d15b 100644
---- a/pom.xml
-+++ b/pom.xml
-@@ -121,6 +121,13 @@
- 1.3
- test
-
-+
-+
-+ io.github.classgraph
-+ classgraph
-+ 4.8.47
-+ test
-+
-
-
-
diff --git a/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java b/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java
new file mode 100644
index 0000000000000000000000000000000000000000..dfc026d183adab1dde5942f36e7a281b3a2fc699