下面列出了org.bukkit.Material#BED_BLOCK 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
public static boolean isBedBlock(Block isBed) {
if (isBed == null) {
return false;
}
return (isBed.getType() == Material.BED || isBed.getType() == Material.BED_BLOCK);
}
/**
* Default constructor for a bed.
*/
public Bed() {
super(Material.BED_BLOCK);
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onExplodeDestroy(EntityExplodeEvent eev) {
if (eev.isCancelled()) {
return;
}
if (eev.getEntity() == null) {
return;
}
if (eev.getEntity().getWorld() == null) {
return;
}
Game game =
BedwarsRel.getInstance().getGameManager().getGameByLocation(eev.getEntity().getLocation());
if (game == null) {
return;
}
if (game.getState() == GameState.STOPPED) {
return;
}
Iterator<Block> explodeBlocks = eev.blockList().iterator();
boolean tntDestroyEnabled =
BedwarsRel.getInstance().getBooleanConfig("explodes.destroy-worldblocks", false);
boolean tntDestroyBeds = BedwarsRel
.getInstance().getBooleanConfig("explodes.destroy-beds", false);
if (!BedwarsRel.getInstance().getBooleanConfig("explodes.drop-blocks", false)) {
eev.setYield(0F);
}
Material targetMaterial = game.getTargetMaterial();
while (explodeBlocks.hasNext()) {
Block exploding = explodeBlocks.next();
if (!game.getRegion().isInRegion(exploding.getLocation())) {
explodeBlocks.remove();
continue;
}
if ((!tntDestroyEnabled && !tntDestroyBeds) || (!tntDestroyEnabled && tntDestroyBeds
&& exploding.getType() != Material.BED_BLOCK && exploding.getType() != Material.BED)) {
if (!game.getRegion().isPlacedBlock(exploding)) {
if (BedwarsRel.getInstance().isBreakableType(exploding.getType())) {
game.getRegion().addBreakedBlock(exploding);
continue;
}
explodeBlocks.remove();
} else {
game.getRegion().removePlacedBlock(exploding);
}
continue;
}
if (game.getRegion().isPlacedBlock(exploding)) {
game.getRegion().removePlacedBlock(exploding);
continue;
}
if (exploding.getType().equals(targetMaterial)) {
if (!tntDestroyBeds) {
explodeBlocks.remove();
continue;
}
// only destroyable by tnt
if (!eev.getEntityType().equals(EntityType.PRIMED_TNT)
&& !eev.getEntityType().equals(EntityType.MINECART_TNT)) {
explodeBlocks.remove();
continue;
}
// when it wasn't player who ignited the tnt
TNTPrimed primedTnt = (TNTPrimed) eev.getEntity();
if (!(primedTnt.getSource() instanceof Player)) {
explodeBlocks.remove();
continue;
}
Player p = (Player) primedTnt.getSource();
if (!game.handleDestroyTargetMaterial(p, exploding)) {
explodeBlocks.remove();
continue;
}
} else {
game.getRegion().addBreakedBlock(exploding);
}
}
}