diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftDispenser.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftDispenser.java index 6c51214030..0a023326cb 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftDispenser.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftDispenser.java @@ -1,40 +1,57 @@ -package org.bukkit.craftbukkit.block; - -import net.minecraft.server.TileEntityDispenser; -import org.bukkit.block.Block; -import org.bukkit.block.Dispenser; -import org.bukkit.craftbukkit.CraftWorld; -import org.bukkit.craftbukkit.inventory.CraftInventory; -import org.bukkit.inventory.Inventory; - -/** - * Represents a dispenser. - * - * @author sk89q - */ -public class CraftDispenser extends CraftBlockState implements Dispenser { - private final CraftWorld world; - private final TileEntityDispenser dispenser; - - public CraftDispenser(final Block block) { - super(block); - - world = (CraftWorld)block.getWorld(); - dispenser = (TileEntityDispenser)world.getTileEntityAt(getX(), getY(), getZ()); - } - - public Inventory getInventory() { - return new CraftInventory(dispenser); - } - - @Override - public boolean update(boolean force) { - boolean result = super.update(force); - - if (result) { - dispenser.d(); - } - - return result; - } -} +package org.bukkit.craftbukkit.block; + +import java.util.Random; +import net.minecraft.server.BlockDispenser; +import net.minecraft.server.TileEntityDispenser; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.Dispenser; +import org.bukkit.craftbukkit.CraftWorld; +import org.bukkit.craftbukkit.inventory.CraftInventory; +import org.bukkit.inventory.Inventory; + +/** + * Represents a dispenser. + * + * @author sk89q + */ +public class CraftDispenser extends CraftBlockState implements Dispenser { + private final CraftWorld world; + private final TileEntityDispenser dispenser; + + public CraftDispenser(final Block block) { + super(block); + + world = (CraftWorld)block.getWorld(); + dispenser = (TileEntityDispenser)world.getTileEntityAt(getX(), getY(), getZ()); + } + + public Inventory getInventory() { + return new CraftInventory(dispenser); + } + + public boolean dispense() { + Block block = getBlock(); + + synchronized (block) { + if (block.getType() == Material.DISPENSER) { + BlockDispenser dispense = (BlockDispenser)net.minecraft.server.Block.DISPENSER; + dispense.b(world.getHandle(), getX(), getY(), getZ(), new Random()); + return true; + } else { + return false; + } + } + } + + @Override + public boolean update(boolean force) { + boolean result = super.update(force); + + if (result) { + dispenser.d(); + } + + return result; + } +}