Skip to content

方块右键事件

该代码在server脚本里

方块右键事件有两种调取方式

  1. BlockEvents.rightClicked(blockId, event => {}) 第一种是指定方块右键捕捉获取事件
  2. 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来代表方块被破坏并且不会进行掉落

Contributors

Changelog