Skip to content

玩家类动作

用于操作玩家的状态、位置、物品等。

传送

传送玩家到指定位置。

语法

javascript
action.teleport(选择器, 位置)
action.tp(选择器, 位置)

参数

参数类型说明
选择器String目标玩家选择器
位置String目标位置

位置格式

格式说明示例
x,y,z当前世界坐标"0,64,0"
x,y,z,yaw,pitch带朝向的坐标"0,64,0,90,0"
spawn副本出生点"spawn"
主世界spawn / world_spawn主世界出生点"主世界spawn"

示例

javascript
// 基础坐标传送
action.teleport('@触发者', '0,64,0');

// 带朝向传送
action.teleport('@所有玩家', '10,65,10,90,0');

// 传送到副本出生点
action.teleport('@所有玩家', 'spawn');

// 传送到主世界
action.teleport('@所有玩家', '主世界spawn');

给予物品

给予玩家物品。

语法

javascript
action.give_item(选择器, 物品, [数量])
action.give(选择器, 物品, [数量])

参数

参数类型必需默认值说明
选择器String-目标玩家选择器
物品String-物品Material名称
数量Int1物品数量

示例

javascript
// 给予钻石
action.give_item('@触发者', 'diamond', 5);

// 给予不同物品
action.give_item('@所有玩家', 'emerald', 10);
action.give_item('@触发者', 'golden_apple', 3);
action.give_item('@随机', 'diamond_sword', 1);

// 循环给予奖励
var rewards = ['diamond', 'emerald', 'gold_ingot'];
for (var i = 0; i < rewards.length; i++) {
  action.give_item('@触发者', rewards[i], 5);
}

给予MythicMobs物品

给予玩家MythicMobs物品。

语法

javascript
action.give_mythic_item(选择器, 物品ID, [数量])
action.give_mm(选择器, 物品ID, [数量])

参数

参数类型必需默认值说明
选择器String-目标玩家选择器
物品IDString-MythicMobs物品ID
数量Int1物品数量

示例

javascript
// 给予神话物品
action.give_mythic_item('@触发者', 'legendary_sword', 1);
action.give_mm('@所有玩家', 'magic_potion', 5);

// Boss击败奖励
action.give_mm('@所有玩家', 'boss_trophy', 1);
action.give_mm('@所有玩家', 'rare_gem', 3);

// 根据评分给予不同物品
var score = getVar('总分');
if (score >= 1500) {
  action.give_mm('@所有玩家', 'legendary_weapon', 1);
  action.message('@所有玩家', '&6获得传说武器!');
} else if (score >= 1000) {
  action.give_mm('@所有玩家', 'epic_weapon', 1);
  action.message('@所有玩家', '&5获得史诗武器!');
} else {
  action.give_mm('@所有玩家', 'rare_weapon', 1);
  action.message('@所有玩家', '&b获得稀有武器!');
}

// 随机奖励
var items = ['sword_of_fire', 'sword_of_ice', 'sword_of_thunder'];
var randomIndex = Math.floor(Math.random() * items.length);
action.give_mm('@触发者', items[randomIndex], 1);

注意事项

  • 物品ID必须在MythicMobs的配置中定义
  • 如果背包满了,物品会掉落在玩家脚下
  • 需要服务器安装MythicMobs插件

治疗

治疗玩家生命值。

语法

javascript
action.heal(选择器, [数量])

参数

参数类型必需说明
选择器String目标玩家选择器
数量Double不指定则完全治疗

示例

javascript
// 完全治疗(生命、饱食度、饱和度)
action.heal('@所有玩家');

// 治疗指定血量
action.heal('@触发者', 10);
action.heal('@所有玩家', 5.5);

// 阶段性治疗
if ((getVar('当前波次') || 0) % 2 == 0) {
  action.heal('@所有玩家');
  action.message('@所有玩家', '&a已为你回复生命!');
}

施加药水效果

给玩家施加药水效果。

语法

javascript
action.potion(选择器, 效果, [持续时间], [等级], [粒子=true], [图标=true])
action.apply_potion(选择器, 效果, [持续时间], [等级])

参数

参数类型必需默认值说明
选择器String-目标玩家选择器
效果String-药水效果类型
持续时间String"10秒"持续时间(支持"秒"、"分钟")
等级Int0效果等级(0=I, 1=II, ...)
粒子Booleantrue是否显示粒子
图标Booleantrue是否显示图标

常用药水效果

效果名称说明效果名称说明
SPEED速度SLOW缓慢
INCREASE_DAMAGE力量WEAKNESS虚弱
JUMP跳跃提升SLOW_FALLING缓降
REGENERATION生命恢复POISON中毒
DAMAGE_RESISTANCE抗性提升WITHER凋零
FIRE_RESISTANCE抗火INVISIBILITY隐身
NIGHT_VISION夜视BLINDNESS失明
HEAL瞬间治疗HARM瞬间伤害
LUCK幸运UNLUCK霉运
ABSORPTION伤害吸收GLOWING发光

示例

javascript
// 基础用法
action.potion('@所有玩家', 'SPEED', '30秒', 0);
action.potion('@触发者', 'INCREASE_DAMAGE', '60秒', 1);

// 多个效果
action.potion('@所有玩家', 'SPEED', '30秒', 1);
action.potion('@所有玩家', 'JUMP', '30秒', 1);
action.potion('@所有玩家', 'NIGHT_VISION', '5分钟', 0);

// 里程碑奖励
var kills = getVar('总击杀') || 0;
if (kills >= 20) {
  action.potion('@所有玩家', 'INCREASE_DAMAGE', '60秒', 1);
  action.potion('@所有玩家', 'SPEED', '60秒', 0);
  action.message('@所有玩家', '&a获得增益效果!');
}

清除药水效果

清除玩家身上的药水效果。

语法

javascript
action.clear_potion(选择器, [效果类型])
action.remove_potion(选择器, [效果类型])

参数

参数类型必需说明
选择器String目标玩家选择器
效果类型String不指定则清除全部

示例

javascript
// 清除所有效果
action.clear_potion('@所有玩家');

// 清除特定效果
action.clear_potion('@触发者', 'POISON');
action.clear_potion('@所有玩家', 'WITHER');

造成伤害

对玩家造成伤害。

语法

javascript
action.damage(选择器, 数值, [原因])

参数

参数类型必需默认值说明
选择器String-目标玩家选择器
数值Double-伤害数值
原因String-伤害原因

示例

javascript
// 基础伤害
action.damage('@触发者', 5);

// 陷阱伤害
action.damage('@触发者', 10);
action.message('@触发者', '&c你触发了陷阱!');

// 区域伤害
action.damage('@所有玩家', 2);
action.message('@所有玩家', '&c你受到了环境伤害!');

设置护盾值

设置玩家的吸收伤害护盾。

语法

javascript
action.shield(选择器, 数值, [模式])
action.absorb(选择器, 数值, [模式])
action.absorption(选择器, 数值, [模式])

参数

参数类型必需默认值说明
选择器String-目标玩家选择器
数值Double-护盾值
模式String"add"add(叠加) 或 set(设置)

示例

javascript
// 给予护盾
action.shield('@所有玩家', 10);

// 设置固定护盾值
action.shield('@触发者', 20, 'set');

// 叠加护盾
action.shield('@所有玩家', 5, 'add');

施加动能

给玩家施加速度/击退效果。

语法

javascript
action.velocity(选择器, x, y, z, [叠加=true])
action.knockback(选择器, x, y, z, [叠加=true])

参数

参数类型必需默认值说明
选择器String-目标玩家选择器
xDouble-X轴速度
yDouble-Y轴速度
zDouble-Z轴速度
叠加Booleantrue是否叠加当前速度

示例

javascript
// 向上弹飞
action.velocity('@触发者', 0, 2, 0);

// 向后击退
action.velocity('@触发者', 0, 0.5, -1);

// 陷阱效果
action.velocity('@触发者', 0, 2, 0);
action.damage('@触发者', 5);
action.message('@触发者', '&c陷阱触发!');

设置生命值

设置玩家的生命值。

语法

javascript
action.set_health(选择器, 数值, [模式])

参数

参数类型必需默认值说明
选择器String-目标玩家选择器
数值Double-生命值
模式String"set"set(设置), add(增加), subtract(减少)

示例

javascript
// 设置生命值
action.set_health('@触发者', 10);

// 增加生命值
action.set_health('@所有玩家', 5, 'add');

// 减少生命值
action.set_health('@触发者', 3, 'subtract');

设置游戏模式

设置玩家的游戏模式。

语法

javascript
action.gamemode(选择器, 模式)
action.gm(选择器, 模式)

参数

参数类型说明
选择器String目标玩家选择器
模式String生存/survival/0, 创造/creative/1, 冒险/adventure/2, 旁观/spectator/3

示例

javascript
// 设置为生存模式
action.gamemode('@所有玩家', '生存');
action.gamemode('@所有玩家', 'survival');
action.gamemode('@所有玩家', '0');

// 其他模式
action.gamemode('@触发者', '冒险');
action.gamemode('@触发者', '旁观');

释放 MythicMobs 技能

让玩家释放 MythicMobs 技能。

前置要求

需要服务器安装 MythicMobs 插件

语法

javascript
action.cast_skill(选择器, 技能名)
action.cast_mm_skill(选择器, 技能名)
action.释放技能(选择器, 技能名)

参数

参数类型必需说明
选择器String施法者(谁释放技能)
技能名StringMythicMobs 技能名称

示例

javascript
// 基础用法
action.cast_skill('@触发者', 'Fireball');
action.cast_skill('@所有玩家', 'Heal');

// 波次完成奖励 - 全体治疗
action.message('@所有玩家', '&a第一波完成!');
action.cast_skill('@所有玩家', 'HealingAura');

// Boss阶段转换 - 释放技能
if (boss_health < 0.5) {
  action.message('@所有玩家', '&cBoss 进入狂暴状态!');
  action.cast_skill('@触发者', 'BerserkRage');
}

// 随机玩家获得增益
action.cast_skill('@随机', 'PowerBuff');
action.message('@随机', '&6你获得了强化增益!');

MythicMobs 技能配置示例

技能的效果、目标等由 MythicMobs 配置文件定义:

yaml
# plugins/MythicMobs/Skills/dungeon_skills.yml

# 治疗技能
HealingAura:
  Skills:
  - heal{amount=10} @self
  - effect:particles{particle=heart;amount=20} @self
  - sound{s=entity.player.levelup;v=1;p=1.5} @self

# 火球技能
Fireball:
  Skills:
  - projectile{onTick=FireballTick;onHit=FireballHit;v=20;i=1;hR=1;vR=1} @target

# 增益技能
PowerBuff:
  Skills:
  - effect:potion{type=INCREASE_DAMAGE;duration=600;level=1} @self
  - effect:potion{type=SPEED;duration=600;level=0} @self
  - message{m="&a获得强化增益!"} @self

注意事项

  1. 技能必须存在:技能名称必须在 MythicMobs 配置中定义
  2. 目标由 MM 决定:技能的目标选择器在 MythicMobs 配置中定义(如 @self, @target, @NearestPlayer 等)

完整示例:技能奖励系统

javascript
// 击杀奖励 - 随机释放技能
var kills = (getVar('总击杀') || 0) + 1;
setVar('总击杀', kills);

if (kills % 5 == 0) {
  var skills = ['Heal', 'SpeedBoost', 'StrengthBuff'];
  var randomSkill = skills[Math.floor(Math.random() * skills.length)];
  
  action.cast_skill('@随机', randomSkill);
  action.message('@所有玩家', '&e随机玩家获得了技能奖励!');
}

// Boss 战 - 阶段技能
function checkBossPhase() {
  var bossHealth = getVar('boss_health_percent');
  var currentPhase = getVar('boss_phase') || 1;
  
  if (bossHealth < 0.75 && currentPhase < 2) {
    setVar('boss_phase', 2);
    action.message('@所有玩家', '&c&lBoss 阶段 2');
    action.cast_skill('@所有玩家', 'DefensiveBuff');
  } else if (bossHealth < 0.5 && currentPhase < 3) {
    setVar('boss_phase', 3);
    action.message('@所有玩家', '&4&lBoss 狂暴!');
    action.cast_skill('@所有玩家', 'EmergencyHeal');
  }
}

更多信息

查看 MythicMobs 集成 了解更多高级用法


完整示例

示例1:波次完成奖励

javascript
// monsters.yml - 第一波完成时
action.heal('@所有玩家');
action.shield('@所有玩家', 10);
action.potion('@所有玩家', 'SPEED', '30秒', 0);
action.potion('@所有玩家', 'REGENERATION', '10秒', 1);
action.message('@所有玩家', '&a第一波完成!已为你回复状态');

示例2:陷阱系统

javascript
// interacts.yml - 压力板陷阱
interacts:
  陷阱_1:
    type: STEP_ON
    parameters:
      location: "15,64,10"
    script: |
      action.sound('@触发者', 'ENTITY_CREEPER_PRIMED', 1.0, 0.8);
      action.message('@触发者', '&c你触发了陷阱!');
      action.velocity('@触发者', 0, 2, 0);
      action.wait('0.5秒');
      action.damage('@触发者', 5);

示例3:里程碑增益

javascript
// tasks.yml - 击杀里程碑
任务:
  击杀里程碑:
    类型: "事件"
    触发: "monster_kill"
    脚本: |
      var kills = (getVar('总击杀') || 0) + 1;
      setVar('总击杀', kills);
      
      if (kills == 10) {
        action.message('@所有玩家', '&e[里程碑] 击杀10!获得速度I');
        action.potion('@所有玩家', 'SPEED', '30秒', 0);
        action.sound('@所有玩家', 'ENTITY_PLAYER_LEVELUP');
      } else if (kills == 25) {
        action.message('@所有玩家', '&6[里程碑] 击杀25!获得力量I');
        action.potion('@所有玩家', 'INCREASE_DAMAGE', '60秒', 0);
        action.sound('@所有玩家', 'BLOCK_BEACON_POWER_SELECT');
      } else if (kills == 50) {
        action.message('@所有玩家', '&c&l[里程碑] 击杀50!终极增益!');
        action.heal('@所有玩家');
        action.shield('@所有玩家', 20);
        action.potion('@所有玩家', 'INCREASE_DAMAGE', '120秒', 2);
        action.potion('@所有玩家', 'DAMAGE_RESISTANCE', '120秒', 1);
        action.potion('@所有玩家', 'SPEED', '120秒', 1);
        action.title('@所有玩家', '&c&l屠魔者', '&4终极力量觉醒');
      }

示例4:Boss战增益

javascript
// monsters.yml - Boss波开始时
action.title('@所有玩家', '&c&lBoss战', '&7获得战斗增益');
action.heal('@所有玩家');
action.shield('@所有玩家', 20);
action.potion('@所有玩家', 'INCREASE_DAMAGE', '300秒', 1);
action.potion('@所有玩家', 'DAMAGE_RESISTANCE', '300秒', 0);
action.potion('@所有玩家', 'REGENERATION', '300秒', 0);
action.give_item('@所有玩家', 'golden_apple', 5);

相关动作

基于 MIT 许可发布