public InventoryView openInventory(Inventory inventory) {
   if (!(getHandle() instanceof EntityPlayer)) return null;
   EntityPlayer player = (EntityPlayer) getHandle();
   InventoryType type = inventory.getType();
   Container formerContainer = getHandle().activeContainer;
   // TODO: Should we check that it really IS a CraftInventory first?
   CraftInventory craftinv = (CraftInventory) inventory;
   switch (type) {
     case PLAYER:
     case CHEST:
     case ENDER_CHEST:
       getHandle().openContainer(craftinv.getInventory());
       break;
     case DISPENSER:
       if (craftinv.getInventory() instanceof TileEntityDispenser) {
         getHandle().openDispenser((TileEntityDispenser) craftinv.getInventory());
       } else {
         openCustomInventory(inventory, player, 3);
       }
       break;
     case FURNACE:
       if (craftinv.getInventory() instanceof TileEntityFurnace) {
         getHandle().openFurnace((TileEntityFurnace) craftinv.getInventory());
       } else {
         openCustomInventory(inventory, player, 2);
       }
       break;
     case WORKBENCH:
       openCustomInventory(inventory, player, 1);
       break;
     case BREWING:
       if (craftinv.getInventory() instanceof TileEntityBrewingStand) {
         getHandle().openBrewingStand((TileEntityBrewingStand) craftinv.getInventory());
       } else {
         openCustomInventory(inventory, player, 5);
       }
       break;
     case ENCHANTING:
       openCustomInventory(inventory, player, 4);
       break;
     case HOPPER:
       if (craftinv.getInventory() instanceof TileEntityHopper) {
         getHandle().openHopper((TileEntityHopper) craftinv.getInventory());
       } else if (craftinv.getInventory() instanceof EntityMinecartHopper) {
         getHandle().openMinecartHopper((EntityMinecartHopper) craftinv.getInventory());
       } else {
         openCustomInventory(inventory, player, 9);
       }
       break;
     case CREATIVE:
     case CRAFTING:
       throw new IllegalArgumentException("Can't open a " + type + " inventory!");
   }
   if (getHandle().activeContainer == formerContainer) {
     return null;
   }
   getHandle().activeContainer.checkReachable = false;
   return getHandle().activeContainer.getBukkitView();
 }