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()); } }
@EventHandler(ignoreCancelled = true) public void onBlockDispense(BlockDispenseEvent event) { ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager(); WorldConfiguration wcfg = cfg.get(BukkitAdapter.adapt(event.getBlock().getWorld())); if (wcfg.getBlacklist() != null) { if (!wcfg.getBlacklist().check(new BlockDispenseBlacklistEvent(null, BukkitAdapter.asBlockVector(event.getBlock().getLocation()), createTarget(event.getItem())), false, false)) { event.setCancelled(true); } } }
@EventHandler(ignoreCancelled = true) public void onBlockDispense(BlockDispenseEvent event) { Cause cause = create(event.getBlock()); Block dispenserBlock = event.getBlock(); ItemStack item = event.getItem(); MaterialData materialData = dispenserBlock.getState().getData(); Events.fireToCancel(event, new UseItemEvent(event, cause, dispenserBlock.getWorld(), item)); // Simulate right click event as players have it if (materialData instanceof Dispenser) { Dispenser dispenser = (Dispenser) materialData; Block placed = dispenserBlock.getRelative(dispenser.getFacing()); Block clicked = placed.getRelative(dispenser.getFacing()); handleBlockRightClick(event, cause, item, clicked, dispenser.getFacing().getOppositeFace(), placed); } }
@Override public boolean onBlockDispense(final BlockDispenseEvent e, Block dispenser, final Dispenser d, Block block, Block chest, SlimefunItem machine) { if (machine.getID().equalsIgnoreCase("BLOCK_PLACER")) { e.setCancelled(true); if ((block.getType() == null || block.getType() == Material.AIR) && e.getItem().getType().isBlock()) { for(String blockType : blockPlacerBlacklist) { if (e.getItem().getType().toString().equals(blockType)) { return false; SlimefunItem sfItem = SlimefunItem.getByItem(e.getItem()); if (sfItem != null) { if (!SlimefunItem.blockhandler.containsKey(sfItem.getName())) { block.setType(e.getItem().getType()); block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, e.getItem().getType()); if (d.getInventory().containsAtLeast(e.getItem(), 2)) d.getInventory().removeItem(new CustomItem(e.getItem(), 1)); else { Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { block.setType(e.getItem().getType()); block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, e.getItem().getType()); if (d.getInventory().containsAtLeast(e.getItem(), 2)) d.getInventory().removeItem(new CustomItem(e.getItem(), 1)); else { Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() {
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onBlockDispense(BlockDispenseEvent e) { if (!cm.isAntiNegativeItemDupe) { return; } Inventory content = null; if (e.getBlock().getState() instanceof InventoryHolder) { content = ((InventoryHolder) e.getBlock().getState()).getInventory(); } if (content == null || content.getSize() == 0) { return; } for (ItemStack item : content.getContents()) { if (item != null && item.getType() != Material.AIR) { if (item.getAmount() <= 0) { item.setType(Material.AIR); } } } }
@Override public MCItemStack getItem() { return new BukkitMCItemStack(bde.getItem()); }
@Override public void setCancelled(boolean cancel) { bde.setCancelled(cancel); } }
@Override public boolean isCancelled() { return bde.isCancelled(); }
@Override public Vector3D getVelocity() { Vector v = bde.getVelocity(); return new Vector3D(v.getX(), v.getY(), v.getZ()); }
if(!GriefPrevention.instance.claimsEnabledForWorld(dispenseEvent.getBlock().getWorld())) return; Block fromBlock = dispenseEvent.getBlock(); @SuppressWarnings("deprecation") Dispenser dispenser = new Dispenser(Material.DISPENSER, fromBlock.getData()); Material materialDispensed = dispenseEvent.getItem().getType(); if((materialDispensed == Material.WATER_BUCKET || materialDispensed == Material.LAVA_BUCKET) && GriefPrevention.instance.creativeRulesApply(dispenseEvent.getBlock().getLocation()) && toClaim == null) dispenseEvent.setCancelled(true); return; dispenseEvent.setCancelled(true);
@EventHandler public void onBlockDispensing(final BlockDispenseEvent e) { Block dispenser = e.getBlock(); if (dispenser.getType() == Material.DISPENSER) { final Dispenser d = (Dispenser) dispenser.getState(); BlockFace face = ((Directional)dispenser.getBlockData()).getFacing(); Block block = dispenser.getRelative(face); Block chest = dispenser.getRelative(face.getOppositeFace()); SlimefunItem machine = BlockStorage.check(dispenser); if (machine != null) { for (ItemHandler handler: SlimefunItem.getHandlers("AutonomousMachineHandler")) { if (((AutonomousMachineHandler) handler).onBlockDispense(e, dispenser, d, block, chest, machine)) break; } } else { for (int i = 0; i < d.getInventory().getContents().length; i++) { for (ItemHandler handler: SlimefunItem.getHandlers("AutonomousToolHandler")) { if (((AutonomousToolHandler) handler).onBlockDispense(e, dispenser, d, block, chest, i)) break; } } } } }
@EventHandler public void dispenserFireEvent(BlockDispenseEvent e){ Block block = e.getBlock(); if(block.getType().equals(Material.DISPENSER)){ ArmourType type = ArmourType.matchType(e.getItem()); if(ArmourType.matchType(e.getItem()) != null){ && p.getLocation().getZ() <= loc.getZ()){ ArmourEquipEvent armourEquipEvent = new ArmourEquipEvent(p, EquipMethod.DISPENSER, ArmourType.matchType(e.getItem()), null, e.getItem()); Bukkit.getServer().getPluginManager().callEvent(armourEquipEvent); e.setCancelled(true);