方块右键事件
该代码在server脚本里
方块右键事件有两种调取方式
BlockEvents.rightClicked(blockId, event => {})
第一种是指定方块右键捕捉获取事件BlockEvents.rightClicked(event => {})
第二种是捕捉所有被右键的方块
这边建议使用第一种指定一种方块,第二种看情况再选择
可被直接访问的方法
方法名 | 方法用处 | 返回类型 | 直接调用值 |
---|---|---|---|
getBlock() | 获取被右键方块属性 | BlockContainerJS | block |
getEntity() | 获取右键方块的实体(在这里获取的是玩家) | Player | entity |
getFacing() | 获取被右键方块的朝向 | Direction | facing |
getHand() | 获取哪个手右键的方块 | InteractionHand | hand |
getItem() | 获取右键方块的物品 | ItemStack | item |
getLevel() | 获取被右键方块的世界 | Level | level |
getPlayer() | 获取右键方块的玩家 | Player | player |
getServer() | 获取被右键方块的服务端 | MinecraftServer | server |
示例
下面示例使用方块右键事件,当玩家使用含有斧子tag的物品右键橡木木板时,会使木板掉落木棍8个
js
BlockEvents.rightClicked('minecraft:oak_planks', event => {
if (event.hand == "OFF_HAND") return
let player = event.getPlayer()
if (player == null) return
let isBreak = false;
if (event.getItem().hasTag("minecraft:axes")){
let spawnItem = event.getLevel().createEntity("item")
spawnItem.pos = event.block.pos
spawnItem.item = Item.of('minecraft:stick', 8);
event.level.destroyBlock(event.block.pos,false)
spawnItem.spawn();
event.getItem().setDamageValue(event.getItem().getDamageValue() + 2)
}
})
方块右键事件会获取玩家两次,第一次为主手第二次为副手
所以需要判断一下if (event.hand == "OFF_HAND")
是为哪个手点击的物品
这里的event.getItem()
获取的是event.hand
的物品
event.getItem().hasTag("minecraft:axes")
判断物品是否含有某一个tag标签
event.level.destroyBlock(event.block.pos,false)
使用破坏方块方法传入方块坐标和false来代表方块被破坏并且不会进行掉落