Skip to content

特效类动作

用于播放音效、粒子特效和其他视觉效果。

播放音效

向玩家播放音效。

语法

javascript
action.sound(选择器, 音效名称, [音量], [音调])
action.playsound(选择器, 音效名称, [音量], [音调])

参数

参数类型必需默认值说明
选择器String-目标玩家选择器
音效名称String-Bukkit Sound 名称
音量Float1.0音量(0.0-2.0)
音调Float1.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
数量Int10粒子数量
速度Double0.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
是否造成伤害Booleanfalse是否对实体造成伤害

示例

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);

性能注意事项

  1. 粒子数量:避免在短时间内生成过多粒子(推荐 < 500 /秒)
  2. 音效频率:不要在循环中频繁播放音效
  3. 范围控制:大范围特效会影响所有附近玩家
  4. 服务器性能:根据服务器配置调整特效密度

相关动作

基于 MIT 许可发布