下面列出了怎么用org.bukkit.block.data.type.WallSign的API类实例代码及写法,或者点击链接到github查看源代码。
@EventHandler(priority = EventPriority.MONITOR)
public void onSignChanged(SignChangeEvent e) {
if (e.isCancelled() || e.getPlayer() == null
|| !plugin.getWorldManager().isSkyAssociatedWorld(e.getPlayer().getWorld())
|| !e.getLines()[0].equalsIgnoreCase("[usb]")
|| e.getLines()[1].trim().isEmpty()
|| !e.getPlayer().hasPermission("usb.island.signs.place")
|| !(e.getBlock().getType() == SkyBlockMenu.WALL_SIGN_MATERIAL)
|| !(e.getBlock().getState() instanceof Sign)
) {
return;
}
Sign sign = (Sign) e.getBlock().getState();
if(sign.getBlock().getState().getBlockData() instanceof WallSign) {
WallSign data = (WallSign) sign.getBlock().getState().getBlockData();
BlockFace attached = data.getFacing().getOppositeFace();
Block wallBlock = sign.getBlock().getRelative(attached);
if (isChest(wallBlock)) {
logic.addSign(sign, e.getLines(), (Chest) wallBlock.getState());
}
}
}
@Override
public BlockFace getSignFacing(Block block) {
if (block == null) {
return null;
}
BlockState blockState = block.getState();
if (blockState == null) {
return null;
}
BlockData blockData = blockState.getBlockData();
if (blockData == null) {
return null;
}
if(blockData instanceof WallSign) {
return ((WallSign) blockData).getFacing();
} else if(blockData instanceof Sign) {
return ((Sign) blockData).getRotation();
}
return null;
}
@Override
public boolean setSignFacing(Block block, BlockFace facing) {
if (block == null || facing == null) {
return false;
}
BlockState blockState = block.getState();
if (blockState == null) {
return false;
}
BlockData blockData = blockState.getBlockData();
if (blockData == null) {
return false;
}
if(blockData instanceof WallSign) {
((WallSign) blockData).setFacing(facing);
} else if(blockData instanceof Sign) {
((Sign) blockData).setRotation(facing);
} else {
return false;
}
block.setBlockData(blockData);
return true;
}
@Override
public Block getSignAttachedTo(Block block) {
if (block == null) {
return null;
}
BlockState blockState = block.getState();
if (blockState == null) {
return null;
}
org.bukkit.block.data.BlockData blockData = blockState.getBlockData();
if (blockData == null) {
return null;
}
if(blockData instanceof WallSign) {
return block.getRelative(((WallSign) blockData).getFacing().getOppositeFace());
} else if(blockData instanceof Sign) {
return block.getRelative(BlockFace.DOWN);
}
return null;
}
/**
* Create a shop use Shop and Info object.
*
* @param shop The shop object
* @param info The info object
*/
public void createShop(@NotNull Shop shop, @NotNull Info info) {
Player player = Bukkit.getPlayer(shop.getOwner());
if (player == null) {
throw new IllegalStateException("The owner creating the shop is offline or not exist");
}
ShopCreateEvent shopCreateEvent = new ShopCreateEvent(shop, player);
if (Util.fireCancellableEvent(shopCreateEvent)) {
Util.debugLog("Cancelled by plugin");
return;
}
if (info.getSignBlock() != null && autoSign) {
if (Util.isAir(info.getSignBlock().getType()) || info.getSignBlock().getType() == Material.WATER) {
info.getSignBlock().setType(Util.getSignMaterial());
BlockState bs = info.getSignBlock().getState();
if (info.getSignBlock().getType() == Material.WATER && (bs.getBlockData() instanceof Waterlogged)) {
Waterlogged waterable = (Waterlogged) bs.getBlockData();
waterable.setWaterlogged(true); // Looks like sign directly put in water
}
if (bs.getBlockData() instanceof WallSign) {
WallSign signBlockDataType = (WallSign) bs.getBlockData();
BlockFace bf = info.getLocation().getBlock().getFace(info.getSignBlock());
if (bf != null) {
signBlockDataType.setFacing(bf);
bs.setBlockData(signBlockDataType);
}
} else {
plugin.getLogger().warning("Sign material " + bs.getType().name() + " not a WallSign, make sure you using correct sign material.");
}
bs.update(true);
} else {
if (!plugin.getConfig().getBoolean("shop.allow-shop-without-space-for-sign")) {
MsgUtil.sendMessage(player, MsgUtil.getMessage("failed-to-put-sign", player));
Util.debugLog("Sign cannot placed cause no enough space(Not air block)");
return;
}
}
}
//load the shop finally
shop.onLoad();
//first init
shop.setSignText();
//sync add to prevent compete issue
addShop(shop.getLocation().getWorld().getName(), shop);
//save to database
plugin.getDatabaseHelper().createShop(
shop,
null,
e -> Bukkit.getScheduler().runTask(plugin, () -> {
//also remove from memory when failed
shop.delete(true);
plugin.getLogger().warning("Shop create failed, trying to auto fix the database...");
boolean backupSuccess = Util.backupDatabase();
if (backupSuccess) {
plugin.getDatabaseHelper().removeShop(shop);
} else {
plugin.getLogger().warning("Failed to backup the database, all changes will revert after a reboot.");
}
}));
}