Skip to content

注册起始点

本文中起始点是包含了Event、Function、Command之类触发脚本具体逻辑的、作为一段脚本第一行和其相关配置的内容.

定义

起始点 : 是定义一段脚本触发起点的语句, 一般包含事件、方法、指令. 严格来说, 指令注册相当于一种特殊的事件监听, 而指令也可以视为一种可以在游戏或控制台中快捷调用的方法.

类型

Event 事件

事件是最基础的、与Bukkit事件关联紧密的触发器, 一般随着事件触发也会附带一些和当前触发事件相关的局部变量, 但是这些事实上的局部变量使用 表达(expression) 的方式使用. 比如对于事件on explode, 存在表达event-location表示「单个爆炸事件发生时的位置」, 诸如此类. 它们传递了事件相关的具体信息. 此外, 如果您学过JavaScript, 可以将这一系列表达视为 object.addEventListener(event, eventCallback, …) 中, eventCallback可以作为参数接受的Event对象.

要注册事件, 将事件以0缩进置于单行, 并在事件名称后加上冒号, 换行后的内容直到下一个起始点之前都属于一段脚本.

skript
 # 注册投掷物击中事件监听
 on projectile hit:
 		event-block is gravel:
 				broadcast "Hit on a gravel"

Function 方法/函数

方法是相对安全的一段被封装的逻辑, 可以返回一个值用于在调用后赋值给变量. 它可以接受多个参数并进行处理.

要注册方法, 以0缩进开始按照格式编写方法声明:

skript
# 如果需要返回值 (即, 如果方法计算结果需要被赋值给变量(插入字符串也算赋值变量)):
function NameOfFunction(argumentName: <Type> ...):: <Optional Return Type>:

# 或者, 如果不需要返回值(返回为void/<null>):
function NameOfFunction(argumentName: <Type>):

# 换行后的一个缩进内容开始即为方法的逻辑内容
# <Type>/<Optional Return Type>为传入参数的sk内置类型, 比如: text, player, number...
# 方法名不可重复.

并在次行以一个单位的缩进开始编写逻辑.

换行后的内容直到下一个起始点之前都属于一段脚本方法的内容.

Command 命令

命令可以视为一个可通过游戏内指令触发的方法, 因为它可以接受参数. 但是它不能替代方法, 原因是:

  • 不能直接返回值到调用的脚本语句中. 但是可以在处理逻辑的最后将结果赋值给一个全局变量.
  • 脚本内调用任何命令都必须使用make xxx execute command, 因此传参类型的选择更少.

要开始定义一个命令, 需要以0缩进开始按格式编写命令声明:

skript
 # 请通过实际测试来确认同名指令覆盖的情况.
command /commandName <...args>: # 在此之后一个缩进的内容是声明命令的属性.
		<...properties>
		trigger:
				
				# 在trigger后一个缩进的内容会被视为命令的逻辑内容.
				
 # <...args>: 可选的参数定义. 如果希望命令能够接受参数, 使用以下方式为参数添加「槽位」:
 		# command /commandName [<Type>]:  
    # 实际使用中, 预留的参数位可以不填. 对应的逻辑需要在编写脚本逻辑时候自行判断.
    # 依照定义的参数顺序, 可以在逻辑中使用expression “arg-x” (x为从1开始的参数序号)来取得传入的值.
    # 比如: command /ACommand [<text>] [<text>]: 接受两个参数, arg-1即为第一个[<text>]
    
 # <...properties>: 除了trigger这个必要属性之外的一切可选属性. 下文会介绍各个可选属性.
 # 这些属性都需要在trigger之前.

请注意

在实际运用中, 可能会出现命令传入数字然后进行计算的情况. 但是Skript解释器有可能将arg-1识别为「arg减去1」.

为了避免这种情况引发的意外, 请尝试改用以下expression中的其他形式表达参数

源代码中, 解释器接受以下表达来指代参数:

sk
[the] last arg[ument][s]
[the] arg[ument][s](-| )%number%
[the] (1st|2nd|3rd|4-90th) arg[ument][s]
[the] arg[ument][s]
[the] %type%( |-)arg[ument][( |-)%number%]
[the] arg[ument]( |-)%type%[( |-)%number%]

示例:

sk
the last argument
arg-1
argument 6
13th arguments
the argument
the player argument
arg-item type-3

摘抄自: Skript Hub Tutorial文章 by Blueyescat.

扩展

Command声明时的可选属性

可选属性的值直接用双引号包裹并写在属性名的冒号后方.

executable by: 可被执行的对象, 可选: player, command block, console   usage: 接受text, 用于向客户端返回此命令的用法.   description: 接受text, 提供给其他插件的命令描述.   permission: 接受text, 可以是权限管理插件的权限组.   permission message: 接受text, 在无权限使用指令时的错误信息. 比如「你无权使用!」   cooldown: 接受数字+时间单位, 这是命令使用的冷却时间. 比如: cooldown: 10 seconds   cooldown message: 接受text, 在尝试于冷却期内使用命令时的错误信息.   cooldown bypass: 接受text, 可以绕过冷却的权限名称, 可以是权限管理插件的权限组.   cooldown storage: 接受一个变量, 将可以通过全局变量保存玩家的冷却阶段, 并且冷却将在服务器重启/插件重载后持续生效.
  aliases: 接受直接输入, 定义这个指令的别名

待补充

options定义

一般可以将这类入口声明在文件最开头的地方. 它接受一系列预设的变量定义. 它不包含具体的逻辑.

在此定义的内容可以通过{@Name}作为变量调用.

使用 MIT 协议发行,喜欢我们的工作的话就给我们点一个 star ⭐ 吧!