Skript Command

This commit is contained in:
ChuishenX 2024-06-22 11:12:10 +08:00
parent 38d38f8a0d
commit 7c4dd9311c

View File

@ -54,7 +54,7 @@ on join:
效果可以是修改游戏模式、发送消息、移动玩家等任何能够改变游戏世界的动作。
在 SK 中效果是脚本中实际执行的操作或令,用于**改变游戏结果或执行动作**
在 SK 中效果是脚本中实际执行的操作或令,用于**改变游戏结果或执行动作**
举例:
@ -236,11 +236,11 @@ on join:
可以看到 Skript 提供给我们一共 120 个监听。这么多的监听,我们究竟该怎么选择呢?选择完又该如何使用呢?
这里我们拿 "on command" 监听器为例(令执行监听器)。
这里我们拿 "on command" 监听器为例(令执行监听器)。
我们把我们对于事件的定义拿过来:谁在某地做了某事。
现在我们已知要完成的事是“执行令”,现在我们需要知道什么?
现在我们已知要完成的事是“执行令”,现在我们需要知道什么?
我们需要知道的是——“谁”和“某地”。
@ -267,9 +267,9 @@ on command "/op":
监听被触发后,将自动将三个元素 "event-world" "event-commandsender" "event-player" 输出到后台。
如果是一位玩家执行了 "/op" 命令,"event-world" 将会输出玩家在哪个世界执行了命令,"event-commandsender" 将会输出为 "player" 因为监听器由玩家触发 而 "event-player" 则会输出为 "玩家的名字"
如果是一位玩家执行了 "/op" 指令,"event-world" 将会输出玩家在哪个世界执行了指令,"event-commandsender" 将会输出为 "player" 因为监听器由玩家触发 而 "event-player" 则会输出为 "玩家的名字"
那么如果是后台执行了 "/op" 令呢?
那么如果是后台执行了 "/op" 令呢?
因为后台并不存于任何一个世界,也没有名字。上述三个元素只会有 "event-commandsender" 存在并正常输出为 "console" 而其余不存在元素将全部输出为 `"<none>"`
@ -489,7 +489,7 @@ WOW恭喜你看到这你就可以开始尝试着写一些插件了。
这里刚好有一个例子,不妨动动手,试一试。
- 在玩家破坏方块时 检查玩家是否有 "fundamental.break" 这个权限
- 如果有那就在让后台发送一条令 "/broadcast %player% 破坏了方块"
- 如果有那就在让后台发送一条令 "/broadcast %player% 破坏了方块"
- 如果没有那就取消这个事件 并 向这个玩家发送 "你不能破坏这个方块"
答案不唯一,仅供参考。
@ -569,8 +569,11 @@ Loop 即 循环结构,是 Skript 里非常常用的结构语句,主要用于
### 注册指令
说到现在,我们所有的代码,似乎都是基于监听器进行编写的。
我们都需要去触发监听器 才能执行我们的代码 那有没有什么办法可以主动触发我们的代码?
这时候我们就需要引入 MineCraft 插件最核心的功能 指令功能而在 Java 里你可能需要这样注册一个指令
我们都需要去触发监听器,才能执行我们的代码,那有没有什么办法可以主动触发我们的代码?
这时候我们就需要引入 Minecraft 插件最核心的功能,指令功能。
在 Java 里你可能需要这样注册一个指令。
```Java
@Override
@ -583,56 +586,75 @@ public boolean onCommand(final CommandSender sender, Command cmd, String label,
```
但是在 Skript 里你只需这样即可
```skript
command /自定义指令:
trigger:
代码段
复制代码
你并不需要理解其他是什么意思 仅仅需要记住这个格式即可
如果我想注册一个 "/我学你马Java" 的命令 你只需这样
```
你并不需要理解前者是什么意思,仅仅需要记住后者的格式即可。
如果我想注册一个 "/我学你马Java" 的指令,你只需这样:(编者注:不建议注册中文指令。)
```skript
command /我学你马Java:
trigger:
kill player
send "不许说Java坏话" to player
复制代码
通过测试 指令正常触发
通过套公式 你可以创造成千上万的指令不成问题 但是实际上我们在使用一个插件的时候
并不是只有 "/..." 结构的指令存在 更多的是 "/... ... ..." 来构成一类指令
那我们又该如何注册这样结构的指令呢? 非常简单 基本格式与上面几乎无异
```
通过测试,指令正常触发。
通过套公式,你可以创造成千上万的指令不成问题,但是实际上我们在使用一个插件的时候,并不是只有 `/...` 结构的指令存在,更多的是 `/... ... ...` 来构成一类指令。
那我们又该如何注册这样结构的指令呢? 非常简单,基本格式与上面几乎无异。
```skript
command /自定义指令 [<类型>] [<类型>] ...:
trigger:
代码段
```
本人写代码时常用的结构就是这样
有人问 "类型" 有哪些 其实我也说不全 我常用的有这几种
"text" - 字符类型 什么是字符? 就是字面意思 字词符号
"player" - 在线玩家
"offline player" - 离线玩家
"number" - 数字类型
"integer" - 整数类型
那这些类型又有什么用处呢? 它实际上是限制了你可以输入的参数
比如我创建如下指令
本人写代码时常用的结构就是这样。
```
有人问 "类型" 有哪些,其实我也说不全,我常用的有这几种。(编者注,见本页 `了解八大类`。)
- "text" - 字符类型。什么是字符? 可以按照字面意思来理解,字词符号。
- "player" - 在线玩家。
- "offline player" - 离线玩家。
- "number" - 数字类型。
- "integer" - 整数类型。
那这些类型又有什么用处呢? 它实际上是对指令的参数的一种限制。
比如我创建如下指令:
```skript
command /hello [<player>]:
trigger:
代码段
```
可以看到 第一个空格的位置 我需要的参数类型为在线玩家
那么我在执行这个指令的时候必须在这个位置上填上一个在线玩家的名称
同样的如果我把 `"[<player>]"` 换成 `"[<integer>]"` 我就需要在这个位置上填写一个整数
如果我填了 "1.2"(小数/浮点数) Skript 就会提示我 填写的参数类型错误
为什么填写参数 那肯定是在代码段内需要使用这些输进来的参数
那么我们在代码段里有该如何调用这些被我们输入进来的参数呢?
比如像是上面这个指令 它只有一个可以填参数的位置 那么在代码段内 它就是 arg-1 即 第一个参数的意思
我们只需要记住核心规则 它排在第几位 在代码段内 它就是 "arg-几"
当然我在这块的了解并不是很深入 为了不把大家带上歪路 这里引用国外 Skript 作者更为详细的指令注册的教程
---
可以看到,第一个空格的位置,我需要的参数类型为在线玩家。
```
那么我在执行这个指令的时候,必须在这个位置上填上一个在线玩家的名称。
同样的如果我把 `"[<player>]"` 换成 `"[<integer>]"`,我就需要在这个位置上填写一个整数。
如果我填了 "1.2"(小数/浮点数)Skript 就会提示我,填写的参数类型错误。
为什么填写参数?那肯定是在代码段内需要使用这些输进来的参数。
那么我们在代码段里有该如何调用这些被我们输入进来的参数呢?
比如像是上面这个指令,它只有一个可以填参数的位置。那么在代码段内,它就是 `arg-1`,即`第一个参数`的意思。
我们只需要记住核心规则,它排在第几位,在代码段内,它就是 "arg-几"。
当然我在这块的了解并不是很深入,为了不把大家带上歪路,这里引用国外 Skript 原作者更为详细的指令注册的教程。
```skript
command /<指令名称> <参数>:
  aliases:
  executable by:
@ -648,44 +670,48 @@ command /<指令名称> <参数>:
    代码段
```
命令名称(必填)
命令名称基本上是命令 您可以在命令名称中使用任何字符(空格字符除外)
当然如果在命令名称中使用空格字符 那么空格字符后的文本将成为参数
命令名称前的斜杠字符(/)是可选的(但这并不意味着您可以在执行命令时不带斜杠)
参数(可选)
可以通过将参数放在 "[]" 中来使其成为可选参数
类型参数
可以通过使用规定的格式来限制参数的类型 例如: `<type = default value>`
- 类型为 "text/string" 的参数可以接受任何字符 但 "object" 类型不能用作于参数
- 类型可以是多个 (例如 number -> numbers entity -> entities) 通过这样的方法 可以使参数接受多个值
- "= default value" 这一部分是可选的 如果命令执行者未输入参数 系统将自动使用默认值
- 同样你也可以使用这样的方式设置参数默认值 例如: `<item = %player's tool%>`
命令示例:
- 指令名称(必填)
指令名称基本上是指令,您可以在指令名称中使用任何字符(空格字符除外)。
当然如果在指令名称中使用空格字符,那么空格字符后的文本将成为参数。
指令名称前的斜杠字符(/)是可选的(但这并不意味着您可以在执行指令时不带斜杠)。
- 参数(可选)
可以通过将参数放在 "[]" 中来使其成为可选参数。
- 类型参数
可以通过使用规定的格式来限制参数的类型,例如: `<type = default value>`
- 类型为 "text/string" 的参数可以接受任何字符,但 "object" 类型不能用作于参数(编者注:原因大抵是无法输入 `object`)。
- 类型可以是多个 (例如 number -> numbers entity -> entities)。通过这样的方法,可以使参数接受多个值。
- "= default value" 这一部分是可选的,如果指令执行者未输入参数,系统将自动使用默认值。
- 同样你也可以使用这样的方式设置参数默认值,例如: `<item = %player's tool%>`
以下是一份指令示例:
`command /kill <entity types> [in [the] radius <number = 20>]:`
使用 /kill zombies /kill creepers and animals in radius 100 或 /kill monsters in the radius 6 都是可以的
但是如果没有输入数值 系统将自动使用默认值 半径 20
Aliases
子命令 命令的别名 如果需要创建多个子命令 请使用用逗号分隔
示例:(/alias1,alias2,/alias3
Executable By
指定可以使用该命令的执行者
例如console(后台) players(玩家) the console and players(后台和玩家)
Usage
使用不正确时 将发送的消息
Description
命令描述 其他插件可以获取/显示此信息
Permission
执行命令所需要的权限
Permission Message
执行者没有权限 提示信息
Cooldown
多长冷却时间后可以再次使用该命令 需要注意的是 关服时所有命令冷却时间将被重置
Cooldown Message
冷却期间 提示信息
Cooldown Bypass
无视冷却时间所需要的权限
Cooldown Storage
存储冷却时间全局变量名称
使用 `/kill zombies /kill creepers and animals in radius 100``/kill monsters in the radius 6` 都是可以的。
但是如果没有输入数值,系统将自动使用默认值,半径 20。
- Aliases
子指令,指令的别名。如果需要创建多个子指令,请使用用逗号分隔。
示例:(/alias1,alias2,/alias3
- Executable By
指定可以使用该指令的执行者。
例如console(后台), players(玩家), the console and players(后台和玩家)
- Usage
执行者用法不正确时,将发送的消息。
- Description
指令描述,其他插件可以获取/显示此信息。
- Permission
执行指令所需要的权限。
- Permission Message
执行者没有权限时的提示信息。
- Cooldown
多长冷却时间后可以再次使用该指令,需要注意的是,关服时所有指令冷却时间将被重置。
- Cooldown Message
冷却期间,提示信息。
- Cooldown Bypass
无视冷却时间所需要的权限。
- Cooldown Storage
存储冷却时间全局变量名称。
---