From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Nassim Jahnke <nassim@njahnke.dev>
Date: Sat, 25 Apr 2020 23:31:28 +0200
Subject: [PATCH] Add item slot convenience methods


diff --git a/src/main/java/org/bukkit/inventory/AnvilInventory.java b/src/main/java/org/bukkit/inventory/AnvilInventory.java
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
--- a/src/main/java/org/bukkit/inventory/AnvilInventory.java
+++ b/src/main/java/org/bukkit/inventory/AnvilInventory.java
@@ -0,0 +0,0 @@ public interface AnvilInventory extends Inventory {
      * @param levels the maximum experience cost
      */
     void setMaximumRepairCost(int levels);
+
+    // Paper start
+    /**
+     * Gets the item in the left input slot.
+     *
+     * @return item in the first slot
+     */
+    @Nullable
+    default ItemStack getFirstItem() {
+        return getItem(0);
+    }
+
+    /**
+     * Sets the item in the left input slot.
+     *
+     * @param firstItem item to set
+     */
+    default void setFirstItem(@Nullable ItemStack firstItem) {
+        setItem(0, firstItem);
+    }
+
+    /**
+     * Gets the item in the right input slot.
+     *
+     * @return item in the second slot
+     */
+    @Nullable
+    default ItemStack getSecondItem() {
+        return getItem(1);
+    }
+
+    /**
+     * Sets the item in the right input slot.
+     *
+     * @param secondItem item to set
+     */
+    default void setSecondItem(@Nullable ItemStack secondItem) {
+        setItem(1, secondItem);
+    }
+
+    /**
+     * Gets the item in the result slot.
+     *
+     * @return item in the result slot
+     */
+    @Nullable
+    default ItemStack getResult() {
+        return getItem(2);
+    }
+
+    /**
+     * Sets the item in the result slot.
+     * Note that the client might not be able to take out the item if it does not match the input items.
+     *
+     * @param result item to set
+     */
+    default void setResult(@Nullable ItemStack result) {
+        setItem(2, result);
+    }
+    // Paper end
 }
diff --git a/src/main/java/org/bukkit/inventory/GrindstoneInventory.java b/src/main/java/org/bukkit/inventory/GrindstoneInventory.java
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
--- a/src/main/java/org/bukkit/inventory/GrindstoneInventory.java
+++ b/src/main/java/org/bukkit/inventory/GrindstoneInventory.java
@@ -0,0 +0,0 @@
 package org.bukkit.inventory;
 
+import org.jetbrains.annotations.Nullable; // Paper
+
 /**
  * Interface to the inventory of a Grindstone.
  */
-public interface GrindstoneInventory extends Inventory { }
+public interface GrindstoneInventory extends Inventory {
+
+    // Paper start
+    /**
+     * Gets the upper input item.
+     *
+     * @return upper input item
+     */
+    @Nullable
+    default ItemStack getUpperItem() {
+        return getItem(0);
+    }
+
+    /**
+     * Sets the upper input item.
+     *
+     * @param upperItem item to set
+     */
+    default void setUpperItem(@Nullable ItemStack upperItem) {
+        setItem(0, upperItem);
+    }
+
+    /**
+     * Gets the lower input item.
+     *
+     * @return lower input item
+     */
+    @Nullable
+    default ItemStack getLowerItem() {
+        return getItem(1);
+    }
+
+    /**
+     * Sets the lower input item.
+     *
+     * @param lowerItem item to set
+     */
+    default void setLowerItem(@Nullable ItemStack lowerItem) {
+        setItem(1, lowerItem);
+    }
+
+    /**
+     * Gets the result.
+     *
+     * @return result
+     */
+    @Nullable
+    default ItemStack getResult() {
+        return getItem(2);
+    }
+
+    /**
+     * Sets the result.
+     *
+     * @param result item to set
+     */
+    default void setResult(@Nullable ItemStack result) {
+        setItem(2, result);
+    }
+    // Paper end
+}
diff --git a/src/main/java/org/bukkit/inventory/LecternInventory.java b/src/main/java/org/bukkit/inventory/LecternInventory.java
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
--- a/src/main/java/org/bukkit/inventory/LecternInventory.java
+++ b/src/main/java/org/bukkit/inventory/LecternInventory.java
@@ -0,0 +0,0 @@ public interface LecternInventory extends Inventory {
     @Nullable
     @Override
     public Lectern getHolder();
+
+    // Paper start
+    /**
+     * Gets the lectern's held book.
+     *
+     * @return book set in the lectern
+     */
+    @Nullable
+    default ItemStack getBook() {
+        return getItem(0);
+    }
+
+    /**
+     * Sets the lectern's held book.
+     *
+     * @param book the new book
+     */
+    default void setBook(@Nullable ItemStack book) {
+        setItem(0, book);
+    }
+    // Paper end
 }
diff --git a/src/main/java/org/bukkit/inventory/StonecutterInventory.java b/src/main/java/org/bukkit/inventory/StonecutterInventory.java
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
--- a/src/main/java/org/bukkit/inventory/StonecutterInventory.java
+++ b/src/main/java/org/bukkit/inventory/StonecutterInventory.java
@@ -0,0 +0,0 @@
 package org.bukkit.inventory;
 
+import org.jetbrains.annotations.Nullable; // Paper
+
 /**
  * Interface to the inventory of a Stonecutter.
  */
-public interface StonecutterInventory extends Inventory { }
+public interface StonecutterInventory extends Inventory {
+
+    // Paper start
+    /**
+     * Gets the input item.
+     *
+     * @return input item
+     */
+    @Nullable
+    default ItemStack getInputItem() {
+        return getItem(0);
+    }
+
+    /**
+     * Sets the input item.
+     *
+     * @param itemStack item to set
+     */
+    default void setInputItem(@Nullable ItemStack itemStack) {
+        setItem(0, itemStack);
+    }
+
+    /**
+     * Gets the result item.
+     *
+     * @return result
+     */
+    @Nullable
+    default ItemStack getResult() {
+        return getItem(1);
+    }
+
+    /**
+     * Sets the result item.
+     *
+     * @param itemStack item to set
+     */
+    default void setResult(@Nullable ItemStack itemStack) {
+        setItem(1, itemStack);
+    }
+    // Paper end
+}
