修复了错误的更改

This commit is contained in:
serverbread 2024-08-11 16:27:45 +08:00
parent 1a779acbbe
commit 993c5df893
No known key found for this signature in database
GPG Key ID: 3B7E70C8E44E0F91

View File

@ -167,249 +167,6 @@ command /example:
System.out.println("test")
```
在大多数情况下,由`import`块创建的表达式不会相互冲突,也不会与其他 **Skript** 表达式冲突。如果这个类的名称与另一个表达式(如 `Player``String` )冲突,则必须在别名下导入该类。
```sk
import:
java.lang.String as JavaString
command /example:
```sk
on TPARequestEvent:
```
这行代码意为注册监听`TPARequestEvent`事件,与普通 sk 里注册事件的语法没啥区别。
```sk
set {_ess_IUser} to event.getTarget() # 获取IUser对象
set {_player} to {_ess_IUser}.getBase() # 获取Player对象
```
这行代码意为调用这个事件里的`getTarget()`方法,来获取 tpa 的目标,其返回一个`IUser`。
这个`IUser`是 EssentialsX 的一个**接口**`User`类**实现**了它,可以在[essentialsx 的 javadoc](https://jd-v2.essentialsx.net/net/ess3/api/iuser)里查看。
```sk
if {_player} is player("lilingfeng"):
send "&cliliangfeng是我的不准tpa到她那里🥵"
cancel event
```
这几行和普通的 sk 语法没什么区别,作用是判断然后取消事件。
### 使用方法
如果你需要调用其他的插件或是一些 **skript** 里没有而 [Bukkit API](https://bukkit.windit.net/javadoc/) 有的 API那么会很棘手。
**skript-reflect** 很好的解决了这一点。
比如,你正在使用 **Leaves** 服务端想要用sk来改变Leaves中假人在玩家列表中显示的名字那么可以遵循以下步骤
#### 查询 Javadoc
修改假人的名字这一行为应该在假人加入服务器时进行,所以我们得监听这一事件。
我们需要找到 bot 事件到底是哪个,查询[Leaves 的 Javadoc](https://repo.leavesmc.org/javadoc/snapshots/org/leavesmc/leaves/leaves-api/1.20.6-R0.1-SNAPSHOT)
![搜索事件](_images/SearchEvent.png)
这里查询找到了`org.leavesmc.leaves.event.bot.BotEvent`事件。
看命名就知道应该会有更详细的**子类**来**继承**它,点进去看看,可以看到:
![查找子类](_images/QuerySubclasses.png)
通过看类名可以知道,`BotJoinEvent`就是我们要的事件。
看介绍发现这个事件会“Called when a fakeplayer joins a server”
接下来让我们看看这个类有哪些**方法**。
![查找方法](_images/SearchMethods.png)
可以看到,最主要的是一个`getBot()`方法,在让我们看看这个方法会返回什么。
点击超链接,可以看到这个方法会返回一个`Bot`对象。
这个`Bot`接口是继承自`Player`的,也就是说,`Player`有的方法,`Bot`都有。
再次查询 [Bukkit API](https://bukkit.windit.net/javadoc/org/bukkit/entity/Player.html) 可以找到`Player`类有的方法,如`Player#setPlayerListName()`,这正是我们需要的方法。
#### 编写程序
开始编写程序
```sk
import:
org.leavesmc.leaves.event.bot.BotJoinEvent #导入类
# 监听事件
on BotJoinEvent:
set {_bot} to event.getBot() # 获取假人
set {_bot_name} to {_bot}.getName() # 储存假人原本的名字
{_bot}.setPlayerListName("假的%{_bot_name}%") # 修改假人在tab列表里的名字
```
这一过程也可适用于其他插件,比如[zimzaza4大蛇](https://github.com/zimzaza4)的 [Skript-Floodgate-Api](https://github.com/zimzaza4/Skript-Floodgate-Api)
就是利用 **skript-reflect** 来调用 [Floodagate API](https://wiki.geysermc.org/floodgate/api/) 的。
可以查看下面的教程来详细学习 **skript-reflect** 的基础功能(对,下面这一大坨只是基础)
### skript-reflect 基础教程
:::danger
此段部分或全部抄自 **skript-reflect** [官方文档](https://tpgamesnl.gitbook.io/skript-reflect/basics)
:::
#### 导入 Java 类
##### _在解析时导入类推荐_
在大多数情况下,无需运行脚本即可知道所需类的确切限定名称。如果是这种情况,您应该使用 **skript-reflect** 的`import`块:
:::info
为避免冲突,`import`块创建的表达式仅对导入它们的脚本可用。您必须在使用它们的每个脚本中导入 Java 类。
:::
```sk
import:
java.lang.System
command /example:
trigger:
message "%System%" # java.lang.System
System.out.println("test")
```
```sk
import:
java.lang.String as JavaString
command /example:
trigger:
message JavaString.format("Hello %%s", sender)
```
:::info
别名必须是有效的 Java 标识符!
```sk
on TPARequestEvent:
```
这行代码意为注册监听`TPARequestEvent`事件,与普通 sk 里注册事件的语法没啥区别。
```sk
set {_ess_IUser} to event.getTarget() # 获取IUser对象
set {_player} to {_ess_IUser}.getBase() # 获取Player对象
```
这行代码意为调用这个事件里的`getTarget()`方法,来获取 tpa 的目标,其返回一个`IUser`。
这个`IUser`是 EssentialsX 的一个**接口**`User`类**实现**了它,可以在[essentialsx 的 javadoc](https://jd-v2.essentialsx.net/net/ess3/api/iuser)里查看。
```sk
if {_player} is player("lilingfeng"):
send "&cliliangfeng是我的不准tpa到她那里🥵"
cancel event
```
这几行和普通的 sk 语法没什么区别,作用是判断然后取消事件。
### 使用方法
如果你需要调用其他的插件或是一些 **skript** 里没有而 [Bukkit API](https://bukkit.windit.net/javadoc/) 有的 API那么会很棘手。
**skript-reflect** 很好的解决了这一点。
比如,你正在使用 **Leaves** 服务端想要用sk来改变Leaves中假人在玩家列表中显示的名字那么可以遵循以下步骤
#### 查询 Javadoc
修改假人的名字这一行为应该在假人加入服务器时进行,所以我们得监听这一事件。
我们需要找到 bot 事件到底是哪个,查询[Leaves 的 Javadoc](https://repo.leavesmc.org/javadoc/snapshots/org/leavesmc/leaves/leaves-api/1.20.6-R0.1-SNAPSHOT)
![搜索事件](_images/SearchEvent.png)
这里查询找到了`org.leavesmc.leaves.event.bot.BotEvent`事件。
看命名就知道应该会有更详细的**子类**来**继承**它,点进去看看,可以看到:
![查找子类](_images/QuerySubclasses.png)
通过看类名可以知道,`BotJoinEvent`就是我们要的事件。
看介绍发现这个事件会“Called when a fakeplayer joins a server”
接下来让我们看看这个类有哪些**方法**。
![查找方法](_images/SearchMethods.png)
可以看到,最主要的是一个`getBot()`方法,在让我们看看这个方法会返回什么。
点击超链接,可以看到这个方法会返回一个`Bot`对象。
这个`Bot`接口是继承自`Player`的,也就是说,`Player`有的方法,`Bot`都有。
再次查询 [Bukkit API](https://bukkit.windit.net/javadoc/org/bukkit/entity/Player.html) 可以找到`Player`类有的方法,如`Player#setPlayerListName()`,这正是我们需要的方法。
#### 编写程序
开始编写程序
```sk
import:
org.leavesmc.leaves.event.bot.BotJoinEvent #导入类
# 监听事件
on BotJoinEvent:
set {_bot} to event.getBot() # 获取假人
set {_bot_name} to {_bot}.getName() # 储存假人原本的名字
{_bot}.setPlayerListName("假的%{_bot_name}%") # 修改假人在tab列表里的名字
```
这一过程也可适用于其他插件,比如[zimzaza4大蛇](https://github.com/zimzaza4)的 [Skript-Floodgate-Api](https://github.com/zimzaza4/Skript-Floodgate-Api)
就是利用 **skript-reflect** 来调用 [Floodagate API](https://wiki.geysermc.org/floodgate/api/) 的。
可以查看下面的教程来详细学习 **skript-reflect** 的基础功能(对,下面这一大坨只是基础)
### skript-reflect 基础教程
:::danger
此段部分或全部抄自 **skript-reflect** [官方文档](https://tpgamesnl.gitbook.io/skript-reflect/basics)
:::
#### 导入 Java 类
##### _在解析时导入类推荐_
在大多数情况下,无需运行脚本即可知道所需类的确切限定名称。如果是这种情况,您应该使用 **skript-reflect** 的`import`块:
:::info
为避免冲突,`import`块创建的表达式仅对导入它们的脚本可用。您必须在使用它们的每个脚本中导入 Java 类。
:::
```sk
import:
java.lang.System
command /example:
trigger:
message "%System%" # java.lang.System
System.out.println("test")
```
```sk
import:
java.lang.String as JavaString