private void doDispense(GlowBlock block, ItemStack items, int power, BlockFace facing, Vector target) { double x = target.getX(); double y = target.getY(); double z = target.getZ(); if (facing.getModY() != 0) { y -= 0.125; } else { y -= 0.15625; } double velocity = ThreadLocalRandom.current().nextDouble() * 0.1 + 0.2; double velocityX = facing.getModX() * velocity; double velocityY = 0.2; double velocityZ = facing.getModZ() * velocity; velocityX += ThreadLocalRandom.current().nextGaussian() * 0.0075 * power; velocityY += ThreadLocalRandom.current().nextGaussian() * 0.0075 * power; velocityZ += ThreadLocalRandom.current().nextGaussian() * 0.0075 * power; BlockDispenseEvent dispenseEvent = new BlockDispenseEvent(block, items, new Vector(velocityX, velocityY, velocityZ)); EventFactory.getInstance().callEvent(dispenseEvent); if (!dispenseEvent.isCancelled()) { GlowItem item = block.getWorld().dropItem(new Location(block.getWorld(), x, y, z), dispenseEvent.getItem()); item.setVelocity(dispenseEvent.getVelocity()); } }
@Override public boolean isCancelled() { return bde.isCancelled(); }