跳到主要内容

📜 Denizen

提示

如果您在使用 CraftEngine 提供的 Denizen 功能时遇到问题,请及时向我们反馈。如果您想要请求新的 Denizen 功能并且您了解 Java,请考虑通过拉取请求贡献您的代码!

注意

你需要安装 Denizen

在所有事件行中,ce 也可以写成 craftengine,例如 on player breaks craftengine block block:on player breaks ce block block: 效果相同。

CraftEngine 的 id(如 default:wooden_chair)可以直接写在事件行和命令参数中——插件会自动向 Denizen 注册所有已加载的命名空间,无需额外转义。

事件

📅

破坏 CraftEngine 方块事件

事件

当玩家破坏 CraftEngine 自定义方块时触发。可取消

语法格式:

on player breaks ce block <'block'>

事件字段:

<context.location> - 方块被破坏的位置<context.id> - CraftEngine 方块 id,如 "default:togglable_light_block"<context.should_drop_items> - 事件是否会掉落物品开关: with:<item> - 仅当使用指定物品破坏时触发Determine: "NOTHING" - 不掉落物品;ListTag(ItemTag) - 改为掉落指定物品

示例:

on player breaks ce block block:
- narrate "你破坏了一个 <context.id>!"
on player breaks ce block default:togglable_light_block with:diamond_pickaxe:
- narrate "没有掉落物!"
- determine NOTHING
📅

破坏 CraftEngine 家具事件

事件

当玩家破坏 CraftEngine 家具时触发。可取消

语法格式:

on player breaks ce furniture <'furniture'>

事件字段:

<context.location> - 家具被破坏的位置<context.id> - CraftEngine 家具 id,如 "default:wooden_chair"<context.entity> - 家具基础实体的 EntityTag<context.should_drop_items> - 事件是否会掉落物品开关: with:<item> - 仅当使用指定物品破坏时触发Determine: "NOTHING" - 不掉落物品;ListTag(ItemTag) - 改为掉落指定物品

示例:

on player breaks ce furniture default:wooden_chair:
- narrate "你破坏了一把木椅!"
- determine NOTHING
📅

放置 CraftEngine 方块事件

事件

当玩家放置 CraftEngine 自定义方块时触发。可取消

语法格式:

on player places ce block <'block'>

事件字段:

<context.location> - 方块被放置的位置<context.id> - CraftEngine 方块 id<context.hand> - 使用的手开关: with:<item> - 仅当使用指定物品放置时触发

示例:

on player places ce block block:
- narrate "你放置了一个 <context.id>!"
on player places ce block default:safe_block in:my_base:
- determine cancelled
📅

放置 CraftEngine 家具事件

事件

当玩家放置 CraftEngine 家具时触发。可取消

语法格式:

on player places ce furniture <'furniture'>

事件字段:

<context.location> - 家具被放置的位置<context.id> - CraftEngine 家具 id<context.entity> - 家具基础实体的 EntityTag<context.hand> - 使用的手开关: with:<item> - 仅当使用指定物品放置时触发

示例:

on player places ce furniture furniture:
- narrate "你放置了一个 <context.id>!"
📅

尝试放置 CraftEngine 方块事件

事件

当玩家即将放置 CraftEngine 自定义方块时触发(放置发生之前)。取消事件可阻止放置

语法格式:

on player attempts to place ce block <'block'>

事件字段:

<context.location> - 方块将被放置的位置<context.id> - CraftEngine 方块 id<context.clicked_block> - 触发放置时被点击的方块<context.hand> - 使用的手开关: with:<item> - 仅当使用指定物品放置时触发

示例:

on player attempts to place ce block block in:no_build_zone:
- narrate "你不能在这里放置!"
- determine cancelled
📅

尝试放置 CraftEngine 家具事件

事件

当玩家即将放置 CraftEngine 家具时触发(放置发生之前)。取消事件可阻止放置

语法格式:

on player attempts to place ce furniture <'furniture'>

事件字段:

<context.location> - 家具将被放置的位置<context.id> - CraftEngine 家具 id<context.variant> - 正在放置的家具变体名称<context.clicked_block> - 触发放置时被点击的方块<context.hand> - 使用的手开关: with:<item> - 仅当使用指定物品放置时触发

示例:

on player attempts to place ce furniture furniture in:no_build_zone:
- narrate "你不能在这里放置!"
- determine cancelled
📅

点击 CraftEngine 方块事件

事件

当玩家点击 CraftEngine 自定义方块时触发。可取消。注意:CraftEngine 在创造模式下将左键视为破坏,因此 LEFT_CLICK 仅在生存/冒险模式下触发

语法格式:

on player (right|left) clicks ce block (<'block'>)

事件字段:

<context.item> - 玩家点击时使用的 ItemTag<context.location> - 玩家点击的位置<context.id> - CraftEngine 方块 id<context.relative> - 被点击方块前方的空气方块<context.click_type> - LEFT_CLICK 或 RIGHT_CLICK<context.hand> - 使用的手开关: with:<item> - 仅当使用指定物品点击时触发

示例:

on player right clicks ce block:
- narrate "你右键了一个 <context.id>!"
on player right clicks ce block default:safe_block with:diamond_sword:
- narrate "不许用那把剑!"
- determine cancelled
📅

点击 CraftEngine 家具事件

事件

当玩家点击 CraftEngine 家具时触发。可取消

语法格式:

on player (right|left) clicks ce furniture (<'furniture'>)

事件字段:

<context.item> - 玩家点击时使用的 ItemTag<context.location> - 被点击家具的位置<context.id> - CraftEngine 家具 id<context.entity> - 家具基础实体的 EntityTag<context.click_type> - LEFT_CLICK 或 RIGHT_CLICK<context.hand> - 使用的手开关: with:<item> - 仅当使用指定物品点击时触发

示例:

on player right clicks ce furniture:
- narrate "你右键了一个 <context.id>!"
📅

CraftEngine 重载事件

事件

当 CraftEngine 插件完成重载时触发。无关联玩家

语法格式:

on ce reloaded

示例:

on ce reloaded:
- announce "CraftEngine 重载完成!"

标签

🏷️

物品:是否 CraftEngine 物品 / 物品 id

标签

检查物品是否为 CraftEngine 自定义物品,并获取其 CraftEngine 物品 id

语法格式:

<ItemTag.is_ce_item> - 返回 ElementTag(Boolean)<ItemTag.ce_id> - 返回 ElementTag,如 "default:topaz_rod";非自定义物品则无返回

示例:

- if <player.item_in_hand.is_ce_item>:
  - narrate "你正拿着 <player.item_in_hand.ce_id>!"
🏷️

位置:是否 CraftEngine 方块 / 方块 id

标签

检查该位置的方块是否为 CraftEngine 自定义方块,并获取其 CraftEngine 方块 id

语法格式:

<LocationTag.is_ce_block> - 返回 ElementTag(Boolean)<LocationTag.ce_id> - 返回 ElementTag,如 "default:togglable_light_block";非自定义方块则无返回

示例:

- if <player.cursor_on.is_ce_block>:
  - narrate "你正看着 <player.cursor_on.ce_id>!"
🏷️

位置:CraftEngine 方块状态

标签

返回该位置 CraftEngine 自定义方块全部方块状态属性的 MapTag。非自定义方块则无返回

语法格式:

<LocationTag.ce_block_states> - 返回 MapTag

示例:

- narrate "你看着的方块亮度为 <player.cursor_on.ce_block_states.get[light]>。"
🏷️

实体:是否 CraftEngine 家具 / 家具 id

标签

检查实体是否属于 CraftEngine 家具(基础实体、座位或碰撞体),并获取其 CraftEngine 家具 id

语法格式:

<EntityTag.is_ce_furniture> - 返回 ElementTag(Boolean)<EntityTag.ce_id> - 返回 ElementTag,如 "default:wooden_chair";非家具则无返回

示例:

- if <player.precise_target.is_ce_furniture.if_null[false]>:
  - narrate "你正看着 <player.precise_target.ce_id>!"
🏷️

实体:是否家具座位 / 碰撞体

标签

检查实体是否为 CraftEngine 家具的座位或碰撞实体

语法格式:

<EntityTag.is_ce_furniture_seat> - 返回 ElementTag(Boolean)<EntityTag.is_ce_furniture_collider> - 返回 ElementTag(Boolean)

示例:

- if <player.precise_target.is_ce_furniture_seat.if_null[false]>:
  - narrate "这是一个座位!"
🏷️

实体:家具变体 / 变体列表

标签

获取 CraftEngine 家具的当前变体名称,或其全部变体名称列表

语法格式:

<EntityTag.ce_furniture_variant> - 返回 ElementTag<EntityTag.ce_furniture_variants> - 返回 ListTag

示例:

- narrate "椅子的变体是 <player.precise_target.ce_furniture_variant>,全部: <player.precise_target.ce_furniture_variants>"
🏷️

服务器:CraftEngine id 列表

标签

返回所有已加载的 CraftEngine 方块、物品和家具 id 列表

语法格式:

<server.ce_block_ids> - 返回 ListTag<server.ce_item_ids> - 返回 ListTag<server.ce_furniture_ids> - 返回 ListTag

示例:

- narrate "已加载 <server.ce_block_ids.size> 个自定义方块!"
🏷️

CraftEngine 物品

标签

根据输入的 id 构造一个 CraftEngine 自定义物品对象

语法格式:

<ce_item[<item_id>]> - 返回 ItemTag

示例:

- give <ce_item[default:topaz_rod]>
🏷️

CraftEngine 可能状态

标签

返回某个 CraftEngine 方块 id 的全部可能方块状态,格式可直接用于 placeceblock 命令

语法格式:

<ce_possible_states[<block_id>]> - 返回 ListTag,如 "default:togglable_light_block[light=15]"

示例:

- foreach <ce_possible_states[default:togglable_light_block]> as:state:
  - narrate "<[state]>"

机制(Mechanism)

⚙️

位置:设置 CraftEngine 方块状态

机制

设置该位置 CraftEngine 自定义方块的一个方块状态属性,配合 adjust 命令使用

语法格式:

- adjust <location> ce_block_state:<key=value>

示例:

- adjust <player.cursor_on> ce_block_state:light=10
⚙️

实体:设置 CraftEngine 家具变体

机制

设置 CraftEngine 家具的变体,配合 adjust 命令使用。变体不存在或被阻挡时不生效

语法格式:

- adjust <entity> ce_furniture_variant:<variant_name>

示例:

- adjust <player.precise_target> ce_furniture_variant:oak

命令

💻

PlaceCEBlock

命令

在世界中放置 CraftEngine 自定义方块。方块用 id 指定,可带方块状态属性。支持 ~waitable

语法格式:

placeceblock [<location>|.../<ellipsoid>/<cuboid>] [<craftengine_block>|...] (no_physics) (<percent chance>|...)

参数说明:

no_physics - 放置时不让物理更新影响被修改的方块(<percent chance>|...) - 每个位置按顺序掷骰,直到某个方块命中为止;全部未命中则该位置保持不变。"50|50" 表示 50% 第一种、25% 第二种、25% 不变

示例:

- placeceblock <player.cursor_on> default:sugar_block
- ~placeceblock <player.cursor_on> default:togglable_light_block[light=15] no_physics
- placeceblock <player.location.to_cuboid[<player.cursor_on>]> default:sugar_block|default:cloud_block 50|50
💻

SpawnCEFurniture

命令

在世界中生成 CraftEngine 家具。支持 ~waitable

语法格式:

spawncefurniture [<location>|.../<ellipsoid>/<cuboid>] [<craftengine_furniture>|...] (direction:north/east/south/west) (<percent chance>|...)

参数说明:

direction: - 控制家具朝向(<percent chance>|...) - 每个位置按顺序掷骰,直到某个家具命中为止;全部未命中则该位置不生成

示例:

- spawncefurniture <player.cursor_on> default:wooden_chair
- ~spawncefurniture <player.cursor_on> default:oak_lamp direction:west
💻

RemoveCEFurniture

命令

移除世界中的 CraftEngine 家具,不掉落战利品、不播放效果。非家具实体会被忽略。支持 ~waitable

语法格式:

removecefurniture [<entity>|...]

示例:

- removecefurniture <player.precise_target>
💻

RemoveCEBlock

命令

移除世界中的 CraftEngine 自定义方块,不掉落战利品、不播放效果。非自定义方块的位置会被静默跳过。支持 ~waitable

语法格式:

removeceblock [<location>|.../<ellipsoid>/<cuboid>]

示例:

- removeceblock <player.cursor_on>
- removeceblock <player.location.to_cuboid[<player.cursor_on>]>