主题
特效类动作
用于播放音效、粒子特效和其他视觉效果。
播放音效
向玩家播放音效。
语法
javascript
action.sound(选择器, 音效名称, [音量], [音调])
action.playsound(选择器, 音效名称, [音量], [音调])参数
| 参数 | 类型 | 必需 | 默认值 | 说明 |
|---|---|---|---|---|
| 选择器 | String | 是 | - | 目标玩家选择器 |
| 音效名称 | String | 是 | - | Bukkit Sound 名称 |
| 音量 | Float | 否 | 1.0 | 音量(0.0-2.0) |
| 音调 | Float | 否 | 1.0 | 音调(0.5-2.0) |
常用音效
| 音效名称 | 说明 |
|---|---|
ENTITY_PLAYER_LEVELUP | 升级音效 |
UI_TOAST_CHALLENGE_COMPLETE | 成就完成 |
ENTITY_ENDER_DRAGON_GROWL | 龙吼 |
ENTITY_WITHER_SPAWN | 凋灵生成 |
BLOCK_NOTE_BLOCK_PLING | 音符盒 |
ENTITY_FIREWORK_ROCKET_BLAST | 烟花爆炸 |
ENTITY_LIGHTNING_BOLT_THUNDER | 雷声 |
BLOCK_CHEST_OPEN | 箱子打开 |
ENTITY_VILLAGER_YES | 村民同意 |
ENTITY_VILLAGER_NO | 村民拒绝 |
BLOCK_BELL_USE | 钟声 |
示例
javascript
// 基础用法
action.sound('@所有玩家', 'ENTITY_PLAYER_LEVELUP');
action.sound('@触发者', 'BLOCK_NOTE_BLOCK_PLING', 1.0, 2.0);
// 不同场景音效
action.sound('@所有玩家', 'UI_TOAST_CHALLENGE_COMPLETE'); // 完成
action.sound('@所有玩家', 'ENTITY_ENDER_DRAGON_GROWL'); // Boss出现
action.sound('@触发者', 'ENTITY_VILLAGER_NO'); // 失败
action.sound('@触发者', 'BLOCK_CHEST_OPEN'); // 开启宝箱播放粒子特效
在指定位置播放粒子特效。
语法
javascript
action.effect(粒子名称, 位置, [数量], [速度])
action.particle(粒子名称, 位置, [数量], [速度])参数
| 参数 | 类型 | 必需 | 默认值 | 说明 |
|---|---|---|---|---|
| 粒子名称 | String | 是 | - | Bukkit Particle 名称 |
| 位置 | String | 是 | - | 坐标(格式:x,y,z) |
| 数量 | Int | 否 | 10 | 粒子数量 |
| 速度 | Double | 否 | 0.1 | 粒子速度 |
常用粒子效果
| 粒子名称 | 说明 |
|---|---|
FIREWORK | 烟花 |
FLAME | 火焰 |
HEART | 爱心 |
EXPLOSION_LARGE | 大爆炸 |
EXPLOSION_HUGE | 巨大爆炸 |
DRAGON_BREATH | 龙息 |
TOTEM | 图腾 |
END_ROD | 末地烛 |
ENCHANTMENT_TABLE | 附魔台 |
PORTAL | 传送门 |
VILLAGER_HAPPY | 开心村民 |
VILLAGER_ANGRY | 愤怒村民 |
示例
javascript
// 基础用法
action.effect('FIREWORK', '0,65,0', 50);
action.effect('FLAME', '10,64,10', 20, 0.1);
// 多个特效组合
action.effect('FIREWORK', '0,65,0', 100);
action.effect('TOTEM', '0,65,0', 50);
action.effect('DRAGON_BREATH', '0,65,0', 200);
// 循环特效
for (var i = 0; i < 5; i++) {
action.effect('FIREWORK', (i * 5) + ',70,' + (i * 5), 50);
action.wait('0.5秒');
}闪电特效
在指定位置生成闪电。
语法
javascript
action.lightning(位置, [是否造成伤害])参数
| 参数 | 类型 | 必需 | 默认值 | 说明 |
|---|---|---|---|---|
| 位置 | String | 是 | - | 坐标(格式:x,y,z) |
| 是否造成伤害 | Boolean | 否 | false | 是否对实体造成伤害 |
示例
javascript
// 纯特效闪电
action.lightning('0,65,0');
action.lightning('0,65,0', false);
// 伤害闪电
action.lightning('10,64,10', true);
// Boss登场效果
for (var i = 0; i < 3; i++) {
action.lightning('0,65,0', false);
action.sound('@所有玩家', 'ENTITY_LIGHTNING_BOLT_THUNDER');
action.wait('0.5秒');
}
action.sound('@所有玩家', 'ENTITY_WITHER_SPAWN', 2.0, 0.5);完整示例
示例1:通关特效
javascript
// scripts.yml - 完成脚本
action.title('@所有玩家', '&a&l━━━ 胜利 ━━━', '&e地牢已完成');
// 烟花庆祝
for (var i = 0; i < 5; i++) {
action.effect('FIREWORK', (i * 5) + ',70,' + (i * 5), 50);
action.effect('TOTEM', (i * 5) + ',70,' + (i * 5), 30);
action.sound('@所有玩家', 'ENTITY_FIREWORK_ROCKET_BLAST');
action.wait('0.5秒');
}
action.sound('@所有玩家', 'UI_TOAST_CHALLENGE_COMPLETE');示例2:Boss登场
javascript
// monsters.yml - Boss波开始时
action.time('midnight');
action.weather('thunder');
action.title('@所有玩家', '&c&l━━━ 最终Boss ━━━', '&4骷髅王苏醒了');
action.message('@所有玩家', '');
action.message('@所有玩家', '&c&l ⚔ 骷髅王降临 ⚔');
action.message('@所有玩家', '');
// 闪电特效
for (var i = 0; i < 3; i++) {
action.lightning('0,65,0', false);
action.sound('@所有玩家', 'ENTITY_LIGHTNING_BOLT_THUNDER');
action.wait('0.5秒');
}
action.sound('@所有玩家', 'ENTITY_WITHER_SPAWN', 2.0, 0.5);
action.effect('DRAGON_BREATH', '0,65,0', 200, 0.5);示例3:陷阱特效
javascript
// interacts.yml - 陷阱触发
interacts:
火焰陷阱:
type: STEP_ON
parameters:
location: "15,64,10"
script: |
action.sound('@触发者', 'ENTITY_CREEPER_PRIMED', 1.0, 0.8);
action.effect('FLAME', '15,64,10', 50, 0.2);
action.message('@触发者', '&c你触发了火焰陷阱!');
action.wait('0.5秒');
action.damage('@触发者', 5);
action.sound('@触发者', 'ENTITY_PLAYER_HURT');示例4:宝箱打开
javascript
// interacts.yml - 宝箱
interacts:
神秘宝箱:
type: RIGHT_CLICK_BLOCK
once: true
parameters:
location: "20,64,15"
script: |
action.sound('@触发者', 'BLOCK_CHEST_OPEN');
action.effect('VILLAGER_HAPPY', '20,65,15', 30);
action.message('@触发者', '&a宝箱已打开!');
action.wait('0.5秒');
action.give_item('@触发者', 'diamond', 5);
action.sound('@触发者', 'ENTITY_PLAYER_LEVELUP');示例5:传送特效
javascript
// 传送前特效
action.message('@所有玩家', '&e正在传送...');
action.sound('@所有玩家', 'BLOCK_PORTAL_TRIGGER');
action.effect('PORTAL', '0,64,0', 100);
action.wait('2秒');
action.teleport('@所有玩家', 'spawn');
action.sound('@所有玩家', 'ENTITY_ENDERMAN_TELEPORT');
action.effect('END_ROD', 'spawn', 50);示例6:计时警告
javascript
// tasks.yml - 定时任务
任务:
时间警告:
类型: "定时"
时间: 300 # 5分钟
脚本: |
action.title('@所有玩家', '&e&l剩余5分钟', '&7请加快速度');
action.sound('@所有玩家', 'BLOCK_NOTE_BLOCK_PLING', 1.0, 0.5);
action.effect('VILLAGER_ANGRY', '0,70,0', 50);音效组合技巧
成功/完成音效
javascript
action.sound('@所有玩家', 'ENTITY_PLAYER_LEVELUP');
action.sound('@所有玩家', 'UI_TOAST_CHALLENGE_COMPLETE');
action.sound('@所有玩家', 'ENTITY_FIREWORK_ROCKET_BLAST');失败/警告音效
javascript
action.sound('@所有玩家', 'ENTITY_VILLAGER_NO');
action.sound('@所有玩家', 'BLOCK_NOTE_BLOCK_BASS', 1.0, 0.5);
action.sound('@触发者', 'ENTITY_PLAYER_HURT');Boss/危险音效
javascript
action.sound('@所有玩家', 'ENTITY_ENDER_DRAGON_GROWL');
action.sound('@所有玩家', 'ENTITY_WITHER_SPAWN');
action.sound('@所有玩家', 'ENTITY_LIGHTNING_BOLT_THUNDER');环境/氛围音效
javascript
action.sound('@所有玩家', 'BLOCK_BELL_USE', 2.0, 0.8);
action.sound('@所有玩家', 'AMBIENT_CAVE');
action.sound('@所有玩家', 'BLOCK_PORTAL_AMBIENT', 0.5, 1.0);粒子组合技巧
庆祝特效
javascript
action.effect('FIREWORK', '0,70,0', 100);
action.effect('TOTEM', '0,70,0', 50);
action.effect('END_ROD', '0,70,0', 30);魔法/传送特效
javascript
action.effect('PORTAL', '0,64,0', 100);
action.effect('ENCHANTMENT_TABLE', '0,64,0', 50);
action.effect('END_ROD', '0,64,0', 30);危险/警告特效
javascript
action.effect('FLAME', '0,64,0', 50);
action.effect('LAVA', '0,64,0', 30);
action.effect('SMOKE_LARGE', '0,64,0', 20);性能注意事项
- 粒子数量:避免在短时间内生成过多粒子(推荐 < 500 /秒)
- 音效频率:不要在循环中频繁播放音效
- 范围控制:大范围特效会影响所有附近玩家
- 服务器性能:根据服务器配置调整特效密度
