diff --git a/Spigot-Server-Patches/Add-SentientNPC-Interface-to-Entities.patch b/Spigot-Server-Patches/Add-SentientNPC-Interface-to-Entities.patch
index 501db244c5..84faabaaca 100644
--- a/Spigot-Server-Patches/Add-SentientNPC-Interface-to-Entities.patch
+++ b/Spigot-Server-Patches/Add-SentientNPC-Interface-to-Entities.patch
@@ -160,23 +160,4 @@ index 6bf30c834..3768b9573 100644
  
      public CraftSlime(CraftServer server, EntitySlime entity) {
          super(server, entity);
-diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftWaterMob.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftWaterMob.java
-index ee21d7b6e..f67dff38f 100644
---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWaterMob.java
-+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWaterMob.java
-@@ -0,0 +0,0 @@
- package org.bukkit.craftbukkit.entity;
- 
-+import com.destroystokyo.paper.entity.CraftSentientNPC;
- import net.minecraft.server.EntityWaterAnimal;
- 
- import org.bukkit.craftbukkit.CraftServer;
- import org.bukkit.entity.LivingEntity;
- import org.bukkit.entity.WaterMob;
- 
--public class CraftWaterMob extends CraftLivingEntity implements WaterMob {
-+public class CraftWaterMob extends CraftLivingEntity implements WaterMob, CraftSentientNPC { // Paper
- 
-     public CraftWaterMob(CraftServer server, EntityWaterAnimal entity) {
-         super(server, entity);
 --
\ No newline at end of file
diff --git a/Spigot-Server-Patches/Add-config-to-disable-ender-dragon-legacy-check.patch b/Spigot-Server-Patches/Add-config-to-disable-ender-dragon-legacy-check.patch
index deb77c9189..0ca219acf5 100644
--- a/Spigot-Server-Patches/Add-config-to-disable-ender-dragon-legacy-check.patch
+++ b/Spigot-Server-Patches/Add-config-to-disable-ender-dragon-legacy-check.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Add config to disable ender dragon legacy check
 
 
 diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
-index 99ad40fa3..06c54690f 100644
+index 650addb84..b2855f3ca 100644
 --- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
 +++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
 @@ -0,0 +0,0 @@ public class PaperWorldConfig {
@@ -19,7 +19,7 @@ index 99ad40fa3..06c54690f 100644
 +    }
  }
 diff --git a/src/main/java/net/minecraft/server/EnderDragonBattle.java b/src/main/java/net/minecraft/server/EnderDragonBattle.java
-index ce0dcbc68..286069746 100644
+index a20d54ee3..48bcda0f5 100644
 --- a/src/main/java/net/minecraft/server/EnderDragonBattle.java
 +++ b/src/main/java/net/minecraft/server/EnderDragonBattle.java
 @@ -0,0 +0,0 @@ public class EnderDragonBattle {
@@ -37,7 +37,7 @@ index ce0dcbc68..286069746 100644
      private EnumDragonRespawn p;
 @@ -0,0 +0,0 @@ public class EnderDragonBattle {
      public EnderDragonBattle(WorldServer worldserver, NBTTagCompound nbttagcompound) {
-         this.c = (BossBattleServer) (new BossBattleServer(new ChatMessage("entity.EnderDragon.name", new Object[0]), BossBattle.BarColor.PINK, BossBattle.BarStyle.PROGRESS)).setPlayMusic(true).c(true);
+         this.c = (BossBattleServer) (new BossBattleServer(new ChatMessage("entity.minecraft.ender_dragon", new Object[0]), BossBattle.BarColor.PINK, BossBattle.BarStyle.PROGRESS)).setPlayMusic(true).c(true);
          this.e = Lists.newArrayList();
 -        this.n = true;
 +        // Paper start
diff --git a/Spigot-Server-Patches/Allow-spawning-Item-entities-with-World.spawnEntity.patch b/Spigot-Server-Patches/Allow-spawning-Item-entities-with-World.spawnEntity.patch
index 7e29a379ca..8747174807 100644
--- a/Spigot-Server-Patches/Allow-spawning-Item-entities-with-World.spawnEntity.patch
+++ b/Spigot-Server-Patches/Allow-spawning-Item-entities-with-World.spawnEntity.patch
@@ -8,7 +8,7 @@ This API has more capabilities than .dropItem with the Consumer function
 Item can be set inside of the Consumer pre spawn function.
 
 diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
-index 36dd8ad60..e88846bb5 100644
+index 3ee663293..65ad8e588 100644
 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
 +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
 @@ -0,0 +0,0 @@ public class CraftWorld implements World {
diff --git a/Spigot-Server-Patches/Avoid-Chunk-Lookups-for-Entity-TileEntity-Current-Ch.patch b/Spigot-Server-Patches/Avoid-Chunk-Lookups-for-Entity-TileEntity-Current-Ch.patch
index f19c72debb..eb97d75404 100644
--- a/Spigot-Server-Patches/Avoid-Chunk-Lookups-for-Entity-TileEntity-Current-Ch.patch
+++ b/Spigot-Server-Patches/Avoid-Chunk-Lookups-for-Entity-TileEntity-Current-Ch.patch
@@ -10,59 +10,58 @@ to the object directly on the Entity/TileEntity object we can directly grab.
 Use that local value instead to reduce lookups in many hot places.
 
 diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java
-index 3e80825f7..4a94fd5a6 100644
+index 2612d4207..b3cdc0b7d 100644
 --- a/src/main/java/net/minecraft/server/Chunk.java
 +++ b/src/main/java/net/minecraft/server/Chunk.java
-@@ -0,0 +0,0 @@ public class Chunk {
-         // Spigot end
+@@ -0,0 +0,0 @@ public class Chunk implements IChunkAccess {
+         ((HeightMap) this.heightMap.get(heightmap_type)).a(along);
      }
  
 +    public void removeEntity(Entity entity) { b(entity); } // Paper - OBFHELPER
      public void b(Entity entity) {
-         this.a(entity, entity.ac);
+         this.a(entity, entity.af);
      }
 diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
-index c0816b9f8..52adee880 100644
+index ee061d693..1b9013ab4 100644
 --- a/src/main/java/net/minecraft/server/World.java
 +++ b/src/main/java/net/minecraft/server/World.java
-@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
+@@ -0,0 +0,0 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
          int j;
          // Paper start - Set based removal lists
-         for (Entity e : this.f) {
+         for (Entity e : this.g) {
 +            /*
              j = e.getChunkZ();
              int k = e.getChunkX();
  
-             if (e.isAddedToChunk() && this.isChunkLoaded(k, j, true)) {
+             if (e.inChunk && this.isChunkLoaded(k, j, true)) {
                  this.getChunkAt(k, j).b(e);
 -            }
 +            }*/
-+            Chunk chunk = e.isAddedToChunk() ? e.getCurrentChunk() : null;
++            Chunk chunk = e.inChunk ? e.getCurrentChunk() : null;
 +            if (chunk != null) chunk.removeEntity(e);
          }
  
-         for (Entity e : this.f) {
-@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
-             this.methodProfiler.b();
+         for (Entity e : this.g) {
+@@ -0,0 +0,0 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
+             this.methodProfiler.e();
              this.methodProfiler.a("remove");
              if (entity.dead) {
 +                // Paper start
 +                /*
-                 j = entity.ab;
-                 int l = entity.ad;
+                 j = entity.ae;
+                 int l = entity.ag;
  
--                if (entity.aa && this.isChunkLoaded(j, l, true)) {
-+                /*if (entity.aa && this.isChunkLoaded(j, l, true)) {
+                 if (entity.inChunk && this.isChunkLoaded(j, l, true)) {
                      this.getChunkAt(j, l).b(entity);
 -                }
 +                }*/
-+                Chunk chunk = entity.isAddedToChunk() ? entity.getCurrentChunk() : null;
++                Chunk chunk = entity.inChunk ? entity.getCurrentChunk() : null;
 +                if (chunk != null) chunk.removeEntity(entity);
 +                // Paper end
  
                  guardEntityList = false; // Spigot
                  this.entityList.remove(this.tickPosition--); // CraftBukkit - Use field for loop variable
-@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
+@@ -0,0 +0,0 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
                  BlockPosition blockposition = tileentity.getPosition();
  
                  // Paper start - Skip ticking in chunks scheduled for unload
@@ -71,7 +70,7 @@ index c0816b9f8..52adee880 100644
                  boolean shouldTick = chunk != null;
                  if(this.paperConfig.skipEntityTickingInChunksScheduledForUnload)
                      shouldTick = shouldTick && !chunk.isUnloading() && chunk.scheduledForUnload == null;
-@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
+@@ -0,0 +0,0 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
                  tilesThisCycle--;
                  this.tileEntityListTick.remove(tileTickPosition--);
                  //this.tileEntityList.remove(tileentity); // Paper - remove unused list
diff --git a/Spigot-Server-Patches/Cleanup-allocated-favicon-ByteBuf.patch b/Spigot-Server-Patches/Cleanup-allocated-favicon-ByteBuf.patch
deleted file mode 100644
index 8860e4e1ef..0000000000
--- a/Spigot-Server-Patches/Cleanup-allocated-favicon-ByteBuf.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Shane Freeder <theboyetronic@gmail.com>
-Date: Tue, 3 Jul 2018 19:14:38 +0100
-Subject: [PATCH] Cleanup allocated favicon ByteBuf
-
-Cleanups a bytebuffer which was allocated during the encoding of the
-favicon to be sent to the client.
-
-diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index f82e22b23..0399a48e1 100644
---- a/src/main/java/net/minecraft/server/MinecraftServer.java
-+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
-@@ -0,0 +0,0 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IAs
- 
-         if (file.isFile()) {
-             ByteBuf bytebuf = Unpooled.buffer();
-+            ByteBuf bytebuf1 = null; // Paper - cleanup favicon bytebuf
- 
-             try {
-                 BufferedImage bufferedimage = ImageIO.read(file);
-@@ -0,0 +0,0 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IAs
-                 Validate.validState(bufferedimage.getWidth() == 64, "Must be 64 pixels wide", new Object[0]);
-                 Validate.validState(bufferedimage.getHeight() == 64, "Must be 64 pixels high", new Object[0]);
-                 ImageIO.write(bufferedimage, "PNG", new ByteBufOutputStream(bytebuf));
--                ByteBuf bytebuf1 = Base64.encode(bytebuf);
-+                /*ByteBuf */ bytebuf1 = Base64.encode(bytebuf); // Paper - cleanup favicon bytebuf
- 
-                 serverping.setFavicon("data:image/png;base64," + bytebuf1.toString(StandardCharsets.UTF_8));
-             } catch (Exception exception) {
-                 MinecraftServer.LOGGER.error("Couldn\'t load server icon", exception);
-             } finally {
-                 bytebuf.release();
-+                // Paper start - cleanup favicon bytebuf
-+                if (bytebuf1 != null) {
-+                    bytebuf1.release();
-+                }
-+                // Paper end - cleanup favicon bytebuf
-             }
-         }
- 
---
\ No newline at end of file
diff --git a/Spigot-Server-Patches/Configurable-Alternative-LootPool-Luck-Formula.patch b/Spigot-Server-Patches/Configurable-Alternative-LootPool-Luck-Formula.patch
index bbee8849bb..e59224f458 100644
--- a/Spigot-Server-Patches/Configurable-Alternative-LootPool-Luck-Formula.patch
+++ b/Spigot-Server-Patches/Configurable-Alternative-LootPool-Luck-Formula.patch
@@ -53,7 +53,7 @@ index b602bbf12..62bce1806 100644
 +    }
  }
 diff --git a/src/main/java/net/minecraft/server/LotoSelectorEntry.java b/src/main/java/net/minecraft/server/LotoSelectorEntry.java
-index b2860555d..b5544bcf3 100644
+index a540167d6..d8a882191 100644
 --- a/src/main/java/net/minecraft/server/LotoSelectorEntry.java
 +++ b/src/main/java/net/minecraft/server/LotoSelectorEntry.java
 @@ -0,0 +0,0 @@ import java.util.Random;
diff --git a/Spigot-Server-Patches/Configurable-Bed-Search-Radius.patch b/Spigot-Server-Patches/Configurable-Bed-Search-Radius.patch
index db32ec9841..14d0689ab3 100644
--- a/Spigot-Server-Patches/Configurable-Bed-Search-Radius.patch
+++ b/Spigot-Server-Patches/Configurable-Bed-Search-Radius.patch
@@ -10,7 +10,7 @@ player at their bed should it of became obstructed.
 Defaults to vanilla 1.
 
 diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
-index 06c54690f..50416f40a 100644
+index b2855f3ca..d30a8ff6c 100644
 --- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
 +++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
 @@ -0,0 +0,0 @@ public class PaperWorldConfig {
@@ -30,13 +30,16 @@ index 06c54690f..50416f40a 100644
 +    }
  }
 diff --git a/src/main/java/net/minecraft/server/BlockBed.java b/src/main/java/net/minecraft/server/BlockBed.java
-index 9346bddff..f1a107991 100644
+index 6832eaac5..b9cb59fa7 100644
 --- a/src/main/java/net/minecraft/server/BlockBed.java
 +++ b/src/main/java/net/minecraft/server/BlockBed.java
 @@ -0,0 +0,0 @@ public class BlockBed extends BlockFacingHorizontal implements ITileEntity {
+ 
      @Nullable
-     public static BlockPosition a(World world, BlockPosition blockposition, int i) {
-         EnumDirection enumdirection = (EnumDirection) world.getType(blockposition).get(BlockBed.FACING);
+     public static BlockPosition a(IBlockAccess iblockaccess, BlockPosition blockposition, int i) {
++        World world = (World) iblockaccess;
++
+         EnumDirection enumdirection = (EnumDirection) iblockaccess.getType(blockposition).get(BlockBed.FACING);
 +        // Paper - replace whole method
 +        int radius = world.paperConfig.bedSearchRadius;
 +        for (int r = 1; r <= radius; r++) {
@@ -93,10 +96,10 @@ index 9346bddff..f1a107991 100644
 +        return null;*/ // Paper
      }
  
-+    protected static boolean isSafeRespawn(World world, BlockPosition blockposition) { // Paper - OBFHELPER + behavior improvement
-+        return b(world, blockposition) && world.getType(blockposition.down()).getMaterial().isBuildable(); // Paper - ensure solid block
++    protected static boolean isSafeRespawn(IBlockAccess iblockaccess, BlockPosition blockposition) { // Paper - OBFHELPER + behavior improvement
++        return a(iblockaccess, blockposition) && iblockaccess.getType(blockposition.down()).getMaterial().isBuildable(); // Paper - ensure solid block
 +    }
-     protected static boolean b(World world, BlockPosition blockposition) {
-         return world.getType(blockposition.down()).q() && !world.getType(blockposition).getMaterial().isBuildable() && !world.getType(blockposition.up()).getMaterial().isBuildable();
+     protected static boolean a(IBlockAccess iblockaccess, BlockPosition blockposition) {
+         return iblockaccess.getType(blockposition.down()).q() && !iblockaccess.getType(blockposition).getMaterial().isBuildable() && !iblockaccess.getType(blockposition.up()).getMaterial().isBuildable();
      }
 --
\ No newline at end of file
diff --git a/Spigot-Server-Patches/Configurable-sprint-interruption-on-attack.patch b/Spigot-Server-Patches/Configurable-sprint-interruption-on-attack.patch
index a53b643e0a..b7842d6892 100644
--- a/Spigot-Server-Patches/Configurable-sprint-interruption-on-attack.patch
+++ b/Spigot-Server-Patches/Configurable-sprint-interruption-on-attack.patch
@@ -19,7 +19,7 @@ index 830b99cd7..87d2dd131 100644
 +    }
  }
 diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java
-index 02f5d61c8..fc5263f08 100644
+index 65f4ea6cc..a766a1467 100644
 --- a/src/main/java/net/minecraft/server/EntityHuman.java
 +++ b/src/main/java/net/minecraft/server/EntityHuman.java
 @@ -0,0 +0,0 @@ public abstract class EntityHuman extends EntityLiving {
diff --git a/Spigot-Server-Patches/Don-t-load-chunks-for-villager-door-checks.patch b/Spigot-Server-Patches/Don-t-load-chunks-for-villager-door-checks.patch
index aa6c36b8e6..7a006f8d5b 100644
--- a/Spigot-Server-Patches/Don-t-load-chunks-for-villager-door-checks.patch
+++ b/Spigot-Server-Patches/Don-t-load-chunks-for-villager-door-checks.patch
@@ -5,39 +5,20 @@ Subject: [PATCH] Don't load chunks for villager door checks
 
 This avoids villages spam loading chunks sync
 
-diff --git a/src/main/java/net/minecraft/server/PersistentVillage.java b/src/main/java/net/minecraft/server/PersistentVillage.java
-index 01f7cee38..a3aa9f82e 100644
---- a/src/main/java/net/minecraft/server/PersistentVillage.java
-+++ b/src/main/java/net/minecraft/server/PersistentVillage.java
-@@ -0,0 +0,0 @@ public class PersistentVillage extends PersistentBase {
-     }
- 
-     private boolean f(BlockPosition blockposition) {
--        IBlockData iblockdata = this.world.getType(blockposition);
-+        // Paper start
-+        IBlockData iblockdata = this.world.getTypeIfLoaded(blockposition);
-+        if (iblockdata == null) {
-+            return false;
-+        }
-+        // Paper end
-         Block block = iblockdata.getBlock();
- 
-         return block instanceof BlockDoor ? iblockdata.getMaterial() == Material.WOOD : false;
 diff --git a/src/main/java/net/minecraft/server/Village.java b/src/main/java/net/minecraft/server/Village.java
-index 2eb33a986..9f1867ddd 100644
+index dfcabb83a..22fe23e8e 100644
 --- a/src/main/java/net/minecraft/server/Village.java
 +++ b/src/main/java/net/minecraft/server/Village.java
 @@ -0,0 +0,0 @@ public class Village {
-     }
  
-     private boolean f(BlockPosition blockposition) {
--        IBlockData iblockdata = this.a.getType(blockposition);
+     private boolean g(BlockPosition blockposition) {
+         IBlockData iblockdata = this.a.getType(blockposition);
 +        // Paper start
-+        IBlockData iblockdata = this.a.getTypeIfLoaded(blockposition);
-+        if (iblockdata == null) {
++        if (!this.a.isChunkLoaded(blockposition.getX() >> 4, blockposition.getZ() >> 4, true )) {
 +            return false;
 +        }
 +        // Paper end
++
          Block block = iblockdata.getBlock();
  
          return block instanceof BlockDoor ? iblockdata.getMaterial() == Material.WOOD : false;
diff --git a/Spigot-Server-Patches/Enderman.teleportRandomly.patch b/Spigot-Server-Patches/Enderman.teleportRandomly.patch
index 0a27e064ec..fc8467ab80 100644
--- a/Spigot-Server-Patches/Enderman.teleportRandomly.patch
+++ b/Spigot-Server-Patches/Enderman.teleportRandomly.patch
@@ -6,7 +6,7 @@ Subject: [PATCH] Enderman.teleportRandomly()
 Ability to trigger the vanilla "teleport randomly" mechanic of an enderman.
 
 diff --git a/src/main/java/net/minecraft/server/EntityEnderman.java b/src/main/java/net/minecraft/server/EntityEnderman.java
-index a9020083d..a5b517ba9 100644
+index e5eb0189d..df94b4ca9 100644
 --- a/src/main/java/net/minecraft/server/EntityEnderman.java
 +++ b/src/main/java/net/minecraft/server/EntityEnderman.java
 @@ -0,0 +0,0 @@ public class EntityEnderman extends EntityMonster {
diff --git a/Spigot-Server-Patches/EndermanAttackPlayerEvent.patch b/Spigot-Server-Patches/EndermanAttackPlayerEvent.patch
index 6768b10812..4712b74597 100644
--- a/Spigot-Server-Patches/EndermanAttackPlayerEvent.patch
+++ b/Spigot-Server-Patches/EndermanAttackPlayerEvent.patch
@@ -8,7 +8,7 @@ Allow control over whether or not an enderman aggros a player.
 This allows you to override/extend the pumpkin/stare logic.
 
 diff --git a/src/main/java/net/minecraft/server/EntityEnderman.java b/src/main/java/net/minecraft/server/EntityEnderman.java
-index 4f8dd320f..2472edfc9 100644
+index df94b4ca9..f2fcba3d9 100644
 --- a/src/main/java/net/minecraft/server/EntityEnderman.java
 +++ b/src/main/java/net/minecraft/server/EntityEnderman.java
 @@ -0,0 +0,0 @@ public class EntityEnderman extends EntityMonster {
@@ -26,5 +26,5 @@ index 4f8dd320f..2472edfc9 100644
 +        // Paper end
          ItemStack itemstack = (ItemStack) entityhuman.inventory.armor.get(3);
  
-         if (itemstack.getItem() == Item.getItemOf(Blocks.PUMPKIN)) {
+         if (itemstack.getItem() == Blocks.CARVED_PUMPKIN.getItem()) {
 --
\ No newline at end of file
diff --git a/Spigot-Server-Patches/EndermanEscapeEvent.patch b/Spigot-Server-Patches/EndermanEscapeEvent.patch
index b51b2e660a..3fad2bb843 100644
--- a/Spigot-Server-Patches/EndermanEscapeEvent.patch
+++ b/Spigot-Server-Patches/EndermanEscapeEvent.patch
@@ -8,17 +8,14 @@ Fires an event anytime an enderman intends to teleport away from the player
 You may cancel this, enabling ranged attacks to damage the enderman for example.
 
 diff --git a/src/main/java/net/minecraft/server/EntityEnderman.java b/src/main/java/net/minecraft/server/EntityEnderman.java
-index 96e29539b..a9020083d 100644
+index 96e29539b..e5eb0189d 100644
 --- a/src/main/java/net/minecraft/server/EntityEnderman.java
 +++ b/src/main/java/net/minecraft/server/EntityEnderman.java
 @@ -0,0 +0,0 @@
  package net.minecraft.server;
  
  import java.util.Optional;
-+import com.destroystokyo.paper.event.entity.EndermanEscapeEvent;
-+import com.google.common.base.Function;
-+import com.google.common.base.Predicate;
-+
++import com.destroystokyo.paper.event.entity.EndermanEscapeEvent; // Paper
  import java.util.Random;
  import java.util.UUID;
  import java.util.function.Function;
diff --git a/Spigot-Server-Patches/EntityShootBowEvent-consumeArrow-and-getArrowItem-AP.patch b/Spigot-Server-Patches/EntityShootBowEvent-consumeArrow-and-getArrowItem-AP.patch
index 52d266b0b6..c811624e4d 100644
--- a/Spigot-Server-Patches/EntityShootBowEvent-consumeArrow-and-getArrowItem-AP.patch
+++ b/Spigot-Server-Patches/EntityShootBowEvent-consumeArrow-and-getArrowItem-AP.patch
@@ -6,7 +6,7 @@ Subject: [PATCH] EntityShootBowEvent consumeArrow and getArrowItem API
 Adds ability to get what arrow was shot, and control if it should be consumed.
 
 diff --git a/src/main/java/net/minecraft/server/EntitySkeletonAbstract.java b/src/main/java/net/minecraft/server/EntitySkeletonAbstract.java
-index b92cf8e62..8f4b63c8d 100644
+index c2bc8060a..1ae967d1c 100644
 --- a/src/main/java/net/minecraft/server/EntitySkeletonAbstract.java
 +++ b/src/main/java/net/minecraft/server/EntitySkeletonAbstract.java
 @@ -0,0 +0,0 @@ public abstract class EntitySkeletonAbstract extends EntityMonster implements IR
@@ -19,7 +19,7 @@ index b92cf8e62..8f4b63c8d 100644
              event.getProjectile().remove();
              return;
 diff --git a/src/main/java/net/minecraft/server/ItemBow.java b/src/main/java/net/minecraft/server/ItemBow.java
-index e943f8054..327d31e19 100644
+index 4aa3b6249..c8fc18045 100644
 --- a/src/main/java/net/minecraft/server/ItemBow.java
 +++ b/src/main/java/net/minecraft/server/ItemBow.java
 @@ -0,0 +0,0 @@ public class ItemBow extends Item {
@@ -51,14 +51,14 @@ index e943f8054..327d31e19 100644
 @@ -0,0 +0,0 @@ public class ItemBow extends Item {
                      }
  
-                     world.a((EntityHuman) null, entityhuman.locX, entityhuman.locY, entityhuman.locZ, SoundEffects.w, SoundCategory.PLAYERS, 1.0F, 1.0F / (ItemBow.j.nextFloat() * 0.4F + 1.2F) + f * 0.5F);
+                     world.a((EntityHuman) null, entityhuman.locX, entityhuman.locY, entityhuman.locZ, SoundEffects.ENTITY_ARROW_SHOOT, SoundCategory.PLAYERS, 1.0F, 1.0F / (ItemBow.k.nextFloat() * 0.4F + 1.2F) + f * 0.5F);
 -                    if (!flag1 && !entityhuman.abilities.canInstantlyBuild) {
 +                    if (!flag1 && !entityhuman.abilities.canInstantlyBuild && consumeArrow) { // Paper
                          itemstack1.subtract(1);
                          if (itemstack1.isEmpty()) {
                              entityhuman.inventory.f(itemstack1);
 diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-index 5f816e44f..9b19c055d 100644
+index 3f9a66002..77973c1e8 100644
 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
 +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
 @@ -0,0 +0,0 @@ public class CraftEventFactory {
diff --git a/Spigot-Server-Patches/Expand-Explosions-API.patch b/Spigot-Server-Patches/Expand-Explosions-API.patch
index ea863ce2f0..feb26a7b8c 100644
--- a/Spigot-Server-Patches/Expand-Explosions-API.patch
+++ b/Spigot-Server-Patches/Expand-Explosions-API.patch
@@ -6,7 +6,7 @@ Subject: [PATCH] Expand Explosions API
 Add Entity as a Source capability, and add more API choices, and on Location.
 
 diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
-index e88846bb5..e2da30d88 100644
+index 65ad8e588..0640ca094 100644
 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
 +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
 @@ -0,0 +0,0 @@ public class CraftWorld implements World {
diff --git a/Spigot-Server-Patches/Expand-World.spawnParticle-API-and-add-Builder.patch b/Spigot-Server-Patches/Expand-World.spawnParticle-API-and-add-Builder.patch
index 120b04cd15..6995e40531 100644
--- a/Spigot-Server-Patches/Expand-World.spawnParticle-API-and-add-Builder.patch
+++ b/Spigot-Server-Patches/Expand-World.spawnParticle-API-and-add-Builder.patch
@@ -9,31 +9,35 @@ the standard API is to send the packet to everyone in the world, which is ineffe
 This adds a new Builder API which is much friendlier to use.
 
 diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java
-index c06158e02..49019d54d 100644
+index c5da2cde3..4ac2d39c5 100644
 --- a/src/main/java/net/minecraft/server/WorldServer.java
 +++ b/src/main/java/net/minecraft/server/WorldServer.java
 @@ -0,0 +0,0 @@ public class WorldServer extends World implements IAsyncTaskHandler {
-         sendParticles(null, enumparticle, flag, d0, d1, d2, i, d3, d4, d5, d6, aint);
+         // CraftBukkit - visibility api support
+         return sendParticles(null, t0, d0, d1, d2, i, d3, d4, d5, d6);
      }
- 
+-
 +    // Paper start - Particle API Expansion
-     public void sendParticles(EntityPlayer sender, EnumParticle enumparticle, boolean flag, double d0, double d1, double d2, int i, double d3, double d4, double d5, double d6, int... aint) {
-+        sendParticles(this.players, sender, enumparticle, flag, d0, d1, d2, i, d3, d4, d5, d6, aint);
++    // TODO: rework this, "flag" should probably be exposed as it was before
+     public <T extends ParticleParam> int sendParticles(EntityPlayer sender, T t0, double d0, double d1, double d2, int i, double d3, double d4, double d5, double d6) {
++        return sendParticles(this.players, sender, t0, d0, d1, d2, i, d3, d5, d5, d6);
 +    }
-+    public void sendParticles(List<? extends EntityHuman> receivers, EntityPlayer sender, EnumParticle enumparticle, boolean flag, double d0, double d1, double d2, int i, double d3, double d4, double d5, double d6, int... aint) {
++
++    public <T extends ParticleParam> int sendParticles(List<EntityHuman> receivers, EntityPlayer sender, T t0, double d0, double d1, double d2, int i, double d3, double d4, double d5, double d6) {
 +        // Paper end
          // CraftBukkit end
-         PacketPlayOutWorldParticles packetplayoutworldparticles = new PacketPlayOutWorldParticles(enumparticle, flag, (float) d0, (float) d1, (float) d2, (float) d3, (float) d4, (float) d5, (float) d6, i, aint);
+         PacketPlayOutWorldParticles packetplayoutworldparticles = new PacketPlayOutWorldParticles(t0, false, (float) d0, (float) d1, (float) d2, (float) d3, (float) d4, (float) d5, (float) d6, i);
+         int j = 0;
  
--        for (int j = 0; j < this.players.size(); ++j) {
--            EntityPlayer entityplayer = (EntityPlayer) this.players.get(j);
+-        for (int k = 0; k < this.players.size(); ++k) {
+-            EntityPlayer entityplayer = (EntityPlayer) this.players.get(k);
 +        for (EntityHuman entityhuman : receivers) { // Paper - Particle API Expansion
 +            EntityPlayer entityplayer = (EntityPlayer) entityhuman; // Paper - Particle API Expansion
              if (sender != null && !entityplayer.getBukkitEntity().canSee(sender.getBukkitEntity())) continue; // CraftBukkit
-             BlockPosition blockposition = entityplayer.getChunkCoordinates();
-             double d7 = blockposition.distanceSquared(d0, d1, d2);
+ 
+             if (this.a(entityplayer, false, d0, d1, d2, packetplayoutworldparticles)) {
 diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
-index 568a50ec4..36dd8ad60 100644
+index 817e29474..3ee663293 100644
 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
 +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
 @@ -0,0 +0,0 @@ public class CraftWorld implements World {
@@ -41,6 +45,7 @@ index 568a50ec4..36dd8ad60 100644
      }
  
 +    // Paper start - Particle API Expansion
++    // TODO: Add back extended?
      @Override
 -    public <T> void spawnParticle(Particle particle, double x, double y, double z, int count, double offsetX, double offsetY, double offsetZ, double extra, T data) {
 +    public <T> void spawnParticle(Particle particle, List<Player> receivers, Player sender, double x, double y, double z, int count, double offsetX, double offsetY, double offsetZ, double extra, T data) {
@@ -52,7 +57,7 @@ index 568a50ec4..36dd8ad60 100644
 -                null, // Sender
 +                receivers == null ? getHandle().players : receivers.stream().map(player -> ((CraftPlayer) player).getHandle()).collect(java.util.stream.Collectors.toList()), // Paper -  Particle API Expansion
 +                sender != null ? ((CraftPlayer) sender).getHandle() : null, // Sender // Paper - Particle API Expansion
-                 CraftParticle.toNMS(particle), // Particle
-                 true, // Extended range
+                 CraftParticle.toNMS(particle, data), // Particle
                  x, y, z, // Position
+                 count,  // Count
 --
\ No newline at end of file
diff --git a/Spigot-Server-Patches/Fire-EntityShootBowEvent-for-Illusioner.patch b/Spigot-Server-Patches/Fire-EntityShootBowEvent-for-Illusioner.patch
index 9c87cee148..c357141d8d 100644
--- a/Spigot-Server-Patches/Fire-EntityShootBowEvent-for-Illusioner.patch
+++ b/Spigot-Server-Patches/Fire-EntityShootBowEvent-for-Illusioner.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Fire EntityShootBowEvent for Illusioner
 
 
 diff --git a/src/main/java/net/minecraft/server/EntityIllagerIllusioner.java b/src/main/java/net/minecraft/server/EntityIllagerIllusioner.java
-index e03650448..ad81bd059 100644
+index d03fa6318..16c3be42e 100644
 --- a/src/main/java/net/minecraft/server/EntityIllagerIllusioner.java
 +++ b/src/main/java/net/minecraft/server/EntityIllagerIllusioner.java
 @@ -0,0 +0,0 @@ public class EntityIllagerIllusioner extends EntityIllagerWizard implements IRan
@@ -22,10 +22,10 @@ index e03650448..ad81bd059 100644
 +        if (event.getProjectile() == entityarrow.getBukkitEntity()) {
 +            this.world.addEntity(entityarrow);
 +        }
-         this.a(SoundEffects.gW, 1.0F, 1.0F / (this.getRandom().nextFloat() * 0.4F + 0.8F));
+         this.a(SoundEffects.ENTITY_SKELETON_SHOOT, 1.0F, 1.0F / (this.getRandom().nextFloat() * 0.4F + 0.8F));
 -        this.world.addEntity(entityarrow);
 +        // Paper end
      }
  
-     protected EntityArrow r(float f) {
+     protected EntityArrow v(float f) {
 --
\ No newline at end of file
diff --git a/Spigot-Server-Patches/Fix-CraftEntity-hashCode.patch b/Spigot-Server-Patches/Fix-CraftEntity-hashCode.patch
index 8dc73385a8..1f876b6e22 100644
--- a/Spigot-Server-Patches/Fix-CraftEntity-hashCode.patch
+++ b/Spigot-Server-Patches/Fix-CraftEntity-hashCode.patch
@@ -21,7 +21,7 @@ check is essentially the same as this.getHandle() == other.getHandle()
 However, replaced it too to make it clearer of intent.
 
 diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
-index bf7e6ed3f..47edc0494 100644
+index 6d4dc539c..7da6a25f1 100644
 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
 +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
 @@ -0,0 +0,0 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
diff --git a/Spigot-Server-Patches/Ignore-Missing-Recipes-in-RecipeBook-to-avoid-data-e.patch b/Spigot-Server-Patches/Ignore-Missing-Recipes-in-RecipeBook-to-avoid-data-e.patch
index 7308494e82..32f57fa2b4 100644
--- a/Spigot-Server-Patches/Ignore-Missing-Recipes-in-RecipeBook-to-avoid-data-e.patch
+++ b/Spigot-Server-Patches/Ignore-Missing-Recipes-in-RecipeBook-to-avoid-data-e.patch
@@ -6,36 +6,32 @@ Subject: [PATCH] Ignore Missing Recipes in RecipeBook to avoid data errors
 This code was causing NPE's in saving player data, potentially related to reloads.
 
 diff --git a/src/main/java/net/minecraft/server/RecipeBookServer.java b/src/main/java/net/minecraft/server/RecipeBookServer.java
-index 7eecdc9da..f65e74ebd 100644
+index 71d6c4552..893f67094 100644
 --- a/src/main/java/net/minecraft/server/RecipeBookServer.java
 +++ b/src/main/java/net/minecraft/server/RecipeBookServer.java
 @@ -0,0 +0,0 @@ public class RecipeBookServer extends RecipeBook {
          while (iterator.hasNext()) {
-             IRecipe irecipe = (IRecipe) iterator.next();
+             MinecraftKey minecraftkey = (MinecraftKey) iterator.next();
  
--            nbttaglist.add(new NBTTagString(((MinecraftKey) CraftingManager.recipes.b(irecipe)).toString()));
+-            nbttaglist.add((NBTBase) (new NBTTagString(minecraftkey.toString())));
 +            // Paper start - ignore missing recipes
-+            MinecraftKey key = CraftingManager.recipes.b(irecipe);
-+            if (key == null) continue;
-+            nbttaglist.add(new NBTTagString(key.toString()));
++            IRecipe recipe = this.h.a(minecraftkey);
++            if (recipe == null) continue;
++            nbttaglist.add(new NBTTagString(minecraftkey.toString()))
 +            // Paper end
          }
  
          nbttagcompound.set("recipes", nbttaglist);
 @@ -0,0 +0,0 @@ public class RecipeBookServer extends RecipeBook {
-         Iterator iterator1 = this.e().iterator();
- 
          while (iterator1.hasNext()) {
--            IRecipe irecipe1 = (IRecipe) iterator1.next();
-+            // Paper start - ignore missing recipes
-+            IRecipe irecipe = (IRecipe) iterator1.next();
+             MinecraftKey minecraftkey1 = (MinecraftKey) iterator1.next();
  
--            nbttaglist1.add(new NBTTagString(((MinecraftKey) CraftingManager.recipes.b(irecipe1)).toString()));
-+            MinecraftKey key = CraftingManager.recipes.b(irecipe);
-+            if (key == null) continue;
-+            nbttaglist1.add(new NBTTagString(key.toString()));
++            // Paper start - ignore missing recipes
++            IRecipe recipe = this.h.a(minecraftkey1);
++            if (recipe == null) continue;
 +            // Paper end
++
+             nbttaglist1.add((NBTBase) (new NBTTagString(minecraftkey1.toString())));
          }
  
-         nbttagcompound.set("toBeDisplayed", nbttaglist1);
 --
\ No newline at end of file
diff --git a/Spigot-Server-Patches/Implement-EntityKnockbackByEntityEvent.patch b/Spigot-Server-Patches/Implement-EntityKnockbackByEntityEvent.patch
index 8656aab515..a86bc3dd84 100644
--- a/Spigot-Server-Patches/Implement-EntityKnockbackByEntityEvent.patch
+++ b/Spigot-Server-Patches/Implement-EntityKnockbackByEntityEvent.patch
@@ -6,7 +6,7 @@ Subject: [PATCH] Implement EntityKnockbackByEntityEvent
 This event is called when an entity receives knockback by another entity.
 
 diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
-index 65bc19b17..156bf8ee0 100644
+index 1932d38a8..1d7b9c525 100644
 --- a/src/main/java/net/minecraft/server/EntityLiving.java
 +++ b/src/main/java/net/minecraft/server/EntityLiving.java
 @@ -0,0 +0,0 @@ public abstract class EntityLiving extends Entity {
diff --git a/Spigot-Server-Patches/Implement-EntityTeleportEndGatewayEvent.patch b/Spigot-Server-Patches/Implement-EntityTeleportEndGatewayEvent.patch
index 59c0553db7..f57eceaaaf 100644
--- a/Spigot-Server-Patches/Implement-EntityTeleportEndGatewayEvent.patch
+++ b/Spigot-Server-Patches/Implement-EntityTeleportEndGatewayEvent.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Implement EntityTeleportEndGatewayEvent
 
 
 diff --git a/src/main/java/net/minecraft/server/TileEntityEndGateway.java b/src/main/java/net/minecraft/server/TileEntityEndGateway.java
-index ecbc48b0c..557f06017 100644
+index c3d30dc94..fd9be7574 100644
 --- a/src/main/java/net/minecraft/server/TileEntityEndGateway.java
 +++ b/src/main/java/net/minecraft/server/TileEntityEndGateway.java
 @@ -0,0 +0,0 @@ public class TileEntityEndGateway extends TileEntityEnderPortal implements ITick
@@ -28,5 +28,5 @@ index ecbc48b0c..557f06017 100644
 +                // Paper end - EntityTeleportEndGatewayEvent
              }
  
-             this.h();
+             this.f();
 --
\ No newline at end of file
diff --git a/Spigot-Server-Patches/Implement-World.getEntity-UUID-API.patch b/Spigot-Server-Patches/Implement-World.getEntity-UUID-API.patch
index 704ddbda8e..5fa2786672 100644
--- a/Spigot-Server-Patches/Implement-World.getEntity-UUID-API.patch
+++ b/Spigot-Server-Patches/Implement-World.getEntity-UUID-API.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Implement World.getEntity(UUID) API
 
 
 diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
-index e2da30d88..210e3bc4e 100644
+index 0640ca094..6705864a7 100644
 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
 +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
 @@ -0,0 +0,0 @@ public class CraftWorld implements World {
diff --git a/Spigot-Server-Patches/Improve-ProjectileHitEvent-to-include-the-BlockFace-.patch b/Spigot-Server-Patches/Improve-ProjectileHitEvent-to-include-the-BlockFace-.patch
index 6aa4ca7209..f0cbacf3a5 100644
--- a/Spigot-Server-Patches/Improve-ProjectileHitEvent-to-include-the-BlockFace-.patch
+++ b/Spigot-Server-Patches/Improve-ProjectileHitEvent-to-include-the-BlockFace-.patch
@@ -6,7 +6,7 @@ Subject: [PATCH] Improve ProjectileHitEvent to include the BlockFace where the
 
 
 diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-index 9b19c055d..248873fb4 100644
+index 77973c1e8..c129e8629 100644
 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
 +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
 @@ -0,0 +0,0 @@ public class CraftEventFactory {
diff --git a/Spigot-Server-Patches/InventoryCloseEvent-Reason-API.patch b/Spigot-Server-Patches/InventoryCloseEvent-Reason-API.patch
index 4be14de8b1..6e0c2f4b66 100644
--- a/Spigot-Server-Patches/InventoryCloseEvent-Reason-API.patch
+++ b/Spigot-Server-Patches/InventoryCloseEvent-Reason-API.patch
@@ -7,10 +7,10 @@ Allows you to determine why an inventory was closed, enabling plugin developers
 to "confirm" things based on if it was player triggered close or not.
 
 diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java
-index 8c96e7318..3e80825f7 100644
+index f31524eb0..2612d4207 100644
 --- a/src/main/java/net/minecraft/server/Chunk.java
 +++ b/src/main/java/net/minecraft/server/Chunk.java
-@@ -0,0 +0,0 @@ public class Chunk {
+@@ -0,0 +0,0 @@ public class Chunk implements IChunkAccess {
                  {
                      if ( h instanceof org.bukkit.craftbukkit.entity.CraftHumanEntity )
                      {
@@ -19,7 +19,7 @@ index 8c96e7318..3e80825f7 100644
                      }
                  }
              }
-@@ -0,0 +0,0 @@ public class Chunk {
+@@ -0,0 +0,0 @@ public class Chunk implements IChunkAccess {
                      {
                          if ( h instanceof org.bukkit.craftbukkit.entity.CraftHumanEntity )
                          {
@@ -29,12 +29,12 @@ index 8c96e7318..3e80825f7 100644
                      }
                  }
 diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java
-index 0b51903e2..aa0b27f0e 100644
+index a766a1467..cbf663573 100644
 --- a/src/main/java/net/minecraft/server/EntityHuman.java
 +++ b/src/main/java/net/minecraft/server/EntityHuman.java
 @@ -0,0 +0,0 @@ public abstract class EntityHuman extends EntityLiving {
- 
-         super.B_();
+         this.df();
+         super.tick();
          if (!this.world.isClientSide && this.activeContainer != null && !this.activeContainer.canUse(this)) {
 -            this.closeInventory();
 +            this.closeInventory(org.bukkit.event.inventory.InventoryCloseEvent.Reason.CANT_USE); // Paper
@@ -56,7 +56,7 @@ index 0b51903e2..aa0b27f0e 100644
          this.activeContainer = this.defaultContainer;
      }
 diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java
-index cce3f98da..4ff505cfa 100644
+index c91caf578..59dc239b8 100644
 --- a/src/main/java/net/minecraft/server/EntityPlayer.java
 +++ b/src/main/java/net/minecraft/server/EntityPlayer.java
 @@ -0,0 +0,0 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
@@ -78,7 +78,7 @@ index cce3f98da..4ff505cfa 100644
          // CraftBukkit end
  
 @@ -0,0 +0,0 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
-             this.a((new ChatMessage("container.spectatorCantOpen", new Object[0])).setChatModifier((new ChatModifier()).setColor(EnumChatFormat.RED)), true);
+             this.a((new ChatMessage("container.spectatorCantOpen", new Object[0])).a(EnumChatFormat.RED), true);
          } else {
              if (this.activeContainer != this.defaultContainer) {
 -                this.closeInventory();
@@ -107,27 +107,27 @@ index cce3f98da..4ff505cfa 100644
 +        CraftEventFactory.handleInventoryCloseEvent(this, reason); // CraftBukkit
 +        // Paper end
          this.playerConnection.sendPacket(new PacketPlayOutCloseWindow(this.activeContainer.windowId));
-         this.r();
+         this.m();
      }
 diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
-index 36833b961..a54203c56 100644
+index 5fe01e7ef..4ed107eac 100644
 --- a/src/main/java/net/minecraft/server/PlayerConnection.java
 +++ b/src/main/java/net/minecraft/server/PlayerConnection.java
 @@ -0,0 +0,0 @@ public class PlayerConnection implements PacketListenerPlayIn, ITickable {
-         PlayerConnectionUtils.ensureMainThread(packetplayinclosewindow, this, this.player.x());
+         PlayerConnectionUtils.ensureMainThread(packetplayinclosewindow, this, this.player.getWorldServer());
  
          if (this.player.isFrozen()) return; // CraftBukkit
 -        CraftEventFactory.handleInventoryCloseEvent(this.player); // CraftBukkit
 +        CraftEventFactory.handleInventoryCloseEvent(this.player, org.bukkit.event.inventory.InventoryCloseEvent.Reason.PLAYER); // CraftBukkit // Paper
  
-         this.player.r();
+         this.player.m();
      }
 diff --git a/src/main/java/net/minecraft/server/PlayerList.java b/src/main/java/net/minecraft/server/PlayerList.java
-index b478f385a..eaaa54acd 100644
+index c1de6564a..d397c6c74 100644
 --- a/src/main/java/net/minecraft/server/PlayerList.java
 +++ b/src/main/java/net/minecraft/server/PlayerList.java
 @@ -0,0 +0,0 @@ public abstract class PlayerList {
-         entityplayer.b(StatisticList.f);
+         entityplayer.a(StatisticList.LEAVE_GAME);
  
          // CraftBukkit start - Quitting must be before we do final save of data, in case plugins need to modify it
 -        org.bukkit.craftbukkit.event.CraftEventFactory.handleInventoryCloseEvent(entityplayer);
@@ -136,7 +136,7 @@ index b478f385a..eaaa54acd 100644
          PlayerQuitEvent playerQuitEvent = new PlayerQuitEvent(cserver.getPlayer(entityplayer), "\u00A7e" + entityplayer.getName() + " left the game");
          cserver.getPluginManager().callEvent(playerQuitEvent);
 diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java
-index d85b5defc..05ca403e8 100644
+index 4b9ecb4a6..b602a5d1b 100644
 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java
 +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java
 @@ -0,0 +0,0 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
@@ -155,7 +155,7 @@ index d85b5defc..05ca403e8 100644
      public boolean isBlocking() {
          return getHandle().isBlocking();
 diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index c0f4cec4d..6cbf429ff 100644
+index 3b76c7080..79ade89c5 100644
 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
 +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
 @@ -0,0 +0,0 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@@ -168,7 +168,7 @@ index c0f4cec4d..6cbf429ff 100644
  
          // Check if the fromWorld and toWorld are the same.
 diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-index 248873fb4..cce4acc0b 100644
+index c129e8629..81ba63bab 100644
 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
 +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
 @@ -0,0 +0,0 @@ public class CraftEventFactory {
diff --git a/Spigot-Server-Patches/ItemStack-getMaxItemUseDuration.patch b/Spigot-Server-Patches/ItemStack-getMaxItemUseDuration.patch
index 9d41164ccd..85ca27f00c 100644
--- a/Spigot-Server-Patches/ItemStack-getMaxItemUseDuration.patch
+++ b/Spigot-Server-Patches/ItemStack-getMaxItemUseDuration.patch
@@ -6,19 +6,19 @@ Subject: [PATCH] ItemStack#getMaxItemUseDuration
 Allows you to determine how long it takes to use a usable/consumable item
 
 diff --git a/src/main/java/net/minecraft/server/ItemStack.java b/src/main/java/net/minecraft/server/ItemStack.java
-index f6b802dc8..6521bb508 100644
+index be6205275..a4a5058da 100644
 --- a/src/main/java/net/minecraft/server/ItemStack.java
 +++ b/src/main/java/net/minecraft/server/ItemStack.java
 @@ -0,0 +0,0 @@ public final class ItemStack {
          this.getItem().b(this, world, entityhuman);
      }
  
-+    public int getItemUseMaxDuration() { return m(); } // Paper - OBFHELPER
-     public int m() {
-         return this.getItem().e(this);
++    public int getItemUseMaxDuration() { return k(); } // Paper - OBFHELPER
+     public int k() {
+         return this.getItem().c(this);
      }
 diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java
-index aa99254ff..be6589dbf 100644
+index b1e0d6185..03f611518 100644
 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java
 +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java
 @@ -0,0 +0,0 @@ public final class CraftItemStack extends ItemStack {
diff --git a/Spigot-Server-Patches/LivingEntity-Hand-Raised-Item-Use-API.patch b/Spigot-Server-Patches/LivingEntity-Hand-Raised-Item-Use-API.patch
index a84f046650..b34e8d283b 100644
--- a/Spigot-Server-Patches/LivingEntity-Hand-Raised-Item-Use-API.patch
+++ b/Spigot-Server-Patches/LivingEntity-Hand-Raised-Item-Use-API.patch
@@ -6,29 +6,29 @@ Subject: [PATCH] LivingEntity Hand Raised/Item Use API
 How long an entity has raised hands to charge an attack or use an item
 
 diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
-index 156bf8ee0..14637be49 100644
+index 1d7b9c525..6036915a8 100644
 --- a/src/main/java/net/minecraft/server/EntityLiving.java
 +++ b/src/main/java/net/minecraft/server/EntityLiving.java
 @@ -0,0 +0,0 @@ public abstract class EntityLiving extends Entity {
  
      }
  
-+    public ItemStack getActiveItem() { return cJ(); } // Paper - OBFHELPER
-     public ItemStack cJ() {
++    public ItemStack getActiveItem() { return cV(); } // Paper - OBFHELPER
+     public ItemStack cV() {
          return this.activeItem;
      }
  
-+    public int getItemUseRemainingTime() { return cK(); } // Paper - OBFHELPER
-     public int cK() {
-         return this.bp;
++    public int getItemUseRemainingTime() { return cW(); } // Paper - OBFHELPER
+     public int cW() {
+         return this.bu;
      }
  
-+    public int getHandRaisedTime() { return cL(); } // Paper - OBFHELPER
-     public int cL() {
-         return this.isHandRaised() ? this.activeItem.m() - this.cK() : 0;
++    public int getHandRaisedTime() { return cX(); } // Paper - OBFHELPER
+     public int cX() {
+         return this.isHandRaised() ? this.activeItem.k() - this.cW() : 0;
      }
 diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
-index 14fb474f7..9c750efc7 100644
+index 0237ac769..8b3659c82 100644
 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
 +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
 @@ -0,0 +0,0 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
diff --git a/Spigot-Server-Patches/MC-99321-Dont-check-for-blocked-double-chest-for-hop.patch b/Spigot-Server-Patches/MC-99321-Dont-check-for-blocked-double-chest-for-hop.patch
deleted file mode 100644
index 28e2c26a90..0000000000
--- a/Spigot-Server-Patches/MC-99321-Dont-check-for-blocked-double-chest-for-hop.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Aikar <aikar@aikar.co>
-Date: Wed, 24 Jan 2018 20:06:39 -0500
-Subject: [PATCH] MC-99321 - Dont check for blocked double chest for hoppers
- etc
-
-This is a source of MAJOR lag for hoppers, as well as a gameplay bug.
-
-This removes the necessity to disable the cat on chest behavior to improve performance.
-
-now performance will be improved even if you have cat chest detection on.
-
-diff --git a/src/main/java/net/minecraft/server/BlockChest.java b/src/main/java/net/minecraft/server/BlockChest.java
-index 633c75ffe..68cdd3970 100644
---- a/src/main/java/net/minecraft/server/BlockChest.java
-+++ b/src/main/java/net/minecraft/server/BlockChest.java
-@@ -0,0 +0,0 @@ public class BlockChest extends BlockTileEntity implements IFluidSource, IFluidC
- 
-                     if (blockpropertychesttype1 != BlockPropertyChestType.SINGLE && blockpropertychesttype != blockpropertychesttype1 && iblockdata1.get(BlockChest.FACING) == iblockdata.get(BlockChest.FACING)) {
-                         if (!flag && this.a(world, blockposition1)) {
-+                        //if (!flag && this.e(world, blockposition1)) { // Paper - check for allowBlocked flag - MC-99321
-                             return null;
-                         }
- 
---
\ No newline at end of file
diff --git a/Spigot-Server-Patches/Make-shield-blocking-delay-configurable.patch b/Spigot-Server-Patches/Make-shield-blocking-delay-configurable.patch
index 418aed1f30..2059ddfcb4 100644
--- a/Spigot-Server-Patches/Make-shield-blocking-delay-configurable.patch
+++ b/Spigot-Server-Patches/Make-shield-blocking-delay-configurable.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Make shield blocking delay configurable
 
 
 diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
-index 03a9a96fc..99ad40fa3 100644
+index 5a9c68e4f..650addb84 100644
 --- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
 +++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
 @@ -0,0 +0,0 @@ public class PaperWorldConfig {
@@ -19,20 +19,20 @@ index 03a9a96fc..99ad40fa3 100644
 +    }
  }
 diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
-index 9adcabd4f..65bc19b17 100644
+index 401410b87..1932d38a8 100644
 --- a/src/main/java/net/minecraft/server/EntityLiving.java
 +++ b/src/main/java/net/minecraft/server/EntityLiving.java
 @@ -0,0 +0,0 @@ public abstract class EntityLiving extends Entity {
          if (this.isHandRaised() && !this.activeItem.isEmpty()) {
              Item item = this.activeItem.getItem();
  
--            return item.f(this.activeItem) != EnumAnimation.BLOCK ? false : item.e(this.activeItem) - this.bp >= 5;
-+            return item.f(this.activeItem) != EnumAnimation.BLOCK ? false : item.e(this.activeItem) - this.bp >= getShieldBlockingDelay(); // Paper - shieldBlockingDelay
+-            return item.d(this.activeItem) != EnumAnimation.BLOCK ? false : item.c(this.activeItem) - this.bu >= 5;
++            return item.d(this.activeItem) != EnumAnimation.BLOCK ? false : item.c(this.activeItem) - this.bu >= getShieldBlockingDelay(); // Paper - shieldBlockingDelay
          } else {
              return false;
          }
 @@ -0,0 +0,0 @@ public abstract class EntityLiving extends Entity {
-     public boolean cS() {
+     public boolean de() {
          return true;
      }
 +
@@ -49,7 +49,7 @@ index 9adcabd4f..65bc19b17 100644
 +    // Paper end
  }
 diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
-index a7b076377..14fb474f7 100644
+index 487bb9ece..0237ac769 100644
 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
 +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
 @@ -0,0 +0,0 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
diff --git a/Spigot-Server-Patches/Player.setPlayerProfile-API.patch b/Spigot-Server-Patches/Player.setPlayerProfile-API.patch
index 6e424eab61..74c45ce213 100644
--- a/Spigot-Server-Patches/Player.setPlayerProfile-API.patch
+++ b/Spigot-Server-Patches/Player.setPlayerProfile-API.patch
@@ -6,7 +6,7 @@ Subject: [PATCH] Player.setPlayerProfile API
 This can be useful for changing name or skins after a player has logged in.
 
 diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java
-index 4fb300468..02f5d61c8 100644
+index 4fb300468..65f4ea6cc 100644
 --- a/src/main/java/net/minecraft/server/EntityHuman.java
 +++ b/src/main/java/net/minecraft/server/EntityHuman.java
 @@ -0,0 +0,0 @@ public abstract class EntityHuman extends EntityLiving {
@@ -14,7 +14,7 @@ index 4fb300468..02f5d61c8 100644
      protected float ca = 0.02F;
      private int g;
 -    private final GameProfile h;
-+    private final GameProfile h; public void setProfile(GameProfile profile) { this.h = profile; } // Paper - OBFHELPER
++    private GameProfile h; public void setProfile(GameProfile profile) { this.h = profile; } // Paper - OBFHELPER
      private ItemStack cd;
      private final ItemCooldown ce;
      @Nullable
diff --git a/Spigot-Server-Patches/PlayerReadyArrowEvent.patch b/Spigot-Server-Patches/PlayerReadyArrowEvent.patch
index a4917870fd..c58b63e3aa 100644
--- a/Spigot-Server-Patches/PlayerReadyArrowEvent.patch
+++ b/Spigot-Server-Patches/PlayerReadyArrowEvent.patch
@@ -7,7 +7,7 @@ Called when a player is firing a bow and the server is choosing an arrow to use.
 Plugins can skip selection of certain arrows and control which is used.
 
 diff --git a/src/main/java/net/minecraft/server/ItemBow.java b/src/main/java/net/minecraft/server/ItemBow.java
-index 327d31e19..44e7be58e 100644
+index c8fc18045..de0d80361 100644
 --- a/src/main/java/net/minecraft/server/ItemBow.java
 +++ b/src/main/java/net/minecraft/server/ItemBow.java
 @@ -0,0 +0,0 @@
@@ -18,23 +18,23 @@ index 327d31e19..44e7be58e 100644
  
  public class ItemBow extends Item {
 @@ -0,0 +0,0 @@ public class ItemBow extends Item {
-         });
+         // CraftBukkit end
      }
  
 -    private ItemStack a(EntityHuman entityhuman) {
--        if (this.d(entityhuman.b(EnumHand.OFF_HAND))) {
+-        if (this.e_(entityhuman.b(EnumHand.OFF_HAND))) {
 +    private ItemStack a(EntityHuman entityhuman, ItemStack bow) { // Paper
-+        if (this.d(entityhuman, bow, entityhuman.b(EnumHand.OFF_HAND))) { // Paper
++        if (this.e_(entityhuman, bow, entityhuman.b(EnumHand.OFF_HAND))) { // Paper
              return entityhuman.b(EnumHand.OFF_HAND);
--        } else if (this.d(entityhuman.b(EnumHand.MAIN_HAND))) {
-+        } else if (this.d(entityhuman, bow, entityhuman.b(EnumHand.MAIN_HAND))) { // Paper
+-        } else if (this.e_(entityhuman.b(EnumHand.MAIN_HAND))) {
++        } else if (this.e_(entityhuman, bow, entityhuman.b(EnumHand.MAIN_HAND))) {
              return entityhuman.b(EnumHand.MAIN_HAND);
          } else {
              for (int i = 0; i < entityhuman.inventory.getSize(); ++i) {
                  ItemStack itemstack = entityhuman.inventory.getItem(i);
  
--                if (this.d(itemstack)) {
-+                if (this.d(entityhuman, bow, itemstack)) { // Paper
+-                if (this.e_(itemstack)) {
++                if (this.e_(entityhuman, bow, itemstack)) {
                      return itemstack;
                  }
              }
@@ -42,10 +42,10 @@ index 327d31e19..44e7be58e 100644
          }
      }
  
--    protected boolean d(ItemStack itemstack) {
+-    protected boolean e_(ItemStack itemstack) {
 -        return itemstack.getItem() instanceof ItemArrow;
 +    // Paper start
-+    protected boolean d(EntityHuman player, ItemStack bow, ItemStack itemstack) {
++    protected boolean e_(EntityHuman player, ItemStack bow, ItemStack itemstack) {
 +        return itemstack.getItem() instanceof ItemArrow && (
 +                !(player instanceof EntityPlayer) ||
 +                new com.destroystokyo.paper.event.player.PlayerReadyArrowEvent(
diff --git a/Spigot-Server-Patches/Print-Error-details-when-failing-to-save-player-data.patch b/Spigot-Server-Patches/Print-Error-details-when-failing-to-save-player-data.patch
index 4f0f40e3cd..de39da0b87 100644
--- a/Spigot-Server-Patches/Print-Error-details-when-failing-to-save-player-data.patch
+++ b/Spigot-Server-Patches/Print-Error-details-when-failing-to-save-player-data.patch
@@ -5,14 +5,14 @@ Subject: [PATCH] Print Error details when failing to save player data
 
 
 diff --git a/src/main/java/net/minecraft/server/WorldNBTStorage.java b/src/main/java/net/minecraft/server/WorldNBTStorage.java
-index 4e33cc2f2..4bb6f600d 100644
+index cbfdb3cf7..9a243010d 100644
 --- a/src/main/java/net/minecraft/server/WorldNBTStorage.java
 +++ b/src/main/java/net/minecraft/server/WorldNBTStorage.java
 @@ -0,0 +0,0 @@ public class WorldNBTStorage implements IDataManager, IPlayerFileData {
  
              file.renameTo(file1);
          } catch (Exception exception) {
--            WorldNBTStorage.b.warn("Failed to save player data for {}", entityhuman.getName());
+-            WorldNBTStorage.b.warn("Failed to save player data for {}", entityhuman.getDisplayName().getString());
 +            WorldNBTStorage.b.error("Failed to save player data for {}", entityhuman.getName(), exception); // Paper
          }
  
diff --git a/Spigot-Server-Patches/Properly-remove-entities-on-dimension-teleport.patch b/Spigot-Server-Patches/Properly-remove-entities-on-dimension-teleport.patch
index 24aba42aba..897cba5442 100644
--- a/Spigot-Server-Patches/Properly-remove-entities-on-dimension-teleport.patch
+++ b/Spigot-Server-Patches/Properly-remove-entities-on-dimension-teleport.patch
@@ -22,10 +22,10 @@ requirement, but plugins (such as my own) use this method to
 trigger a "reload" of the entity on the client.
 
 diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
-index 7b17c32bb..d03e7c24f 100644
+index cd1639e26..ea42800ae 100644
 --- a/src/main/java/net/minecraft/server/Entity.java
 +++ b/src/main/java/net/minecraft/server/Entity.java
-@@ -0,0 +0,0 @@ public abstract class Entity implements ICommandListener, KeyedObject { // Paper
+@@ -0,0 +0,0 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
              }
              // CraftBukkit end */
  
@@ -35,7 +35,7 @@ index 7b17c32bb..d03e7c24f 100644
              this.world.methodProfiler.a("reposition");
              /* CraftBukkit start - Handled in calculateTarget
 diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java
-index 49019d54d..9fe5c4406 100644
+index 4ac2d39c5..d6d3ffa6f 100644
 --- a/src/main/java/net/minecraft/server/WorldServer.java
 +++ b/src/main/java/net/minecraft/server/WorldServer.java
 @@ -0,0 +0,0 @@ public class WorldServer extends World implements IAsyncTaskHandler {
diff --git a/Spigot-Server-Patches/RangedEntity-API.patch b/Spigot-Server-Patches/RangedEntity-API.patch
index fbc618217f..4900b527bb 100644
--- a/Spigot-Server-Patches/RangedEntity-API.patch
+++ b/Spigot-Server-Patches/RangedEntity-API.patch
@@ -32,7 +32,7 @@ index 000000000..696660b08
 +    }
 +}
 diff --git a/src/main/java/net/minecraft/server/IRangedEntity.java b/src/main/java/net/minecraft/server/IRangedEntity.java
-index a8af5917c..ba8b47c02 100644
+index 4fd69850f..7fe65b7c2 100644
 --- a/src/main/java/net/minecraft/server/IRangedEntity.java
 +++ b/src/main/java/net/minecraft/server/IRangedEntity.java
 @@ -0,0 +0,0 @@ package net.minecraft.server;
@@ -42,9 +42,8 @@ index a8af5917c..ba8b47c02 100644
 -    void a(EntityLiving entityliving, float f);
 +    void a(EntityLiving entityliving, float f); default void rangedAttack(EntityLiving entityliving, float f) { a(entityliving, f); } // Paper OBF HELPER
  
--    void p(boolean flag);
-+
-+    void p(boolean flag); default void setChargingAttack(boolean flag) { p(flag); } // Paper OBF HELPER
+-    void s(boolean flag);
++    void s(boolean flag); default void setChargingAttack(boolean flag) { s(flag); } // Paper OBF HELPER
  }
 diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftIllusioner.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftIllusioner.java
 index 2ec1af8be..f31d3eed3 100644
diff --git a/Spigot-Server-Patches/Refresh-player-inventory-when-cancelling-PlayerInter.patch b/Spigot-Server-Patches/Refresh-player-inventory-when-cancelling-PlayerInter.patch
index a5f973a77b..c0414b6c6f 100644
--- a/Spigot-Server-Patches/Refresh-player-inventory-when-cancelling-PlayerInter.patch
+++ b/Spigot-Server-Patches/Refresh-player-inventory-when-cancelling-PlayerInter.patch
@@ -16,7 +16,7 @@ Refresh the player inventory when PlayerInteractEntityEvent is
 cancelled to avoid this problem.
 
 diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
-index a54203c56..cc1152739 100644
+index 4ed107eac..472f40709 100644
 --- a/src/main/java/net/minecraft/server/PlayerConnection.java
 +++ b/src/main/java/net/minecraft/server/PlayerConnection.java
 @@ -0,0 +0,0 @@ public class PlayerConnection implements PacketListenerPlayIn, ITickable {
diff --git a/Spigot-Server-Patches/Unset-Ignited-flag-on-cancel-of-Explosion-Event.patch b/Spigot-Server-Patches/Unset-Ignited-flag-on-cancel-of-Explosion-Event.patch
index 166c8f2701..915f9a6173 100644
--- a/Spigot-Server-Patches/Unset-Ignited-flag-on-cancel-of-Explosion-Event.patch
+++ b/Spigot-Server-Patches/Unset-Ignited-flag-on-cancel-of-Explosion-Event.patch
@@ -6,20 +6,20 @@ Subject: [PATCH] Unset Ignited flag on cancel of Explosion Event
 Otherwise the creeper infinite explodes
 
 diff --git a/src/main/java/net/minecraft/server/EntityCreeper.java b/src/main/java/net/minecraft/server/EntityCreeper.java
-index 8098d4d9f..67ba72fc1 100644
+index f37169d73..86935f70a 100644
 --- a/src/main/java/net/minecraft/server/EntityCreeper.java
 +++ b/src/main/java/net/minecraft/server/EntityCreeper.java
 @@ -0,0 +0,0 @@ public class EntityCreeper extends EntityMonster {
  
      private static final DataWatcherObject<Integer> a = DataWatcher.a(EntityCreeper.class, DataWatcherRegistry.b);
-     private static final DataWatcherObject<Boolean> b = DataWatcher.a(EntityCreeper.class, DataWatcherRegistry.h);
--    private static final DataWatcherObject<Boolean> c = DataWatcher.a(EntityCreeper.class, DataWatcherRegistry.h);
-+    private static final DataWatcherObject<Boolean> c = DataWatcher.a(EntityCreeper.class, DataWatcherRegistry.h); private static final DataWatcherObject<Boolean> isIgnitedDW = c; // Paper OBFHELPER
-     private int bx;
+     private static final DataWatcherObject<Boolean> b = DataWatcher.a(EntityCreeper.class, DataWatcherRegistry.i);
+-    private static final DataWatcherObject<Boolean> c = DataWatcher.a(EntityCreeper.class, DataWatcherRegistry.i);
++    private static final DataWatcherObject<Boolean> c = DataWatcher.a(EntityCreeper.class, DataWatcherRegistry.i);private static final DataWatcherObject<Boolean> isIgnitedDW = c; // Paper OBFHELPER
+     private int bC;
      private int fuseTicks;
-     public int maxFuseTicks = 30; // PAIL private -> public
+     public int maxFuseTicks = 30;
 @@ -0,0 +0,0 @@ public class EntityCreeper extends EntityMonster {
-                 this.ds();
+                 this.dF();
              } else {
                  fuseTicks = 0;
 +                this.datawatcher.set(isIgnitedDW, Boolean.valueOf(false)); // Paper
diff --git a/Spigot-Server-Patches/Vex-getOwner-API.patch b/Spigot-Server-Patches/Vex-getOwner-API.patch
index 5ebda04880..348082cc62 100644
--- a/Spigot-Server-Patches/Vex-getOwner-API.patch
+++ b/Spigot-Server-Patches/Vex-getOwner-API.patch
@@ -6,15 +6,15 @@ Subject: [PATCH] Vex#getOwner API
 Get's the NPC that summoned this Vex
 
 diff --git a/src/main/java/net/minecraft/server/EntityVex.java b/src/main/java/net/minecraft/server/EntityVex.java
-index a0abaf431..673c3ff3c 100644
+index 897d7c681..ba1109e03 100644
 --- a/src/main/java/net/minecraft/server/EntityVex.java
 +++ b/src/main/java/net/minecraft/server/EntityVex.java
 @@ -0,0 +0,0 @@ public class EntityVex extends EntityMonster {
  
      }
  
-+    public EntityInsentient getOwner() { return p(); } // Paper - OBFHELPER
-     public EntityInsentient p() {
++    public EntityInsentient getOwner() { return l(); } // Paper - OBFHELPER
+     public EntityInsentient l() {
          return this.b;
      }
 diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftVex.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftVex.java
diff --git a/Spigot-Server-Patches/WitchConsumePotionEvent.patch b/Spigot-Server-Patches/WitchConsumePotionEvent.patch
index 79873ca6c4..b8def6d503 100644
--- a/Spigot-Server-Patches/WitchConsumePotionEvent.patch
+++ b/Spigot-Server-Patches/WitchConsumePotionEvent.patch
@@ -6,7 +6,7 @@ Subject: [PATCH] WitchConsumePotionEvent
 Fires when a witch consumes the potion in their hand
 
 diff --git a/src/main/java/net/minecraft/server/EntityWitch.java b/src/main/java/net/minecraft/server/EntityWitch.java
-index ffe72e037..3a00a37eb 100644
+index 71d8b6f8f..cf0669589 100644
 --- a/src/main/java/net/minecraft/server/EntityWitch.java
 +++ b/src/main/java/net/minecraft/server/EntityWitch.java
 @@ -0,0 +0,0 @@ public class EntityWitch extends EntityMonster implements IRangedEntity {
diff --git a/Spigot-Server-Patches/WitchReadyPotionEvent.patch b/Spigot-Server-Patches/WitchReadyPotionEvent.patch
index d79e8be78f..d2385c4fd3 100644
--- a/Spigot-Server-Patches/WitchReadyPotionEvent.patch
+++ b/Spigot-Server-Patches/WitchReadyPotionEvent.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] WitchReadyPotionEvent
 
 
 diff --git a/src/main/java/net/minecraft/server/EntityWitch.java b/src/main/java/net/minecraft/server/EntityWitch.java
-index bf029ad1c..035aa4a90 100644
+index 59f3f4404..45b6e2b7b 100644
 --- a/src/main/java/net/minecraft/server/EntityWitch.java
 +++ b/src/main/java/net/minecraft/server/EntityWitch.java
 @@ -0,0 +0,0 @@ public class EntityWitch extends EntityMonster implements IRangedEntity {
@@ -18,7 +18,7 @@ index bf029ad1c..035aa4a90 100644
 +                    org.bukkit.inventory.ItemStack bukkitStack = com.destroystokyo.paper.event.entity.WitchReadyPotionEvent.process((org.bukkit.entity.Witch) this.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(potion));
 +                    this.setSlot(EnumItemSlot.MAINHAND, org.bukkit.craftbukkit.inventory.CraftItemStack.asNMSCopy(bukkitStack));
 +                    // Paper end
-                     this.bx = this.getItemInMainHand().m();
+                     this.bC = this.getItemInMainHand().k();
                      this.a(true);
-                     this.world.a((EntityHuman) null, this.locX, this.locY, this.locZ, SoundEffects.iz, this.bK(), 1.0F, 0.8F + this.random.nextFloat() * 0.4F);
+                     this.world.a((EntityHuman) null, this.locX, this.locY, this.locZ, SoundEffects.ENTITY_WITCH_DRINK, this.bV(), 1.0F, 0.8F + this.random.nextFloat() * 0.4F);
 --
\ No newline at end of file
diff --git a/Spigot-Server-Patches/WitchThrowPotionEvent.patch b/Spigot-Server-Patches/WitchThrowPotionEvent.patch
index 37c305a858..9beb930235 100644
--- a/Spigot-Server-Patches/WitchThrowPotionEvent.patch
+++ b/Spigot-Server-Patches/WitchThrowPotionEvent.patch
@@ -6,11 +6,11 @@ Subject: [PATCH] WitchThrowPotionEvent
 Fired when a witch throws a potion at a player
 
 diff --git a/src/main/java/net/minecraft/server/EntityWitch.java b/src/main/java/net/minecraft/server/EntityWitch.java
-index 3a00a37eb..bf029ad1c 100644
+index cf0669589..59f3f4404 100644
 --- a/src/main/java/net/minecraft/server/EntityWitch.java
 +++ b/src/main/java/net/minecraft/server/EntityWitch.java
 @@ -0,0 +0,0 @@ public class EntityWitch extends EntityMonster implements IRangedEntity {
-                 potionregistry = Potions.I;
+                 potionregistry = Potions.M;
              }
  
 -            EntityPotion entitypotion = new EntityPotion(this.world, this, PotionUtil.a(new ItemStack(Items.SPLASH_POTION), potionregistry));