From 47f11f19a5cb5cbe761a947a64caddba6b1f4e9a Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
Date: Tue, 12 May 2020 01:27:03 -0400
Subject: [PATCH] Updated Upstream (Bukkit/CraftBukkit/Spigot)

Upstream has released updates that appears to apply and compile correctly.
This update has not been tested by PaperMC and as with ANY update, please do your own testing

Bukkit Changes:
ffc8e4ca SPIGOT-5716: Clarify documentation of MultipleFacing

CraftBukkit Changes:
d07a78b1 SPIGOT-5716: Clarify documentation of MultipleFacing
46a13860 SPIGOT-5718: Block.BreakBlockNaturally does not reflect tool used
214ffea9 SPIGOT-5727: GameRule doImmediateRespawn cannot be set per-world

Spigot Changes:
2f5d615f SPIGOT-5730: Modernise inventory patch
a2bdb119 SPIGOT-5679: Add config option for end portal activation sound

Closes #3352
---
 .../Add-effect-to-block-break-naturally.patch | 11 ++++----
 .../InventoryCloseEvent-Reason-API.patch      | 28 +++++++++----------
 work/Bukkit                                   |  2 +-
 work/CraftBukkit                              |  2 +-
 work/Spigot                                   |  2 +-
 5 files changed, 23 insertions(+), 22 deletions(-)

diff --git a/Spigot-Server-Patches/Add-effect-to-block-break-naturally.patch b/Spigot-Server-Patches/Add-effect-to-block-break-naturally.patch
index ae8fd28dd7..6ac0e0adc2 100644
--- a/Spigot-Server-Patches/Add-effect-to-block-break-naturally.patch
+++ b/Spigot-Server-Patches/Add-effect-to-block-break-naturally.patch
@@ -20,11 +20,12 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 +    public boolean breakNaturally(ItemStack item, boolean triggerEffect) {
 +        // Paper end
          // Order matters here, need to drop before setting to air so skulls can get their data
-         net.minecraft.server.Block block = this.getNMSBlock();
-         boolean result = false;
- 
-         if (block != null && block != Blocks.AIR) {
-             net.minecraft.server.Block.dropItems(getNMS(), world.getMinecraftWorld(), position, world.getTileEntity(position), null, CraftItemStack.asNMSCopy(item));
+         net.minecraft.server.IBlockData iblockdata = this.getNMS();
+         net.minecraft.server.Block block = iblockdata.getBlock();
+@@ -0,0 +0,0 @@ public class CraftBlock implements Block {
+         // Modelled off EntityHuman#hasBlock
+         if (block != Blocks.AIR && (iblockdata.getMaterial().isAlwaysDestroyable() || nmsItem.canDestroySpecialBlock(iblockdata))) {
+             net.minecraft.server.Block.dropItems(iblockdata, world.getMinecraftWorld(), position, world.getTileEntity(position), null, nmsItem);
 +            if (triggerEffect) world.triggerEffect(org.bukkit.Effect.STEP_SOUND.getId(), position, net.minecraft.server.Block.getCombinedId(block.getBlockData())); // Paper
              result = true;
          }
diff --git a/Spigot-Server-Patches/InventoryCloseEvent-Reason-API.patch b/Spigot-Server-Patches/InventoryCloseEvent-Reason-API.patch
index 47b8a02554..9588082029 100644
--- a/Spigot-Server-Patches/InventoryCloseEvent-Reason-API.patch
+++ b/Spigot-Server-Patches/InventoryCloseEvent-Reason-API.patch
@@ -118,23 +118,23 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 --- 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 {
-                 {
-                     if ( h instanceof org.bukkit.craftbukkit.entity.CraftHumanEntity )
-                     {
--                       ( (org.bukkit.craftbukkit.entity.CraftHumanEntity) h).getHandle().closeInventory();
-+                       ( (org.bukkit.craftbukkit.entity.CraftHumanEntity) h).getHandle().closeInventory(org.bukkit.event.inventory.InventoryCloseEvent.Reason.UNLOADED); // Paper
-                     }
+         for (TileEntity tileentity : chunk.getTileEntities().values()) {
+             if (tileentity instanceof IInventory) {
+                 for (org.bukkit.entity.HumanEntity h : Lists.newArrayList(((IInventory) tileentity).getViewers())) {
+-                    h.closeInventory();
++                    h.closeInventory(org.bukkit.event.inventory.InventoryCloseEvent.Reason.UNLOADED); // Paper
                  }
              }
+         }
 @@ -0,0 +0,0 @@ public class WorldServer extends World {
-                     {
-                         if ( h instanceof org.bukkit.craftbukkit.entity.CraftHumanEntity )
-                         {
--                           ( (org.bukkit.craftbukkit.entity.CraftHumanEntity) h).getHandle().closeInventory();
-+                           ( (org.bukkit.craftbukkit.entity.CraftHumanEntity) h).getHandle().closeInventory(org.bukkit.event.inventory.InventoryCloseEvent.Reason.UNLOADED); // Paper
-                         }
-                     }
-                 }
+         // Spigot Start
+         if (entity.getBukkitEntity() instanceof org.bukkit.inventory.InventoryHolder) {
+             for (org.bukkit.entity.HumanEntity h : Lists.newArrayList(((org.bukkit.inventory.InventoryHolder) entity.getBukkitEntity()).getInventory().getViewers())) {
+-                h.closeInventory();
++                h.closeInventory(org.bukkit.event.inventory.InventoryCloseEvent.Reason.UNLOADED); // Paper
+             }
+         }
+         // Spigot End
 diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java
 index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java
diff --git a/work/Bukkit b/work/Bukkit
index da9ef3c55f..ffc8e4caa4 160000
--- a/work/Bukkit
+++ b/work/Bukkit
@@ -1 +1 @@
-Subproject commit da9ef3c55fa3bce91f7fdcd77d50171be7297d7d
+Subproject commit ffc8e4caa484af8f3e4ec2647e546ec0f2b6e95f
diff --git a/work/CraftBukkit b/work/CraftBukkit
index 933e9094bf..d07a78b1f3 160000
--- a/work/CraftBukkit
+++ b/work/CraftBukkit
@@ -1 +1 @@
-Subproject commit 933e9094bfef3b0758f62342f06163bbba1bb6a1
+Subproject commit d07a78b1f3aa79945600e5e07d5a457909480b40
diff --git a/work/Spigot b/work/Spigot
index 2040c4c476..2f5d615f15 160000
--- a/work/Spigot
+++ b/work/Spigot
@@ -1 +1 @@
-Subproject commit 2040c4c476931e2b1582cd14e2e4d1e260eb5322
+Subproject commit 2f5d615f157752a2b28b0986b34cc708d5e77674