Implement Dropper interface. Adds BUKKIT-3750

By: Xephi <xephirot59@gmail.com>
This commit is contained in:
CraftBukkit/Spigot 2013-03-21 13:43:10 +01:00
parent 0a6888a54f
commit e76d070e9d
3 changed files with 56 additions and 0 deletions

View File

@ -249,6 +249,8 @@ public class CraftBlock implements Block {
return new CraftFurnace(this);
case DISPENSER:
return new CraftDispenser(this);
case DROPPER:
return new CraftDropper(this);
case HOPPER:
return new CraftHopper(this);
case MOB_SPAWNER:

View File

@ -0,0 +1,50 @@
package org.bukkit.craftbukkit.block;
import net.minecraft.server.BlockDropper;
import net.minecraft.server.TileEntityDropper;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.Dropper;
import org.bukkit.craftbukkit.CraftWorld;
import org.bukkit.craftbukkit.inventory.CraftInventory;
import org.bukkit.inventory.Inventory;
public class CraftDropper extends CraftBlockState implements Dropper {
private final CraftWorld world;
private final TileEntityDropper dropper;
public CraftDropper(final Block block) {
super(block);
world = (CraftWorld) block.getWorld();
dropper = (TileEntityDropper) world.getTileEntityAt(getX(), getY(), getZ());
}
public Inventory getInventory() {
return new CraftInventory(dropper);
}
public void drop() {
Block block = getBlock();
synchronized (block) {
if (block.getType() == Material.DROPPER) {
BlockDropper drop = (BlockDropper) net.minecraft.server.Block.DROPPER;
drop.dispense(world.getHandle(), getX(), getY(), getZ());
}
}
}
@Override
public boolean update(boolean force) {
boolean result = super.update(force);
if (result) {
dropper.update();
}
return result;
}
}

View File

@ -15,6 +15,7 @@ import net.minecraft.server.PlayerInventory;
import net.minecraft.server.TileEntityBeacon;
import net.minecraft.server.TileEntityBrewingStand;
import net.minecraft.server.TileEntityDispenser;
import net.minecraft.server.TileEntityDropper;
import net.minecraft.server.TileEntityFurnace;
import org.apache.commons.lang.Validate;
@ -423,10 +424,13 @@ public class CraftInventory implements Inventory {
}
public InventoryType getType() {
// Thanks to Droppers extending Dispensers, order is important.
if (inventory instanceof InventoryCrafting) {
return inventory.getSize() >= 9 ? InventoryType.WORKBENCH : InventoryType.CRAFTING;
} else if (inventory instanceof PlayerInventory) {
return InventoryType.PLAYER;
} else if (inventory instanceof TileEntityDropper) {
return InventoryType.DROPPER;
} else if (inventory instanceof TileEntityDispenser) {
return InventoryType.DISPENSER;
} else if (inventory instanceof TileEntityFurnace) {