diff --git a/Spigot-API-Patches/POM-changes.patch b/Spigot-API-Patches/POM-changes.patch
index 949639be87..db82c76e90 100644
--- a/Spigot-API-Patches/POM-changes.patch
+++ b/Spigot-API-Patches/POM-changes.patch
@@ -22,7 +22,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
- spigot-api
+ com.destroystokyo.paper
+ paper-api
- 1.16-R0.1-SNAPSHOT
+ 1.15.2-R0.1-SNAPSHOT
jar
- Spigot-API
diff --git a/Spigot-Server-Patches/Asynchronous-chunk-IO-and-loading.patch b/Spigot-Server-Patches/Asynchronous-chunk-IO-and-loading.patch
index 4d47d44ba3..da0da43621 100644
--- a/Spigot-Server-Patches/Asynchronous-chunk-IO-and-loading.patch
+++ b/Spigot-Server-Patches/Asynchronous-chunk-IO-and-loading.patch
@@ -4083,7 +4083,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
// we do this so we do not re-read the chunk data on disk
@@ -0,0 +0,0 @@ public class CraftWorld implements World {
- return new CraftDragonBattle(((WorldProviderTheEnd) worldProvider).o()); // PAIL rename getDragonBattle
+ return new CraftDragonBattle(worldProvider.o()); // PAIL rename getDragonBattle
}
+ // Paper start
+ @Override
diff --git a/Spigot-Server-Patches/Fix-MC-161754.patch b/Spigot-Server-Patches/Fix-MC-161754.patch
index b27cbf5962..ecb8057b72 100644
--- a/Spigot-Server-Patches/Fix-MC-161754.patch
+++ b/Spigot-Server-Patches/Fix-MC-161754.patch
@@ -17,7 +17,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
@Override
public boolean canUse(EntityHuman entityhuman) {
- return this.c.a(entityhuman) && this.d.isAlive() && this.d.g((Entity) entityhuman) < 8.0F;
-+ return this.c.a(entityhuman) && (this.d.isAlive() && this.d.valid) && this.d.g((Entity) entityhuman) < 8.0F; // Paper - Fix MC-161754 - evaluate we might still want this in 1.16 as im not confident mojang fixed this, and made it worse
++ return this.c.a(entityhuman) && (this.d.isAlive() && this.d.valid) && this.d.g((Entity) entityhuman) < 8.0F; // Paper - Fix MC-161754
}
@Override
diff --git a/Spigot-Server-Patches/Fix-MC-93764.patch b/Spigot-Server-Patches/Fix-MC-93764.patch
deleted file mode 100644
index 41d327bee6..0000000000
--- a/Spigot-Server-Patches/Fix-MC-93764.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: BillyGalbreath
-Date: Fri, 19 Oct 2018 19:38:45 -0500
-Subject: [PATCH] Fix MC-93764
-
-
-diff --git a/src/main/java/net/minecraft/server/WorldProviderTheEnd.java b/src/main/java/net/minecraft/server/WorldProviderTheEnd.java
-index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
---- a/src/main/java/net/minecraft/server/WorldProviderTheEnd.java
-+++ b/src/main/java/net/minecraft/server/WorldProviderTheEnd.java
-@@ -0,0 +0,0 @@ public class WorldProviderTheEnd extends WorldProvider {
-
- @Override
- public float a(long i, float f) {
-- return 0.0F;
-+ return 0.5F; // Paper - fix MC-93764
- }
-
- @Override
diff --git a/Spigot-Server-Patches/MC-Dev-fixes.patch b/Spigot-Server-Patches/MC-Dev-fixes.patch
index bd71312095..9cb1d0b91c 100644
--- a/Spigot-Server-Patches/MC-Dev-fixes.patch
+++ b/Spigot-Server-Patches/MC-Dev-fixes.patch
@@ -84,51 +84,6 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
}
public List> g() {
-diff --git a/src/main/java/net/minecraft/server/BlockDataAbstract.java b/src/main/java/net/minecraft/server/BlockDataAbstract.java
-index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
---- a/src/main/java/net/minecraft/server/BlockDataAbstract.java
-+++ b/src/main/java/net/minecraft/server/BlockDataAbstract.java
-@@ -0,0 +0,0 @@ public abstract class BlockDataAbstract implements IBlockDataHolder {
- }
-
- private > String a(IBlockState iblockstate, Comparable> comparable) {
-- return iblockstate.a(comparable);
-+ return iblockstate.a((T) comparable); // Paper - decompiler fix
- }
- };
- protected final O a;
-@@ -0,0 +0,0 @@ public abstract class BlockDataAbstract implements IBlockDataHolder {
- }
-
- public > S a(IBlockState iblockstate) {
-- return this.set(iblockstate, (Comparable) a(iblockstate.getValues(), this.get(iblockstate)));
-+ return this.set(iblockstate, a(iblockstate.getValues(), this.get(iblockstate))); // Paper - decompile fix
- }
-
- protected static T a(Collection collection, T t0) {
-- Iterator iterator = collection.iterator();
-+ Iterator iterator = collection.iterator(); // Paper - decompiler fix
-
- do {
- if (!iterator.hasNext()) {
-@@ -0,0 +0,0 @@ public abstract class BlockDataAbstract implements IBlockDataHolder {
- if (comparable == null) {
- throw new IllegalArgumentException("Cannot get property " + iblockstate + " as it does not exist in " + this.a);
- } else {
-- return (Comparable) iblockstate.b().cast(comparable);
-+ return iblockstate.b().cast(comparable); // Paper - decompiler fix
- }
- }
-
-@@ -0,0 +0,0 @@ public abstract class BlockDataAbstract implements IBlockDataHolder {
- if (comparable == null) {
- throw new IllegalArgumentException("Cannot set property " + iblockstate + " as it does not exist in " + this.a);
- } else if (comparable == v0) {
-- return this;
-+ return (S) this; // Paper - decompiler fix
- } else {
- S s0 = this.e.get(iblockstate, v0);
-
diff --git a/src/main/java/net/minecraft/server/BlockPosition.java b/src/main/java/net/minecraft/server/BlockPosition.java
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
--- a/src/main/java/net/minecraft/server/BlockPosition.java
diff --git a/Spigot-Server-Patches/MC-Utils.patch b/Spigot-Server-Patches/MC-Utils.patch
index dc4849eed2..df4974773c 100644
--- a/Spigot-Server-Patches/MC-Utils.patch
+++ b/Spigot-Server-Patches/MC-Utils.patch
@@ -2318,11 +2318,11 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
@Override
public IBlockData getType(BlockPosition blockposition) {
return Blocks.AIR.getBlockData();
-diff --git a/src/main/java/net/minecraft/server/BlockDataAbstract.java b/src/main/java/net/minecraft/server/BlockDataAbstract.java
+diff --git a/src/main/java/net/minecraft/server/BlockData.java b/src/main/java/net/minecraft/server/BlockData.java
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
--- a/src/main/java/net/minecraft/server/BlockDataAbstract.java
+++ b/src/main/java/net/minecraft/server/BlockDataAbstract.java
-@@ -0,0 +0,0 @@ public abstract class BlockDataAbstract implements IBlockDataHolder {
+@@ -0,0 +0,0 @@ public abstract static class BlockDataAbstract implements IBlockDataHolder {
return Collections.unmodifiableCollection(this.d.keySet());
}
diff --git a/Spigot-Server-Patches/Optimise-BlockState-s-hashCode-equals.patch b/Spigot-Server-Patches/Optimise-BlockState-s-hashCode-equals.patch
index e6b1753a7b..b632c7e2a3 100644
--- a/Spigot-Server-Patches/Optimise-BlockState-s-hashCode-equals.patch
+++ b/Spigot-Server-Patches/Optimise-BlockState-s-hashCode-equals.patch
@@ -8,20 +8,20 @@ object identity checks safely.
Use a simpler optimized hashcode
-diff --git a/src/main/java/net/minecraft/server/BlockState.java b/src/main/java/net/minecraft/server/BlockState.java
+diff --git a/src/main/java/net/minecraft/server/IBlockState.java b/src/main/java/net/minecraft/server/IBlockState.java
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
---- a/src/main/java/net/minecraft/server/BlockState.java
-+++ b/src/main/java/net/minecraft/server/BlockState.java
-@@ -0,0 +0,0 @@ public abstract class BlockState> implements IBlockState
+--- a/src/main/java/net/minecraft/server/IBlockState.java
++++ b/src/main/java/net/minecraft/server/IBlockState.java
+@@ -0,0 +0,0 @@ public abstract class IBlockState>
}
public boolean equals(Object object) {
- if (this == object) {
- return true;
-- } else if (!(object instanceof BlockState)) {
+- } else if (!(object instanceof IBlockState)) {
- return false;
- } else {
-- BlockState> blockstate = (BlockState) object;
+- IBlockState> blockstate = (IBlockState) object;
-
- return this.a.equals(blockstate.a) && this.b.equals(blockstate.b);
- }
@@ -44,7 +44,7 @@ diff --git a/src/main/java/net/minecraft/server/BlockStateBoolean.java b/src/mai
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
--- a/src/main/java/net/minecraft/server/BlockStateBoolean.java
+++ b/src/main/java/net/minecraft/server/BlockStateBoolean.java
-@@ -0,0 +0,0 @@ public class BlockStateBoolean extends BlockState {
+@@ -0,0 +0,0 @@ public class BlockStateBoolean extends IBlockState {
return obool.toString();
}
@@ -58,7 +58,7 @@ diff --git a/src/main/java/net/minecraft/server/BlockStateEnum.java b/src/main/j
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
--- a/src/main/java/net/minecraft/server/BlockStateEnum.java
+++ b/src/main/java/net/minecraft/server/BlockStateEnum.java
-@@ -0,0 +0,0 @@ public class BlockStateEnum & INamable> extends BlockState
+@@ -0,0 +0,0 @@ public class BlockStateEnum & INamable> extends IBlockState
return ((INamable) t0).getName();
}
@@ -72,7 +72,7 @@ diff --git a/src/main/java/net/minecraft/server/BlockStateInteger.java b/src/mai
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
--- a/src/main/java/net/minecraft/server/BlockStateInteger.java
+++ b/src/main/java/net/minecraft/server/BlockStateInteger.java
-@@ -0,0 +0,0 @@ public class BlockStateInteger extends BlockState {
+@@ -0,0 +0,0 @@ public class BlockStateInteger extends IBlockState {
return this.a;
}
diff --git a/Spigot-Server-Patches/POM-Changes.patch b/Spigot-Server-Patches/POM-Changes.patch
index c7beadb737..28508323ff 100644
--- a/Spigot-Server-Patches/POM-Changes.patch
+++ b/Spigot-Server-Patches/POM-Changes.patch
@@ -16,7 +16,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
- spigot
+ paper
jar
- 1.16-R0.1-SNAPSHOT
+ 1.15.2-R0.1-SNAPSHOT
- Spigot
- https://www.spigotmc.org/
+ Paper
@@ -27,7 +27,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
+
UTF-8
unknown
- 1.16
+ 1.15.2
@@ -0,0 +0,0 @@
diff --git a/scripts/rebuildPatches.sh b/scripts/rebuildPatches.sh
index 7dd38d46fd..df1934b491 100755
--- a/scripts/rebuildPatches.sh
+++ b/scripts/rebuildPatches.sh
@@ -9,7 +9,7 @@ gitcmd="git -c commit.gpgsign=false -c core.safecrlf=false"
echo "Rebuilding patch files from current fork state..."
nofilter="0"
-if [ "$2" = "nofilter" ]; then
+if [ "$2" == "nofilter" ] || [ "$2" == "noclean" ]; then
nofilter="1"
fi
function cleanupPatches {
diff --git a/work/BuildData b/work/BuildData
index 455d45a424..be3371e674 160000
--- a/work/BuildData
+++ b/work/BuildData
@@ -1 +1 @@
-Subproject commit 455d45a4244894335cd07451bdda79ccd380aff6
+Subproject commit be3371e67489b5a2293306e24420793106baadc1
diff --git a/work/Bukkit b/work/Bukkit
index 149527f7b1..32fcd349d4 160000
--- a/work/Bukkit
+++ b/work/Bukkit
@@ -1 +1 @@
-Subproject commit 149527f7b10f992ef22186e85f13ded96ab76a63
+Subproject commit 32fcd349d4074c564116bbeb4b481332460902ee
diff --git a/work/CraftBukkit b/work/CraftBukkit
index be6aaf046e..2b00831c95 160000
--- a/work/CraftBukkit
+++ b/work/CraftBukkit
@@ -1 +1 @@
-Subproject commit be6aaf046eed614b0034ec42d5ef5e6f7de16ff0
+Subproject commit 2b00831c95f8dda096ad22ae88bc615d9dd31ea1
diff --git a/work/Spigot b/work/Spigot
index a99063f771..758abbeee4 160000
--- a/work/Spigot
+++ b/work/Spigot
@@ -1 +1 @@
-Subproject commit a99063f77142a462546e31413de6c6190e913f11
+Subproject commit 758abbeee4e12f5ff65470999dd9955d0ebb49cd