主题
玩家类动作
用于操作玩家的状态、位置、物品等。
传送
传送玩家到指定位置。
语法
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名称 |
| 数量 | Int | 否 | 1 | 物品数量 |
示例
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 | 是 | - | 目标玩家选择器 |
| 物品ID | String | 是 | - | MythicMobs物品ID |
| 数量 | Int | 否 | 1 | 物品数量 |
示例
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秒" | 持续时间(支持"秒"、"分钟") |
| 等级 | Int | 否 | 0 | 效果等级(0=I, 1=II, ...) |
| 粒子 | Boolean | 否 | true | 是否显示粒子 |
| 图标 | Boolean | 否 | true | 是否显示图标 |
常用药水效果
| 效果名称 | 说明 | 效果名称 | 说明 |
|---|---|---|---|
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 | 是 | - | 目标玩家选择器 |
| x | Double | 是 | - | X轴速度 |
| y | Double | 是 | - | Y轴速度 |
| z | Double | 是 | - | Z轴速度 |
| 叠加 | Boolean | 否 | true | 是否叠加当前速度 |
示例
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 | 是 | 施法者(谁释放技能) |
| 技能名 | String | 是 | MythicMobs 技能名称 |
示例
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注意事项
- 技能必须存在:技能名称必须在 MythicMobs 配置中定义
- 目标由 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);