1.14后,不能再使用org.spigotmc.material.Sign和org.spigotmc.material.data了(反正这个Dev是这样)
和MD_5一通交流,应使用BlockData API,翻了一圈SpigotMC毛线都没找到
经过3个小时的折腾,我整理了一套教程,虽然代码特别菜,但希望能帮到你
org.bukkit.material.Sign 不能在 1.14 上正常工作了,所以我们要换掉这个
获取Sign示例,可以用来设置牌子文字:
如果你需要操作 Facing 那么就要用BlockData Type了:
BlockDataAPI区分SIGNPOST(插地上的)和WALLSIGN(贴墙上的),所以代码不同:
获取到牌子的BlockDataType后,你可以用这个来操作 Facing
附上一个QSRR正在用的检测牌子是否贴在某个方块上的方法
@param Block b - 需要检测的方块
@Return Block - 被检测方块依附的方块,没有返回null
经测试可在1.13与1.14使用
和MD_5一通交流,应使用BlockData API,翻了一圈SpigotMC毛线都没找到
经过3个小时的折腾,我整理了一套教程,虽然代码特别菜,但希望能帮到你
org.bukkit.material.Sign 不能在 1.14 上正常工作了,所以我们要换掉这个
获取Sign示例,可以用来设置牌子文字:
代码:
- Block b = <在这里获取你的牌子方块>;
- org.bukkit.block.Sign sign = (org.bukkit.block.Sign) b.getState();
- sign.setText(....);
- sign.update(..);
如果你需要操作 Facing 那么就要用BlockData Type了:
BlockDataAPI区分SIGNPOST(插地上的)和WALLSIGN(贴墙上的),所以代码不同:
代码:
- bs=<在这里获取你的贴墙上的牌子方块>.getState();
- org.bukkit.block.data.type.WallSign signBlockDataType = (org.bukkit.block.data.type.WallSign) bs.getBlockData();
代码:
- bs=<在这里获取你的插地上的牌子方块>.getState();
- org.bukkit.block.data.type.Sign signBlockDataType = (org.bukkit.block.data.type.Sign) bs.getBlockData();
获取到牌子的BlockDataType后,你可以用这个来操作 Facing
代码:
- signBlockDataType.setFacing(<需要设置为的BlockFace>);
- bs.setBlockData(signBlockDataType);
附上一个QSRR正在用的检测牌子是否贴在某个方块上的方法
@param Block b - 需要检测的方块
@Return Block - 被检测方块依附的方块,没有返回null
代码:
- public static Block getAttached(Block b) {
- try {
- if(b.getBlockData() instanceof Directional) {
- Directional directional = (Directional) b.getBlockData();
- return b.getRelative(directional.getFacing().getOppositeFace());
- }else {
- //No Directionalable
- return null;
- }
- } catch (NullPointerException|ClassCastException e) {
- debugLog("What's this?");
- debugLog(e.getMessage());
- return null;
- }
- }
经测试可在1.13与1.14使用