跳转至

专用命令🔗


专用命令的使用🔗

适用于:Rank(组)、Scheduler(调度器)、Portals(传送门)、EventCommands(事件命令)、Interactive Commands(交互命令)、Kits(礼包)和自定义别名。

动作🔗

只使用一个动作变量,否则将使用最后一个。

支持 PlaceHolderAPI 变量 - [playerName] 然后尽可能使用目标玩家名。这不适用于调度器,因为在这种情况下我们不知道应该使用哪个玩家。 - msg! 然后给出玩家名,一条简单的消息将被发送给该玩家,如果他在线的话。示例:msg! Zrips Hello! - broadcast! 消息将以简单方式发送给服务器上的每个人,没有任何额外的前缀。 - actionbar! 所有玩家将获得在此变量之后定义的 action bar 消息。 - title! 所有玩家将获得在此变量之后定义的 title 消息。 - subtitle! 所有玩家将获得在此变量之后定义的 subtitle 消息。 - kickall! 所有玩家将被踢出服务器,并带有定义的消息。在服务器停止之前很有用。 - asPlayer! 命令将作为发送原始初始化命令的玩家来执行。 - asConsole! 命令将从控制台执行。这可以在像 customAlias 这样的地方使用,默认情况下命令像玩家一样执行,除非特别定义为作为控制台执行。 - asFakeOp! 将作为拥有 OP 的玩家来执行。这与 asConsole! 略有不同,因为你不会收到任何反馈消息,服务器将处理命令,就像它是由真实玩家做的一样。请记住,这不会作为初始化命令的玩家执行,而是作为一个完全不同的假 OP 玩家。 - allPlayers! 然后命令将在所有在线玩家上执行。[allPlayers] 应该被用来在需要的地方插入玩家名。在示例中:allPlayers! cmi heal [allPlayers] 将治疗所有在线的人。

条件🔗
  • perm:[permissionNode]! 如果玩家有权限节点,命令将被执行。当我们不知道目标玩家是谁时,这将不起作用。示例:perm:cmi.announce.vip! broadcast! Hello vip guys。
  • moneycost:[amount]! 如果玩家有足够的钱,命令将被执行。这将在继续之前从玩家余额中移除定义数量的金钱。
  • hasmoney:[amount]! 命令将检查玩家是否有足够的钱,并继续执行命令或如果没有足够的钱则停止。这不会从玩家那里移除金钱,它只检查玩家是否有足够的钱继续。
  • expcost:[amount]! 如果玩家有足够的经验,命令将被执行。
  • hasexp:[amount]! 命令将检查玩家是否有足够的经验,并继续执行命令或如果没有足够的经验则停止。
  • item:[itemData]! 如果玩家有足够的定义物品,命令将被执行。请记住,这除了检查玩家是否有足够的物品外,实际上会在命令成功时移除它们。示例:item:coal;12! 将要求 12 个煤炭物品来执行命令。物品定义基于单行格式,关于它你可以阅读更多 这里。
  • exactitem:[itemData]! 如果玩家有足够的定义精确物品,命令将被执行。示例:exactitem:coal;12! 将要求 12 个煤炭物品来执行命令。这与前面的物品定义不同,因为它会寻找精确匹配,在这种情况下只挑选干净的煤炭物品,任何有自定义名称或 lore 的都将被忽略。
  • hasitem:[itemData]! 如果玩家有足够的定义物品,命令将被执行。这不会在命令执行时拿走它们。例如 hasitem:coal;5 将检查玩家背包中的 5 个煤炭物品。物品定义基于单行格式,关于它你可以阅读更多 这里。提供更详细的物品将产生更准确的结果,如果只定义了物品类型,那么我们将挑选任何类型匹配的物品,如果还提供了物品名称,那么我们只挑选类型和名称都匹配的物品。
  • hasexactitem:[itemData]! 如果玩家有足够的精确物品,命令将被执行。这与 hasitem 不同,因为它只会寻找匹配标准的物品,所以例如 hasitem:coal;5 将检查玩家背包中的 5 个煤炭物品,同时排除任何带有自定义名称或自定义 lore 的煤炭物品,只识别干净的煤炭物品堆叠。
  • ifonline:[playerName]! 如果玩家在线,命令将被执行。静态名称或 [playerName] 可以用于你想要的结果。
  • ifoffline:[playerName]! 如果玩家离线,命令将被执行。静态名称或 [playerName] 可以用于你想要的结果。
  • ifempty:[hand/offhand/quickbar/armor/inv/subinv/ender]! 如果定义区域的玩家背包为空,命令将被执行。Subinv 是 27 个槽位,也就是打开背包时的 3 行槽位。当使用 inv 作为类型时,玩家背包中的每个物品都将被检查。可以为 quickbar/maininv/subinv 类型定义额外值,例如 maininv-5 将要求你的主背包中有 5 个空槽位,而 subinv-10 将要求子背包中有 10 个空槽位,quickbar-3 将要求快捷栏中有 3 个空槽位。用法示例:ifempty:maininv-3?!
  • check:[value1][==|>|>=|<|<=|!=][value2][?][#]! 只有条件正确时我们才会继续。所以例如 check:%cmi_user_balance%>1000! 只有在玩家余额高于 1000 时才执行命令。check:%cmi_user_name%==Zrips! 只有当玩家名是 Zrips 时才执行命令。 如果你想把值与空字段进行比较,使用 "null" 或 "[empty]",例如 check:$1==null!。 可选地,多个变量可以用于 == 和 != 检查。例如 check:$1==join|leave! 将检查第一个输入的变量是否等于 join 或 leave,!= 也一样,只有变量不是其中之一时才执行后续命令。
  • contains:[value1][=>][value2][@][#]! 只有当 value1 包含 value2 时我们才会继续。例如 contains:$1=>stone! 将检查第一个输入的变量是否包含文本 stone,它可以是像 stonebricks 这样较长词的一部分。
  • votes:[amount]! 如果玩家有足够的票数(Votifier),命令将被执行。
特殊项🔗
  • cooldown:[timeInSec]! 那一行或任何后续行(如果定义的话)在重新使用之前将有一个冷却时间。示例:cooldown:5! cmi heal [playerName] 将治疗玩家,但频率不会超过每 5 秒一次。
  • ucooldown:[timeInSec]! 与之前的 cooldown 不同,这将根据来源应用。所以如果它从不同的 InteractiveCommands 或不同的自定义别名触发,你可以有不同冷却时间。
  • gcooldown:[timeInSec]! 冷却时间将在整个服务器范围内应用,如果它被触发,没有其他人可以再次触发它,直到冷却结束。
  • delay! 5 在触发后 5 秒执行其余命令。这允许例如在服务器停止前创建倒计时。可以使用小数值,如
    delay! 0.5
    

以 2 秒延迟两次发射玩家的示例

- cmi launch [playerName]
- delay! 2
- cmi launch [playerName]

请记住,玩家将无法运行命令。 自 9.1.3.2 版本起,你可以定义延迟标识名,例如

- cmi launch [playerName]
- delay! 2 playerlaunch
- cmi launch [playerName]

它可以用于 stopdelay:[name]! 变量。 - stopdelay:[name]! 将按上面解释的标识名取消延迟。例如 stopdelay:playerlaunch! - [randomPlayer] 占位符可以用来获取一个没有 cmi.scheduler.exclude 权限节点的随机在线玩家名。这可以用来在特定时间给随机玩家奖励。在示例中:cmi give [randomPlayer] diamond %rand/1-5% 将给随机在线玩家 1 到 5 个随机数量的钻石。

语句🔗

statement:[value]!

if:[value][@][#]!

2 个一起使用以达到特殊结果的特殊变量。

你在哪里可以利用这个?它相对简单。 让我们以这样的设置为例子

    - statement:check1! hasexp:50! hasmoney:100! perm:cmi.command.fly!
    - if:check1! msg! [playerName] PASS
    - if:check1@! msg! [playerName] FAIL

我们在第一行中有 3 个检查,其结果被附加到自定义名称,在这种情况下它是 "check1",你可以随便命名它。接下来的 2 行利用该检查的结果,所以 "if:check1!" 行在第一行返回 true 时执行,而 "if:check1@!" 只在它返回 false 时执行。这允许你只做一次检查,然后利用结果进行更干净和更快的命令处理,因为我们不再重复相同的检查,我们将利用之前的结果。所以扩展这个,你可以创建更干净和更高效的设置,如

    - statement:check1! hasexp:50! hasmoney:100! perm:cmi.command.fly!
    - if:check1! command 1
    - if:check1! command 2
    - if:check1! command 3
    - if:check1! command 4
    - if:check1@! command 5
    - if:check1@! command 6
    - if:check1@! command 7

额外🔗

  • perm:[value][@][?][#]!
  • bperm:[value][@][?][#]!
  • moneycost:[value][?][#]!
  • expcost:[value][?][#]!
  • hasmoney:[value][@][?][#]!
  • hasitem:[value][@][?][#]!
  • item:[value][?][#]!
  • hasexp:[value][@][?][#]!
  • votes:[value][@][?][#]!
  • cooldown:[value][?][#]!
  • ucooldown:[value][?][#]!
  • gcooldown:[value][?][#]!
  • ifonline:[value][?][#]!
  • ifoffline:[value][?][#]!
  • ifempty:[value][?][#]!
  • click:[value][#]!
  • ifinworld:[value][@][?][#]!
  • ifingamemode:[value][@][#]!
  • ifhashealth:[value][@][#]!
  • ifhashunger:[value][@][#]!
  • ifhasair:[value][@][#]!

所有这些都是条件检查。这意味着如果玩家没有权限节点或足够的金钱/经验,那么后续命令将不会被执行。示例:perm:cmi.testperm! cmi heal [playerName]。 - 如果你想告诉玩家他没有该命令所需的权限节点或足够的金钱/经验,那么在检查变量中使用 ?。示例:perm:cmi.testperm?! cmi heal [playerName],所以如果玩家没有 cmi.testperm 权限节点,那么他们将收到关于此的通知消息,并且命令将不会被执行。 - 如果你想在玩家不满足要求时取消所有命令,那么在检查变量中使用 #。示例 - moneycost:150#! cmi heal [playerName]``- cmi feed [playerName]

在这种情况下,如果玩家账户中没有 150 金钱来支付,玩家将不会被治疗或喂食。 - 如果你想执行下面的命令并取消其余在此行之后的命令,你可以使用 ~ 变量。例如

- check:$1==null~! asConsole! cmi feed [playerName]
- check:$1==join~! asConsole! cmi heal [playerName]
- asConsole! cmi msg [playerName] !&4Wrong command!

如果没有提供变量将执行 feed 命令。如果第一个变量等于 "join",那么玩家被治疗并且后续命令都不会被检查。而提供既不为空也不是 "join" 的变量,那么最后一行将被执行,输出错误消息。 - 如果你想检查相反的条件,那么使用 @。例如 perm:cmi.testperm@! cmi heal [playerName] 只有在玩家没有 cmi.testperm 权限节点时才执行命令。 - 如果你想只在玩家在特定世界时才执行命令,那么利用 ifinworld:[value][@][?][#]! 条件。只有当提供的世界名与当前玩家世界匹配时才执行命令。可以提供多个世界名,例如 ifinworld:LT_Craft|LT_Craft_nether!。而如果使用 @,那么只有当提供的世界名不是玩家当前所在的世界时才会执行命令。 - 可以使用额外条件来检查相反的条件、通知玩家、在需要时取消任何进一步执行命令的动作。完整的变量看起来像 perm:cmi.testperm@?#! cmi heal [playerName]。

bperm:[value][@][?][#]! 将尝试绕过 cmi 命令的基础权限检查。这只适用于 CMI 命令。在示例中

bperm:cmi.someCustom! cmi heal

将允许玩家执行 /cmi heal 命令,而实际上不需要拥有所需的 cmi.command.heal 权限节点。这可以用于像有限物品使用这样的场景,玩家可以在常规情况下执行一些他无权访问的命令,但他们在使用那些物品时可以执行。

ptarget:[name]! 是只能从控制台使用的特殊变量。这将在替换占位符或检查条件时使用目标玩家。在示例中,有一个像 /givehomes 这样的自定义别名,命令为

asConsole! ptarget:$1! lp user $1 permission set cmi.command.sethome.%cmi_equationint_{cmi_user_maxperm_cmi.command.sethome_1}+1%

然后你可以从控制台使用 /givehomes Zrips 来执行命令,通过那些特定的占位符为 Zrips 添加新的权限节点。在这种情况下,它将最大家数量增加 1。

click:[value]! 这只用于交互命令功能中点击方块时。其中 value 可以是四个选项之一:left、right、leftshift、rightshift。这将定义只有在玩家以特定方式点击方块时才执行命令。所以示例 click:leftshift! 只有在玩家潜行时使用鼠标左键才执行命令。

子动作🔗

  • closeinv!

这可以用于关闭玩家的背包,如果需要这个动作的话。

  • ph!

使用变量时,现有的占位符将不会被翻译,并将原样传递给命令。这可以用于执行带有占位符的目标命令,例如:ph! cmi bossbarmsg all -sec:3 %cmi_server_time_mm:ss% 这将基于这个占位符创建动态的 bossbar 消息,如果没有提供 ph! 变量,bossbar 命令将收到翻译后的占位符,只会显示静态信息。

  • ch!

使用变量时,现有的颜色代码将不会被翻译,并将原样传递给命令。这可以用于执行带有原始十六进制颜色代码的目标命令,例如:ch! somePlugin coolCommand #000001 Welcome back! 这将以其原始格式触发命令而不修改十六进制颜色,如果没有提供 ch! 变量,命令将收到翻译后的命令,这可能不是该目标插件的有效格式。

示例🔗

/cmi attachcommand !limiteduse:1!;;asConsole! check:%cmi_random_1_100%<=20! cmi money give [playerName] 100

有限使用物品,只有一次使用次数,在使用时有 20% 的机会给 100 块钱。

/cmi attachcommand !limiteduse:1!;;asConsole! cmi money give [playerName] %cmi_random_10_50%

单次使用物品,在使用时会给出 10 到 50 之间的随机数量的钱。

exactitem:coal;160?! asConsole! give [playerName] coal;n{&2Enchanted_Coal} -s

将寻找 160 数量的干净煤炭物品,如果玩家有它,那么新的带自定义名称的煤炭将被给予,并且 160 个干净的会被移除。如果玩家没有足够的物品,那么将显示反馈消息。 (内容由AI生成,仅供参考)