FireworkPolymer
本帖最后由 FireworkPolymer 于 2023-3-10 12:14 编辑

导读
MyCommand是一个支持你高度自定义自己功能的插件,综合了一系列功能,包括但不限于:

  • 自定义指令名,如/makemehappy
  • 添加命令扣费
  • 创建数组、变量、列表
  • 覆盖其他插件的命令,修改其他插件的命令
  • 用新命令执行其他命令
  • 用一条命令执行多条
  • 以可自定义的暂停、预备、冷却来执行延时命令
  • 可以制作简写命令或越权命令
  • 可以用任何的物品/方块/牌子/书/村民npc来执行命令
  • 用于计算命令的各种函数,如占位符、脚本(if-else)等.
  • 支持控制台
  • 支持经济 (需要Vault)
  • 没有命令限制,支持多个文件。
  • 可自定义的图标菜单(箱子界面、村民交易等), ActionBar, BossBar, 可点击文本(带提示), 标题和计分板命令
  • 允许在各种情况下(每个世界,按worldguard的地区等)执行命令。
  • 可自定义玩家的数据库,可以在其中存储任何更多您想要个性化的命令。支持 SQL 数据库。
  • 蹦极端记录功能,调度程序(scheduler),Http请求,加入/退出/死亡事件...
  • 支持自动补全(需要开启命令注册)
  • 支持将它自己的变量变成papi的变量
站内搬运:[机制]MyCommand —— 全方面自定义你的指令[1.7-1.16] - 服务端插件 - Minecraft(我的世界)中文论坛 - (mcbbs.net)
原帖地址:https://dev.bukkit.org/projects/mycommand
注意事项:
  • 在5.6.8+版本中,默认情况下插件会有一个全局的正则表达式运行,请在config.yml中修改[!]默认的配置会导致你无法在命令中输入中文
  • 你不能注册一个带空格的命令(当register: true时)[register见下章]
    command: /test example (这就是错的) -> command: /testexample (这才是对的)
  • 由于代码模式的诡异特性,所有的命令、例子将用深天蓝色标出

字数统计:


2021.12 数据,可能有更多内容

导读
MyCommand是一个支持你高度自定义自己功能的插件,综合了一系列功能,包括但不限于:
  • 自定义指令名,如/makemehappy
  • 添加命令扣费
  • 创建数组、变量、列表
  • 覆盖其他插件的命令,修改其他插件的命令
  • 用新命令执行其他命令
  • 用一条命令执行多条
  • 以可自定义的暂停、预备、冷却来执行延时命令
  • 可以制作简写命令或越权命令
  • 可以用任何的物品/方块/牌子/书/村民npc来执行命令
  • 用于计算命令的各种函数,如占位符、脚本(if-else)等.
  • 支持控制台
  • 支持经济 (需要Vault)
  • 没有命令限制,支持多个文件。
  • 可自定义的图标菜单(箱子界面、村民交易等), ActionBar, BossBar, 可点击文本(带提示), 标题和计分板命令
  • 允许在各种情况下(每个世界,按worldguard的地区等)执行命令。
  • 可自定义玩家的数据库,可以在其中存储任何更多您想要个性化的命令。支持 SQL 数据库。
  • 蹦极端记录功能,调度程序(scheduler),Http请求,加入/退出/死亡事件...
  • 支持自动补全(需要开启命令注册)
  • 支持将它自己的变量变成papi的变量
站内搬运:[机制]MyCommand —— 全方面自定义你的指令[1.7-1.16] - 服务端插件 - Minecraft(我的世界)中文论坛 - (mcbbs.net)
原帖地址:https://dev.bukkit.org/projects/mycommand
注意事项:
  • 在5.6.8+版本中,默认情况下插件会有一个全局的正则表达式运行,请在config.yml中修改[!]默认的配置会导致你无法在命令中输入中文
  • 你不能注册一个带空格的命令(当register: true时)[register见下章]
    command: /test example (这就是错的) -> command: /testexample (这才是对的)
  • 由于代码模式的诡异特性,所有的命令、例子将用深天蓝色标出
字数统计:


详情点击分目录查看
https://www.bilibili.com/video/av971411693配置和命令例子:(简单例子的内容不做翻译)

弃用的命令和常见问题解答

为什么我的命令运行时在聊天栏里显示"红色"?(1.13+?)你的命令显示为红色或“未知命令”,因为它们需要注册才能变为“白色”。使用命令字段register: true来让它变正常。这也能够让你能从选项卡看见它或从另一个插件运行它。(没注册的话你只能从聊天栏运行这个命令,用其他插件运行只会显示未知命令)


要成功注册一个命令你得重启你的服务器(现在直接用mycmd-reload commands貌似也行)
对于早于5.0.0版本(2014年发布)插件的古老用户(几率可能为0),命令文件中的命令名需要按数字升序调用。比如1,2,3之类的
如何配置&例子

如何制作一个文本(TEXT)类型的命令 :文本命令类型将向运行该命令的玩家显示游戏聊天框中你设定的文本。在下面这个例子中,将要显示的文本放在名为“TEXT”的命令字段下。检查示例以了解如何完成:'command_name':command: /welcometype: TEXTtext:- '&2Hello &a$player!'- '&6Welcome to &e$server-name &6Server!'- '&6Enjoy you stay!.'





建议:建议将命令文件中的任何文本行放在最上面或引号(" "或' ')内。这可以帮助你防止辨别错误。例子:"command_name":type: "TEXT"text:- "My Text" command: /tete

创建一个全服聊天框公告(BROADCAST_TEXT)命令类型:

与前面的文本命令类型示例相同,BROADCAST_TEXT的工作方式相同,但其输出会发生变化,顾名思义就是发给全服的玩家
'broadcast_example':command: /brexampletype: BROADCAST_TEXTtext:- '&6Hello online players from &e$player!'


(5.3.0+添加特性) 命令字段 :broadcast_message_permission_node这个命令字段可以让你把公告发给拥有特定权限的玩家
使用方法如下
broadcast_message_permission_node: 玩家.要有的.权限



文本类型 - 居中文本(Centered text.)

MyCommand中的一个用于文本的内置功能-居中文本。你可以使用“text-style”命令字段自动将命令文本居中。例子:text-style: CENTERED



在特定范围内发出公告 :

使用命令字段"broadcast_radius:数字"生成一条只能让特定半径内玩家看到的消息(在下方例子中为100)broadcast_cmd: ... broadcast_radius: 100在BROADCAST_TEXT种类和"$broadcasttext$"(见下方)占位符条件下该命令字段都生效

创建 别名/快捷方式 命令类型:

创建“别名/快捷方式(aliases)”命令有两种方式。第一种是使用“ALIAS”命令类型,另一种是使用更灵活且总是推荐的“RUN_COMMAND”命令类型。
例子 :'my_alias':command: /ltype: ALIASalias: /list
输入/l 后会运行/list
或是 :
'my_alias':command: /ltype: RUN_COMMANDruncmd:- /list
这两个命令运行效果如下 :


在快捷命令中使用参数:

只有在"RUN_COMMAND"类型下才可以实现输入参数(其实是所有的"运行命令"类型都可以,包括RUN_AS_OPERATOR,RUN_CONSOLE等等)。创建一个新命令并将$arg1放在需要的地方,它将被替换为在游戏聊天框中键入的任何参数。
例如,如果使用下面示例中的命令键入“/vip Name1”,该命令将用“Name1”替换“$arg1”。这样,最终输出将是“/pex user Name1 group set Vip”。你可以在一个命令中使用多个参数占位符($arg1..$arg2..3..等等),只需注意将这些占位符按升序排列即可。


代码'vip_shortcut':command: /viptype: RUN_COMMANDruncmd:- /pex user $arg1 group set Vip效果图
P.S: 这是张很老的图了

--------------在多个命令中使用同一个变量:--------------


这个就像上一个例子一样,不过多用了几个参数
'define_an_region':command: /wgdeftype: RUN_COMMANDruncmd:- //expand vert- /region define $arg1 $arg2
另一个例子 :'lb_rollback':command: /rollbacktype: RUN_COMMANDruncmd:- /lb rollback player $arg1 time $arg2- /ban $arg1


--------------

用多参数($multiargs)创建一个快捷命令 :


$multiargs占位符可以获取你输入的所有参数。如果你不需要参数有特定的位置,你可以用$multiargs替换$arg1,$arg2等等'your_command':command: /stype: RUN_COMMANDruncmd: - /say $multiargs


你也可以把$multiargs放在某些$arg后面. 比如这样:runcmd:- /myban name:$arg1 reason:$multiargs


这样的话, $multiargs只会输出$arg1以后的数据.想让命令需要输入所有的参数?用这个命令字段来强制要求玩家输入所有的参数后命令才能执行 :'your_command': ... require_all_arguments: true



例子:如果你的命令有 "$arg1..$arg2 和 3" 然后你输入了/command one two,插件会阻止你运行该命令, 因为它需要输入三个参数, 所以输入/command one two three命令就能成功执行了.需要限制参数数量? 使用required_args.与“require_all_arguments”不同,这使得你能在每个命令类型上添加“检查”,并使你能够更加具体。这是runcmd中的“自动”系统(?),每行工作一次,所以效率不高,但这是一个很好的替代。
'your_command': ... required_args: 2这样,仅当玩家至少输入2个参数时,命令才会运行。例如“/command do something”。



自定义错误信息&权限:

你可以使用“error-message:”、“permission-node:”和“permission-error:”命令字段管理错误消息(比如输入了无效参数)和权限(对应的节点和错误信息)。将这两个命令字段放在命令中,并像示例中那样对其进行自定义:
'time_shortcut':command: /ttype: RUN_COMMANDruncmd:- /time $arg1 worlderror-message: '&c请输入/t day'permission-node: custom.custompermission-error: '没权限执行该命令'


默认情况下,所有命令都需要权限执行。你可以使用权限节点(permission-node)和权限错误消息(permission-error)来管理它,但也可以使用“permission-required”命令字段通过命令禁用它。如果你需要让命令没有权限也能执行,则将其设置为false。举个例子:'no_permission_example':command: /freecommandtype: TEXTpermission-required: false#(这样就不需要权限了)


默认情况下,如果你不设置任何权限,插件会为你自动设置一个默认权限取决于你正使用的配置.
在较新版本的插件上,默认权限是“mycommand.cmd.command_name”,其中“command_name”是命令的第一部分。比如上面的示例,命令名是“no_permission_example”,因此最终的权限是:“mycommand.cmd.no_permission_example”。


否则,在较旧的插件版本(<5.2.7)上,默认权限将根据命令位置进行更改。位置等于命令在配置文件中的升序位置。也就是:“mycommand.cmd.position”。如果要在较新版本的插件上使用这些权限,可以在config.yml中更改设置值(不推荐)。


你可以在游戏内或控制台中键入/mycmd list或/mycmd check 命令名 来看到详细信息


注意:如果你设置的是“register:true”(将命令注册为真实命令),则权限错误消息无法替换自定义占位符,如$player等等。因为这些信息都存储在命令本身中,并且当错误发生时,事件甚至没有到达MyCommand以允许它替换占位符。
一个命令使用多个命令类型
从 MyCommand 5.6.0+ 开始, 你可以在一个命令中使用多个命令种类.
为此,不要将类型直接放在“type”后面,而是像列表一样放在下面。
command_name:type:- TEXT- RUN_COMMAND
并不是每种类型都能很好地协同工作,但是总的来说,如果你想要的话,你还是可以把它们放在一起。上面的例子就是可能的各种组合之一


如何使用扣除物品(Item Cost)功能:


须知: 在版本>4.0.0的插件中, 你必须使用物品名而不是物品的数字ID. 所以,如果在之前的版本里你用的是'4:5',你得改成"COBBLESTONE:5".使用例子 :'ic_example':command: /itemcostexampletype: TEXTtext:- 'This command cost 5 cobblestone. ITEM_NAME:AMOUNT'itemcost: 'COBBLESTONE:5'


如果需要,可以使用成功消息(success-message)或者错误消息(error-message)字段来自定义扣除物品后的消息或者物品不足的消息.例子:cost_example:#(这是花钱的例子)command: /costexamplecost: 5success-message: "&a花了 &7%s 元"#(%s指的是你的花费金额变量)error-message: "你需要%s元来执行该命令!"
itemcost_example:#(这是消耗物品的)command: /itemcostexampleitemcost: "COBBLESTONE:5"success-message: "&a使用了&7%s %s &a来执行该命令"#(第二个%s指的是你的物品变量[COBBLESTONE:5],第一个%s指的是你的数量变量[COBBLESTONE:5])error-message: "你需要 %s %s 来运行这个命令!"
自MyCommand 5.4.2起,此功能支持一次扣除多个物品,或者将物品自定义显示名称作为变量。这能让你扣除物品更加精确。


例子 :
itemcost: ITEM_1:AMOUNT_1;ITEM_2:AMOUNT_2
自定义物品名也能被使用在里面
itemcost: IRON_SWORD:1:SUPER IRON SWORD;GOLDEN_CHESTPLATE:1:&eULTRA ARMOR



注册真实命令&选项卡/tab补全(Tab Completer)

为什么要注册命令?
注册一个命令是有好处的,比如在另一个插件中执行这个新创建的命令的能力。仅当命令注册了以后,选项卡/tab补全才能生效,这也是一个好处
所以要怎么注册命令呢?
你可以在命令文件下添加如下命令字段来注册命令 : "register: true" 或是 "registered: true"
例子 :'registered_command':command: /buycraft-pack1type: RUN_COMMANDruncmd:- "/say 玩家$arg1, 刚从商店买了个Pack1!"register: true
另一个关于选项卡/tab补全的是'gm_alias':command: /gmtype: RUN_COMMANDruncmd:- "/gamemode $multiargs"register: truetab_completer:- survival- creative- adventure
在本例中,你可以看出选项卡/tab补全的作用。仅当命令已注册时,这个功能才起作用。像这个例子一样,如果你输入“/gamemode”,然后按TAB,它将返回给你tab_completer命令字段后列出来的东西,也就是"survival,creative 等等..."。默认情况下,如果你没有在命令中设置tab_completer字段,当你按tab键时,它将返回已连接玩家的列表。不过就现在来看,如果你不添加$player_list到tab_completer里面的话,你不能同时返回两种结果。


向已注册的命令添加多个别名/缩写:
你可以用aliases命令字段来轻易地为命令添加别名,这下面是个例子 :aliases_example:command: /voteregister: truealiases:- /v- /voting- /ecc
P.S 命令字段"aliases"和命令种类"ALIAS"完全不同.
选项卡/tab补全(TabCompleter)的进阶使用方法 (需要版本>5.5.1) :
tab_completer可按下方描述自定义。
有一些占位符只对tab_completer有效 : 比如 $player_list- (它将会返回在线玩家的名字列表)例子:
tab_completer:1:- set- add- remove2:- $player_list3:- money- gold- credits4:- amount- $rnd6
在本例中,在聊天框中输入的命令的每个位置都将返回不同的信息。这些信息按照1、2、3…升序排列并对应相应位置。
比如,我在聊天框中输入"/manageuser 空格"(这个"空格"就是那个按tab之后对应信息会出现的地方)我按下tab后,自动填充就会在你的聊天框显示/manageuser set /manageuser add /manageuser remove之类的. 再来一次, 如果我输入"/manageuser set 空格",按照上面的例子来看,我就会得到在线玩家的列表(比如/manageuser set FireworkPolymer,再按一下,/manageuser set WAter 之类),这是因为"$player_list"干的就是这个事,等等.....
在下一章可以看到所有的的变量为选项卡/tab补全定制权限显示:
因玩家权限不同而显示不同建议你需要用<permission>分隔符来分割权限和建议.
tab_completer:1:- 这个将显示给成员<permission>myperm.member- 这个将显示给VIP(拥有myperm.vips权限的人)<permission>myperm.vips- 这个将显示给所有人

怎么在选项卡/tab补全中使用判断条件.

例子:使用这个结构-<pos_1=give> , 只有当前面的选择是设定的内容时这个选择才会出现.(比如前面这个例子,只有当 第一个空输入的是give时后面对应的选择才会出现)例子:
tab_completer_conditions_ex:command: /tabcondextype: RUN_COMMANDruncmd:- $broadcasttext$&0[&e$player&0]&r $multiargsrequired_args: 1register: truetab_completer:   '1':   - give   - msg   - other   '2':   - money<pos_1=give><permission>test.test #你得有test.test权限并且前面的空填的是give时这个选项才能通过按tab显示出来   - $player_list<pos_1=msg>   - something<pos_1=other>#前面的空填的是other时这个选项才能通过按tab显示出来   - 这个总是会出现   '3':   - bla bla   - amount<pos_2=money>#前面的空填的是时这个选项才能通过按tab显示出来
tab_completer_display_mode(选项卡显示模式):正常状况下它默认为"CHARACTER_BASED"(根据输入纠正建议)
如果使用SHOW_ALL的话不管你输入什么那些选项都会一直显示在那里

例子:
tab_completer_display_mode: SHOW_ALL


注意.你不能注册一个带空格的命令(当register: true时)
command: /test example (这就是错的) -> command: /testexample (这才是对的)
如果你要注册一个命令,你不能使用多个参数创建,只有未注册的才行。(比如上例的命令中间带空格)只注册最基本的那个命令。如果你想在不使用脚本的情况下拥有该命令的子命令,那就不注册它们。比如你想要注册一个叫/look up的命令,你就不能注册它,因为真正的命令在空格处就会断开,所以如果你想要/look up的话,就用tab_completer或者不注册它

用正则表达式审查输入内容

在5.6.8+版本中,默认情况下插件会有一个全局的正则表达式运行,请在config.yml中修改
REGEX:
USE: true
PATTERN: "^[-a-zA-Z0-9&._ ]+"
例如,如果要添加/,只需将其设置为"^[-a-zA-Z0-9&._ /]+",依此类推,上网查看更好的筛选模式。如果你不想使用它,请将use设置为false或PATTERN:".*",这样所有内容都将通过审查。


在命令中使用正则表达式筛选 :
自定义允许玩家在命令中输入的字符。在你感兴趣的命令下添加这些字段以应用效果。
(你要限制输入的)regex_pattern : "^[0-9]+"
(输入不符合规则提示的)regex_error_message: "只有数字被允许输入"

用权限限定命令使用(不是本插件命令也可以)

使用"ADD_PERMISSION"命令种类来为某个命令添加权限
比如说你想让/pl命令不被执行,那就像下面这样做:'block_pl':command: /pltype: ADD_PERMISSIONpermission-node: blocked_commands.plpermission-error: '&c想都别想'



怎么制造命令延迟

你可以使用$delay$前缀要使用这个特性,把$delay$作为前作放到命令前面例子 :'1':command: /delayexampletype: RUN_COMMANDruncmd:- $delay$/time day- /say 哦,终于天亮了!- $delay$/time night- /say 开个玩笑,其实天还是黑的!delaytimer: 5#5秒延迟
现在playerevents.yml中 / 方块命令 / npc命令 / 全息图命令 也支持$delay$了


另一个例子 :'2':command: /delayexample2type: RUN_COMMANDruncmd:- $delay$/broadcast 5..- $delay$/broadcast 4..- $delay$/broadcast 3..- $delay$/broadcast 2..- $delay$/broadcast 1..- /broadcast Welcome in $player Event at X-$locX Y-$locY Z-$locZ!- /tpall $playerdelaytimer: 1
你可以看到,有一个叫delaytimer的命令字段。使用它来设置使用$delay$时需要延迟多少时间。默认情况下是以秒为单位的。
所以" delaytimer: 1"意思是一秒延迟
如果你需要更精准的数值,你可以把它从秒改为刻使用delaytimer_format命令字段,把它从SECONDS改为TICKSdelaytimer_format: TICKS
(20刻= 1秒)提示:你可以把$delay$单独用作一行,它后面不需要接任何命令

从版本5.3.3起,你可以为每个"$delay$"添加一个特定的延迟.你定义的数值的单位永远都是刻.例子: $delay$<60>(延迟60刻[3秒])或者$delay$<$randomnumber%60%>(延迟0-60刻[0秒-3秒],$randomnumber$见后文)'custom_timings':command: /customtimingtype: RUN_COMMANDruncmd:- "$text$这个命令将在三秒后执行..."- "$delay$<60>"- "/command"


或者runcmd:
- "$text$如果你幸运的话,你只需要等10秒,否则你要等一分钟..."- "$delay$<200>"- "$delay$<$randomnumber%1000%>"- "/command"



怎么设置冷却与预热

为自定义命令创建冷却与预热(如下字段只有MyCommand的命令才行)cooldownhere:command: /commandtype: TEXT...cooldown: 5

或者 :cooldownhere:...warmup: 5


如果你要给其他插件的命令添加冷却/预热的话,看下方
1. 把"WARMUP" , "COOLDOWN"或者"WARMUP_AND_COOLDOWN"作为命令种类 2. 把你想要的命令放在command命令字段后面
3. 在"delaytimer"后设定你要的时间.
例子:'warmup_example':command: /spawntype: WARMUPdelaytimer: 5


冷却例子: (如果你需要的话,你可以用"success-message"来设置命令成功执行后的提示)'cooldown_example':command: /warptype: COOLDOWNdelaytimer: 60success-message: "已传送!"


指令预热可以由移动取消.只需要将配置中的MOVE_LISTENER设置为true(在config.yml里)(默认情况下该功能为关)WARMUP_AND_COOLDOWN命令种类可以让你为命令同时添加预热与冷却冷却会被储存在文件中,这样就算服务器重启冷却时间也不会消失在配置文件中的DEBUG下的SAVE_PENDING_COOLDOWNS可以管理该功能(true/false).

自定义冷却提示:

cooldown-message: "请等待$days$hours$minutes$seconds秒"允许你自定义你的冷却命令老版本只有%s变量,没有$days之类的
你可以在language.yml中自定义单位的名字COOLDOWN1: "&c在使用该命令前你需要等待$days$hours$minutes$seconds"
为拥有跳过冷却权限的人清除跳过提示:
show_bypass_message: false

经济支持

要使用MyCommand经济支持特性,你需要一个经济插件和Vault
改变cost后面的数值改变扣除的钱数
'economy_ex':command: /takemymoneytype: TEXTtext: - "&2谢谢!"cost: 5#花五块钱支持小数
如果想让玩家没有足够的钱也可以运行命令的话,你可以在配置文件里把allow-debit设置为true
你可以通过ADD_COST命令类型给其他插件的命令添加付费功能'mykit_command':command: /kittype: ADD_COSTcost: 500
#(注意,不管命令是不是真的成功执行了都会扣钱!)




PlayerData经济体系(自5.6.8起) :
MyCommand现在可以用作基本的经济插件,使用playerdata作为储存方式。你需要Vault插件才能使用该功能。这有什么意义?如果你没有经济插件,你可以用MyCommand,其他使用Vault取钱的插件会自动从MyCommand取"钱"。
在config.yml配置它

ECONOMY:USE_MYCOMMAND_AS_ECONOMY_PLUGIN: falsePLAYERDATA_VALUE: moneySUFFIX: "$"
这是默认配置



由玩家执行控制台指令-RUN_CONSOLE

与RUN_COMMAND命令类型相同,但所有命令都是从控制台执行的。这允许你运行命令,即使发送者没有必要的权限。请记住,不是每个命令在控制台都能成功执行,也不是每个控制台命令在游戏中对应的命令都是一样的。


而且正如你所想,如果你放了一个/op $player 到命令里面去,那玩家就会真的被设置为OP,一定要保持小心一个例子:'run_by_console':command: /gototype: RUN_CONSOLEruncmd:- /tp $player $arg1- /money take $player 500

使用$RUN_CONSOLE$命令前缀(5.6.0+)

这个前缀允许你让命令中的某一行作为控制台命令执行。
runconsoleplaceh:command: /rcphtype: RUN_COMMANDruncmd:- "/这个在游戏里运行"- "$RUN_CONSOLE$/这个在控制台"
工具提示消息/建议命令-RAW_TEXT

你可以将RAW_TEXT命令用于建议命令或者在你把鼠标放在消息上时显示提示。此命令类型适用于Spigot服务器(不支持CraftBukkit)创建与普通文本命令类似的命令,如例中所示,并使用";"分隔符用于从悬停和建议的命令中分割聊天文本。
rawmessage_example:command: /raw1type: RAW_TEXTtext:- '&a你好&b$player! &a把你的鼠标放在我上面!; &d魔法!'- '&0[&d*&0]&e 点我; &e点这里来获取建议命令&d/mycmd;/mycmd'- '$RUN_COMMAND$&0[&e*&0]&c设置时间为白天; &e点击执行;/time set day'- '$OPEN_URL$&0[&e*&0]$random_color打开Google.com; &e点击打开;http://www.google.com'


所以格式就是 : 文字 ; 鼠标放置文本 ; 建议命令
你也可以不带建议命令 :
文字 ; 鼠标放置文本


你可以把点击事件由建议命令改为运行命令($RUN_COMMAND$)或者打开链接($OPEN_URL$),只需要把他们放在一行命令的最前面,就像上面那个例子一样将命令种类改成BROADCAST_RAW_TEXT会将文本发送给全服玩家


我怎么创建两个以上的 点击/鼠标放置 事件?
只需要用<and>分隔符把不同的事件分隔开.例子 :'&a文本1 ;覆盖文本1<and>$OPEN_URL$&b文本2;覆盖文本2;http://www.example.com'
怎么为覆盖文本添加多行文字?
你可以用<newline>分隔符作为多行之间的分割例子 :'文本;覆盖文本第一行<newline>第二行'你也可以用这两个占位符来显示生物名/物品名 ($SHOW_ITEM$和$SHOW_ENTITY$)例子 "鼠标放我身上:$SHOW_ITEM$STONE"(会显示一个"STONE"[或者是中文?])
使用%skip%放在覆盖文本区域来避免出现空提示(如果你不需要覆盖文本)例如 文本;%skip%;/runcmd
LIVE_CHAT-使聊天得到实时反馈。

它会让聊天无法发出,直到玩家给出正确的答案。如果回复错误,他将给出一个错误提示(默认情况下包含一个退出的关键词),并要求玩家继续回答,直到玩家回答正确,它会运行一个命令。
(注意:这里的runcmd只是一个列表,没有RUN_COMMAND的特性。)将它与execute模式结合使用,可以连接更多的命令和问题。
如果你要开启这个特性,请在配置文件中进行如下设置"CHAT_LISTENER: true".并重启服务器/插件。
例子
live_chat_example:command: /livechattype: LIVE_CHATtext:- "&a'2 + 2'等于几?"- "&a在聊天栏中输入答案!"answer: "4"#你要玩家输入的答案success-message: "&b算的蛮快的嘛!"runcmd: - "/me 它减1也等于3!"
可选LIVE_CHAT特性:答案可以为 "*",这样不管回答什么都能通过 (如果你只是想让玩家说句话的话)
live_chat_answer:command: /clannametype: LIVE_CHATtext:- "&a请输入你的姓氏!'"answer: *escape-parameter: "退出"#输入这个词语可以从问答中退出.live_chat_2:escape-parameter: 退出exit-message: "你离开了问答"#玩家退出问答的自定义信息incorrect-answer: "&c答案错误|输入&a退出&c以退出问答"
[!]注意,如果你有防刷屏的插件的话,它可能会拦截你的输出,以至于你不能回答问题或者退出

从列表中随机运行命令

使用命令类型 :RUNCOMMAND_RANDOM 或是 RUN_CONSOLE_RANDOM 来从命令列表中运行随机命令
command_name:command: /cmd_nametype: RUN_CONSOLE_RANDOMruncmd:   - /prize 1   - /prize 2   - /prize 3



以管理权限运行命令

这个命令类型会给命令执行者暂时的OP权限来运行特定的命令
(风险自负)'give_stones:command: /stoneplstype: RUN_AS_OPERATORruncmd:- /give $player stone 64
每当MyCommand给一个玩家OP权限时,控制台中的日志都会写入记录。为了以防万一,每次运行命令都会执行一个额外的任务,以便在几秒钟后删除OP权限(假如你在使用命令的时候不小心给了他真正的OP权限)。

使用方块触发命令

在游戏中输入/mycmd-blockset来查看帮助菜单步骤:
1. 把你在config.yml开启了可交互的方块放在地上
2. 看着它,输入/mycmd-blockset create
3. 如果创建成功,输入/mycmd-blockset add <命令>
4. 完毕,点一下试试看看有没有效果


其他命令:
- 显示方块信息: /mycmd-blockset check
- 移除方块上所有的命令 : /mycmd-blockset delete
- 移除方块上单独的一个命令: /mycmd-blockset remove
- 切换方块命令是由玩家还是控制台执行: /mycmd-blockset switch

你可以直接用命令来添加你想要的方块:/mycmd-blockset manageblocks <add|remove> <left|right|physical>(左击有效/右击有效/物理触发有效)
当输入特定长度/内容时,不执行命令——disable_on和disable_on_length

disable_on :
如果键入的命令与“disable_on”列表中的命令匹配,该命令将不会被执行

pets:command: /pettype: RUN_COMMANDruncmd:- '/shop pets'disable_on:- /pet summon creeper
在上面的例子中,如果玩家输入/pet,原来的pet命令将被替换为“/shop pets”。现在,假设我们需要禁用此命令,以便在确定的情况下不运行“/shop pet”,你可以使用disable_on。这样,如果玩家输入“/pet summon creeper”,原始命令就会被执行。(也就是真的执行/pet summon creeper)
disable_on_length:以disable_on_length: 1为例比如/ignore,如果玩家只键入/ignore,MyCommand将执行用MyCommand创建的命令。如果用户键入“/ignore 随便什么东西”,MyCommand将不会被触发,原始命令将运行。(也就是真正的/ignore)
要使用这个特性你不能注册命令,所以像这样设置- register: false

如何使用allowed_worlds(只允许在某个世界运行命令)

你可以用"error-message"来自定义错误命令.'onlyinthenether':command: /onlynethertype: TEXTtext:- "&c对,这就是下界!"allowed_worlds:- world_nethererror-message: "该命令在此世界无法使用"



重复多次文字/命令

把%Repeat%n%放到命令前面就能起到该作用clearchat:command: /mycmd-clearchattype: BROADCAST-TEXTtext:- '%Repeat%30% '或者   runcmd:- '%Repeat%30%/dosomething'



如何在RUN_COMMAND命令类型中使用"$world=%world_name%"

'per_world_commands':command: /perworldcommandtype: RUN_COMMANDruncmd:- "$world=%world%/me 这个命令只有在主世界才会执行"- "$world=%world_nether%/me 这个则是在下界"permission-required: false



如何使用"execute_mode"命令字段

如果你让命令在特定情况下运行,你可以使用以下这些选项:NORMAL(普通,默认情况)BLOCK_ONLY(仅从方块运行)FROM_ANOTHER_COMMAND(仅从其他命令运行)NPC_ONLY(仅从NPC运行)CONSOLE_ONLY(仅从控制台运行)EVENT_ONLY(仅从事件运行)HOLOGRAMS_ONLY(仅从全息文字运行)ITEMFRAME_ONLY(仅从物品展示框运行)
'only_from_block':command: /onlyblockexecute_mode: BLOCK_ONLYtype: TEXTtext:- "此命令仅能从/mycmd-blockset这里运行"'only_from_command':command: /onlybycommandexecute_mode: FROM_ANOTHER_COMMANDtype: TEXTtext:- "此命令仅能由其他命令唤起"


一个可能的CONSOLE_ONLY例子:为所有玩家创建奖励命令,由BuyCraft触发。/eco命令需要从控制台执行(权限原因)。
console_executefor_test:command: /extest1executefor: ONLINE_PLAYERStype: RUN_CONSOLEruncmd:- /eco give $player 5000permission-required: falseexecute_mode: CONSOLE_ONLYregister: true


使玩家可以执行模式限制:
你可以使用自定义权限来允许玩家运行特定execute_mode命令:
execute_mode_bypass_node: 拥有.这个.权限.的.人.可以.跳过.限制

如何使用"executefor"命令字段


支持的类型 :


SENDER (只由发送者执行该命令)
ONLINE_PLAYERS (由在线的所有玩家执行该命令)
WORLD_PLAYERS (由此世界所有玩家执行该命令)'executefortest':command: /executeforalltype: RUN_CONSOLEexecutefor: ONLINE_PLAYERSruncmd:- "/tp $player 0 64 0"permission-required: false
除了ADD_PERMISSION类型外,与其他所有的命令类型都适配
(默认状况下是SENDER模式) (可能吧,有些命令可能因为它进入错误的循环.)





自定义日志记录 $log$ (文件名.log)[5.6.0+]

现在可以将日志文本保存在单独的日志文件中。
只需使用log_filename: "文件名.log",就像下面的示例一样,$log$消息将保存在“/plugin/MyCommand/logs/文件名.log”中


my_custom_logger:command: /mylogtype: RUN_COMMANDruncmd:- "$text$&a这个log将存放在&2/MyCommand/logs/filename.log中"- "$log$[$player] $multiargs"log_filename: filename.log




游戏内(Itemset)



如何使用 : (版本>5.1.4)
  • 首先先用 "/mycmd-itemset on"打开该功能.
  • 手上拿着你想要的物品然后输入"/mycmd-itemset add"来把它添加到激活列表中
  • 现在,如果你单击鼠标左键或右键,就可以在聊天栏看见一条提示消息(因为没有绑定命令),而不需要使用命令。(如果你不希望此消息出现,请将itemset.yml中的“empty_message”字段设置为false)
  • 现在输入“/mycmd itemset right /list”在激活的物品上添加命令。在前面这个情况下,如果使用鼠标右键单击,服务器将为发送此操作的玩家运行命令“/list”。
  • "/mycmd-itemset left /你的命令"是左键命令.
  • 你可以一次添加多个命令,只需使用";"分割不同的命令 例: /command1;/command2
  • 这就是让它运行的办法
  • .现在,如果需要只对具有特定名字的特定物品运行此命令,可以使用“/mycmd-itemset name 名字”命令在物品上设置名字。
  • 更多命令详情"/mycmd-itemset"

你可以在物品命令中使用参数, 比如:
- $targetentity(获取右键后看着的实体的名字)
你可以这样用: /mycmd-itemset /jail $targetentity
如果你想的话,你可以设置创建新物品的时候刷新列表,或是重载插件时才加载物品列表,请到itemset.yml进行配置


创建一个命令牌子


在告示牌上你可以 :
  • 通过右击告示牌运行命令
  • 把你输入的文字显示在聊天栏中
    • 如何使用:
      把[MYCMD]放于告示牌第一行
      在2,3,4行输入你想要的命令或文字


      最终成果 :


你也可以在文件中修改触发单词: (默认的是) signheader: [MYCMD]你也可以使用/mycmd-signset


全息文字



这个模式将会在玩家面前生成一个悬浮的全息文字命令模式 : HOLOGRAPHIC_TEXT和BROADCAST_HOLOGRAPHIC_TEXT . 使用第二个模式来为全服玩家显示全息文本例子:holographic_example:command: /holoexampletype: HOLOGRAPHIC_TEXTtext:- "&e你好$player,近来如何?"- "$random_color我过得特别好!"- "&d目前时间:&5$time"delaytimer: 3 delaytimer用来调整文本显示的时间.
你也可以用"/mycmd hologram"来设置一个固定的全息文本,他们还可以用来运行命令(有点问题)


图标菜单



已移动到后面的章节


计分板命令类型


须知: 请使用;号来分隔数字和文本
  • 计分板会在delaytimer设置的值的时间到了之后消失(以秒为单位),设置为0则永远不会消失
  • 使用$marquee$前缀放在文本前面来实现文本滚动(你也可以用PAPI的变量,动画效果更多)
  • 使用scoreboard_refresh_ticks命令字段来设置计分板的刷新间隔
例子 :动态计分板 :scoreboard_example:command: /sbexampletype: SCOREBOARDscoreboard_name: "$marquee$&1M&2y&3C&4o&5m&6m&7a&8n&9d &aS&bc&co&dr&ee&fb&0o&1a&2r&3d &nExample&r "scoreboard_text:- "4;&c&lCoordinates:"- "3;&6X:&e $locX &6Y:&e $locY &6Z:&e $locZ "- "2;&c&lPlayer Info:"- "1;&6Health: &e$health"- "0;&6Food: &e$food"scoreboard_refresh_ticks: 5delaytimer: 10


静态计分板:不用"scoreboard_refresh_ticks"的就是静态计分板.'1':command: /sbtesttype: scoreboardtext:- 'Remove scoreboard after DelayTimer(sec) - 0 = never'scoreboard_name: '&bTest'scoreboard_text:- '$randomnumber%1000%;Lucky'- '$exp;Exp'- '$level;Level'- '123;Text with max 40 chars'cost: 0delaytimer: 5
你不用
scoreboard_refresh_ticks也能使用$marquee$其他功能 :scoreboard_rendertype: HEARTS或者scoreboard_rendertype: INTEGER (默认)


链接获取请求(CALL_URL)


使用这个功能来获取一个链接
基本上,这个功能可以帮助你从php脚本或类似的脚本中检索数据。
例子 :'call_url':command: /call-urltype: CALL_URLurl: http://localhost/yourscript.php?user=$playerget_output : trueshow_output_ingame : truesave_output_as : httpResponse


字段 :url :这里是放置你链接的地方,你可以在其中使用变量,比如$player
有用的东西 :你可以使用“<newline>”将要在游戏中显示的行直接拆分到html\php代码页中。例子:

<?php echo "Line 1 <newline>&aLine 2"; ?>

可选项:

  • get_output : <true/false> #获取所有的页面输出(默认为false)如果你只需要触发脚本,将其设置为false就足够了。
  • show_output_ingame : <true/false> #在游戏聊天栏中显示输出(默认为false)记住只发送你需要的东西,否则你的客户端可能崩溃。
  • save_output_as : #将输出保存在playerdata.yml中(以便稍后在另一个命令中使用)(默认为empty=不保存任何内容)
  • user_agent: Mozilla/5.0 #更改用户代理
“POST”请求方法.
使用“http_request_method:POST”作为命令字段进行设置(默认情况下,http_request_method为“GET”)
然后使用"post_parameters: user=$player&password=12345"来发送数据.
从页面检索JSON字符串值:


请使用此命令字段:
get_json_string: 变量名
请求页面的输出将是该特定json字符串的值。


发送页面请求后自动运行命令:get_run_command: /command $output
如你所见,你还可以使用$output作为占位符来使用从php脚本获取数据的命令来直接进入另一个命令,该命令可以是检查输出以执行其他操作的脚本。
不是很懂这一部分,请有网站需求的服主们自己研究




执行BungeeCord代理命令 (5.6.0+)


预备:1. 把 MyCommand_BungeeCord.jar 放到BungeeCord的插件文件夹中
2. 打开配置文件(config.yml)然后设置PLUGIN_MESSAGE_LISTENER 为 true
3. 完成了,重启你的服务器吧
在Spigot那边怎么使用这个功能使用runcmd行开头的占位符在BungeeCord代理上执行命令。或者使用/mycmd bungee(来调试某些东西)。
这里有四种类型
bungeecord_bridge_example:command: /bcb_executetype: RUN_COMMANDruncmd:   - "$bungeecord_execute$在代理上运行的命令(由玩家)"
   runcmd:   - "$bungeecord_runasproxy$command_to_execute" #这个类似RUN_CONSOLE
    runcmd:   - "$bungeecord_chat$以玩家身份聊天或执行服务器命令,而不是代理自己执行"
    runcmd:   - "$bungeecord_message$向执行命令的人发送私人消息
runcmd:   - "$bungeecord_broadcast_message$向整个代理的人发送消息"




BungeeCord传送



如果你用蹦极端,你可以用这个类型来把玩家从一个服务器传送到另一个服务器
  • BUNGEE_TP

变量 :
  • server_name: 把你服务器的名字放在这
例子 :bungeecord_example:command: /hubtype: BUNGEE_TPserver_name: hub




/lmcmd


(此功能已被独立,请在Spigot页面上查看该插件)


种类&变量


已移动至后续章节

玩家数据特性与MYSQL支持

就像自定义变量,你可以为每个玩家创建自己的数据
输入"/mycmd-playerdata"来获取详细信息.看后面的例子来获取更多相关脚本及其他

  • /mycmd-playerdata check 玩家名 (返回玩家所有已储存数据)
  • /mycmd-playerdata set 玩家名 coins 10 (这将会用新数据覆盖原来这个变量(coins)的数据)
  • /mycmd-playerdata add/remove 玩家名 coins 10 (添加/减去玩家数据的特定值,这个例子里是10)
  • /mycmd-playerdata removevariable 玩家名 变量名 (从数据库删除一名玩家的变量)
  • /mycmd-playerdata deleteaccount 玩家名 (删除一名玩家的所有数据)

不要在控制台显示输出 : 只要在你的操作后面添加_silent比如 /mycmd-playerdata add_silent PlayerName coins 1 , 或者 remove_silent 之类.MYSQL支持要利用MYSQL数据库的MyCommand PlayerData功能,你需要设置一个连接。为此,需要用数据库信息更新config.yml中的内容。设置USE:true,以及数据库名称和服务器位置。
MYSQL:USE: falseHOST: 'localhost'PORT: '3306'USERNAME: 'username'PASSWORD: 'password'DATABASE: 'MyCommand'
如果你在重新连接上有问题,请设置MYSQL:AUTO_RECONNECT: true
或者直接在数据库后面添加"?autoReconnect=true"比如:DATABASE:'mycommand?autoReconnect=true'
对于变量和playerdata,你还可以存储它们并在配置文件中创建一个部分。只要用“.”分开变量。例子: /mycmd-playerdata set Ivanpro home.loc_x 10文件中:home: loc_x: 10


如果变量为空或不存在,我可以更改NoData返回结果吗?

在language.yml文件中修改它的提示文本-PLAYERDATA_ERROR_MESSAGE 但是要注意在一些关键的检查中这个名称会被使用,所以不要在这里使用奇怪的字符。


玩家数据排行榜


将玩家数据按照降序排列. 使用"playerdata_value" , "leaderboard_size"和"leaderboard_text"命令字段来配置它们
变量 : $index (排名), $username(用户名) , $points(分数)
leaderboard_coins:command: /topcoinstype:- TEXT- LEADERBOARDtext: - "&d硬币排行榜:"playerdata_value: coinsleaderboard_size: 20leaderboard_text: "&a$index: &b$username &a- &b$points"




WorldGuard区域支持



将allowed_wg_regions或blocked_wg_regions命令字段添加到你的命令中来仅允许/禁止某些命令在特定worldguard区域运行.allowed_wg_regions:- test2- test3或 :blocked_wg_regions:- test4
如果你需要更具体,有两个变量来检查玩家是否是他当前所在区域的所有者或成员-$wgisowner和$wgismember。将它们与if/else脚本结合使用以确定要执行的操作(它们返回true或false)。



BarAPI / BOSS BAR特性

在MyCommand 5.1.8或更高版本上,此功能可以在没有外部插件的情况下工作。如果你用的是旧版本的插件,你需要下载BarAPI并将其放在插件文件夹中(仅适用于旧版本的MyCommand。)有两种命令类型。BAR_API_TEXT和BAR_API_BROADCAST_TEXT。第一个只有执行者才能看到,第二个全服都能看到使用例子 :
You can use "bar_seconds" or "bar_percentage" for manage the boss bar on older version of Mycommand
and with the newer you can also use : bar_color, bar_style, bar_flag.
你可以使用“bar_seconds”或“bar_percentage”来管理旧版本Mycommand上的boss栏对于较新的,你还可以使用:bar_color、bar_style、bar_flag。+ BossBar支持的颜色 : BLUE,RED,GREEN,PINK,PURPLE,WHITE,YELLOW
+ BossBar格式: SEGMENTED_6,SEGMENTED_10,SEGMENTED_12,SEGMENTED_20
+ BossBar规则: PLAY_BOSS_MUSIC, DARKEN_SKY, CREATE_FOGbar_text:command: /bar_exampletype: BAR_API_TEXTtext:- '&aHello $player'bar_seconds: 5bar_percentage: 8bar_style: SEGMENTED_20bar_flag: DARKEN_SKYbar_color: PINK'bar_btext':command: /bar2type: BAR_API_BROADCAST_TEXTtext:- "Hello everyone!"- "%remove%"bar_percentage: 9


如果你设置bar_second为0,bossbar将永远不会消失。使用%remove%在单独的命令中删除它,或用另一个新bossbar替换它。
如果未设定时间,默认消失时间为3秒.


设立计划程序


(计划程序不受支持,可能已过时)
首先在配置文件中开启计划程序 :SCHEDULER:ENABLED: true
然后设置日期格式(可选):
DATE_FORMAT: d M yyyy (默认是 日 月 年)

d = 日 , M = 月 , y = 年. 比如d M yyyy = 1 12 2012.
以秒为单位设置第一次检查的初始计时器:
FIRST_CHECK_AFTER_SEC: 60
最后,以分钟为单位设置计划程序计时器:
LAUNCH_CHECK_ON_EVERY_N_MIN: 60
配置完毕,现在在游戏中输入/mycmd-scheduler来获取更多信息。使用/mycmd-scheduler Create test创建一个新的计划程序列表添加日期,或用“always”设置日期,例如:/mycmd scheduler Add test date 5 12 2012(2012年12月5日)现在用/mycmd-scheduler add test command /pex user user group set Member设置命令完成。请参见“命令”页中的其他命令。注意:计划程序不能处理自定义命令,所以请先注册该命令,或者将其用于其他插件命令。

Spout插件特性


此插件特性已经是极其过时的特性,相关插件也被删除了,所以不再提供翻译与相关功能介绍


NPC特性


在使用NPC之前,你得现在配置文件中打开NPC监听器(config.yml.)
  • 要创建一个新的NPC,只需检查要在哪里生成新NPC,然后在那里输入/mycmd-npcs create
  • 新NPC的ID数字将显示在聊天中。把它记下并在下一个命令中使用,编辑每个NPC都要用到ID
  • 例如,若要向新NPC添加命令,则必须输入/mycmd-npcs add 1(其中1是NPC的ID)
  • 相反,使用/mycmd-npcs remove 1或/mycmd-npcs remove 1 clearall,从一个NPC中删除一个或所有命令。
  • 如果你忘记了NPC的ID, 你可以用命令/mycmd-npcs entities来看到它们的ID. 你可以用/mycmd-npcs tpto传送到选择的NPC.
  • 你可以用/mycmd-npcs delete删除NPC
  • 你可以使用更多的命令和功能,比如AI(on-off)、发光效果(Glowing effects)(on-off)、可碰撞(Collidable)(true-false)、NPC的类型、位置和NPC的名称。在“/mycmd npcs”帮助页中找到所有这些命令。



5.7.0新增类型
  • /mycmd-npcs silent <id> <on|off> (开启/关闭村民的声音)
  • /mycmd-npcs age <id> <adult|baby> (设置村民的年龄)
  • /mycmd-npcs equipment <id> <hand> <material_name> (设置手中物品)
  • /mycmd-npcs temptp <id> <world> <x> <y> <z> 或 /mycmd-npcs temptp <id> <world> <x> <y> <z> <yaw> <pitch> (暂时将npc传送到某个地方)


发送标题


这个命令类型可以向玩家发送标题信息
title_test:command: /title_testtype: TITLEtext:- '&a你好&e$player'- '子标题'
将类型改成BROADCAST_TITLE来向所有人发送标题信息fadein(淡入)fadeout(淡出)stay(持续时间),单位为秒title_test:command: /title_testtype: BROADCAST_TITLEtext:- "&aHello i'm &e$player"- "and i'm talking to you"title:fadein: 3stay: 10fadeout: 2effect_type: 0
你可以用这个字段来做一些花里胡哨的事情:effect_type: 1它将会将句子逐字输出dynamic_title_example:command: /dyntitletype: TITLEtext:- "&aHello &e$player"- "这句话将会被逐字输出"title:effect_type: 1

使用RUN_COMMAND_TASK来创建任务命令
如果需要在“循环”中多次执行一个命令,可以使用此功能
像往常一样创建命令,使用RUN_COMMAND类型,将类型更改为RUN_COMMAND_TASK。
然后编辑你需要的参数以更好地管理“任务”:
task_run_immediately: true如果设置为true,此命令将在运行时立即运行,如果不是,命令第一次运行将在"task_repeat_every_sec"设置的秒数后执行.task_repeat_every_sec: 5设置每个命令之间的间隔时间task_run_n_times: 10设置任务运行的次数
设置task_run_n_times: -1 会让它无限次运行
task_run_when_offline: true如果为true,则当执行此命令的玩家离线时,列表中的命令也会继续执行,而不需要玩家在线。
task_show_debug: true如果设置为true,每次运行任务时后台都会显示输出
例子 :
taskexample:command: /taskexampletype: RUN_COMMAND_TASKruncmd:- /do somethingtask_run_immediately: truetask_repeat_every_sec: 5task_run_n_times: 10task_run_when_offline: truetask_show_debug: true

使用/mycmd tasks 来查看所有正在运行的任务
如果你想为某个玩家终止任务,请输入 /mycmd tasks cancelfor 玩家名 任务ID
如果你需要更多的东西,可以使用RUN_COMMAND_TASK中的while($Script$%while%)语句。查看脚本页面以获取示例。


发送一条ACTION_BAR消息


只在Spigot服务器上生效
  • 把你的文本放在"text"命令行之后. 使用$delay$来设置延时消息
action_bar_example:command: /actionbartype: ACTION_BARtext:- "§a你好§b$player!"- "$delay$近来如何?"- "$delay$&aBla bla bla"delaytimer: 3
  • 将类型更改为BROADCAST_ACTION_BAR,以便向全服的玩家发送消息。(目前,淡出功能无法配置。我不能用当前的api实现它(不使用nms的情况下))。


BLOCK_PATTERN命令种类





基本上,每个字母都对应一个方块。
使用<up>或<down>来改变Y轴高度
此命令将会以玩家所视方块为起点放置方块
例子:这会建筑一个小房子pattern_material包含了你要用的方块材料 比如X = OAK_PLANKS任何不被识别的字母都被翻译为空气方块。在这个例子中,我用O表示空气,因为它看起来更简洁。blockbuild2019yeah:command: /patterntype: BLOCK_PATTERNpattern_material:- X:OAK_PLANKS- G:GLASS- C:COBBLESTONEpattern:- CXXXXXXC- XOOOOOOX- XOOOOOOX- CXXOOXXC- <up>- CXGXXGXC- XOOOOOOX- XOOOOOOX- CXXOOXXC- <up>- CXGXXGXC- XOOOOOOX- XOOOOOOX- CXXGGXXC- <up>- CCCCCCCC- COOOOOOC- COOOOOOC- CCCCCCCC- <up>- OOOOOOOO- OXXXXXXO- OXXXXXXO- OOOOOOOO这个命令我测试了,貌似有问题
撤销特性:管理员可以用/mycmd undo ,玩家可以在命令中使用%PlayerOptions%undoPattern来触发撤销功能比如这样mycmd-undo:command: /mycmd-undotype: RUN_COMMANDruncmd:- "%PlayerOptions%undoPattern"


经验条特性


你可以用这个功能在经验栏上创建冷却(倒计时)效果。
有两种方法可以做到这一点。第一个是创建一个命令类型为EXP_BAR的命令:
exp_bar_example:command: /expbartype: EXP_BARdelaytimer: 10
第二种方法是在runcmd字段中使用占位符“$ExpBar%秒数%”。
your_command:command: /123type: RUN_COMMANDruncmd:- "$ExpBar%10%"- "$delay$<200>"- "/do something"




覆盖(OVERLAY)命令字段


此功能允许你执行“命令”或仅显示文本,这将使用mycommand命令覆盖原命令。例如,你有另一个插件命令,如“/gamemode”,但是,如果你想在此命令中添加更多内容,如文本解释,则可以使用“overlay”命令字段执行此操作。
要想激活这个功能,只需要把"overlay"设置为"true", 请见例子 :gamemode_overlay:command: /gamemodetype: TEXTtext:- "这个消息将在执行/gamemode的时候显示"- "在这里填写你的信息 bla bla bla..."overlay: true


当然你也可以用任何MyCommand的命令类型,比如RUN_COMMAND, SCOREBOARD

在特定事件下运行命令


将配置文件中的EXTRA_LISTENER打开,这样你就能在下列事件下运行命令:PlayerJoinPlayerQuitPlayerKickPlayerRespawnPlayerDeathPlayerInteractEventPlayerChangedWorld
你可以通过编辑playerevents.yml来管理这些事件.

例子:PlayerJoin:active: trueexecute:- '$text$&a欢迎回来&b$player!'- '$text$&6在线人数 : $online'
在这种情况下,当玩家进入服务器时,就会收到这两条消息
另一个使用玩家数据的例子
PlayerDeath:active_on_kill: trueactive_on_death: trueignore_env_or_mobs_deathcause: false #防止玩家在被怪物,环境等杀死后触发命令prevent_suicide: true #防止玩家自杀execute_for_killer:- '/givepoints'execute_for_defeated:- '/removepoints'


你可以在玩家死亡或杀人时执行命令。
  • Killer = 杀死玩家的人
  • Defeated= 被杀死的人
如果想不然玩家使用事件命令(如示例中的“/givepoint”,你可以使用“execute_mode:EVENT_ONLY”命令字段来阻止该命令由玩家执行)
例子:
give_points:command: /givepointstype: RUN_COMMANDruncmd:- "$text$&a干得好,你获得了一点!"- "$Script$%PlayerData%points+1"- "$text$&a现有点数:$PlayerData%points%"execute_mode: EVENT_ONLY
此功能支持某些特殊占位符,你可以通过$args传递此变量:
这些变量是: $killer $killed_player和$death_cause
#在MyCommand/playerevents.yml中
PlayerDeath:active_on_kill: trueprevent_suicide: trueexecute_for_killer:- '$broadcasttext$ $killer 杀了 $killed_player!'- '/commandname $killed_player'
#在MyCommand/commands/文件名.yml中
command_name:command: /commandnametype: RUN_COMMANDruncmd:- "$Script$%if%$arg1==AdminName"- "$text$你杀了一个管理员!"- "/givesomething"execute_mode: EVENT_ONLYPlayerInteractEvent:active: truecancel_event: true #是否在玩家触发相应事件时取消该事件,比如下例,玩家开箱子的时候箱子无法打开而是会显示信息materials:   CHEST:   - $broadcasttext$&a$player &2碰了个箱子!   COBBLESTONE:   - /say yeah
使用$RUN_CONSOLE$作为前缀来执行控制台命令使用$PERFORM_COMMAND$作为前缀来运行一个注册了的命令(比如在playerkick事件中)(这个功能与VentureChat及其他类似插件适配)



使用自定义前缀创建命令(不只有/)


使用MyCommand 5.3.3或更新版本,可以启用此功能。进入config.yml并激活CHAT_LISTENER(CHAT_LISTENER: true)
完成后,重新启动插件(/reload或/restart)。现在,你可以创建不必以斜杠前缀(/)开头的命令。
例子 :customprefix_example:command: !exampletype: TEXTtext:- "命令文本"


  • 须知:
    • 这些不用斜杠的命令不能被注册,也不能通过除游戏聊天外其他方式运行
    • 你可以用各种前缀作为命令前缀(也可以不带),比如: "command: !dice" "command: command" "command: $hello" 等等



自定义传送点和TELEPORT命令类型



MyCommand提供了一个简单的内置方法来创建传送点-“/mycmd locations”这些传送点可以用作管理工具,也可以用于创建传送(TELEPORT)类型的特定命令。


TELEPORT命令类型
TELEPORT命令类型是创建tp命令的一种更简单的方法,而无需使用%PlayerOptions%teleport.
使用"/mycmd location create <名字>"来创建一个传送点
然后把它的名字放到location_name命令字段后面
teleporttest:type: TELEPORTlocation_name: spawncommand: /tptospawn




自定义区域


创建简单的长方体区域并将其用于命令中,以检查玩家是否处于它(类似WG,但是不用WG)。


用下方命令获取详细信息
  • /mycmd region
把如下命令字段放在你的命令下应用此功能allowed_mycmd_regions:- region1- region2
或者使用占位符$mycmdregionname检查玩家所在的mycmd区域的名称。



用于展示框内的图像



将自定义图像应用于地图,然后在物品展示框中使用它们。
图像应该放在/MyCommand/images/文件夹里(默认没有,你得自己创建)而且必须为128x128的png图像使用如下命令来开始 :

/mycmd mapimage (权限: mycommand.mapimage)




如何在命令中使用%if% PlayerData等等


详情查看后续章节视频教程(Youtube):命令种类
种类
支持的 版本
详情功能
TEXT
1.0
发送信息
BROADCAST_TEXT
1.4
发一个全服都能看到的信息
RUN_COMMAND
1.3
执行命令
RUN_COMMAND_RANDOM
3.6
随机执行一条runcmd列表的命令
RUN_COMMAND_TASK
5.2.4
在条件执行或自定义时间到达之前,不定地执行 runcmd 列表中的命令
ADD_PERMISSION
2.3.1
为某个命令添加特定权限(可以是任何插件的命令)
RUN_CONSOLE
2.4
RUN_COMMAND一样,但每个命令都直接从控制台执行,绕过用户权限
WARMUP
2.6
将预热时间应用于已存在的命令(例如另一个插件命令)
COOLDOWN
5.0
将预冷却时间应用于已存在的命令(例如另一个插件命令)
WARMUP_AND_COOLDOWN
5.3.2
同时应用上面两个.
RUN_AS_OPERATOR
3.7
RUN_COMMAND一样,但是是以OP权限执行命令
ICONMENU
3.9.3
允许你创建一个箱子菜单
SCOREBOARD
4.0.0
计分板
ALIAS
4.1
创建别名的更简单方法。
BUNGEE_TP
4.1
仅当在蹦极端代理中连接时才有效
BAR_API_TEXT
5.0.1
生成一个bossbar/文本(在老版本中需要BarAPI)
BAR_API_BROADCAST_TEXT
5.0.1
同上,但是生成的文本全服都能看见
CALL_URL
5.1.2
连接网页/php脚本检索信息.
RUN_CONSOLE_RANDOM
5.1.2
RUN_COMMAND_RANDOM,从控制台执行
TITLE
5.1.7
标题
BROADCAST_TITLE
5.1.7
全服标题
ACTION_BAR
5.2.5
Actionbar信息
BROADCAST_ACTION_BAR
5.2.5
全服actionbar信息
RAW_TEXT
5.1.8
Json类信息
BROADCAST_RAW_TEXT
5.2.5
全服json类信息
EXP_BAR
5.3.4
经验栏信息
ADD_COST
5.3.4
增加一个命令费用
BLOCK_PATTERN
5.4.2
[size=13.3333px]生成一个设定的建筑
HOLOGRAPHIC_TEXT
5.5.0
全息文本(会显示在玩家面前)
BROADCAST_HOLOGRAPHIC_TEXT
5.5.0
全服全息文本
MERCHANT
5.5.0
交易界面
LEADERBOARD
5.6.0
从高到低列举玩家分数
BOOK
5.6.0
打开书的界面,而无需在物品栏中有一本书。
ANVIL_GUI
5.6.4
打开铁砧界面
RAW_BOOK
5.6.4
打开书的界面,而无需在物品栏中有一本书,并包含可点击的文本。

已移除种类(不做翻译):
PERM_BROADCAST_TEXT
removed in 5.3.0
RUN_COMMAND_TEXT
1.4
   Execute commands and text togheterremovedin 5.6.0
RUN_COMMAND_BROADCAST_TEXT
1.4
Execute commands andbroadcast_text togheter removed in 5.6.0
RUN_COMMAND_PERM_BROADCAST_TEXT
3.0
removed in 5.3.0
SPOUT_TEXT
2.3
Require SpoutPlugin Removed 5.5.0
SPOUT_NOTIFICATION
3.7
Require SpoutPlugin Removed 5.5.0

文本占位符:插件的每个部分都“几乎”兼容。比如TEXT、 runcmd 等。当你在命令中使用这些变量时,它会被后面的描述的东西所替代,比如$player会变成Firework
    名称  描述

$space
生成一个" ".(空格)
$player
显示执行命令玩家的名字
$uuid
同上方玩家的UUID
$health
同上方玩家的血量(0-20)
$food
同上方玩家的饥饿值(0-20)
$world
同上方玩家的所在世界名
$biome
同上方玩家的所在的生物群系
$exp
同上方玩家的经验值
$level
同上方玩家的经验等级
$gamemode
同上方玩家的游戏模式
$lastdamage
同上方玩家的最近一次受到伤害的值
$locX , $locY , $locZ
同上方玩家的方位(X,Y,Z)
$target_X, $target_Y,$target_Z
同上方玩家的所视方块的方位
$loc_highestY
显示最高方块的Y
$loc_pitch, $loc_yaw
显示坐标间距和视角
$getaddress
同上方玩家的IP
$getdisplayname
同上方玩家的聊天时显示的名字
$getplayerlistname
同上方玩家的在TAB菜单显示的名字
$canpickupitems
能不能捡起物品(true/false)
$getmaxhealth
同上方玩家的最高生命值(默认20)
$getallowflight
能不能飞(true/false)
$gettotalexperience
同上方玩家的总计获得经验
$getexptolevel
同上方玩家的升到下一级所需经验

$rnd6 , $rnd64 ,$rnd100
生成一个随机数. rnd6 (1-6),rnd64 (1-64),rnd100 (1-100)
$randomnumber%n%   or   $randomnumber%25<to>50%
随机数生成器 例子 : $randomnumber%100% 会生成1-100之间的随机数
$online
服务器在线人数
$ponline
在线玩家名字(名字1,名字2,等等…)
$server-name
服务器名
$server-motd
服务器公告
$oplist
所有OP.

$randomplayer
随机选取在线玩家的名字
$todaydate
显示当前日期. 在下方的scheduler settings更改格式

$wgregionname
(需要WorldGuard) 同上方玩家的所在区域
$chatprefix , $chatsuffix ,$primarygroup
(需要聊天插件和Vault) 获取前缀后缀和所在组

$NoReplace
放在这些变量前面让他们显示原格式,例如$NoReplace$player会显示$player

$iditeminhand
显示同上方玩家的手上物品的ID 例子: STONE = 1
$iteminhand
显示主手的物品
$amount_iteminhand
显示手上物品总数
$name_iteminhand
显示手上物品的名字
$iteminoffhand
显示副手物品的名字
$BCPlayerCount%servername%
获取某个服务器的人数,需要Bungeecord
$BCPlayerList%servername%
获取某个服务器的所有玩家名,需要Bungeecord
$GetPlayerByName%playername%
获取这个变量后面玩家名的变量,例如$GetPlayerByName%aaa%$player,会显示aaa
$GetRandomStringFromList%string1;string2;...3%
随机选取列表中的字符串,以";"分割,在1.3例子中查看具体用法
$PlayerData%Variable%
获取playerdata.yml的信息, 并以文本返回
$PlayerDataFor%PlayerName%VarName%
同上方,但是是另一个玩家的 (需要权限: mycommand.placeholders.playerdatafor.)
$arg1 , $arg2 ... $arg9 ,$multiargs
你命令中的变量 /xxxxx $arg1 之类
$money
同上方玩家的钱量 (需要Vault)
$targetblockname
返回玩家所看方块的名字
$time
服务器时间
$loc_direction
和 $loc_yaw 差不多,但是返回的带North, South这些之类
$teams
同上方玩家的所有所在队伍
$tags
同上方玩家的所有所在队伍的tag
$hasemptyinventory
是否背包为空(true/false)
$inventorysize
同上方玩家的背包物品总量
$nearestplayer
返回最近玩家的名字,如果没有会显示””NoPlayer”
$itemcustommodeldata
返回与数字项自定义模型数据编号,如果有的话
$world_time
返回玩家位于世界中的时间(数字形式)

·    使用 &1, &2 , &3 ... &f 作为颜色符号·    $hex%#123456% (RGB颜色,需要1.16+)·    $random_color (从 &0 到 &f随机选取一个颜色)·    $rainbow_color (给每个字符一个随机颜色)
你也可以用 § 代替&,或者用下面这些(不推荐)
$darkblue,$darkgreen,$darkteal,$darkred,$purple,$gold,$gray,$darkgray,$blue,$black,$brightgreen,$teal,$red,$pink,$yellow,$white,$bold,$strike,$underline,$italic,$reset
"runcmd"的占位符 :
$delay$
(放在命令前) 等待一段设定的延迟
$text$or $rawtext$
(放在命令前)直接发送文本而不需要使用 "text" 的占位符
$broadcasttext$or$rawbroadcasttext$
(放在命令前) $text$ 一样,不过是全服的
$log$
$text$一样,不过是展示在控制台的
$text_to_specific_player%玩家名%
(放在命令前)给特定玩家发送信息
$arg1 , $arg2 , $arg3 , $arg4... $arg9 ... $arg100
这些是参数,每个参数都能被你从聊天框输入的东西替换
$multiargs
获取没有特定顺序的所有键入的参数
$Script$
脚本前缀
$Script$%if%, $Script$%else%
If Else (在脚本页面看到更多例子)
$Script$%PlayerData%
(同上)
%PlayerOptions%
管理某个玩家的变量
$Script$%while%
只在 RUN_COMMAND_TASK模式下生效
·以及所有的 "text"占位符
检查玩家状态的变量:$CheckPlayerStatus%Player_Name%Status%所有可用变量 (替换Status): isOnline, isOnGround, isDead, isFlying, isSwimming, isSneaking,isInsideVehicle, isSprinting, isSleeping, isOp
例子:runcmd:- $Script$%if%$CheckPlayerStatus%$arg1%isOnline%==true- /玩家在线- $Script$%else%- /不在线

mycmd-itemset 占位符:
$targetentity
(老版本是 $playertarget) 如果是玩家返回目标玩家名称,如果实体是生物,则返回生物名称
·    和所有的"text" 占位符
方块, 告示牌 , npc, lmcmd(另一个插件,可以在spigot页面上看到)... 等占位符 :
·    所有的"text" 占位符
事件占位符(playerevents.yml)
$text$
(放在命令前)直接发送消息而不需要 "text" 的占位符
$broadcasttext$
(放在命令前) $text$ 一样,不过是全服通告
$killer
展示杀你的人的名字
$killed_player
展示被你杀死的人的名字
$death_cause
展示死亡原因



ICONMENU(箱子界面菜单) 特定的命令类型
如果你使用了 "iconmenu_mode: PLAYER_LIST",可以使用以下占位符获取目标玩家名称:
$playerhead
TAB_COMPLETER(tab补全命令) 特定的占位符 :
$player_list (返回所有玩家)$customnames_player_list (返回自定义玩家名称)$server_operators (返回OP的名字)$world_player_list (返回同世界玩家的名字)$worlds_list (返回所有世界的名字)$block_list (返回游戏中所有物品和方块的名字)$potions_list (返回所有药水名称)$enchantments_list (返回所有附魔名称)$sounds_list (返回所有声音名称)$effects_list (返回所有药水属性名称[和上方那个不一样])$particles_list (返回所有粒子名称)$entity_list (返回所有实体名称) 例子:tab_completer_test:command: /tcttype: RUN_COMMANDruncmd:- $broadcasttext$&0[&e$player&0]&r $multiargs #$multiargs指的是你可以在下方自定义你需要多少个变量required_args: 1 #需要的变量数量register: true #是否注册命令tab_completer: #tab补全   '1':- $entity_list #返回所有实体名称   '2':- $potions_list#返回所有药水名称

PlaceholderAPI 支持 :
从版本5.2.3开始, MyCommand支持这个插件,并能够利用它的占位符。
点击查看所有papi支持的变量
要用的话直接把变量放进去就行了 例子:papi_example: command: /papiexample type: TEXT text: - Welcome to %server_name% %player_name%!


还没完呢, Mycommand 还有一些他自己的的占位符, 还能从PlaceholderAPI使用其他插件的占位符 这些:%mycommand_playerdata_<变量名>% #ID为 变量名 的playerdata数据值 比如%mycommand_playerdata_points%可能显示 1
%mycommand_playerdatafor_<玩家名>_<变量名>% #某个玩家的变量数据值
%mycommand_variables_<变量名>% 某个全局变量的数据值
%mycommand_cooldown_<指令名>% 某个指令的冷却时间
PlaceholderAPI 的spigot页面
提示: 如果你想用PAPI看其他玩家的数据,这个扩展可以帮到你 Parse Other.
自定义变量
/mycmd-variables (需要权限 : mycommand.variables)
使自定义占位符或变量在插件的每个部分被替换。
·    输入"/mycmd-variables create " 创建一个新变量·    输入"/mycmd-variables set " 设置变量内容·    如果变量是数字类(integer或者double)你可以在指令里(比如后面这个) "/mycmd-variables add/remove123" 使用+/-符号请查看脚本页面,看看一些有用的脚本,这些脚本允许你管理那些新创建的变量,而无需使用上述命令。
关闭/防止某些占位符被替换
使用命令字段placeholders_replace_mode :
允许你选择命令在运行命令时必须替换的占位符。 NORMAL_MODE (替换所有占位符,默认状态).ONLY_ARGUMENTS (只替换输入的$args ( $player)).NO_COLORCODE (没有颜色的NORMAL_MODE).ONLY_COLORCODE (只替换颜色符号).ONLY_PLACEHOLDER_API (只替换PAPI变量)NO_CUSTOM_VARIABLES (没有/mycmd-variables创建出来变量的NORMAL_MODE).
例子 :mycmd:command: /donotreplaceplaceholderstype: RUN_COMMANDplaceholders_replace_mode: ONLY_ARGUMENTSruncmd: - /do stuff $player $arg1 $arg2物品栏菜单类
物品栏菜单类命令字段 :iconmenu_title:此字段允许你更改已打开菜单的标题。最多 32 个字符。
iconmenu_size:切换打开菜单的大小 (9, 18, 27,36, 45 和 56).
iconmenu_commands:这里是物品栏菜单最重要的部分
'菜单的位置:物品名称:物品数据:COMMAND/MESSAGE:标题:描述;第几行'

iconmenu_type:需要MyCommand 5.3.4版本, 此字段允许你自定义打开物品栏的种类 比如换成DISPENSER 界面, 它有个3x3的交互界面支持的类型:CHEST (默认,箱子类型), BREWING(炼药台), DISPENSER(发射器), DROPPER(投掷器), ENDER_CHEST(末影箱), FURNACE(熔炉), HOPPER(漏斗), PLAYER(玩家背包), WORKBENCH(工作台)

不建议使用的种类(可能会导致故障):[目前其实没问题了]ANVIL (铁砧,有一些故障) ,BEACON (信标,不会工作) ,ENCHANTING (附魔台,有些故障), MERCHANT (交易类(村民)) , CRAFTING (合成类,不工作), CREATIVE (创造模式,不工作)iconmenu_autofill:从 MyCmd 5.4.0开始, 这个功能可以用你喜欢的东西填充你菜单空的地方例子 "iconmenu_autofill: BLUE_STAINED_GLASS"(用蓝色蓝色玻璃板填充菜单空位)
或者从MyCmd 5.6.6+开始, 更能够自定义化的像下面这样 :iconmenu_autofill: "STAINED_GLASS_PANE:14:true:&a你好啊&b$player: 这是描述; line 2".格式:物品 : 数据 : 是否附魔(TRUE/FALSE) : 标题 : 描述
iconmenu_itemflags: 菜单物品标志iconmenu_itemflags:- HIDE_ATTRIBUTES(隐藏属性)- HIDE_DESTROYS(隐藏可破坏方块)- HIDE_ENCHANTS(隐藏附魔)- HIDE_PLACED_ON(隐藏可放置在什么方块之上)- HIDE_POTION_EFFECTS(隐藏药水效果)- HIDE_UNBREAKABLE(隐藏不可破坏)


从一个菜单打开另一个菜单:
使用"%openiconmenu%" 作为一个命令的前缀,在菜单中运行, 来打开另一个菜单.例子 :iconmenu_commands: - '0:WORKBENCH:0:%openiconmenu%/iconmenupage2:&2下一页:&a更换页面'物品的附魔:使用方法:0:ITEM_NAME;ENCHANTMENT_NAME;LEVEL:ITEMDATA:/command:Title:DescriptionBecome :0:STONE_SWORD;DAMAGE_ALL;1:0: ...etc etc.多种附魔也行 :- 0:STONE_SWORD;DAMAGE_ALL;1;FIRE_ASPECT;1;DURABILITY;3:0:/command:Text:Text
支持的附魔种类编辑物品堆叠量:把数字放在物品名前面 例子 :0:32(就是这个32),GOLDEN_APPLE:0:/command:Title:Description使一个物品不可点击(点击后不关闭菜单) :把 %stayopen% 放到命令字段里. 例子 :0:32,GOLDEN_APPLE:0:%stayopen%(就是这个):Title:Description
· 如果你想的话,也可以不打开菜单执行指令, 只要在 %stayopen%后面加命令就行了.o 例子: "1:STONE:0:%stayopen%/command:Title:Description"怎么在不做任何事的情况下关掉菜单 :· 将 %close%用作命令.字段 就像%stayopen% 例子那样.在一个物品上放几个命令使用字符";""command"部分中拆分多个命令。'POSITION:ITEM_NAME:ITEMDATA:/command1;/command2:TITLE:DESCRIPTION;MULTILINES'

菜单中的头颅"图标上的玩家头颅"1.13(扁平化以后)开始它变成了 PLAYER_HEAD.


·    你可以使用一个带有玩家材质的"SKULL_ITEM"(头颅)在上面o   例子(1.12及以下):"1:SKULL_ITEM%Notch:0:/command:Title:Description"o   例子(1.13及以上):"1:PLAYER_HEAD%Notch:0:/command:Title:Description"
如何将 RGB 颜色放入药水项。(药水、喷溅型药水和滞留型药水) 就像上面玩家头颅的名字的位置那样, 用 <rgb> 括起来,范围在0到 255 之间例子:iconmenu_commands:
- 1:POTION%255<rgb>120<rgb>0:0:/say hey:COLOR RGB TEST:RGB TEST
· 如何更快地生成图标菜单界面?有什么能帮到我吗?· 用这个 : /mycmd-edit command_name generateiconmenu , 该命令将获取执行命令玩家背包中的每个图标(物品),并在可用脚本行中转换它们到"iconmenu_commands"的配置文件里. 支持物品名,附魔和物品描述 [!] 警告:这会覆盖你之前的 "iconmenu_commands".
这是一个菜单的例子 :'example':command: /iconmenutype: ICON_MENUtext:- 'POSITION:ITEM_NAME:ITEMDATA:COMMAND/MESSAGE:TITLE:DESCRIPTION;MULTILINES'iconmenu_title: '&cMyCommand &4ItemMenu'iconmenu_size: 27iconmenu_commands:- '0:GOLDEN_APPLE:0:/help:&2Help:&aOpen the help menu'- '1:COMPASS:0:/mycmd:Menu:MyCommand menu'- '9:EMERALD:0:/list:Player List:&bShow online players'- '10:WATCH:0:/time set 0:Day:Turn day'- '26:WOOL:11:%openiconmenu%/iconmenu2:Next Page:&cChange IconMenu Page;&a--------->'iconmenu_mode:(菜单模式) iconmenu_mode 命令字段允许你使用预创建或较新的功能到菜单界面,否则不可能完成与正常的插件同时使用。(不理解这段话的意思)
可用选项:
PLAYER_LIST (创建一个充满了所有在线玩家的头颅的菜单)仅使用该控件(PLAYER_LIST)的自定义占位符 : $playerhead (返回选定玩家头颅的名字).

DYNAMIC (动态)
创建命令, 就像你过去所做的一样, 每过一个你设定的延迟计时器的时间(下方的delaytimer)它都会自动更新把 <next> 放在你的 Itemname(物品名), Title(标题) Description(描述) 之间来创建多个物品,展示的描述,标题等会在每一次计时完成时刷新使用延迟计时器(delaytimer)调整刷新时间. delaytimer: 1 = 每过一秒刷新一次.我已经让空气在图标菜单中可以运作, 所以你可以在这个位置上什么也不放(其实是空气)。


例子:
- 26:LEGACY_WOOL<next>PLAYER_HEAD<next>BARRIER<next>EMERALD<next>AIR:0:/launchacommand:Title1<next>Title 2<Next> Title3:Description1;still one<next> Description 2 ecc ecc ecc


#解释:动态模式这里的例子是-先展示羊毛,再展示玩家头颅,再展示一个屏障,再展示一个绿宝石,再什么也不展示(空气),点击会执行命令/launchacommmand,标题1(羊毛的标题)是 Title1,标题二(玩家头颅)是Title2,然后描述一(羊毛)是still one,然后下一个之类的
这是个动态菜单的例子:dynamiciconmenu:command: /dynamiciconmenutype: ICON_MENUiconmenu_size: 36iconmenu_mode: DYNAMICpermission-required: falseiconmenu_commands: - '0:LIME_WOOL<next>YELLOW_WOOL:5:%stayopen%: : '- '1:YELLOW_WOOL<next>LIME_WOOL:4:%stayopen%: : '- '2:LIME_WOOL<next>YELLOW_WOOL:5:%stayopen%: : '- '3:YELLOW_WOOL<next>LIME_WOOL:4:%stayopen%: : '- '4:LIME_WOOL<next>YELLOW_WOOL:5:%stayopen%: : '- '5:YELLOW_WOOL<next>LIME_WOOL:4:%stayopen%: : '- '6:LIME_WOOL<next>YELLOW_WOOL:5:%stayopen%: : '- '7:YELLOW_WOOL<next>LIME_WOOL:4:%stayopen%: : '- '8:LIME_WOOL<next>YELLOW_WOOL:5:%stayopen%: : '- '9:YELLOW_WOOL<next>LIME_WOOL:4:%stayopen%: : '- '11:CLOCK:0:%stayopen%:&aServer time - $random_color$time:&bToday Date - &6 $todaydate'- '13:BEACON:0:/mycmd:&6MyCommand:&eLaunch MyCommand'- '15:ENDER_PEARL<next>ENDER_EYE<next>AIR:0:%stayopen%:???<next>!!!<next>AIR: '- '17:YELLOW_WOOL<next>LIME_WOOL:4:/command_example: : '- '18:LIME_WOOL<next>YELLOW_WOOL:5:/command_example: : '- '19:BOOK<next>2,BOOK<next>3,BOOK:0:%stayopen%:$random_colorPage 1<next>$random_colorPage2<next>$random_colorPage 3:1<next>2<next>3'- '22:1,IRON_CHESTPLATE<next>GOLDEN_CHESTPLATE;PROTECTION_ENVIRONMENTAL;1<next>DIAMOND_CHESTPLATE;PROTECTION_EXPLOSIONS;3:0:/command_example::Description'- '25:BARRIER:0:%close%:Close this menu:&cClick here;&cto close'- '26:LIME_WOOL<next>YELLOW_WOOL:5:%stayopen%: : '- '27:YELLOW_WOOL<next>LIME_WOOL:4:%stayopen%: : '- '28:LIME_WOOL<next>YELLOW_WOOL:5:%stayopen%: : '- '29:YELLOW_WOOL<next>LIME_WOOL:4:%stayopen%: : '- '30:LIME_WOOL<next>YELLOW_WOOL:5:%stayopen%: : '- '31:YELLOW_WOOL<next>LIME_WOOL:4:%stayopen%: : '- '32:LIME_WOOL<next>YELLOW_WOOL:5:%stayopen%: : '- '33:YELLOW_WOOL<next>LIME_WOOL:4:%stayopen%: : '- '34:LIME_WOOL<next>YELLOW_WOOL:5:%stayopen%: : '- '35:YELLOW_WOOL<next>LIME_WOOL:4:%stayopen%: : 'delaytimer: 1
P.S. 如果你需要的话,你可以放多个命令进去
自定义材质:在ICON_MENU里面使用此功能的自定义玩家头颅材质放置材质"代码",而不是玩家名称,以获得所需的内容. 从类似这个网站- https://minecraft-heads.com/来得到你所需要的代码
例子:textured_head_iconmenu:command: /texturedheadtype: ICON_MENUiconmenu_title: '&cTextured heads example'iconmenu_size: 18iconmenu_commands:#下面这串就是玩家头颅材质代码- "0:PLAYER_HEAD%eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMzY2NGU1NGU3NjI4N2UzZmUyYmQzOTdjMDk4ZWU3YTRiZDBmOWM4OGY5MzlmZGU4YmFiNzhjMzI3MWE0NjE4ZiJ9fX0=:0:%stayopen%:Discord Server:link"- "9:PLAYER_HEAD%eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNDRiOThlODQyZTMyNzMzYTdlNzVlMDJjZDU5NDRmYWNjNTAyNzg1ZTE1ZTE2ZWZiN2FkMGJiNDZhZGZmMTVmNiJ9fX0=:0:%stayopen%:Youtube Channel:link"- "17:PLAYER_HEAD%eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNWQ5YzkzZjhiOWYyZjhmOTFhYTQzNzc1NTFjMjczODAwMmE3ODgxNmQ2MTJmMzlmMTQyZmM5MWEzZDcxM2FkIn19fQ==:0:%close%:Go Back:go back"iconmenu_autofill: WHITE_STAINED_GLASS_PANE P.S. 如果尚未在 config.yml 中启用"INVENTORY_LISTENER” 。则无法检测从键盘上按下 ESC来退出菜单。因此,应该这样设置-INVENTORY_LISTENERtrue 如果你想要,可以把它留为 false,但要关闭任何动态菜单,你必须强制执行操作(指的是用命令?)
如何在5.6.8+版本中使用 CustomModelData 这允许你使用自定义材质的物品从类似ItemsAdder这种插件到你的图标菜单里去。要使用它们,请将自定义模型的数字放在数据 ID 之后,该数字由;分割- 1:ITEM_NAME:0; <CUSTOM MODEL DATA ID HERE > :/test:Title:Description-> - 1:ITEM_NAME:0;1:/test:Title:Description->



如何在在5.6.8+版本的图标菜单中使用 $Script$ (比如 runcmd)

创建图标菜单的结果可以因语句而不同。请查看下面的示例,了解如何实现它们。questscommand:command: /queststype: ICON_MENUiconmenu_size: 18register: truepermission-required: falseiconmenu_title: GlobalMining Questiconmenu_commands:- "$Script$%if%$PlayerData%RookieHunteFinished%==true"- 0:1,WRITTEN_BOOK:0:/warp quest1:§aRookie Hunter- "$Script$%else%"- 0:1,WRITABLE_BOOK:0:/warp quest1:§aRookie Hunter- "$Script$%if%$PlayerData%StartingHunterFinished%==true"- 1:2,WRITTEN_BOOK:0:/warp quest2:§aStarting Hunter- "$Script$%else%"- 1:2,WRITABLE_BOOK:0:/warp quest2:§aStarting Hunter- "$Script$%showall%"- 1:STONE:0:/showall:§aShow whatever the condition is
在动态图标菜单的脚本在创建时开始工作(命令调用),但不会动态更新(即不关闭并重新打开 GUI)。
一个解决方法是创建类似的东西(但是仍然需要关闭并重新打开GUI)
-"$Script$%if%$PlayerData%test123%==true"- 10:STONE:0:%openiconmenu%/mycmd-playerdata set $player test123 false;/mymenu:§cGO to false- "$Script$%else%"- 10:COBBLESTONE:0:%openiconmenu%/mycmd-playerdata set $player test123 true;/mymenu:§aGO to true


在上面的例子中,我们直接从GUI运行两个命令,第一个命令设置一个值,第二个命令重新打开同一个GUI,以允许更新的脚本启动。P.S. 行“$Script$%showall%”可以在IF之后显示其他结果,而无需创建无用的IF。
另一个iconmenu_mode(图标菜单模式)PLAYER_LIST示例如下:
iconmenu_playerlist:command: /iconmenu_listtype: ICON_MENUiconmenu_title: '&aOnline Player List &b($online)'iconmenu_mode: PLAYER_LISTiconmenu_commands: - '%openiconmenu%/banmenu $playerhead'#或者在5.6.6+版本中- '%stayopen%/say $playerhead:&b&lHead of $playerhead:&aPress here to run;&athe command >; ;/say $playerhead'杂项 : 使用$RUN_CONSOLE$作为命令的前缀,以控制台的身份运行它。


铁砧界面
打开一个铁砧图形界面,它允许你执行命令并检索你键入的文本。 anvil_gui:command: /anvil_guitype: ANVIL_GUIanvil_title: '&eMyCommand &6ANVIL'anvil_slot_text: write hereanvil_left_item: "BOOK:2:true:Write Here your lore;Line 2"anvil_commands:- $text$ $player, 你输入了$output- /broadcast $output- '%openiconmenu%/iconmenu $output'
anvil_left_item 格式(铁砧左边的物品) :"ITEM_NAME:AMOUNT:true:LORE;MORE LORE"> ITEM_NAME : AMOUNT :ENCHANTED TRUE OR FALSE : LORE's要从一个ICONMENU打开ANVIL GUI,请使用%openiconmenu%前缀,反之亦然(从ANVIL到ICONMENU)。

商人界面

这将为你打开一个商人物品界面,你可以在那里购买东西。 用法:ITEM_TO_SELL<cost>ITEM_NEEDED_TO_BUY_1:AMOUNT<cost>ITEM_NEEDED_TO_BUY_2:AMOUNT<max_uses>AMOUNT <max_uses>N -> 决定一件东西能买多少次。例子 :merchant_example:command: /mymerchanttype: MERCHANTmerchant_title: '&3Hello &b$player'merchant_items: - STONE_SWORD:1:0:DAMAGE_ALL;1;FIRE_ASPECT;1:&3Old Sword:&bA very old sword<cost>GOLD_INGOT:20<max_uses>2 - STONE_SWORD:1<cost>EMERALD:5<max_uses>4 - IRON_BLOCK:1<cost>EMERALD:1<cost>GOLD_INGOT:1 - GOLD_BLOCK:1<cost>IRON_INGOT:10 - EMERALD_BLOCK:1<cost>GOLD_INGOT:50 - DIAMOND_BLOCK:1<cost>GOLD_INGOT:50<cost>EMERALD:50 - LEVER:1 - COBBLESTONE:1
5.6.6+如何从商人界面运行命令:
把你的命令放在"<commands>"分隔符后面.你可以用";"分隔符分割多个命令,这样你就能一次运行多个命令了.要使其正常工作,你要在配置文件中把监听器打开config.yml- LISTENERS > INVENTORY_LISTENER: true例子:merchant_command_example:command: /merchantcmdstype: MERCHANTmerchant_title: "&3Merchant Example"merchant_items:- STONE_SWORD:1<cost>EMERALD:5<max_uses>4<commands>/command here;/command 2 here- LEVER:1<commands>$text$&b你买了个&3拉杆!



创建一个书命令类型:
书界面命令类型 :
打开一个书的界面,而不需要在背包中有一本书。使用“\n”转到同一页的下一行。每一行都是一页。 (比如下面的text: -“xxxxxx”然后下面又有一个-“xxxxxx” 这是两面)例子:book1_test:command: /booktesttype: BOOKtext: - "&2Hello &a$player\n\n\n&3This is a book created with \n&9 MyCommand!\n\n\n\n\n\n\n\n &d -->&5 Next Page" - "Write what you want here!" book_title: MyCommand book_author: emmerrei book_add_to_inventory: false
JSON书界面种类 :
使用可点击文本、悬停文本、运行命令和打开链接来创建书。检查RAW_TEXT命令以获取更多信息。这将使用相同格式的RAW_COMMAND命令类型。使用<and>分割部分分割更多“可交互”部分,如例中所示:
raw_book_test:command: /rawbooktype: RAW_BOOKtext:- '&aHello &b$player! &aHover your mouse over me!\n\n\n; &dMAGIC<and>Second Hover Part\n\n\n; Hover text here<and> Ecc...;ecc..'- 'TEXT\n\n;HOVER_TEXT<and>TEXT_2\n\n;Hover of text 2<and>$OPEN_URL$Go on my website\n\n;Hover part of the link;http://www.example.com<and>ecc ecc'- '&0[&d*&0]&e Click me; &eClick Here for suggest the command &d/mycmd;/mycmd'- '$RUN_COMMAND$&0[&e*&0]&c Set the time to day; &eClick for Execute;/time set day'- '$OPEN_URL$&0[&e*&0]$random_color Open Google.com; &eClick for open;http://www.google.com'



基本脚本
ifelse语句 :可用语法 : $Script$%if%Var1>Var2 (比较数字) (大于) $Script$%if%Var1<Var2 (数字) (小于) $Script$%if%Var1>=Var2 $Script$%if%Var1<=Var2 $Script$%if%Var1!=Var2 (字符和数字) (不等于) $Script$%if%Var1==Var2 (字符和数字) (等于) $Script$%if%Var1.contains=Var2   
$Script$%if%Var1.notcontains=Var2
$Script$%if%Var1.args.length>2   (计算文本变量的长度,将其按” ”空格拆分 “Hello, how are you”= 4)$Script$%if%Var1.string.length>10 (一个一个字符计数"MyCommand" = 9)
$Script$%if%$arg1.isanumber(true/false
是数字为true,不是为false)如果每行的结果都是false,则可以使用ELSE语句: $Script$%else%或更多if(s),但不超过一个“else”。ELSE语句必须是每个脚本中的最后一个语句,否则它不能按预期工作。 $Script$%while% (用作if,并支持所有%if%比较选项), 只适用于命令类型RUN_COMMAND_TASK,并按他说的做。当某件事是“真的”时,无限地重复,直到陈述变成假,循环中断。(如果你学过编程,这就是while) 下面列出了PLAYERDATA(/mycmdPLAYERDATA)特性的特殊声明。P.S. else语句不适用于PlayerData脚本行。. $Script$%PlayerData%var1>var2 $Script$%PlayerData%var1<var2 $Script$%PlayerData%var1==var2 $Script$%PlayerData%var1!=var2 $Script$%PlayerData%var1=var2 (设置字符串和整数) $Script$%PlayerData%var1-var2(如果变量在操作后低于零,则始终返回0) $Script$%PlayerData%var1+var2 $Script$%PlayerData%var1*var2 () $Script$%PlayerData%var1/var2 () #同上,但编辑其他玩家数据。(支持以上所有操作 =/+/- 等等) $Script$%PlayerDataFor%$PlayerName%var1=var2(PlayerName可以是任何东西,也可以是$arg1) $Script$%PlayerData%listname.addlist=stringtoadd (与列表一起使用) $Script$%PlayerData%listname.removelist=stringtoremove (与列表一起使用)
$Script$%PlayerData%array1.contains=string2 (
与列表一起使用)


操作自定义变量 (/mycmd-variables) (始终返回true) $Script$%Variable%var1+var2 $Script$%Variable%var1-var2 $Script$%Variable%var1=var2临时变量 :%TempVariable%VarName=v2%TempVariable%VarName+v2%TempVariable%VarName-v2%TempVariable%VarName.tolowercase(将临时变量转为小写)
例子:
在下面的示例中,我们将键入的单词“$arg1”与某物进行比较。在这种情况下,如果“$arg1”是mypassword,那么你的聊天结果将是“Right”。你可以按顺序使用多个if。注意把ELSE语句放在最后。如果所有if都为false,则执行ELSE语句 .password_example:command: /passwordtype: RUN_COMMANDruncmd:- $Script$%if%$arg1==mypassword- $text$Right!- $Script$%if%$arg1==420- $text$&aBLAZE IT- $Script$%else%- $text$Password not correct另一个例子,但在本例中,我们使用$health变量。这将在执行“something”之前检查玩家是否血量充足.health_script_example:command: /fullhealthtype: RUN_COMMANDruncmd:- $Script$%if%$health==20.0- do something - $Script$%else%- $text$Heal yourself first.
下面是一些使用$Script$%PlayerData%的示例,(这就像if语句一样工作)。自定义分数示例:/mycmd-playerdata set PlayerName credits 50在下面的示例中,你可以看到命令是如何工作的。第一行检查玩家是否有50个点数。如果是的话,让我们从玩家身上移除50个点数,然后执行一些操作。这样,玩家发送者再次输入命令,但是他没有更多的点数,于是他得到了错误消息。scripttext1:command: /testscript1type: RUN_COMMANDruncmd:- $Script$%PlayerData%credits>50 #Check if the player have 50 credits- $Script$%PlayerData%credits-50 #Remove 50 credits from the player- /dosomethingerror-message: "你需要至少五十点数来执行这个命令!"
一次性命令 :
你可以将playerdata功能用于多种用途,如下所示。首先检查playerdata值yourcommandname是否存在,如果不存在,继续执行某些操作并在playerdata中设置一个新值。如果玩家重新执行命令,变量yourcommandname等于used,命令将不再工作。 one_time_command: command: /onetime type: RUN_COMMAND runcmd:- "$Script$%if%$PlayerData%one_time_command%!=used"- "$text$&aExecuting the command here..."- "$Script$%PlayerData%one_time_command=used"- "$Script$%else%"- "$text$&6You've already used this command."


或: runcmd:- $Script$%PlayerData%yourcommandname!=used- /dosomething- $Script$%PlayerData%yourcommandname=usederror-message: "You have already used this command"
用于检查玩家是否具有特定权限的代码:·    Use "$Script$%if%HasPermission==node.node"·    Or "$Script$%if%HasNotPermission==perm.node" 来检查是不是没有对应权限这里是一个命令示例,有使用范围和2个特定权限。
(playerdata、condition和HasPermission函数的组合)'limitedcommand':command: /limitedcommandtype: RUN_COMMANDruncmd:- '$Script$%if%$PlayerData%limitedcommand_use%<5<and>HasPermission==limitedcommand.limit.5'- '$text$ Your Stuff here (for player with the limit to 5)'- '$Script$%PlayerData%limitedcommand_use+1'- '$Script$%elseif%$PlayerData%limitedcommand_use%<20<and>HasPermission==limitedcommand.limit.20'- '$text$ Your Stuff here (for player with the limit to 20)'- '$Script$%PlayerData%limitedcommand_use+1'- '$Script$%else%'- '$text$&3You have reached the usage limit for this command.'permission-required: false在上面的例子中,有两种不同的权限。limitedcommand.limit.5和limitedcommand.limit.20.只有当所有条件都为真时,才执行此命令中的命令。第一个条件是限制命令使用次数<5并且有权限:limitedcommand.limit.5. 如果两者都为真,则执行代码。相反,如果玩家有其他权限(limitedcommand.limit.20),这一行的结果不都是真的,所以继续下一个if。其他一些脚本行:


所有字段 :$Script$AddPermission= , $Script$RemovePermission= , $Script$HasEmptyInventoryAddPermission= & RemovePermission=需要Vault.


Playerdata列表(数组):
游戏内 :/mycmd-playerdata list <add| remove> <玩家名> <变量> <内容>
脚本内:$Script$%PlayerData%listname.addlist=stringtoadd$Script$%PlayerData%listname.removelist=stringtoremove
使用上面的两行来管理列表,然后使用.contains=或.notcontains=检查其中的内容。 comparator“.contains=”和“.notcontains=”可以处理列表,它只查找精确的结果。因此,如果你搜索“hello”,并且列表中有“hello hello”,则返回false,你需要搜索确切的字符串行“hellohello”。 containsexample:command: /containsexampletype: RUN_COMMANDruncmd:- $Script$%if%$PlayerData%list1%.contains=$multiargs- $text$The array list1 contains $multiargs!- $Script$%else%- $text$Nothing found in this list

脚本 elseif
不带ifelse的示例:如果($arg1和$arg2)都为true,则执行这两个命令(/cmd1和/cmd2) - $Script$%if%$arg1==true- /cmd1 - $Script$%if%$arg2==true - /cmd2- ecc ecc..
如果第一个If为true,并且要拒绝执行下一个If,请使用ELSEIF:例子: - $Script$%if%$arg1==true - /cmd1 - $Script$%elseif%$arg2==true - /cmd2
这样,如果$arg1为真,而第二个($arg2)为真,则不会执行第二个,因为第一个已在那里执行完命令。当然,如果$arg1为false,而$arg2为true,则将执行第二个。


如果两者都为false,则可以使用%else%,如下例所示:


例子 : - $Script$%if%$arg1==true - /cmd1 - $Script$%elseif%$arg2==true - /cmd2 - $Script$%else% - $text$ 无事发生
如何使用 AND (or) OR条件 :
使用AND条件创建更灵活的语句。. $Script$%if% CONDITION1 <and> CONDITION2    <or>CONDITION1 <and> CONDITION2 <and>CONDITION3   <or> ecc....ecc.....例子:
在下面的示例中,仅当2个条件(由<or>分隔)中的一个为真时,才会执行该命令.- "$Script$%if%$gamemode==SURVIVAL<and>$world==world_survival<or>$gamemode==CREATIVE<and>$world==world_creative"- "/dosomething"•你可以看到,第一个条件是$gamemode==SURVIVAL$world==world_survival第二个条件是$gamemode==creative$world==world_creative。在这两个条件之间,如果这两个条件中有一个是真的,命令将被执行。 当然,它的使用涉及到这样一个事实,即被拆分的两个语句都需要为true才能执行命令。所以,使用上面的例子,$gamemode必须是SURVIVAL,$world必须是world_SURVIVAL才能满足请求。
P.S. 你可以在一行中使用unlimited和unlimited。(?)
如何在RUN_COMMAND命令类型中使用“PLAYEROPTIONS”.
例子 :heal:command: /healtype: RUN_COMMANDruncmd:- '%PlayerOptions%setHealth: 20'- '%PlayerOptions%setFoodLevel: 20'- '%PlayerOptions%sendMessage: &aHealed!'runcmd:- '%PlayerOptions%clearInventory: true'- '%PlayerOptions%teleport: world:0.0:100.0:0.0'- '%PlayerOptions%setItemInHand: STONE_SWORD:1'
如何在其他玩家身上使用它们?改为%PlayerOptionsFor%:
用感兴趣的玩家名替换player_name,例如可以是fixed或$arg1"%PlayerOptionsFor%player_name%method: value"
可用PlayerOptions选项 :
这些只支持布尔值 (true 或 false)
setAllowFlight(设置玩家能不能飞) , setBanned(是否被封禁) , setCanPickupItems(是否能捡起物品) , setCustomNameVisible(设置其自定义名会不会显示) , setFlying(设置是不是在飞[不管怎么设置支支持true或false]) , setOp(设置为OP) , setSneaking(设置蹲下) , setSprinting(设置奔跑) , setWhitelisted(设置是否在白名单中)(下面这些只为 true)[意思就是只能被成功执行]leaveVehicle(从载具上离开) , resetMaxHealth(重设最大生命值[20]) , closeInventory(关闭背包) , clearInventory(清空背包)
spawnFirework(放一个烟花) , compassTracker(指南针追踪)

这些支持字符串 (文本)
setCustomName (设置自定义名), setDisplayName(设置显示名) , setGameMode(设置游戏模式) , setPlayerListName (设置玩家列表名字), kickPlayer(踢出玩家) , teleport(传送) , setBedSpawnLocation(设置床所在位置) , setCompassTarget(设置指南针目标) , setItemInHand , setItemOnCursor , chat , sendMessage , playSound , playEffect , addPotionEffect , removePotionEffect , addScoreboardTag , removeScoreboardTag
Integer, Double 或 Float (数字)
setHeldItemSlot, setExhaustion , setExp , setFallDistance , setFireTicks , setFlySpeed , setHealth , setFoodLevel ,setLastDamage , setLevel , setMaxHealth , setMaximumAir , setNoDamageTicks , setRemainingAir , setSaturation , setTotalExperience , giveExp , giveExpLevels , damage , setWalkSpeed , setCustomModelData
位置类型teleportsetBedSpawnLocationsetCompassTarget就是这样工作的 :
- '%PlayerOptions%teleport: world_name:X:Y:Z'- '%PlayerOptions%teleport: world_name:X:Y:Z:YAW:PITCH'#使用yawpitch调整玩家的方向和头部角度
物品堆叠类型 :
addItem, setItemInHand , setItemOnCursor, setItemInOffHand, setBoots, setChestplate, setHelmet, setLeggings, setItemInHandDisplayedName, setItemInHandLore- '%PlayerOptions%setItemInHand: MATERIAL_NAME:AMOUNT'- '%PlayerOptions%addItem: MATERIAL_NAME:AMOUNT'或者: (更多信息)- %PlayerOptions%addItem: MATERIAL_NAME:AMOUNT:ITEM_META: Enchantments;Level : Displayed Name : Lores;line2;line3...将上方变成 :- '%PlayerOptions%addItem: STONE_SWORD:1:0:DAMAGE_ALL;1;FIRE_ASPECT;1:&aMega Sword:&bLine 1;Line 2;$random_colorLine 3'如果你不需要的话,让这个字段空着(比如附魔部分) :- '%PlayerOptions%setChestplate: IRON_CHESTPLATE:1:0::ItemName:Description'


如果你只需要编辑名字和描述,这样使用 :
runcmd:
- "%PlayerOptions%setItemInHandDisplayedName: $arg1"
- "%PlayerOptions%setItemInHandLore: $arg2"

'%PlayerOptions%removeItem: MATERIAL_NAME:AMOUNT'# %PlayerOptions%addItem一样工作 (它只会删除相同的ItemStack,不会从现有的ItemStack中减去项) '%PlayerOptions%withdrawItems: MATERIAL_NAME:AMOUNT:ITEM_DISPLAYED_NAME'#这与itemcost特性类似。 '%PlayerOptions%deleteSingleItem: MATERIAL_NAME:AMOUNT:ITEM_DISPLAYED_NAME'#这将从desider类型的背包中删除单独一个物品 不需要加数量 '%PlayerOptions%deleteAllItems: MATERIAL_NAME:AMOUNT:ITEM_DISPLAYED_NAME'#这将从背包中删除特定类型的所有ItemStack。不需要加数量


另一个是 :%PlayerOptions%openWorkbench: NAME, %PlayerOptions%openInventory: NAME,%PlayerOptions%openMerchant: ITEM..ecc, %PlayerOptions%openEnchanting,%PlayerOptions%setCursorOpenInventory: ITEM


礼包的例子 附魔 :'%PlayerOptions%addEnchantment: ENCHANT_NAME:LEVEL''%PlayerOptions%removeEnchantment: ENCHANT_NAME'药水 :- %PlayerOptions%addPotionEffect: POTION_NAME:TIME_IN_TICKS:LEVEL- %PlayerOptions%addPotionEffect: SPEED:100:0
药水列表 BUKKIT: http://jd.bukkit.org/rb/apidocs/org/bukkit/Effect.html Spigot: https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/Effect.html%PlayerOptions%playEffect: EFFECT_NAME:INT_DATA%PlayerOptions%playEffect: RECORD_PLAY:2260声音列表 : Bukkit : http://jd.bukkit.org/rb/apidocs/org/bukkit/Sound.html Spigot: https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/Sound.html%PlayerOptions%playSound: SOUND_NAME:VOLUME:BYTE_DATA%PlayerOptions%playSound: NOTE_BASS:1.0F(注意,直接用1.1,1.2这些数字是无法播放对应音调声音的,要在数字后加F,1.1F,1.2F):1


%PlayerOptions%spawnParticle: PARTICLE_NAME:INTENSITY
带有RUN_COMMAND_TASKWHILE语句示例
taskexample:command: /taskexampletype: RUN_COMMAND_TASKruncmd:- "$Script$%while%$health>=10"- "$text$Your health is > 10 ($health)"- "/dosomething"task_run_immediately: truetask_repeat_every_sec: 1task_run_n_times: -1task_run_when_offline: truetask_show_debug: false在本例中,当生命值>10时,执行一些操作。如果在下一次执行时,生命值<10,则中断循环。命令 & 权限MyCommand 主要列表 :
命令
描述
权限
/mycmd
在游戏中显示此命令列表
mycommand.mycmd
/mycmd list
显示所有创建的自定义命令
//
/mycmd check
显示有关自定义命令的信息
//
/mycmd-reload
重新加载配置文件
mycommand.reload
/mycmd-edit
游戏内配置(config)管理器
mycommand.edit
/mycmd-blockset
用方块启动命令
mycommand.block.set
/mycmd-itemset
用物品启动命令
mycommand.item.set
/mycmd-runas
以其他人或控制台的身份运行命令
mycommand.runas
/mycmd-scheduler
调度程序命令(不懂)
mycommand.scheduler
/mycmd-variables
生成自定义变量
mycommand.variables
/mycmd-playerdata
管理playerdata.yml
mycommand.playerdata
/mycmd-book or /mycmd book
用书本启动命令
mycommand.book
/mycmd-signs
用告示牌启动命令
mycommand.sign.set
/mycmd tell
给你自己发一条信息(用作测试)
//
/mycmd btell
向所有玩家发送广播消息.
//

/mycommand
没什么用
mycommand.mycommand
/emptycommand
什么也不会发生
mycommand.emptycommand
和你的命令:(较新版本的默认值)USE_NAME_INSTEAD_OF_ID_IN_THE_PERMISSION_NAMEtrue'first_command':command: /command_name它的权限是mycommand.cmd.first_command'second_command':
command: /myhelp2它的权限是mycommand.cmd.second_command
...'command_name':
command : /XX它的权限是mycommand.cmd.command_name(老版本默认值) USE_NAME_INSTEAD_OF_ID_IN_THE_PERMISSION_NAME false'first_command':
command: /command_name它的权限是mycommand.cmd.1'second_command':
command: /myhelp2mycommand.cmd.2
等等'command_position':
command : /XXmycommand.cmd.POSITION对于“允许用户使用所有命令”,添加以下权限 :mycommand.cmd.all(所有命令)


你可以通过将权限节点行放在感兴趣的位置,对命令使用自定义权限命令。或如果要禁用单个命令的权限检查,可以使用“permission-required”命令字段另外,如果你的服务器上没有权限插件,请设置DISABLE_PERMISSIONS:true(在config.yml文件)用于绕过mycommand.cmd权限。(仅适用于自定义命令)方块 (/mycmd-blockset) :
命令
描述
权限
/mycmd-blockset check
从目标方块获取信息
mycommand.block.set
/mycmd-blockset create
在目标方块上新建脚本
//
/mycmd-blockset delete
在目标方块上删除所有脚本
//
/mycmd-blockset add <data>
在目标方块上添加命令
//
/mycmd-blockset remove <data>
删除目标方块上的命令
//
/mycmd-blockset switch
在玩家/控制台模式之间切换
//
/mycmd-blockset blocklist
显示所有可用的方块
//

告示牌 (/mycmd-signset) :
命令
描述
权限
/mycmd-signset create <listname>
创建一个新命令牌子
mycommand.sign.set
/mycmd-signset edit <listname><create/add/remove> <value>
管理一个创建的牌子
//
/mycmd-signset check <listname>
从创建的牌子中获取信息
//
/mycmd-signset list
获取所有创建的牌子
//

调度程序 (/mycmd-scheduler) :
命令
描述
权限
/mycmd-scheduler run
运行调度程序
mycommand.scheduler
/mycmd-scheduler create <name>
创建一个新的调度程序
//
/mycmd-scheduler add/remove <name>command/date <value>
从现有列表中添加或删除命令
//
/mycmd-scheduler check <name>
从创建的列表中获取信息
//
/mycmd-scheduler delete <name>
删除列表
//
/mycmd-scheduler list
获取所有创建的列表
//

(/mycmd-book) :
/mycmd-book
用书本启动命令
mycommand.book
/mycmd-book help
显示帮助
//
/mycmd-book make <n><text/runcmd>
用自定义命令数据制作一本书
mycommand.book.make

变量 (/mycmd-variables) :
/mycmd-variables create <name>
创建新变量
mycommand.variables
/mycmd-variables set <name><data>
编辑变量
//
/mycmd-variables delete <name>
删除变量
//
/mycmd-variables check <name>
显示变量内容
//
/mycmd-variables list <name>
显示创建的所有变量
//

(/lmcmd) (旧插件):
命令
描述
权限
/lmcmd
显示帮助
mycommand.lmcmd
/lmcmd run <name>
执行命令列表
//
/lmcmd list
显示所有命令列表
//
/lmcmd check <name>
检查命令列表
//
/lmcmd create <name>
创建新命令列表
//
/lmcmd delete <name>
删除命令列表
//
/lmcmd add <name>
向列表中添加命令
//
/lmcmd remove <name>
从列表中删除命令
//
NPC :
命令
描述
权限
/mycmd-npcs
显示帮助
mycommand.npcs
玩家数据 :
命令
描述
权限
/mycmd-playerdata
显示帮助
mycommand.playerdata

全息:/mycmdhologram - mycommand.hologram
其他:/mycmdgui - mycommand.gui/mycmdplayeroptions - mycommand.playeroptions andmore subcommands... check /mycmd in game for all.


如果需要使用占位符$PlayerDataFor%var_name%检索信息,则需要向用户授予以下权限:“mycommand.placeholders.playerdatafor.<var_name>“牌子权限 :·    mycommand.sign.use·    mycommand.sign.create·    mycommand.sign.break物品权限 :·    mycommand.item.use方块权限 :·    版本大于 4.1o   mycommand.block.ITEMNAME.use 比如 -> mycommand.block.STONE_PLATE.useo   mycommand.block.LEVER.useo   之类…或者直接给mycommand.block.all.use(所有的)
展示框 :·  mycommand.itemframe.break
·    版本 < 4.1o   mycommand.block.button.use , mycommand.block.plate.use ,mycommand.block.lever.use , mycommand.block.detectorrail.use·    允许玩家破坏mycmd的方块 :o   mycommand.block.break
NPC权限 :·    mycommand.interact.villager其他 :
mycommand.cost.bypass.commandname
(其中commandname=你的命令名)绕过命令价格
mycommand.bypass.warmup
绕过预备命令类型
mycommand.bypass.cooldown
绕过冷却命令类型
mycommand.bypass.ignoredworld
绕过忽略世界选项
mycommand.see.permbroadcast
请参阅perm-broadcast-text-type命令
mycommand.bypass.timer
绕过 "addtimer"命令计时
每日奖励 :dailybonus:command: /dailybonustype: RUN_COMMANDruncmd:- "$Script$%if%$todaydate!=$PlayerData%DailyBonus%"- "$text$&0[&6每日&e奖励&0]&b 你好 $player! 这是你的每日奖励!"- "$text$&0[&6每日&e奖励&0]&b 收到了 &a1个 钻石!"- "%PlayerOptions%addItem: DIAMOND:1"- "$Script$%PlayerData%DailyBonus=$todaydate"- "$text$&0[&6每日&e奖励&0]&b 明天再来吧!"- "$Script$%else%"- "$text$&0[&6每日&e奖励&0]&b 今天只有这么多了!明天再来吧!"自定义抽奖 :lottery_example:command: /lottery_exampletype: RUN_COMMANDruncmd:- '%PlayerOptions%playSound: BLOCK_LEVER_CLICK:1.0F:1'- '$text$&6欢迎来到&eMyCommand &6抽奖!'- '$delay$'- '$text$&b+------------------------------------'- '$text$&b| &2今日奖励 :'- '$text$&b| &a圆石, 面包, 苹果, 金锭 或是 &b钻石&a! '- '$text$&b+------------------------------------'- '$text$&e请等待开奖!'- '$delay$$delay$$delay$'- '$delay$$text$&0[$random_colorLottery&0] &65...'- '%PlayerOptions%playSound: BLOCK_LEVER_CLICK:1.0F:1'- '$delay$$text$&0[$random_colorLottery&0] &64...'- '%PlayerOptions%playSound: BLOCK_LEVER_CLICK:1.0F:1'- '$delay$$text$&0[$random_colorLottery&0] &63...'- '%PlayerOptions%playSound: BLOCK_LEVER_CLICK:1.0F:1'- '$delay$$text$&0[$random_colorLottery&0] &62...'- '%PlayerOptions%playSound: BLOCK_LEVER_CLICK:1.0F:1'- '$delay$$text$&0[$random_colorLottery&0] &61...'- '%PlayerOptions%playSound: BLOCK_LEVER_CLICK:1.0F:1'- '$delay$'- '%PlayerOptions%playSound: ENTITY_EXPERIENCE_ORB_PICKUP:1.0F:1'- '$Script$%PlayerData%lotteryprize=$GetRandomStringFromList%COBBLESTONE;DIAMOND;GOLD_INGOT;BREAD;APPLE%'- '$Script$%PlayerData%amount_lotteryprize=$randomnumber%3%'- '$delay$'- '$text$&b+------------------------------------'- '$text$&b| &6恭喜你! 你赢得了 : &e $PlayerData%amount_lotteryprize% $PlayerData%lotteryprize%! '- '$text$&b+------------------------------------'- '%PlayerOptions%addItem: $PlayerData%lotteryprize%:$PlayerData%amount_lotteryprize%'delaytimer: 1cooldown: 600
自定义设置家和回到家sethome:command: /sethometype: RUN_COMMANDruncmd:- $Script$%PlayerData%home.x=$locX - $Script$%PlayerData%home.y=$locY- $Script$%PlayerData%home.z=$locZ- $text$家已成功设置cost: 0permission-required: falsehome:command: /hometype: RUN_CONSOLEruncmd:- /tp $player $PlayerData%home.x% $PlayerData%home.y% $PlayerData%home.z%cost: 0permission-required: false自定义 /top 命令go_to_the_top:command: /toptype: RUN_CONSOLEruncmd:- /tp $player $locX $loc_highestY $locZ查看玩家是否在线的 (.contains) 例子.is_online_check:command: /isonlinetype: RUN_COMMANDruncmd:- "$Script$%if%$ponline.contains=$arg1"- "$text$&a玩家$arg1在线"- "$Script$%else%"- "$text$&c找不到玩家$arg1"require_all_arguments: trueerror-message: "&c使用方法 : /isonline 玩家名"硬币命令:coin_pay_cmd:command: /coins paytype: RUN_CONSOLEruncmd:- $text$&b+-- MyCommand 硬币系统 --+- $Script$%if%$arg2<=$PlayerData%coins%- /mycmd-playerdata add $arg1 coins $arg2- /mycmd-playerdata remove $player coins $arg2- $text_to_specific_player%$arg1%$player 给了你 $arg2 个硬币!- $text$&a交易已完成.- '$text$&a你现在拥有硬币个数 : $PlayerData%coins%'- $Script$%else%- $text$&c没有足够的硬币来完成该交易error-message: '&c用法 : /coins pay <玩家名> <数量>'require_all_arguments: truecoin_main_cmd:command: /coinstype: TEXTruncmd:- "&b+-- MyCommand 硬币系统 --+"- "&a现有硬币 :&e $PlayerData%coins%"- "&a给其他玩家硬币请使用/coins pay <玩家名> <数量>"另一个积分的例子 :'addcredits':command: /addcreditstype: RUN_COMMANDruncmd:- '$Script$%PlayerDataFor%$arg1%Credits+$arg2' - "$text$New $arg1 现有积分 : $PlayerDataFor%$arg1%Credits% 点"required_args: 2error-message: "使用方法 : /addcredits <player> <amount>"'removecredits':command: /removecreditstype: RUN_COMMANDruncmd:- '$Script$%PlayerDataFor%$arg1%Credits-$arg2'- "$text$New $arg1 现有积分 : $PlayerDataFor%$arg1%Credits% 点"required_args: 2error-message: "使用方法 : /removecredits <player> <amount>"'viewcredits':command: /viewcreditstype: RUN_COMMANDruncmd:- "$Script$%if%$PlayerDataFor%$arg1%Credits%!=NoData"- "$text$$arg1 有 $PlayerDataFor%$arg1%Credits% 点积分"- "$Script$%else%"- "$text$这个玩家没有帐户"required_args: 1permission-required: falseerror-message: "使用方法 : /viewcredits <player>"自定义礼包例子 :kit_test:command: /mycmdkittype: RUN_COMMANDruncmd:- '%PlayerOptions%clearInventory'- '%PlayerOptions%setHelmet: IRON_HELMET:1:0:DAMAGE_ALL;1;FIRE_ASPECT;1:&aMega Helmet:&bLine 1;Line 2;$random_colorLine 3'- '%PlayerOptions%setChestplate: IRON_CHESTPLATE:1:0::Mega Chestplate:Super'- '%PlayerOptions%setLeggings: IRON_LEGGINGS:1'- '%PlayerOptions%setBoots: IRON_BOOTS:1'- '%PlayerOptions%setItemInOffHand: SHIELD:1'- '%PlayerOptions%addItem: STONE_SWORD:1:0:DAMAGE_ALL;1;FIRE_ASPECT;1:&aMega Sword:&bLine1;Line 2;$random_colorLine 3'- '%PlayerOptions%setHeldItemSlot:0'


字符串长度检查


argstest:
command: /test
type: RUN_COMMAND
runcmd:
- "$Script$%if%$multiargs.string.length>0"
- "$text$
字符串长度大于0就做一些事情"
- "$Script$%else%"
- "$text$ 这里是命令帮助
"


检查背包是否为空 :
$Script$%if%$hasemptyinventory==true or $Script$%if%$inventorysize==0


检查背包是否为满:
$Script$%if%$inventorysize==41 (背包为满)




bili15871672441
感谢楼主的汉化~

请叫我龙猫1
666666666666666666666666666666

HAIXIAOMini
1.6.4完美运行,部分变量不能使用 版本过老

FireworkPolymer
HAIXIAOMini 发表于 2021-7-15 22:50
1.6.4完美运行,部分变量不能使用 版本过老

居然还有人在用1.6.4😨

卡林Akari
居然还可以这样做的啊

dshjfdsh
楼主牛b,我玩了好几年第一次见到这样玩的 佩服

小雨√
本帖最后由 嘉晚饭,赢 于 2022-1-20 19:23 编辑


太古巨龙
扣除物品(Item Cost)功能 扣除的物品支持NTB吗 如果支持应该怎么写

FireworkPolymer
太古巨龙 发表于 2022-1-22 19:15
扣除物品(Item Cost)功能 扣除的物品支持NTB吗 如果支持应该怎么写

nbt不支持,支持lore,名字等等,为什么一定要nbt呢

太古巨龙
FireworkPolymer 发表于 2022-1-22 19:22
nbt不支持,支持lore,名字等等,为什么一定要nbt呢

支持lore就行那应该怎么写比如有个lore叫'&e传送卷轴&r'

FireworkPolymer
太古巨龙 发表于 2022-1-22 19:27
支持lore就行那应该怎么写比如有个lore叫'&e传送卷轴&r'

看帮助文档,哪里没明白引出来再问

太古巨龙
FireworkPolymer 发表于 2022-1-22 19:28
看帮助文档,哪里没明白引出来再问
自定义物品名也能被使用在里面

itemcost: IRON_SWORD:1:SUPER IRON SWORD;GOLDEN_CHESTPLATE:1:&eULTRA ARMOR

这里没有说明lore应该如何写上去 只说明了物品名字如何写上去

FireworkPolymer
太古巨龙 发表于 2022-1-22 22:18
这里没有说明lore应该如何写上去 只说明了物品名字如何写上去

我的建议是用checkitem变量来扣除物品

太古巨龙
FireworkPolymer 发表于 2022-1-22 22:24
我的建议是用checkitem变量来扣除物品

能不能给个引用 我咋好像找不到这个checkitem变量的介绍啊

FireworkPolymer
太古巨龙 发表于 2022-1-22 22:49
能不能给个引用 我咋好像找不到这个checkitem变量的介绍啊

签名档   

太古巨龙
  1. CSSJ:
  2. command: /cs
  3. type: RUN_COMMAND
  4. register: true
  5. permission-required: false
  6. runcmd:
  7. - '$Script$%if%$arg1=='
  8. - '$Script$%elseif%%checkitem_namecontains:传送水晶,mat:AMETHYST_SHARD,strict%==false'
  9. - '$text$[&e信息&r]你没有携带传送水晶'
  10. - '$Script$%elseif%%checkitem_namecontains:传送水晶,mat:AMETHYST_SHARD,strict,inhand%==false'
  11. - '$text$[&e信息&r]水晶未被持有在主手或者副手'
  12. - '$Script$%else%'
  13. - '$text$[&e信息&r]水晶开始充能'
  14. error-message: ''
复制代码
  1. - '$Script$%if%$arg1=='
复制代码

如何让在if里面判断$arg1是否为空
以及判断输入的玩家是否在线
PlaceholderAPI WIKI/帮助文档 汉化
Player(玩家)
/papi ecloud download Player
%player_online%(玩家是否在线)
这个可以指定一个玩家吗比如使用$arg1

FireworkPolymer
本帖最后由 FireworkPolymer 于 2022-1-24 21:49 编辑
太古巨龙 发表于 2022-1-24 21:12
如何让在if里面判断$arg1是否为空
以及判断输入的玩家是否在线这个可以指定一个玩家吗比如使用$arg1
...


首先mycommand是有检测功能的

检查玩家状态的变量:
$CheckPlayerStatus%Player_Name%Status%
所有可用变量 (替换Status): isOnline, isOnGround, isDead, isFlying, isSwimming, isSneaking,isInsideVehicle, isSprinting, isSleeping, isOp

例子:
runcmd:
- $Script$%if%$CheckPlayerStatus%$arg1%isOnline%==true
- /玩家在线
- $Script$%else%
- /不在线

其次如果你想要的功能是玩家必须输入参数,你可以用required-args: 多少个
如果你是想如果玩家什么也不输入就执行某命令,你只需要在检测玩家有无输入后在最后加个else就可以了
还有,error-message是不支持脚本的
并不是一定需要输入参数,我看你这个可能是要检测数量吧
在论坛交流也不方便,要不你去加一下我在papi里面放的群号?

太古巨龙
FireworkPolymer 发表于 2022-1-24 21:46
首先mycommand是有检测功能的

检查玩家状态的变量:

群已加 先感谢大佬帮助
玩家是否在线的我明白了
我想实现的是把插件自带的错误提示分错误种类给予提示
比如缺少参数 玩家不在线 一步一步检查下来
  1. error-message: ''
复制代码

是用来屏蔽插件自带的错误提示的

laiyobang
描述详细!顶

FireworkPolymer
laiyobang 发表于 2022-7-22 20:11
描述详细!顶

这插件明明很有用,为什么就没人看呢

laiyobang
FireworkPolymer 发表于 2022-7-23 08:48
这插件明明很有用,为什么就没人看呢

我每次来看都要花解锁卡哈哈,不过值得

byxiaobai
感谢楼主的汉化!!!!!!

huangjinwei
感谢,很不错的教程

ehchehce
怎么这个自定义冷却提示信息 cooldown-message: "wait $days$hours$minutes$seconds second more" 没有提示出来呢,显示的还是language里面的COOLDOWN1:XXX的提示信息

FireworkPolymer
ehchehce 发表于 2023-2-13 12:55
怎么这个自定义冷却提示信息 cooldown-message: "wait $days$hours$minutes$seconds second more" 没有提示 ...

确定格式写对了?插件版本为最新?