--- a/net/minecraft/world/inventory/ResultContainer.java
+++ b/net/minecraft/world/inventory/ResultContainer.java
@@ -1,5 +1,6 @@
 package net.minecraft.world.inventory;
 
+import java.util.Iterator;
 import javax.annotation.Nullable;
 import net.minecraft.core.NonNullList;
 import net.minecraft.world.Container;
@@ -7,12 +8,55 @@
 import net.minecraft.world.entity.player.Player;
 import net.minecraft.world.item.ItemStack;
 import net.minecraft.world.item.crafting.Recipe;
+// CraftBukkit start
+import org.bukkit.Location;
+import org.bukkit.craftbukkit.v1_19_R1.entity.CraftHumanEntity;
+import org.bukkit.entity.HumanEntity;
+// CraftBukkit end
 
 public class ResultContainer implements Container, RecipeHolder {
-    private final NonNullList<ItemStack> itemStacks = NonNullList.withSize(1, ItemStack.EMPTY);
+
+    private final NonNullList<ItemStack> itemStacks;
     @Nullable
     private Recipe<?> recipeUsed;
 
+    // CraftBukkit start
+    private int maxStack = MAX_STACK;
+
+    public java.util.List<ItemStack> getContents() {
+        return this.itemStacks;
+    }
+
+    public org.bukkit.inventory.InventoryHolder getOwner() {
+        return null; // Result slots don't get an owner
+    }
+
+    // Don't need a transaction; the InventoryCrafting keeps track of it for us
+    public void onOpen(CraftHumanEntity who) {}
+    public void onClose(CraftHumanEntity who) {}
+    public java.util.List<HumanEntity> getViewers() {
+        return new java.util.ArrayList<HumanEntity>();
+    }
+
+    @Override
+    public int getMaxStackSize() {
+        return this.maxStack;
+    }
+
+    public void setMaxStackSize(int size) {
+        this.maxStack = size;
+    }
+
+    @Override
+    public Location getLocation() {
+        return null;
+    }
+    // CraftBukkit end
+
+    public ResultContainer() {
+        this.itemStacks = NonNullList.withSize(1, ItemStack.EMPTY);
+    }
+
     @Override
     public int getContainerSize() {
         return 1;
@@ -20,18 +64,24 @@
 
     @Override
     public boolean isEmpty() {
-        for(ItemStack itemStack : this.itemStacks) {
-            if (!itemStack.isEmpty()) {
-                return false;
+        Iterator iterator = this.itemStacks.iterator();
+
+        ItemStack itemstack;
+
+        do {
+            if (!iterator.hasNext()) {
+                return true;
             }
-        }
 
-        return true;
+            itemstack = (ItemStack) iterator.next();
+        } while (itemstack.isEmpty());
+
+        return false;
     }
 
     @Override
     public ItemStack getItem(int slot) {
-        return this.itemStacks.get(0);
+        return (ItemStack) this.itemStacks.get(0);
     }
 
     @Override
@@ -50,8 +100,7 @@
     }
 
     @Override
-    public void setChanged() {
-    }
+    public void setChanged() {}
 
     @Override
     public boolean stillValid(Player player) {
