主题
特效类动作
用于播放音效、粒子特效和其他视觉效果。
播放音效
向玩家播放音效。
语法
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) |
| 数量 | String | 否 | 10 | 格式:"数量=50" 或 "count=50" |
| 速度 | String | 否 | 0.1 | 格式:"速度=0.5" 或 "speed=0.5" |
| offsetX/Y/Z | String | 否 | 0.5 | 格式:"offsetX=1.0" |
常用粒子效果
| 粒子名称 | 说明 |
|---|---|
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('TOTEM', '0,65,0', 'count=100', 'speed=0.5');
// 多个特效组合
action.effect('FIREWORK', '0,65,0', '数量=100');
action.effect('TOTEM', '0,65,0', '数量=50');
action.effect('DRAGON_BREATH', '0,65,0', '数量=200');
// 自定义偏移量
action.effect('FLAME', '0,65,0', '数量=50', 'offsetX=2.0', 'offsetY=1.0', 'offsetZ=2.0');
// 循环特效
for (var i = 0; i < 5; i++) {
var x = i * 5;
var z = i * 5;
action.effect('FIREWORK', x + ',70,' + z, '数量=50');
action.wait('0.5秒');
}
// 使用变量
var location = '0,65,0';
action.effect('TOTEM', location, '数量=100', '速度=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++) {
var x = i * 5;
var z = i * 5;
action.effect('FIREWORK', x + ',70,' + z, '数量=50');
action.effect('TOTEM', x + ',70,' + z, '数量=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
// 传送前特效
actn.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 /秒)
- 音效频率:不要在循环中频繁播放音效
- 范围控制:大范围特效会影响所有附近玩家
- 服务器性能:根据服务器配置调整特效密度
