--- a/net/minecraft/world/inventory/HopperMenu.java
+++ b/net/minecraft/world/inventory/HopperMenu.java
@@ -9,6 +_,21 @@
 public class HopperMenu extends AbstractContainerMenu {
     public static final int CONTAINER_SIZE = 5;
     private final Container hopper;
+    // CraftBukkit start
+    private org.bukkit.craftbukkit.inventory.CraftInventoryView bukkitEntity = null;
+    private Inventory player;
+
+    @Override
+    public org.bukkit.craftbukkit.inventory.CraftInventoryView getBukkitView() {
+        if (this.bukkitEntity != null) {
+            return this.bukkitEntity;
+        }
+
+        org.bukkit.craftbukkit.inventory.CraftInventory inventory = new org.bukkit.craftbukkit.inventory.CraftInventory(this.hopper);
+        this.bukkitEntity = new org.bukkit.craftbukkit.inventory.CraftInventoryView(this.player.player.getBukkitEntity(), inventory, this);
+        return this.bukkitEntity;
+    }
+    // CraftBukkit end
 
     public HopperMenu(int containerId, Inventory playerInventory) {
         this(containerId, playerInventory, new SimpleContainer(5));
@@ -17,6 +_,7 @@
     public HopperMenu(int containerId, Inventory playerInventory, Container container) {
         super(MenuType.HOPPER, containerId);
         this.hopper = container;
+        this.player = playerInventory; // CraftBukkit - save player
         checkContainerSize(container, 5);
         container.startOpen(playerInventory.player);
 
@@ -29,6 +_,7 @@
 
     @Override
     public boolean stillValid(Player player) {
+        if (!this.checkReachable) return true; // CraftBukkit
         return this.hopper.stillValid(player);
     }
 
