下面列出了怎么用org.bukkit.entity.minecart.ExplosiveMinecart的API类实例代码及写法,或者点击链接到github查看源代码。
/**
* This handler only checks to see if the event should be cancelled. It does not change the
* state of any Destroyables.
*/
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void testBlockChange(BlockTransformEvent event) {
if(this.match.getWorld() != event.getWorld() || !this.anyDestroyableAffected(event)) {
return;
}
// This is a temp fix until there is a tracker for placed minecarts (only dispensed are tracked right now)
if((event.getCause() instanceof EntityExplodeEvent &&
((EntityExplodeEvent) event.getCause()).getEntity() instanceof ExplosiveMinecart) ||
event.getCause() instanceof BlockPistonExtendEvent ||
event.getCause() instanceof BlockPistonRetractEvent) {
event.setCancelled(true);
return;
}
for(Destroyable destroyable : this.destroyables) {
String reasonKey = destroyable.testBlockChange(event.getOldState(), event.getNewState(), ParticipantBlockTransformEvent.getPlayerState(event));
if(reasonKey != null) {
event.setCancelled(true, new TranslatableComponent(reasonKey));
return;
}
}
}
/**
* This handler only checks to see if the event should be cancelled. It does not change the state
* of any Destroyables.
*/
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void testBlockChange(BlockTransformEvent event) {
if (this.match.getWorld() != event.getWorld() || !this.anyDestroyableAffected(event)) {
return;
}
// This is a temp fix until there is a tracker for placed minecarts (only dispensed are tracked
// right now)
if ((event.getCause() instanceof EntityExplodeEvent
&& ((EntityExplodeEvent) event.getCause()).getEntity() instanceof ExplosiveMinecart)
|| event.getCause() instanceof BlockPistonExtendEvent
|| event.getCause() instanceof BlockPistonRetractEvent) {
event.setCancelled(true);
return;
}
for (Destroyable destroyable : this.destroyables) {
String reasonKey =
destroyable.testBlockChange(
event.getOldState(),
event.getNewState(),
ParticipantBlockTransformEvent.getPlayerState(event));
if (reasonKey != null) {
event.setCancelled(true, TranslatableComponent.of(reasonKey));
return;
}
}
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void breakCheck(final BlockTransformEvent event) {
if (event.getWorld() != this.match.getWorld()) return;
ParticipantState player = ParticipantBlockTransformEvent.getPlayerState(event);
Vector blockVector = BlockVectors.center(event.getNewState()).toVector();
for (Core core : this.cores) {
if (!core.hasLeaked() && core.getCasingRegion().contains(blockVector)) {
if (event.getNewState().getType() == Material.AIR) {
if (player != null) {
Competitor team = player.getParty();
if (team == core.getOwner()) {
event.setCancelled(true, TranslatableComponent.of("core.damageOwn"));
} else if (event.getOldState().getData().equals(core.getMaterial())) {
this.match.callEvent(new CoreBlockBreakEvent(core, player, event.getOldState()));
core.touch(player);
// Note: team may not have touched a broken core if a different team broke it
if (!core.isCompleted(team) && !core.hasTouched(team)) {
this.match.callEvent(new GoalStatusChangeEvent(this.match, core));
}
}
} else if (event.getCause() instanceof EntityExplodeEvent) {
// this is a temp fix until there is a tracker for placed minecarts (only dispensed are
// tracked right now)
if (((EntityExplodeEvent) event.getCause()).getEntity() instanceof ExplosiveMinecart) {
event.setCancelled(true);
}
} else if (event.getCause() instanceof BlockPistonRetractEvent) {
event.setCancelled(true);
}
} else if (event.getCause() instanceof BlockPistonExtendEvent) {
event.setCancelled(true);
} else if (event.getCause() instanceof BlockDispenseEvent) {
event.setCancelled(true);
}
break;
}
}
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void breakCheck(final BlockTransformEvent event) {
if(event.getWorld() != this.match.getWorld()) return;
ParticipantState player = ParticipantBlockTransformEvent.getPlayerState(event);
Vector blockVector = BlockUtils.center(event.getNewState()).toVector();
for(Core core : this.cores) {
if(!core.hasLeaked() && core.getCasingRegion().contains(blockVector)) {
if(event.getNewState().getType() == Material.AIR) {
if(player != null) {
Competitor team = player.getParty();
if(team == core.getOwner()) {
event.setCancelled(true, new TranslatableComponent("match.core.damageOwn"));
} else if (event.getOldState().getData().equals(core.getMaterial())) {
this.match.getPluginManager().callEvent(new CoreBlockBreakEvent(core, player, event.getOldState()));
core.touch(player);
// Note: team may not have touched a broken core if a different team broke it
if(!core.isCompleted(team) && !core.hasTouched(team)) {
this.match.getPluginManager().callEvent(new GoalStatusChangeEvent(core));
}
}
} else if(event.getCause() instanceof EntityExplodeEvent) {
// this is a temp fix until there is a tracker for placed minecarts (only dispensed are tracked right now)
if(((EntityExplodeEvent) event.getCause()).getEntity() instanceof ExplosiveMinecart) {
event.setCancelled(true);
}
} else if(event.getCause() instanceof BlockPistonRetractEvent) {
event.setCancelled(true);
}
} else if(event.getCause() instanceof BlockPistonExtendEvent) {
event.setCancelled(true);
} else if(event.getCause() instanceof BlockDispenseEvent) {
event.setCancelled(true);
}
break;
}
}
}