下面列出了怎么用org.bukkit.event.block.BlockMultiPlaceEvent的API类实例代码及写法,或者点击链接到github查看源代码。
@EventHandler(ignoreCancelled = true)
public void onBlockMultiPlace(BlockMultiPlaceEvent event) {
LWC lwc = plugin.getLWC();
Block block = event.getBlock();
if (block.getType().name().contains("_BED")) {
for (BlockState state : event.getReplacedBlockStates()) {
Protection protection = lwc.findProtection(state);
if (protection != null) {
event.setCancelled(true);
return;
}
}
}
}
@EventWrapper
public void onBlockPlace(final BlockPlaceEvent event) {
if (event instanceof BlockMultiPlaceEvent) {
for (BlockState oldState : ((BlockMultiPlaceEvent) event).getReplacedBlockStates()) {
callEvent(event, oldState, oldState.getBlock().getState(), event.getPlayer());
}
} else {
callEvent(
event, event.getBlockReplacedState(), event.getBlock().getState(), event.getPlayer());
}
}
@EventWrapper
public void onBlockPlace(final BlockPlaceEvent event) {
if(event instanceof BlockMultiPlaceEvent) {
for(BlockState oldState : ((BlockMultiPlaceEvent) event).getReplacedBlockStates()) {
callEvent(event, oldState, oldState.getBlock().getState(), event.getPlayer());
}
} else {
callEvent(event, event.getBlockReplacedState(), event.getBlock().getState(), event.getPlayer());
}
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onBlockMultiPlace(BlockMultiPlaceEvent e) {
// Cancel any block places if SelectClickType is set
ClickType clickType = ClickType.getPlayerClickType(e.getPlayer());
if (clickType instanceof SelectClickType)
e.setCancelled(true);
}
@EventHandler(priority = EventPriority.HIGH)
public void onMultiBlockPlace(BlockMultiPlaceEvent e) {
for (BlockState blockState : e.getReplacedBlockStates()) {
Block below = blockState.getBlock().getRelative(BlockFace.DOWN);
if (shopUtils.isShop(below.getLocation())) {
Shop shop = shopUtils.getShop(below.getLocation());
if (shop.getItem() != null) {
shop.getItem().resetForPlayer(e.getPlayer());
}
e.setCancelled(true);
}
}
}
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onPlayerBlockPlace(final BlockMultiPlaceEvent e) {
if (DEBUG) {
plugin.getLogger().info("DEBUG: " + e.getEventName());
if (e.getPlayer() == null) {
plugin.getLogger().info("DEBUG: player is null");
} else {
plugin.getLogger().info("DEBUG: block placed by " + e.getPlayer().getName());
}
plugin.getLogger().info("DEBUG: Block is " + e.getBlock().toString());
}
if (Settings.allowedFakePlayers.contains(e.getPlayer().getName())) return;
// plugin.getLogger().info(e.getEventName());
if (IslandGuard.inWorld(e.getPlayer())) {
// This permission bypasses protection
if (e.getPlayer().isOp() || VaultHelper.checkPerm(e.getPlayer(), Settings.PERMPREFIX + "mod.bypassprotect")) {
return;
}
Island island = plugin.getGrid().getProtectedIslandAt(e.getBlock().getLocation());
if (island == null) {
if (!Settings.defaultWorldSettings.get(SettingsFlag.PLACE_BLOCKS)) {
Util.sendMessage(e.getPlayer(), ChatColor.RED + plugin.myLocale(e.getPlayer().getUniqueId()).islandProtected);
e.setCancelled(true);
}
return;
}
// Island exists
if (island.getIgsFlag(SettingsFlag.PLACE_BLOCKS) || island.getMembers().contains(e.getPlayer().getUniqueId())) {
// Check how many placed
//plugin.getLogger().info("DEBUG: block placed " + e.getBlock().getType());
String type = e.getBlock().getType().toString();
if (!e.getBlock().getState().getClass().getName().endsWith("CraftBlockState")
// Not all blocks have that type of class, so we have to do some explicit checking...
|| e.getBlock().getType().equals(Material.REDSTONE_COMPARATOR_OFF)
|| type.endsWith("BANNER") // Avoids V1.7 issues
|| e.getBlock().getType().equals(Material.ENDER_CHEST)
|| e.getBlock().getType().equals(Material.ENCHANTMENT_TABLE)
|| e.getBlock().getType().equals(Material.DAYLIGHT_DETECTOR)
|| e.getBlock().getType().equals(Material.FLOWER_POT)){
// tile entity placed
if (Settings.limitedBlocks.containsKey(type) && Settings.limitedBlocks.get(type) > -1) {
int count = island.getTileEntityCount(e.getBlock().getType(),e.getBlock().getWorld());
if (Settings.limitedBlocks.get(type) <= count) {
Util.sendMessage(e.getPlayer(), ChatColor.RED + (plugin.myLocale(e.getPlayer().getUniqueId()).entityLimitReached.replace("[entity]",
Util.prettifyText(type))).replace("[number]", String.valueOf(Settings.limitedBlocks.get(type))));
e.setCancelled(true);
return;
}
}
}
return;
}
// Outside of protection area or visitor
Util.sendMessage(e.getPlayer(), ChatColor.RED + plugin.myLocale(e.getPlayer().getUniqueId()).islandProtected);
e.setCancelled(true);
}
}