下面列出了怎么用org.bukkit.event.vehicle.VehicleDestroyEvent的API类实例代码及写法,或者点击链接到github查看源代码。
@EventHandler
public void minecartBreak(VehicleDestroyEvent e) {
Entity entity = e.getVehicle();
if (plugin.getLWC().isProtectable(e.getVehicle().getType())) {
int A = 50000 + entity.getUniqueId().hashCode();
LWC lwc = LWC.getInstance();
Protection protection = lwc.getPhysicalDatabase().loadProtection(entity.getWorld().getName(), A, A, A);
if ((((entity instanceof StorageMinecart)) || ((entity instanceof HopperMinecart)))
&& (protection != null)) {
if (e.getAttacker() instanceof Projectile) {
e.setCancelled(true);
}
Player p = (Player) e.getAttacker();
boolean canAccess = lwc.canAccessProtection(p, protection);
if (canAccess) {
protection.remove();
protection.removeAllPermissions();
protection.removeCache();
return;
}
e.setCancelled(true);
}
}
}
@Override
public boolean init(final Expression<?>[] vars, final int matchedPattern, final Kleenean isDelayed, final ParseResult parser) {
if (!ScriptLoader.isCurrentEvent(EntityDamageEvent.class, EntityDeathEvent.class, VehicleDamageEvent.class, VehicleDestroyEvent.class)) {
Skript.error("The expression 'victim' can only be used in a damage or death event", ErrorQuality.SEMANTIC_ERROR);
return false;
}
final String type = parser.regexes.size() == 0 ? null : parser.regexes.get(0).group();
if (type == null) {
this.type = EntityData.fromClass(Entity.class);
} else {
final EntityData<?> t = EntityData.parse(type);
if (t == null) {
Skript.error("'" + type + "' is not an entity type", ErrorQuality.NOT_AN_EXPRESSION);
return false;
}
this.type = t;
}
return true;
}
@Nullable
private static Entity getAttacker(final @Nullable Event e) {
if (e == null)
return null;
if (e instanceof EntityDamageByEntityEvent) {
if (((EntityDamageByEntityEvent) e).getDamager() instanceof Projectile) {
final Object o = ProjectileUtils.getShooter((Projectile) ((EntityDamageByEntityEvent) e).getDamager());
if (o instanceof Entity)
return (Entity) o;
return null;
}
return ((EntityDamageByEntityEvent) e).getDamager();
// } else if (e instanceof EntityDamageByBlockEvent) {
// return ((EntityDamageByBlockEvent) e).getDamager();
} else if (e instanceof EntityDeathEvent) {
return getAttacker(((EntityDeathEvent) e).getEntity().getLastDamageCause());
} else if (e instanceof VehicleDamageEvent) {
return ((VehicleDamageEvent) e).getAttacker();
} else if (e instanceof VehicleDestroyEvent) {
return ((VehicleDestroyEvent) e).getAttacker();
}
return null;
}
@EventHandler(ignoreCancelled = true)
public void onVehicleBreak(VehicleDestroyEvent e) {
if (!(e.getAttacker() instanceof Player)) {
return;
}
Vehicle cart = e.getVehicle();
Player p = (Player) e.getAttacker();
Region r = RedProtect.get().rm.getTopRegion(cart.getLocation());
if (r != null) {
return;
}
if (!RedProtect.get().config.globalFlagsRoot().worlds.get(p.getWorld().getName()).use_minecart && !p.hasPermission("redprotect.bypass.world")) {
e.setCancelled(true);
}
}
@EventHandler(ignoreCancelled = true)
public void onVehicleBreak(VehicleDestroyEvent e) {
RedProtect.get().logger.debug(LogLevel.BLOCKS, "BlockListener - Is VehicleDestroyEvent event");
if (!(e.getAttacker() instanceof Player)) {
return;
}
Vehicle cart = e.getVehicle();
Player p = (Player) e.getAttacker();
Region r = RedProtect.get().rm.getTopRegion(cart.getLocation());
if (r != null && !r.canMinecart(p)) {
RedProtect.get().lang.sendMessage(p, "blocklistener.region.cantbreak");
e.setCancelled(true);
}
}
/**
* @param e - event
* This function prevents boats from exploding when they hit
* something
*/
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = false)
public void onBoatHit(VehicleDestroyEvent e) {
// plugin.getLogger().info("Vehicle destroyed event called");
final Entity boat = e.getVehicle();
if (!(boat instanceof Boat)) {
return;
}
if (!boat.getWorld().getName().equalsIgnoreCase(Settings.worldName)) {
// Not the right world
return;
}
if (!(e.getAttacker() instanceof Player)) {
// plugin.getLogger().info("Attacker is not a player so cancel event");
e.setCancelled(true);
}
}
@EventHandler(priority = EventPriority.LOWEST)
public void onVehicleDestroy(VehicleDestroyEvent event) {
GDTimings.ENTITY_DAMAGE_EVENT.startTiming();
final Object source = event.getAttacker() != null ? event.getAttacker() : NMSUtil.getInstance().getBlockDamager();
if (protectEntity(event, source, (Entity) event.getVehicle())) {
event.setCancelled(true);
}
GDTimings.ENTITY_DAMAGE_EVENT.stopTiming();
}
@Override
public boolean init(final Expression<?>[] vars, final int matchedPattern, final Kleenean isDelayed, final ParseResult parser) {
if (!ScriptLoader.isCurrentEvent(EntityDamageByEntityEvent.class, EntityDeathEvent.class, VehicleDamageEvent.class, VehicleDestroyEvent.class)) {
Skript.error("Cannot use 'attacker' outside of a damage/death/destroy event", ErrorQuality.SEMANTIC_ERROR);
return false;
}
return true;
}
@EventHandler
public void on(VehicleDestroyEvent e) {
if (breakVehicleEnabled
|| !(e.getAttacker() instanceof Player)
|| !plugin.getWorldManager().isSkyAssociatedWorld(e.getVehicle().getWorld())
) {
return;
}
Player player = (Player) e.getAttacker();
if (player.hasPermission("usb.mod.bypassprotection") || plugin.playerIsOnIsland(player)) {
return;
}
e.setCancelled(true);
player.sendMessage(tr("\u00a7eYou cannot break vehicles while being a visitor!"));
}