From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Jake Potrebic <jake.m.potrebic@gmail.com>
Date: Fri, 20 Sep 2024 21:40:23 -0700
Subject: [PATCH] create TileStateInventoryHolder

a missing interface to centralize getSnapshotInventory methods

diff --git a/src/main/java/io/papermc/paper/block/TileStateInventoryHolder.java b/src/main/java/io/papermc/paper/block/TileStateInventoryHolder.java
new file mode 100644
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
--- /dev/null
+++ b/src/main/java/io/papermc/paper/block/TileStateInventoryHolder.java
@@ -0,0 +0,0 @@
+package io.papermc.paper.block;
+
+import org.bukkit.block.TileState;
+import org.bukkit.inventory.BlockInventoryHolder;
+import org.bukkit.inventory.Inventory;
+import org.jspecify.annotations.NullMarked;
+
+/**
+ * Represents a {@link TileState} block that has an inventory.
+ */
+@NullMarked
+public interface TileStateInventoryHolder extends TileState, BlockInventoryHolder {
+
+    /**
+     * Gets the inventory of the block represented by this block state.
+     * <p>
+     * If the block was changed to a different type in the meantime, the
+     * returned inventory might no longer be valid.
+     * <p>
+     * If this block state is not placed this will return the captured inventory
+     * snapshot instead.
+     *
+     * @return the inventory
+     */
+    @Override
+    Inventory getInventory();
+
+    /**
+     * Gets the captured inventory snapshot of this container.
+     * <p>
+     * The returned inventory is not linked to any block. Any modifications to
+     * the returned inventory will not be applied to the block represented by
+     * this block state up until {@link #update(boolean, boolean)} has been
+     * called.
+     *
+     * @return the captured inventory snapshot
+     */
+    Inventory getSnapshotInventory();
+}
diff --git a/src/main/java/org/bukkit/block/ChiseledBookshelf.java b/src/main/java/org/bukkit/block/ChiseledBookshelf.java
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
--- a/src/main/java/org/bukkit/block/ChiseledBookshelf.java
+++ b/src/main/java/org/bukkit/block/ChiseledBookshelf.java
@@ -0,0 +0,0 @@ import org.jetbrains.annotations.NotNull;
 /**
  * Represents a captured state of a chiseled bookshelf.
  */
-public interface ChiseledBookshelf extends TileState, BlockInventoryHolder {
+public interface ChiseledBookshelf extends io.papermc.paper.block.TileStateInventoryHolder { // Paper - TileStateInventoryHolder
 
     /**
      * Gets the last interacted inventory slot.
@@ -0,0 +0,0 @@ public interface ChiseledBookshelf extends TileState, BlockInventoryHolder {
      */
     void setLastInteractedSlot(int lastInteractedSlot);
 
-    /**
-     * @return inventory
-     * @see Container#getInventory()
-     */
+    // Paper - move docs to TileStateInventoryHolder
     @NotNull
     @Override
     ChiseledBookshelfInventory getInventory();
 
-    /**
-     * @return snapshot inventory
-     * @see Container#getSnapshotInventory()
-     */
+    @Override // Paper - move docs to TileStateInventoryHolder
     @NotNull
     ChiseledBookshelfInventory getSnapshotInventory();
 
diff --git a/src/main/java/org/bukkit/block/Container.java b/src/main/java/org/bukkit/block/Container.java
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
--- a/src/main/java/org/bukkit/block/Container.java
+++ b/src/main/java/org/bukkit/block/Container.java
@@ -0,0 +0,0 @@ import org.jetbrains.annotations.NotNull;
 /**
  * Represents a captured state of a container block.
  */
-public interface Container extends io.papermc.paper.block.LockableTileState, BlockInventoryHolder { // Paper
+public interface Container extends io.papermc.paper.block.LockableTileState, io.papermc.paper.block.TileStateInventoryHolder { // Paper
 
-    /**
-     * Gets the inventory of the block represented by this block state.
-     * <p>
-     * If the block was changed to a different type in the meantime, the
-     * returned inventory might no longer be valid.
-     * <p>
-     * If this block state is not placed this will return the captured inventory
-     * snapshot instead.
-     *
-     * @return the inventory
-     */
-    @NotNull
-    @Override
-    Inventory getInventory();
-
-    /**
-     * Gets the captured inventory snapshot of this container.
-     * <p>
-     * The returned inventory is not linked to any block. Any modifications to
-     * the returned inventory will not be applied to the block represented by
-     * this block state up until {@link #update(boolean, boolean)} has been
-     * called.
-     *
-     * @return the captured inventory snapshot
-     */
-    @NotNull
-    Inventory getSnapshotInventory();
+    // Paper - moved to TileStateInventoryHolder
 }
diff --git a/src/main/java/org/bukkit/block/DecoratedPot.java b/src/main/java/org/bukkit/block/DecoratedPot.java
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
--- a/src/main/java/org/bukkit/block/DecoratedPot.java
+++ b/src/main/java/org/bukkit/block/DecoratedPot.java
@@ -0,0 +0,0 @@ import org.jetbrains.annotations.Nullable;
 /**
  * Represents a captured state of a decorated pot.
  */
-public interface DecoratedPot extends TileState, BlockInventoryHolder , org.bukkit.loot.Lootable { // Paper - expose loot table
+public interface DecoratedPot extends io.papermc.paper.block.TileStateInventoryHolder, org.bukkit.loot.Lootable { // Paper - expose loot table & TileStateInventoryHolder
 
     /**
      * Set the sherd on the provided side.
@@ -0,0 +0,0 @@ public interface DecoratedPot extends TileState, BlockInventoryHolder , org.bukk
     @NotNull
     public List<Material> getShards();
 
-    /**
-     * @return inventory
-     * @see Container#getInventory()
-     */
+    // Paper - move docs to TileStateInventoryHolder
     @NotNull
     @Override
     public DecoratedPotInventory getInventory();
 
-    /**
-     * @return snapshot inventory
-     * @see Container#getSnapshotInventory()
-     */
+    @Override // Paper - move docs to TileStateInventoryHolder
     @NotNull
     public DecoratedPotInventory getSnapshotInventory();
 
diff --git a/src/main/java/org/bukkit/block/Jukebox.java b/src/main/java/org/bukkit/block/Jukebox.java
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
--- a/src/main/java/org/bukkit/block/Jukebox.java
+++ b/src/main/java/org/bukkit/block/Jukebox.java
@@ -0,0 +0,0 @@ import org.jetbrains.annotations.Nullable;
 /**
  * Represents a captured state of a jukebox.
  */
-public interface Jukebox extends TileState, BlockInventoryHolder {
+public interface Jukebox extends io.papermc.paper.block.TileStateInventoryHolder { // Paper - TileStateInventoryHolder
 
     /**
      * Gets the record inserted into the jukebox.
@@ -0,0 +0,0 @@ public interface Jukebox extends TileState, BlockInventoryHolder {
      */
     public boolean eject();
 
-    /**
-     * @return inventory
-     * @see Container#getInventory()
-     */
+    // Paper - move docs to TileStateInventoryHolder
     @NotNull
     @Override
     JukeboxInventory getInventory();
 
-    /**
-     * @return snapshot inventory
-     * @see Container#getSnapshotInventory()
-     */
+    @Override // Paper - move docs to TileStateInventoryHolder
     @NotNull
     JukeboxInventory getSnapshotInventory();
 }
diff --git a/src/main/java/org/bukkit/block/Lectern.java b/src/main/java/org/bukkit/block/Lectern.java
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
--- a/src/main/java/org/bukkit/block/Lectern.java
+++ b/src/main/java/org/bukkit/block/Lectern.java
@@ -0,0 +0,0 @@ import org.jetbrains.annotations.NotNull;
 /**
  * Represents a captured state of a lectern.
  */
-public interface Lectern extends TileState, BlockInventoryHolder {
+public interface Lectern extends io.papermc.paper.block.TileStateInventoryHolder { // Paper - TileStateInventoryHolder
 
     /**
      * Get the current lectern page.
@@ -0,0 +0,0 @@ public interface Lectern extends TileState, BlockInventoryHolder {
      */
     void setPage(int page);
 
-    /**
-     * @return inventory
-     * @see Container#getInventory()
-     */
-    @NotNull
-    @Override
-    Inventory getInventory();
-
-    /**
-     * @return snapshot inventory
-     * @see Container#getSnapshotInventory()
-     */
-    @NotNull
-    Inventory getSnapshotInventory();
+    // Paper - moved to TileStateInventoryHolder
 }