From d802168cd58d4717fa3dcfee90a1f71063bad010 Mon Sep 17 00:00:00 2001 From: Michael Limiero Date: Sat, 16 Mar 2013 00:46:35 -0400 Subject: [PATCH] Implement Hopper block state and inventory methods. Adds BUKKIT-3749 --- .../bukkit/craftbukkit/block/CraftBlock.java | 2 ++ .../bukkit/craftbukkit/block/CraftHopper.java | 35 +++++++++++++++++++ .../craftbukkit/entity/CraftHumanEntity.java | 8 ++++- .../craftbukkit/inventory/CraftInventory.java | 3 ++ 4 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/bukkit/craftbukkit/block/CraftHopper.java diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java index 02c7d676a9..90dae627d7 100644 --- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java +++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java @@ -249,6 +249,8 @@ public class CraftBlock implements Block { return new CraftFurnace(this); case DISPENSER: return new CraftDispenser(this); + case HOPPER: + return new CraftHopper(this); case MOB_SPAWNER: return new CraftCreatureSpawner(this); case NOTE_BLOCK: diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftHopper.java b/src/main/java/org/bukkit/craftbukkit/block/CraftHopper.java new file mode 100644 index 0000000000..6489e1536e --- /dev/null +++ b/src/main/java/org/bukkit/craftbukkit/block/CraftHopper.java @@ -0,0 +1,35 @@ +package org.bukkit.craftbukkit.block; + +import net.minecraft.server.TileEntityHopper; +import org.bukkit.block.Block; +import org.bukkit.block.Hopper; +import org.bukkit.craftbukkit.CraftWorld; +import org.bukkit.craftbukkit.inventory.CraftInventory; +import org.bukkit.inventory.Inventory; + +public class CraftHopper extends CraftBlockState implements Hopper { + private final CraftWorld world; + private final TileEntityHopper hopper; + + public CraftHopper(final Block block) { + super(block); + + world = (CraftWorld) block.getWorld(); + hopper = (TileEntityHopper) world.getTileEntityAt(getX(), getY(), getZ()); + } + + public Inventory getInventory() { + return new CraftInventory(hopper); + } + + @Override + public boolean update(boolean force) { + boolean result = super.update(force); + + if (result) { + hopper.update(); + } + + return result; + } +} diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java index e79e5384a6..6dc5b1eb68 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java @@ -10,6 +10,7 @@ import net.minecraft.server.Packet101CloseWindow; import net.minecraft.server.TileEntityBrewingStand; import net.minecraft.server.TileEntityDispenser; import net.minecraft.server.TileEntityFurnace; +import net.minecraft.server.TileEntityHopper; import org.bukkit.GameMode; import org.bukkit.Location; @@ -215,7 +216,12 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity { } break; case ENCHANTING: - openCustomInventory(inventory, player, 4); + openCustomInventory(inventory, player, 4); + break; + case HOPPER: + if (craftinv.getInventory() instanceof TileEntityHopper) { + getHandle().openHopper((TileEntityHopper)craftinv.getInventory()); + } break; case CREATIVE: case CRAFTING: diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java index c2085a8242..118e0d2eb8 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java @@ -15,6 +15,7 @@ import net.minecraft.server.TileEntityBeacon; import net.minecraft.server.TileEntityBrewingStand; import net.minecraft.server.TileEntityDispenser; import net.minecraft.server.TileEntityFurnace; +import net.minecraft.server.TileEntityHopper; import org.apache.commons.lang.Validate; import org.bukkit.entity.HumanEntity; @@ -444,6 +445,8 @@ public class CraftInventory implements Inventory { return InventoryType.BEACON; } else if (inventory instanceof ContainerAnvilInventory) { return InventoryType.ANVIL; + } else if (inventory instanceof TileEntityHopper) { + return InventoryType.HOPPER; } else { return InventoryType.CHEST; }