Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs-java/process/maintenance/lang/lang.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

:::

脚本语言可以分为两大类:**特定语言和通用语言**
脚本语言可以分为两大类:**通用语言** 和 **特定语言**

## 通用语言

Expand Down
34 changes: 17 additions & 17 deletions docs-java/process/maintenance/lang/skript/advanced-tutorials.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,16 @@ sidebar_position: 3

## skript-reflect

学完基本的 Skript 语法后,我们会遇到一些 Skript 本身无法实现的功能,`Skript-reflect` 就是为了解决这些问题而诞生的。
学完基本的 Skript 语法后,我们会遇到一些 Skript 本身无法实现的功能,`skript-reflect` 就是为了解决这些问题而诞生的。

在基础教程中,我们已经提到过,`Skript-reflect` 允许我们以稍低一些的性能在 Skript 中反射调用 Java API,
在基础教程中,我们已经提到过,`skript-reflect` 允许我们以稍低一些的性能在 Skript 中反射调用 Java API,

它旨在将 **Java** 的功能与 **Skript** 易于使用的开发环境相结合,从而使 **Skript** 脚本编写者能够几乎访问任何 **Java** 类、方法和字段。

### 为什么使用 skript-reflect?

- 我们默认,使用 Skript 的用户通常并不是经验丰富的 **Java** 开发者。 `skript-reflect` 使这些用户能够轻松访问 **Java** API;
- 作为 Skript Addon,使用 `skript-reflect` 的脚本无需像 Java 插件那样进行编译、上传并重启,从而大大降低了开发门槛和调试速度
- 作为 Skript Addon,使用 `skript-reflect` 的脚本无需像 Java 插件那样进行编译、上传并重启,从而大大降低了开发门槛和调试难度
- 在我们开发服务器时,有时需要访问其他插件的 API 来实现某些功能, `skript-reflect` 使我们能够轻松地做到这一点;

### 如何使用
Expand All @@ -31,12 +31,12 @@ sidebar_position: 3

```skript
import:
net.ess3.api.events.TPARequestEvent # 导入java类
net.ess3.api.events.TPARequestEvent # 导入 Java 类

# 监听事件
on TPARequestEvent:
set {_ess_IUser} to event.getTarget() # 获取IUser对象
set {_player} to {_ess_IUser}.getBase() # 获取Player对象
set {_ess_IUser} to event.getTarget() # 获取 IUser 对象
set {_player} to {_ess_IUser}.getBase() # 获取 Player 对象
# 判断玩家
if {_player} is player("lilingfeng"):
set {_command_sender} to event.getRequester().getPlayer() # 获取发起 tpa 请求的玩家
Expand Down Expand Up @@ -81,8 +81,8 @@ on TPARequestEvent:
例如,`TPARequestEvent` 事件中没有 `event-player`,因此无法直接使用 `player` 关键字来获取发起 tpa 的玩家。

```skript
set {_ess_IUser} to event.getTarget() # 获取IUser对象
set {_player} to {_ess_IUser}.getBase() # 获取Player对象
set {_ess_IUser} to event.getTarget() # 获取 IUser 对象
set {_player} to {_ess_IUser}.getBase() # 获取 Player 对象
```

这行代码意为调用这个事件里的 `getTarget()` 方法,来获取 tpa 的目标,其返回一个 `IUser`。
Expand All @@ -102,15 +102,15 @@ on TPARequestEvent:

在上面这个例子中,我们利用了一些方法 `getTarget()`、`getBase()`、`getRequester()` 和 `getPlayer()`,这些方法都是 Java 类或接口中定义的,

新手会觉得很难理解这些方法是从哪里来的,如何使用的,下面我们就来学习一下如何阅读 **Java Doc**。
新手会觉得很难理解这些方法是从哪里来的,如何使用的,下面我们就来学习一下如何阅读 **Javadoc**。

假如我们想要使用 **Leaves** 服务端的假人功能,来修改假人在玩家列表中显示的名字,但是 Skript 本身并没有提供相关的事件和方法,我们该如何实现呢?

##### 学会阅读 Java Doc
##### 学会阅读 Javadoc

我们先阅读 [Leaves 的 Javadoc](https://repo.leavesmc.org/javadoc/snapshots/org/leavesmc/leaves/leaves-api/1.20.6-R0.1-SNAPSHOT),寻找相关的事件和方法。

:::info[如何阅读 Java Doc]
:::info[如何阅读 Javadoc]

![搜索事件](_images/SearchEvent.png)

Expand Down Expand Up @@ -148,7 +148,7 @@ import:
on BotJoin:
set {_bot} to event.getBot() # 获取假人
set {_bot_name} to {_bot}.getName() # 储存假人原本的名字
{_bot}.setPlayerListName("假的%{_bot_name}%") # 修改假人在tab列表里的名字
{_bot}.setPlayerListName("假的%{_bot_name}%") # 修改假人在 Tab 列表里的名字
```

`import` 语句导入了 `BotJoinEvent` 类,并将其设为别名 `BotJoin`,以便在 Skript 中使用。
Expand Down Expand Up @@ -228,7 +228,7 @@ import <fully qualified name> [as <alias>]

在 Skript 中使用枚举值时,请使用 `$` 符号来分隔枚举类和枚举值。

查询 JavaDoc[https://purpurmc.org/javadoc/org/bukkit/event/inventory/ClickType.html] 可以看到 `ClickType` 枚举类中有多个枚举值,如 `DROP`、`LEFT`、`RIGHT` 等。
查询 [Paper 的 Javadoc](https://jd.papermc.io/paper/1.21.11/org/bukkit/event/inventory/ClickType.html) 可以看到 `ClickType` 枚举类中有多个枚举值,如 `DROP`、`LEFT`、`RIGHT` 等。

举例:

Expand Down Expand Up @@ -264,9 +264,9 @@ player.giveExpLevels({_levels})
# 给玩家经验等级 -> {_levels}
```

方法可以用作 **Effects** 、 **Expressions** 和 **Conditions** 。
方法可以用作 **Effects** 、**Expressions** 和 **Conditions** 。

如果用作**Conditions**,则只要方法的返回值不是 `false`、`null` 或 `0`,这个 **Conditions** 就会通过。
如果用作 **Conditions**,则只要方法的返回值不是 `false`、`null` 或 `0`,这个 **Conditions** 就会通过。

###### 调用非公共方法

Expand All @@ -284,7 +284,7 @@ Java 中不同方法有不同的访问修饰符(如 `public`、`private`、`pr

###### 调用 Overload 的方法

通常, **skript-reflect** 可以从运行时传递的参数中推断出要调用的正确的 Overload 方法。
通常,**skript-reflect** 可以从运行时传递的参数中推断出要调用的正确的 Overload 方法。

如果需要使用某个方法的某种实现,可以在方法名称的末尾附加一个逗号分隔的列表,并用括号括起来。

Expand Down Expand Up @@ -518,4 +518,4 @@ effect put %objects% in %objects%:

这不仅能让你更好地理解 **Skript** 的工作原理,也能让你提升编程能力,并为社区做出贡献。

在下一章中,我们将介绍一些常用的 **Skript Addon** 以及如何编写自己的 **Skript Addon** [WIP]
在下一章中,我们将介绍一些常用的 **Skript Addon** 以及如何编写自己的 **Skript Addon** [WIP] <!-- TODO -->
8 changes: 4 additions & 4 deletions docs-java/process/maintenance/lang/skript/basic-tutorials.md
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,7 @@ on join:
# 广播玩家的名字和 IP
```

表达式通常用于获取一个类型的属性,例如获取玩家的名字、位置世界的时间物品的数量等。
表达式通常用于获取一个类型的属性,例如获取玩家的名字、位置世界的时间物品的数量等。

通常来说,用中文描述一个功能时出现 “的” 字时,往往意味着需要使用 Expression 来获取或修改该属性。

Expand Down Expand Up @@ -283,7 +283,7 @@ on bed enter:
spawn zombie at location of player
```

但事实上,Skript 会自动判断我们传入的类型,例如 #EffSecSpawn 中需要传入的是 `location` 类型
但事实上,Skript 会自动判断我们传入的类型,例如 `spawn` 效果需要传入的是 `location` 类型

但 Skript 会自动将 `player` 类型转换为 `location of player` 因此也可直接写成:

Expand Down Expand Up @@ -384,7 +384,7 @@ on join:

在这个板块中,请利用 [Skript Hub](https://skripthub.net/docs/) 或 [skUnity Docs](https://docs.skunity.com/syntax) 查询 Skript 语法,满足缩进等要求,尝试写一些最基础脚本吧~

当然仅仅学这些并不够,为了做到能更快更灵活的使用各类语法,在闲暇的时候,把官方 Doc 提供的所有语法的注释都认真的看一遍是快速上手 Skript 的一种好办法。
当然仅仅学这些并不够,为了做到能更快更灵活的使用各类语法,在闲暇的时候,把官方文档提供的所有语法的注释都认真的看一遍是快速上手 Skript 的一种好办法。

### 事件

Expand Down Expand Up @@ -452,7 +452,7 @@ Skript 使用与 Bukkit 相同的事件优先级机制,触发顺序为 `Lowest

选用不合适的事件可能导致逻辑混乱、性能问题或代码臃肿。因此在编写脚本之前,应充分评估并选取合适的事件。

##### 练习 1 - 夜间扣血脚本
#### 练习 1 - 夜间扣血脚本

例如,我们想写一个脚本,检测玩家在 00:00 ~ 06:00 没有在床上睡觉,那么就每秒扣玩家 1 生命值。

Expand Down
32 changes: 16 additions & 16 deletions docs-java/process/maintenance/lang/skript/skript.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@ sidebar_position: 1

本文档大量参考了其他作者的教程,特此致谢。

引用的内容主要来源于
引用的内容主要来源于

TUCAOEVER 在 MCBBS 的教程
- TUCAOEVER 在 MCBBS 的教程

法棍 在 CSKB 发布的 [sk 教程](https://kb.corona.studio/zhCN/skript/startup.html)
- 法棍 在 CSKB 发布的 [sk 教程](https://kb.corona.studio/zhCN/skript/startup.html)

:::

Expand All @@ -30,21 +30,21 @@ Skript 是一个脚本插件,取名来自 "script"。是一个面向 Bukkit

举一个简单的例子,为了实现玩家每次进入服务器就给有 "xxx" 权限的玩家 64 钻石的功能。

使用 Java 时的代码
使用 Java 实现的代码

```java
@EventHandler
public void onPlayerJoin(PlayerJoinEvent evt) {
Player player = evt.getPlayer(); // 玩家加入
ItemStack itemstack = new ItemStack(Material.DIAMOND, 64); // 定义钻石
if (player.hasPermission("xxx")) { // 权限判断
ItemStack itemstack = new ItemStack(Material.DIAMOND, 64); // 定义钻石
inventory.addItem(itemstack); // 给予钻石
player.sendMessage("欢迎你加入服务器!你获得了 64 枚钻石!");
}
}
```

使用 Skript 时的代码
使用 Skript 实现的代码

```skript
on join:
Expand All @@ -55,14 +55,14 @@ on join:

在大多数情况下,Skript 不会在意大小写、定冠词 "the",只需要符合英语语法和基本的缩进。

缩进表示代码块的层级关系,类似于 Yaml,当前一行以 `:` 结尾时,下一行需要缩进表示代码块。
缩进表示代码块的层级关系,类似于 YAML,当前一行以 `:` 结尾时,下一行需要缩进表示代码块。

另外,即使使用了错误的语法,在脚本重载时,报错也基本会提示具体错误类型。

### 拓展插件多

使用 Skript 时如果遇到 Skript 不包含的语法,可以使用其他拓展插件如
[Skbee](https://github.com/ShaneBeee/SkBee)、[Skript-reflect](https://github.com/SkriptLang/skript-reflect) 等插件拓展。
[Skbee](https://github.com/ShaneBeee/SkBee)、[skript-reflect](https://github.com/SkriptLang/skript-reflect) 等插件拓展。

### 性能略差

Expand All @@ -71,14 +71,14 @@ on join:
根据测试,我们发现:

1. 在事件监听、条件判断、Function 跳转、计算等基础功能几乎和 Java 原生持平;
2. 在 skript 中,Loop 循环、wait 等操作由于需要进行上下文变量复制开销会更大一些;
2. 在 Skript 中,Loop 循环、wait 等操作由于需要进行上下文变量复制开销会更大一些;
3. 正常使用 skript-reflect 反射等操作时,开销大概是 Java 原生调用的 1.5 ~ 5 倍。

另外,Skript 的反射使用的是 MethedHandle,性能已经远远优于传统的 Java 反射,

因此,Skript 的性能瓶颈主要在编写者的脚本逻辑上,而不是 Skript 本身。

## 下载及安装
## 下载及使用

### 本体

Expand All @@ -87,10 +87,10 @@ on join:
最新版:
`https://github.com/SkriptLang/Skript/releases`

1.8.8-1.12.2 2.2dev37c:
2.2-dev37c(适用 1.8.8-1.12.2):
`https://github.com/SkriptLang/Skript/releases/download/dev37c/Skript.jar`

1.7.10 2.1.2
2.1.2(适用 1.7.10):
`https://dev.bukkit.org/projects/skript/files/779542/download`

### 拓展插件
Expand All @@ -104,11 +104,11 @@ Skript 拓展插件常见的有:

主要用于扩展 Skript 的语法和功能,提供更多的 API 支持,方便脚本编写者实现更多功能。

另外,由于拓展性能一般会优于 Skript-reflect,因此推荐优先使用拓展插件实现功能。
另外,由于拓展性能一般会优于 skript-reflect,因此推荐优先使用拓展插件实现功能。

下载链接:

[skunity](https://docs.skunity.com/addons)
[skUnity](https://docs.skunity.com/addons)

### Skript 脚本

Expand All @@ -118,7 +118,7 @@ Skript 脚本文件后缀为 `.sk`,将脚本文件放入 `/plugins/Skript/scri

[SpigotMC](https://www.spigotmc.org/resources/categories/skript.25/)

[skunity](https://forums.skunity.com/resources/)
[skUnity](https://forums.skunity.com/resources/)

### 片段

Expand All @@ -128,7 +128,7 @@ Skript 脚本文件后缀为 `.sk`,将脚本文件放入 `/plugins/Skript/scri

下载链接:

[Skunity 片段合集](https://docs.skunity.com/snippets)
[skUnity 片段合集](https://docs.skunity.com/snippets)

[ShaneBeee 片段合集](https://github.com/ShaneBeee/SkriptSnippets/tree/master/snippets)

Expand Down
2 changes: 1 addition & 1 deletion docs-java/process/plugin/game/germengine.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,6 @@ sidebar_position: 5

萌芽控制台:http://admin.germmc.com

萌芽引擎 JavaDoc:http://javadoc.germmc.com 1.12.2-Bukkit:http://bukkitapi.germmc.com
萌芽引擎 Javadoc:http://javadoc.germmc.com 1.12.2-Bukkit:http://bukkitapi.germmc.com

旧版 Wiki① (已过时):http://wiki.germmc.com 旧版 Wiki② (已过时):http://engine.germmc.com