主题
交互点配置
交互点是地牢中可以触发特定脚本的位置或条件,支持多种交互方式。
常见用途:
- 宝箱系统(右键打开,获得奖励)
- 机关按钮(激活/关闭障碍物)
- 压力板陷阱(踩踏触发伤害)
- 区域触发(进入区域执行脚本)
- NPC对话(右键实体交互)
前置要求:
- 需要在游戏内使用交互点编辑器设置位置
- 脚本需要在
interacts.yml中编辑
交互类型说明
交互点支持 7 种交互类型:
| 类型 | 说明 | 适用场景 |
|---|---|---|
RIGHT_CLICK_BLOCK | 右键点击方块 | 宝箱、按钮、NPC石像 |
LEFT_CLICK_BLOCK | 左键点击方块 | 隐藏机关、破坏触发 |
BREAK_BLOCK | 破坏方块 | 特殊矿石、障碍清除 |
PLACE_BLOCK | 放置方块 | 能量核心激活、解谜 |
STEP_ON | 踩踏方块 | 压力板、陷阱触发 |
ENTER_REGION | 进入区域 | 区域陷阱、Boss战触发 |
RIGHT_CLICK_ENTITY | 右键实体 | NPC对话、商人 |
示例1:RIGHT_CLICK_BLOCK - 宝箱系统
右键打开宝箱,获得奖励(只能触发一次)。
yaml
interacts:
宝箱_1:
type: "RIGHT_CLICK_BLOCK"
once: true # 只能触发一次
parameters:
location: "20,64,15"
required_item: "TRIPWIRE_HOOK" # 需要手持金钥匙
fail_message: "&c需要金钥匙才能打开宝箱!"
triggered_message: "&c这个宝箱已经被打开了"
script: |-
action.message('@trigger', '&a&l你打开了宝箱!')
action.sound('@trigger', 'BLOCK_CHEST_OPEN', 1.0, 1.0)
action.effect('VILLAGER_HAPPY', '20,64,15', 30, 0.5, 0.3)
action.give_item('@trigger', 'DIAMOND', 5)
action.give_item('@trigger', 'GOLDEN_APPLE', 3)
action.message('@trigger', '&7获得: &e5个钻石, 3个金苹果')示例2:RIGHT_CLICK_BLOCK - 机关按钮
按下按钮临时移除障碍物。
yaml
interacts:
机关按钮:
type: "RIGHT_CLICK_BLOCK"
once: false # 可重复触发
parameters:
location: "5,64,10"
triggered_message: "" # 留空不显示
script: |-
action.message('@trigger', '&e你按下了机关按钮')
action.sound('@all', 'BLOCK_STONE_BUTTON_CLICK_ON', 1.0, 1.0)
action.delete_obstacle('出生点屏障')
action.message('@all', '&a屏障已解除,10秒后恢复')
action.wait('10秒')
action.message('@all', '&c屏障即将恢复...')
action.wait('2秒')
action.create_obstacle('出生点屏障')示例3:PLACE_BLOCK - 能量核心激活
放置钻石块激活能量核心。
yaml
interacts:
能量核心:
type: "PLACE_BLOCK"
once: true
parameters:
location: "0,64,-10"
required_block: "DIAMOND_BLOCK" # 需要放置钻石块
fail_message: "&c需要放置钻石块才能激活能量核心!"
triggered_message: "&c能量核心已经被激活过了"
script: |-
action.message('@trigger', '&a&l你激活了能量核心!')
action.title('@all', '&a能量核心激活', '&7障碍已解除')
action.sound('@all', 'BLOCK_BEACON_POWER_SELECT', 1.0, 1.2)
playVictoryEffects('0,64,-10')
action.wait('2秒')
action.delete_obstacle('Boss房大门')
action.message('@all', '&eBoss房大门已开启!')示例4:STEP_ON - 压力板陷阱
踩踏压力板触发陷阱。
yaml
interacts:
陷阱_1:
type: "STEP_ON"
once: false # 可重复触发
parameters:
location: "15,64,10"
triggered_message: ""
script: |-
action.sound('@trigger', 'ENTITY_CREEPER_PRIMED', 1.0, 0.8)
action.message('@trigger', '&c&l你触发了陷阱!')
action.title('@trigger', '&c危险', '&7快速逃离')
action.damage('@trigger', 5.0)
action.velocity('@trigger', 0.0, 0.8, 0.0) # 向上弹起示例5:ENTER_REGION - 区域陷阱
进入区域触发岩浆陷阱。
yaml
interacts:
陷阱区域:
type: "ENTER_REGION"
once: false
parameters:
min: "-15,63,-15"
max: "-10,68,-10"
triggered_message: ""
script: |-
action.message('@trigger', '&c&l你触发了陷阱!')
action.title('@trigger', '&c危险', '&7小心岩浆')
action.sound('@trigger', 'ENTITY_ELDER_GUARDIAN_CURSE', 1.0, 0.8)
action.create_obstacle('岩浆陷阱')
action.wait('10秒')
action.delete_obstacle('岩浆陷阱')示例6:BREAK_BLOCK - 神秘矿石
破坏特殊矿石获得奖励。
yaml
interacts:
神秘矿石:
type: "BREAK_BLOCK"
once: false
parameters:
location: "25,60,20"
required_item: "DIAMOND_PICKAXE" # 需要钻石镐
fail_message: "&c需要钻石镐才能开采这个矿石"
triggered_message: ""
script: |-
action.effect('FIREWORK', '25,60,20', 20, 1.0, 0.5)
action.sound('@trigger', 'ENTITY_EXPERIENCE_ORB_PICKUP', 1.0, 1.2)
action.give_item('@trigger', 'EMERALD', 3)
action.message('@trigger', '&a获得了 3 个绿宝石!')示例7:RIGHT_CLICK_ENTITY - NPC商人
右键NPC触发对话和交易。
yaml
interacts:
神秘商人:
type: "RIGHT_CLICK_ENTITY"
once: false
parameters:
entity_type: "VILLAGER"
entity_name: "&6神秘商人"
location: "-8,64,0"
triggered_message: ""
script: |-
action.message('@trigger', '&e[商人] &7你好,冒险者!')
action.message('@trigger', '&e[商人] &7需要一些补给吗?')
action.sound('@trigger', 'ENTITY_VILLAGER_YES', 1.0, 1.0)
action.give_item('@trigger', 'COOKED_BEEF', 8)
action.give_item('@trigger', 'ARROW', 32)
action.message('@trigger', '&7获得: &e8个熟牛肉, 32支箭')示例8:RIGHT_CLICK_BLOCK - 箱子奖励UI 🆕
右键打开箱子时显示奖励选择界面,让玩家自己选择想要的奖励。
功能说明:
- 玩家打开箱子后看到一个UI界面
- 可以从多个奖励中选择一个
- 支持完全自定义UI样式
- 防止重复领取
yaml
interacts:
reward_chest_1:
type: "RIGHT_CLICK_BLOCK"
once: true # 每个玩家只能打开一次
parameters:
location: "15,64,0"
block_type: "CHEST" # 可选:限定必须是箱子方块
triggered_message: "&c你已经打开过这个宝箱了"
script: |-
action.message('@trigger', '&a&l你打开了宝箱!')
action.sound('@trigger', 'BLOCK_CHEST_OPEN', 1.0, 1.0)
action.effect('VILLAGER_HAPPY', '15,65,0', 20, 0.5, 0.3)
// 打开箱子奖励UI(配置在 chest_rewards.yml)
action.open_chest_ui('@trigger', 'normal_chest')配置箱子UI(chest_rewards.yml):
yaml
chests:
normal_chest:
title: "&6&l✦ 普通宝箱 ✦"
rows: 3
mode: single
background: BLACK_STAINED_GLASS_PANE
options:
- slot: 11
icon: DIAMOND
name: "&b钻石礼包"
lore:
- "&7包含:"
- "&8▸ &f钻石 x3"
- "&8▸ &6金币 +1000"
reward: "normal_reward"
- slot: 13
icon: GOLD_INGOT
name: "&e金币礼包"
lore:
- "&7包含:"
- "&8▸ &f金锭 x16"
- "&8▸ &6金币 +2000"
reward: "gold_pack"
- slot: 15
icon: EXPERIENCE_BOTTLE
name: "&a经验礼包"
lore:
- "&7包含:"
- "&8▸ &a经验 +1000"
reward: "exp_pack"更多示例请参考 奖励配置 - 箱子奖励UI系统
示例9:RIGHT_CLICK_BLOCK - Boss战利品宝箱
Boss击杀后出现宝箱,玩家可以选择珍贵的战利品。
yaml
interacts:
boss_chest:
type: "RIGHT_CLICK_BLOCK"
once: true
parameters:
location: "0,64,20"
triggered_message: "&c你已经领取过Boss奖励了"
script: |-
action.title('@trigger', '&d&lBOSS战利品', '&7选择你的奖励')
action.sound('@trigger', 'BLOCK_CHEST_OPEN', 1.0, 0.8)
action.effect('DRAGON_BREATH', '0,65,20', 30, 1.0, 0.5)
// 打开Boss战利品UI
action.open_chest_ui('@trigger', 'boss_chest')配置字段说明
交互点基础字段
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
type | 字符串 | ✅ | 交互类型(见交互类型表) |
once | 布尔 | ✅ | 是否只能触发一次 |
parameters | 对象 | ✅ | 交互参数(根据类型不同而不同) |
triggered_message | 字符串 | ❌ | 已触发提示(留空则不显示) |
script | 脚本 | ✅ | 触发时执行的脚本 |
parameters 字段(按类型)
RIGHT_CLICK_BLOCK / LEFT_CLICK_BLOCK / BREAK_BLOCK / STEP_ON:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
location | 字符串 | ✅ | 方块坐标 "x,y,z" |
required_item | 字符串 | ❌ | 需要手持的物品材料名 |
fail_message | 字符串 | ❌ | 条件不满足时的提示 |
PLACE_BLOCK:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
location | 字符串 | ✅ | 方块坐标 "x,y,z" |
required_block | 字符串 | ❌ | 需要放置的方块类型 |
fail_message | 字符串 | ❌ | 条件不满足时的提示 |
ENTER_REGION:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
min | 字符串 | ✅ | 区域最小坐标 "x,y,z" |
max | 字符串 | ✅ | 区域最大坐标 "x,y,z" |
RIGHT_CLICK_ENTITY:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
entity_type | 字符串 | ✅ | 实体类型(VILLAGER, ARMOR_STAND等) |
entity_name | 字符串 | ❌ | 实体显示名称 |
location | 字符串 | ✅ | 实体坐标 "x,y,z" |
游戏内编辑
- 使用"交互点编辑器"(编辑工具栏槽位3)
- 左键点击方块 设置交互位置
- 选择交互类型
- 配置物品条件(可选)
- 保存配置
- 在
interacts.yml中编辑脚本
注意:
- 编辑器只记录位置和类型,脚本需要在配置文件中手动编辑
triggered_message留空则不显示"已触发"提示- 使用
/dga reload重载配置
常见问题
Q: 交互点不触发?
- 检查
type和parameters配置是否正确 - 确认坐标位置无误
- 查看控制台是否有脚本错误
Q: 如何限制只触发一次?
- 设置
once: true - 触发后会显示
triggered_message(如果配置了)
Q: 如何实现需要特定物品才能触发?
- 使用
required_item或required_block参数 - 配置
fail_message提示玩家
Q: ENTER_REGION 区域如何设置?
- 使用 Shift+右键进入区域选择模式
- 左键点击设置两个角点
- 区域会自动计算 min 和 max 坐标
