下面列出了怎么用org.bukkit.event.block.BlockCanBuildEvent的API类实例代码及写法,或者点击链接到github查看源代码。
@EventHandler(ignoreCancelled = true)
public void canBuild(BlockCanBuildEvent e) {
if (!plugin.isDisplay()
|| DisplayItem.getNowUsing() != DisplayType.ARMORSTAND
|| e.isBuildable()) {
return;
}
final Collection<Entity> entities =
e.getBlock().getWorld().getNearbyEntities(e.getBlock().getLocation(), 1.0, 1, 1.0);
for (final Entity entity : entities) {
if (!(entity instanceof ArmorStand)
|| !DisplayItem.checkIsGuardItemStack(((ArmorStand) entity).getItemInHand())) {
continue;
}
e.setBuildable(true);
Util.debugLog(
"Re-set the allowed build flag here because it found the cause of the display-item blocking it before.");
return;
}
}
@SuppressWarnings("null")
@Override
public boolean init(final Expression<?>[] vars, final int matchedPattern, final Kleenean isDelayed, final ParseResult parser) {
if (isDelayed == Kleenean.TRUE) {
Skript.error("Can't cancel an event anymore after it has already passed", ErrorQuality.SEMANTIC_ERROR);
return false;
}
cancel = matchedPattern == 0;
final Class<? extends Event>[] es = ScriptLoader.getCurrentEvents();
if (es == null)
return false;
for (final Class<? extends Event> e : es) {
if (Cancellable.class.isAssignableFrom(e) || BlockCanBuildEvent.class.isAssignableFrom(e))
return true; // TODO warning if some event(s) cannot be cancelled even though some can (needs a way to be suppressed)
}
if (ScriptLoader.isCurrentEvent(PlayerLoginEvent.class))
Skript.error("A connect event cannot be cancelled, but the player may be kicked ('kick player by reason of \"...\"')", ErrorQuality.SEMANTIC_ERROR);
else
Skript.error(Utils.A(ScriptLoader.getCurrentEventName()) + " event cannot be cancelled", ErrorQuality.SEMANTIC_ERROR);
return false;
}
@Override
public void execute(final Event e) {
if (e instanceof Cancellable)
((Cancellable) e).setCancelled(cancel);
if (e instanceof PlayerInteractEvent) {
EvtClick.interactTracker.eventModified((Cancellable) e);
((PlayerInteractEvent) e).setUseItemInHand(cancel ? Result.DENY : Result.DEFAULT);
((PlayerInteractEvent) e).setUseInteractedBlock(cancel ? Result.DENY : Result.DEFAULT);
} else if (e instanceof BlockCanBuildEvent) {
((BlockCanBuildEvent) e).setBuildable(!cancel);
} else if (e instanceof PlayerDropItemEvent) {
PlayerUtils.updateInventory(((PlayerDropItemEvent) e).getPlayer());
}
}