From 396e206f4ac3815f6e45d38a0c611779f44bfa87 Mon Sep 17 00:00:00 2001 From: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com> Date: Sun, 21 Dec 2025 04:04:52 -0500 Subject: [PATCH 1/9] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=8B=BC=E5=86=99?= =?UTF-8?q?=EF=BC=8C=E5=A4=A7=E5=B0=8F=E5=86=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../maintenance/lang/skript/advanced-tutorials.md | 4 ++-- .../process/maintenance/lang/skript/skript.md | 14 +++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/docs-java/process/maintenance/lang/skript/advanced-tutorials.md b/docs-java/process/maintenance/lang/skript/advanced-tutorials.md index 0cb6ef9f..0bc2c6c4 100644 --- a/docs-java/process/maintenance/lang/skript/advanced-tutorials.md +++ b/docs-java/process/maintenance/lang/skript/advanced-tutorials.md @@ -9,9 +9,9 @@ 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** 类、方法和字段。 diff --git a/docs-java/process/maintenance/lang/skript/skript.md b/docs-java/process/maintenance/lang/skript/skript.md index d7ed62c4..5b067dd8 100644 --- a/docs-java/process/maintenance/lang/skript/skript.md +++ b/docs-java/process/maintenance/lang/skript/skript.md @@ -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) 等插件拓展。 ### 性能略差 @@ -71,7 +71,7 @@ on join: 根据测试,我们发现: 1. 在事件监听、条件判断、Function 跳转、计算等基础功能几乎和 Java 原生持平; -2. 在 skript 中,Loop 循环、wait 等操作由于需要进行上下文变量复制开销会更大一些; +2. 在 Skript 中,Loop 循环、wait 等操作由于需要进行上下文变量复制开销会更大一些; 3. 正常使用 skript-reflect 反射等操作时,开销大概是 Java 原生调用的 1.5 ~ 5 倍。 另外,Skript 的反射使用的是 MethedHandle,性能已经远远优于传统的 Java 反射, @@ -104,11 +104,11 @@ Skript 拓展插件常见的有: 主要用于扩展 Skript 的语法和功能,提供更多的 API 支持,方便脚本编写者实现更多功能。 -另外,由于拓展性能一般会优于 Skript-reflect,因此推荐优先使用拓展插件实现功能。 +另外,由于拓展性能一般会优于 skript-reflect,因此推荐优先使用拓展插件实现功能。 下载链接: -[skunity](https://docs.skunity.com/addons) +[skUnity](https://docs.skunity.com/addons) ### Skript 脚本 @@ -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/) ### 片段 @@ -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) From 5fb2356c4d5eca41765fb355dbc7d515e3484f16 Mon Sep 17 00:00:00 2001 From: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com> Date: Sun, 21 Dec 2025 04:05:32 -0500 Subject: [PATCH 2/9] =?UTF-8?q?=E6=94=B9=E6=AD=A3=20Javadoc=20=E7=9A=84?= =?UTF-8?q?=E6=8B=BC=E5=86=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Javadoc 为一个专有名词 --- .../process/maintenance/lang/skript/advanced-tutorials.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs-java/process/maintenance/lang/skript/advanced-tutorials.md b/docs-java/process/maintenance/lang/skript/advanced-tutorials.md index 0bc2c6c4..f64205ea 100644 --- a/docs-java/process/maintenance/lang/skript/advanced-tutorials.md +++ b/docs-java/process/maintenance/lang/skript/advanced-tutorials.md @@ -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) From 11690ed9d0e18c1669b822cd242406690cc6f477 Mon Sep 17 00:00:00 2001 From: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com> Date: Sun, 21 Dec 2025 04:08:15 -0500 Subject: [PATCH 3/9] =?UTF-8?q?=E4=B8=80=E4=BA=9B=E4=BF=AE=E8=BE=9E?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=92=8C=E6=9D=82=E9=A1=B9=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 更符合阅读逻辑和体验 --- docs-java/process/maintenance/lang/lang.md | 2 +- .../lang/skript/advanced-tutorials.md | 2 +- .../maintenance/lang/skript/basic-tutorials.md | 6 +++--- .../process/maintenance/lang/skript/skript.md | 16 ++++++++-------- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/docs-java/process/maintenance/lang/lang.md b/docs-java/process/maintenance/lang/lang.md index b939f6e1..9a0673d3 100644 --- a/docs-java/process/maintenance/lang/lang.md +++ b/docs-java/process/maintenance/lang/lang.md @@ -12,7 +12,7 @@ ::: -脚本语言可以分为两大类:**特定语言和通用语言** +脚本语言可以分为两大类:**通用语言** 和 **特定语言** ## 通用语言 diff --git a/docs-java/process/maintenance/lang/skript/advanced-tutorials.md b/docs-java/process/maintenance/lang/skript/advanced-tutorials.md index f64205ea..4c4c756c 100644 --- a/docs-java/process/maintenance/lang/skript/advanced-tutorials.md +++ b/docs-java/process/maintenance/lang/skript/advanced-tutorials.md @@ -18,7 +18,7 @@ sidebar_position: 3 ### 为什么使用 skript-reflect? - 我们默认,使用 Skript 的用户通常并不是经验丰富的 **Java** 开发者。 `skript-reflect` 使这些用户能够轻松访问 **Java** API; -- 作为 Skript Addon,使用 `skript-reflect` 的脚本无需像 Java 插件那样进行编译、上传并重启,从而大大降低了开发门槛和调试速度; +- 作为 Skript Addon,使用 `skript-reflect` 的脚本无需像 Java 插件那样进行编译、上传并重启,从而大大降低了开发门槛和调试难度; - 在我们开发服务器时,有时需要访问其他插件的 API 来实现某些功能, `skript-reflect` 使我们能够轻松地做到这一点; ### 如何使用 diff --git a/docs-java/process/maintenance/lang/skript/basic-tutorials.md b/docs-java/process/maintenance/lang/skript/basic-tutorials.md index c53a4dde..59eee510 100644 --- a/docs-java/process/maintenance/lang/skript/basic-tutorials.md +++ b/docs-java/process/maintenance/lang/skript/basic-tutorials.md @@ -228,7 +228,7 @@ on join: # 广播玩家的名字和 IP ``` -表达式通常用于获取一个类型的属性,例如获取玩家的名字、位置,世界的时间,物品的数量等。 +表达式通常用于获取一个类型的属性,例如获取玩家的名字、位置、世界的时间、物品的数量等。 通常来说,用中文描述一个功能时出现 “的” 字时,往往意味着需要使用 Expression 来获取或修改该属性。 @@ -283,7 +283,7 @@ on bed enter: spawn zombie at location of player ``` -但事实上,Skript 会自动判断我们传入的类型,例如 #EffSecSpawn 中需要传入的是 `location` 类型 +但事实上,Skript 会自动判断我们传入的类型,例如 `spawn` 效果需要传入的是 `location` 类型 但 Skript 会自动将 `player` 类型转换为 `location of player` 因此也可直接写成: @@ -384,7 +384,7 @@ on join: 在这个板块中,请利用 [Skript Hub](https://skripthub.net/docs/) 或 [skUnity Docs](https://docs.skunity.com/syntax) 查询 Skript 语法,满足缩进等要求,尝试写一些最基础脚本吧~ -当然仅仅学这些并不够,为了做到能更快更灵活的使用各类语法,在闲暇的时候,把官方 Doc 提供的所有语法的注释都认真的看一遍是快速上手 Skript 的一种好办法。 +当然仅仅学这些并不够,为了做到能更快更灵活的使用各类语法,在闲暇的时候,把官方文档提供的所有语法的注释都认真的看一遍是快速上手 Skript 的一种好办法。 ### 事件 diff --git a/docs-java/process/maintenance/lang/skript/skript.md b/docs-java/process/maintenance/lang/skript/skript.md index 5b067dd8..961cd380 100644 --- a/docs-java/process/maintenance/lang/skript/skript.md +++ b/docs-java/process/maintenance/lang/skript/skript.md @@ -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) ::: @@ -30,7 +30,7 @@ Skript 是一个脚本插件,取名来自 "script"。是一个面向 Bukkit 举一个简单的例子,为了实现玩家每次进入服务器就给有 "xxx" 权限的玩家 64 钻石的功能。 -使用 Java 时的代码: +使用 Java 实现的代码: ```java @EventHandler @@ -44,7 +44,7 @@ public void onPlayerJoin(PlayerJoinEvent evt) { } ``` -使用 Skript 时的代码: +使用 Skript 实现的代码: ```skript on join: @@ -78,7 +78,7 @@ on join: 因此,Skript 的性能瓶颈主要在编写者的脚本逻辑上,而不是 Skript 本身。 -## 下载及安装 +## 下载及使用 ### 本体 @@ -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` ### 拓展插件 From 2f5fe638d3d89f966e92908045b7588f2a7e3eb2 Mon Sep 17 00:00:00 2001 From: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com> Date: Sun, 21 Dec 2025 04:08:38 -0500 Subject: [PATCH 4/9] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BE=8B=E5=AD=90?= =?UTF-8?q?=E5=86=85=E7=9A=84=20Java=20=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs-java/process/maintenance/lang/skript/skript.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs-java/process/maintenance/lang/skript/skript.md b/docs-java/process/maintenance/lang/skript/skript.md index 961cd380..1a3c9fa1 100644 --- a/docs-java/process/maintenance/lang/skript/skript.md +++ b/docs-java/process/maintenance/lang/skript/skript.md @@ -36,8 +36,8 @@ Skript 是一个脚本插件,取名来自 "script"。是一个面向 Bukkit @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 枚钻石!"); } From 1607a634634c1f5a7eb9c1a04502e8a922986488 Mon Sep 17 00:00:00 2001 From: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com> Date: Sun, 21 Dec 2025 04:09:16 -0500 Subject: [PATCH 5/9] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=A0=87=E9=A2=98?= =?UTF-8?q?=E5=B1=82=E7=BA=A7=EF=BC=8C=E5=92=8C=E7=BB=83=E4=B9=A0=202=20?= =?UTF-8?q?=E5=B9=B6=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs-java/process/maintenance/lang/skript/basic-tutorials.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs-java/process/maintenance/lang/skript/basic-tutorials.md b/docs-java/process/maintenance/lang/skript/basic-tutorials.md index 59eee510..138ac3f8 100644 --- a/docs-java/process/maintenance/lang/skript/basic-tutorials.md +++ b/docs-java/process/maintenance/lang/skript/basic-tutorials.md @@ -452,7 +452,7 @@ Skript 使用与 Bukkit 相同的事件优先级机制,触发顺序为 `Lowest 选用不合适的事件可能导致逻辑混乱、性能问题或代码臃肿。因此在编写脚本之前,应充分评估并选取合适的事件。 -##### 练习 1 - 夜间扣血脚本 +#### 练习 1 - 夜间扣血脚本 例如,我们想写一个脚本,检测玩家在 00:00 ~ 06:00 没有在床上睡觉,那么就每秒扣玩家 1 生命值。 From 162c2e3b96b1abc9e43449047b9ec6f84caf1bba Mon Sep 17 00:00:00 2001 From: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com> Date: Sun, 21 Dec 2025 04:16:26 -0500 Subject: [PATCH 6/9] =?UTF-8?q?=E5=B0=86=20Skript=20=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E5=9D=97=E7=9A=84=E8=AF=AD=E8=A8=80=E6=94=B9=E4=B8=BA=20Python?= =?UTF-8?q?=20=E4=BB=A5=E6=94=AF=E6=8C=81=E8=AF=AD=E6=B3=95=E9=AB=98?= =?UTF-8?q?=E4=BA=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Prism 没支持 Skript 代码的语法高亮。另外 Skript 的代码语法很接近 Python 的,就改成 Python 了 除非以后我们要自己实现 Skript,Kether 等脚本语言的语法高亮 --- .../lang/skript/advanced-tutorials.md | 70 ++++++++-------- .../lang/skript/basic-tutorials.md | 84 +++++++++---------- .../process/maintenance/lang/skript/skript.md | 2 +- 3 files changed, 78 insertions(+), 78 deletions(-) diff --git a/docs-java/process/maintenance/lang/skript/advanced-tutorials.md b/docs-java/process/maintenance/lang/skript/advanced-tutorials.md index 4c4c756c..618e558c 100644 --- a/docs-java/process/maintenance/lang/skript/advanced-tutorials.md +++ b/docs-java/process/maintenance/lang/skript/advanced-tutorials.md @@ -29,7 +29,7 @@ sidebar_position: 3 假如我们想要阻止某个玩家被其他玩家 tpa 到,Skript 本身并没有提供监听 **EssentialsX** tpa 请求的事件, -```skript +```python import: net.ess3.api.events.TPARequestEvent # 导入java类 @@ -63,7 +63,7 @@ on TPARequestEvent: 这样的类我们可以在导入包后,直接在 Skript 中监听,导入包的语法如下: -```skript +```python import: net.ess3.api.events.TPARequestEvent @@ -80,7 +80,7 @@ on TPARequestEvent: 例如,`TPARequestEvent` 事件中没有 `event-player`,因此无法直接使用 `player` 关键字来获取发起 tpa 的玩家。 -```skript +```python set {_ess_IUser} to event.getTarget() # 获取IUser对象 set {_player} to {_ess_IUser}.getBase() # 获取Player对象 ``` @@ -89,7 +89,7 @@ on TPARequestEvent: 这个 `IUser` 是 EssentialsX 的一个 **接口**,`User` 类 **实现** 了它,可以在 [EssentialsX 的 Javadoc](https://jd-v2.essentialsx.net/net/ess3/api/iuser) 里查看。 -```skript +```python if {_player} is player("lilingfeng"): set {_command_sender} to event.getRequester().getPlayer() # 获取发送者 send "&clilingfeng是我的不准tpa到她那里🥵" to {_command_sender} @@ -140,7 +140,7 @@ on TPARequestEvent: ##### 编写脚本 -```skript +```python import: org.leavesmc.leaves.event.bot.BotJoinEvent as BotJoin #导入类 @@ -179,13 +179,13 @@ on BotJoin: 语法: -```skript +```python [the] [java] class %text% ``` 示例: -```skript +```python on script load: set {Player} to the class "org.bukkit.entity.Player" message "%{Player}%" # org.bukkit.entity.Player @@ -195,14 +195,14 @@ on script load: 语法: -```skript +```python [the] [java] class[es] of %objects% %objects%'[s] [java] class[es] ``` 示例: -```skript +```python command /example: executable by: players trigger: @@ -214,7 +214,7 @@ command /example: 由于导入块在 effect 命令中不可用,因此你可以使用 import effect (仅在 effect 命令中可用): -```skript +```python import [as ] ``` @@ -232,7 +232,7 @@ import [as ] 举例: -```skript +```python import: org.bukkit.event.inventory.ClickType$DROP @@ -249,13 +249,13 @@ on inventory click: 语法: -```skript +```python %object%.(%objects%) ``` 示例: -```skript +```python event-block.breakNaturally() # 让方块被破坏并自然掉落 (last spawned creeper).setPowered(true) @@ -278,7 +278,7 @@ Java 中不同方法有不同的访问修饰符(如 `public`、`private`、`pr 语法: -```skript +```python {_arraylist}.[ArrayList]fastRemove(1) ``` @@ -290,7 +290,7 @@ Java 中不同方法有不同的访问修饰符(如 `public`、`private`、`pr 语法: -```skript +```python System.out.println[Object]({_something}) Math.max[int, int](0, {_value}) @@ -300,7 +300,7 @@ Math.max[int, int](0, {_value}) 语法: -```skript +```python %object%. ``` @@ -310,7 +310,7 @@ Math.max[int, int](0, {_value}) 示例: -```skript +```python {_hashmap}.[HashMap]modCount ``` @@ -318,13 +318,13 @@ Math.max[int, int](0, {_value}) 语法: -```skript +```python [a] new %javatype%(%objects%) ``` 示例: -```skript +```python new Location(player's world, 0, 0, 0) ``` @@ -338,7 +338,7 @@ new Location(player's world, 0, 0, 0) 则应采取适当的预防措施。例如,如果要同时侦听 `org.bukkit.event.entity.ProjectileLaunchEvent` 和 `org.bukkit.event.entity.ProjectileHitEvent`: -```skript +```python import: org.bukkit.event.entity.ProjectileLaunchEvent org.bukkit.event.entity.ProjectileHitEvent @@ -357,7 +357,7 @@ on ProjectileLaunchEvent and ProjectileHitEvent: 示例: -```skript +```python import: org.bukkit.event.block.BlockBreakEvent @@ -377,7 +377,7 @@ on all BlockBreakEvent: ##### 创建数组 -```skript +```python new %javatype%[%integer%] ``` @@ -385,7 +385,7 @@ new %javatype%[%integer%] ##### 通过索引获取数组的值 -```skript +```python %array%[%integer%] ``` @@ -395,7 +395,7 @@ new %javatype%[%integer%] ##### Collect -```skript +```python [%objects%] [%objects% as %javatype%] ``` @@ -404,7 +404,7 @@ new %javatype%[%integer%] ##### Spread -```skript +```python ...%object% ``` @@ -412,13 +412,13 @@ new %javatype%[%integer%] 实例: -```skript +```python set {_list::*} to ...{_array} ``` ##### Null -```skript +```python null ``` @@ -426,7 +426,7 @@ null ##### Bits -```skript +```python [the] (bit %number%|bit(s| range) [from] %number%( to |[ ]-[ ])%number%) of %numbers% %numbers%'[s] (bit %number%|1¦bit(s| range) [from] %number%( to |[ ]-[ ])%number%) ``` @@ -435,7 +435,7 @@ null ##### Raw Expression -```skript +```python [the] raw %objects% ``` @@ -447,7 +447,7 @@ null 这将更改该参数的输入值。这可用于将数据存储在调用触发器的变量中。 -```skript +```python import: ch.njol.skript.lang.Variable @@ -463,7 +463,7 @@ effect put %objects% in %objects%: ##### 成员 -```skript +```python [the] (fields|methods|constructors) of %objects% %objects%'[s] (fields|methods|constructors) ``` @@ -474,7 +474,7 @@ effect put %objects% in %objects%: ##### 成员的名字 -```skript +```python [the] (field|method) names of %objects% %objects%'[s] (field|method) names ``` @@ -483,7 +483,7 @@ effect put %objects% in %objects%: ##### 判断对象是否是某个类的实例 -```skript +```python %objects% (is|are) [a[n]] instance[s] of %javatypes% %objects% (is not|isn't|are not|aren't) [a[n]] instance[s] of %javatypes% ``` @@ -492,7 +492,7 @@ effect put %objects% in %objects%: ##### 类引用 -```skript +```python %javatype%.class ``` @@ -500,7 +500,7 @@ effect put %objects% in %objects%: ##### 插件实例 -```skript +```python [(an|the)] instance of [the] plugin %javatype/string% ``` diff --git a/docs-java/process/maintenance/lang/skript/basic-tutorials.md b/docs-java/process/maintenance/lang/skript/basic-tutorials.md index 138ac3f8..764eb776 100644 --- a/docs-java/process/maintenance/lang/skript/basic-tutorials.md +++ b/docs-java/process/maintenance/lang/skript/basic-tutorials.md @@ -78,7 +78,7 @@ Skript 仍然是编程语言,所有的编程语言都必须在拥有理论基 我们看一个 "on click" 相关示例: -```skript +```python on right click on dirt: send "%event-world%" to console send "%event-player%" to console @@ -129,7 +129,7 @@ Events、Conditions、Effects、Expressions、Types、Functions、Sections、Str 举例: -```skript +```python on death of player: # 玩家死亡时 on click: @@ -148,7 +148,7 @@ on click: 举例: -```skript +```python on join: if player has permission "admin": # 管理员权限时执行 @@ -162,7 +162,7 @@ on join: 另外, SK 也支持省略 if 的写法,让 Conditions 单独成为一行代码: -```skript +```python on join: player has permission "admin" send "管理你好!" to player @@ -180,7 +180,7 @@ on join: 举例: -```skript +```python on player jump: # 玩家跳跃时 teleport player to world "nether" @@ -193,14 +193,14 @@ Effect 往往是脚本中最常用的语法,因为它们直接影响游戏世 因此,我们再来看一个更复杂的 Effect 示例,发送 Title 信息: -```skript +```python send title %text% [with subtitle %text%] [to %players%] [for %time span%] [with fade[(-| )]in %time span%] [(and|with) fade[(-| )]out %time span%] send subtitle %text% [to %players%] [for %time span%] [with fade[(-| )]in %time span%] [(and|with) fade[(-| )]out %time span%] ``` 我们可以大致上认识到 `EffSendTitle` 的基本用法,这里面面有很多可选项和类型,我们可以根据需要选择使用。 -```skript +```python on join: wait 1 second # Effect -> wait %timespan% @@ -218,7 +218,7 @@ on join: 在 SK 中一般配合条件判断,用于 **在脚本中传递和处理数据**。 -```skript +```python on join: # 玩家加入时 set {playerIP::%player%} to ip of player @@ -240,7 +240,7 @@ on join: 类型定义了变量、参数和返回值的数据种类。在 Skript 中,虽然不像某些编程语言那样严格区分类型,但理解不同类型的值(如字符串、数字、列表等)对于编写正确的脚本至关重要。 -```skript +```python on bed enter: # 玩家进入床时 if world of player is world "world": @@ -259,7 +259,7 @@ on bed enter: 通过查阅 [官方文档](https://docs.skriptlang.org/docs.html?search=#EffSecSpawn),我们知道生成的语法为: -```skript +```python (spawn|summon) %entity types% [%directions% %locations%] ``` @@ -279,7 +279,7 @@ on bed enter: 综合以上信息,我们得到完整代码: -```skript +```python spawn zombie at location of player ``` @@ -287,7 +287,7 @@ spawn zombie at location of player 但 Skript 会自动将 `player` 类型转换为 `location of player` 因此也可直接写成: -```skript +```python spawn zombie at player ``` @@ -309,7 +309,7 @@ spawn zombie at player 举例: -```skript +```python on player join: set {_location} to makePlayerFly(event-player) # 调用 makePlayerFly 函数,并传入 event-player 作为参数让玩家飞起来 @@ -335,7 +335,7 @@ function makePlayerFly(p: player) :: location: 举例: -```skript +```python on tool break: # 当工具用坏时 if player is op: @@ -361,7 +361,7 @@ on tool break: 举例: -```skript +```python options: servername: myserver # option 中定义 {@xxx} 的值 @@ -419,7 +419,7 @@ on join: 示例 1:禁止没有权限的玩家通过命令执行传送: -```skript +```python on teleport with priority lowest: teleport cause is command # 判断 tp 原因是否为指令 tp @@ -432,7 +432,7 @@ on teleport with priority lowest: 示例 2:记录玩家受伤情况: -```skript +```python on damage of player with priority monitor: # 监控玩家受伤事件 log "玩家 %player% 受到了伤害" @@ -458,7 +458,7 @@ Skript 使用与 Bukkit 相同的事件优先级机制,触发顺序为 `Lowest 查询 [Skript Hub](https://skripthub.net/docs/) 或 [skUnity Docs](https://docs.skunity.com/syntax),根据直觉选择,与时间和睡觉有关系的事件可能有这些: -```skript +```python every 10 seconds: at 00:00: on bed enter: @@ -470,7 +470,7 @@ on bed leave:
脚本 1 - Every %timespan% + loop -```skript +```python every 1 second: loop all players: if loop-player is not sleeping: @@ -489,7 +489,7 @@ every 1 second:
脚本 2 - Event + At time -```skript +```python on bed leave: set {%player%::sleep} to false on bed enter: @@ -512,7 +512,7 @@ at 00:00 in world "world":
脚本 3 - Event + While -```skript +```python at 00:00 in world "world": while time in world is between 00:00 and 6:00: # 注意:若时间段跨越午夜(如 23:00-02:00),请不要直接使用 between,而应拆分为两个条件判断 loop all players: @@ -530,7 +530,7 @@ at 00:00 in world "world":
脚本 4 - Skbee Async Task -```skript +```python at 00:00 in world "world": async run 1 tick later repeating every 1 second: if time in world is not between 00:00 and 06:00: @@ -558,7 +558,7 @@ at 00:00 in world "world": 不刷新怪物的事件建议去掉,直接设置 **难度为和平**。 -```skript +```python # 不推荐,即使这是有用的! on spawn of zombie: cancel event @@ -588,12 +588,12 @@ on place with priority lowest: 在这里,以下两种写法是等价的。 -```skript +```python if player does not have permission "lobby.admin": cancel event ``` -```skript +```python if player has permission "lobby.admin": # 有权限时的处理 else: @@ -602,7 +602,7 @@ else: 如果只需要判断是或不是,可以灵活选用更简洁的方法,简化为: -```skript +```python on place: player does not have permission "lobby.admin" cancel event @@ -634,7 +634,7 @@ public boolean onCommand(final CommandSender sender, Command cmd, String label, 但是在 Skript 里你只需这样即可: -```skript +```python command /<指令名称> [<类型1>] [<类型2>] [<类型3>]: aliases: <别名> executable by: <执行者> @@ -740,7 +740,7 @@ command /<指令名称> [<类型1>] [<类型2>] [<类型3>]: 如果你是新手,很有可能会写出类似以下的脚本: -```skript +```python command /world []: cooldown: 5 seconds permission: command.world @@ -769,7 +769,7 @@ command /world []: 所以,我们选择使用局部变量暂存玩家的坐标,并基于玩家所在世界及目标世界计算变量,最后根据计算出的量直接使用 `teleport player to %location%` 传送即可。 -```skript +```python command /world []: cooldown: 5 seconds permission: command.world @@ -824,7 +824,7 @@ command /world []: Skript 中的变量名几乎可以包含绝大多数字符,例如: -```skript +```python set {玩家的金币数} to 1000 set {_player::coin} to 1000 set {-cache::player::score} to 2 @@ -899,7 +899,7 @@ Loop / For 循环的结构如下: 我们先举一个简单的例子: -```skript +```python on load: set {_list::1} to "hey" set {_list::2} to "how" @@ -922,7 +922,7 @@ on load: 我们需要发奖励,给 `{playerCoins::*}` 每一个人都新增随机 1~100 金币,并计数一共增加了多少: -```skript +```python command /addcoins: trigger: loop {playerCoins::*}: @@ -949,7 +949,7 @@ command /addcoins: 这会让代码非常混乱,不推荐使用过多层级的嵌套 Loop,举个例子: -```skript +```python on load: loop all players: loop all blocks in radius 5 around loop-player: @@ -962,7 +962,7 @@ on load: For 循环与 Loop 循环类似,但 For 循环写法更简洁,用于替换 `loop` 语句,适用于简化代码结构,提高可读性。 -```skript +```python # for 循环中只有一个变量时,for each %value% in {array::*}: # 如果有多个变量时,使用 for each %key%, %value% in {array::*}: for each {_player}, {_coin} in {playerCoins::*}: @@ -975,7 +975,7 @@ For 循环中,`for each {_player}, {_coin} in {playerCoins::*}:` 本质和 `lo 但是使用了更简洁的语法来定义循环变量,直接使用了自定义变量名 `{_player}` 和 `{_coin}`,提高了代码的可读性。等价于: -```skript +```python loop {playerCoins::*}: set {_player} to loop-index set {_coin} to loop-value @@ -992,7 +992,7 @@ For 循环中,`for each {_player}, {_coin} in {playerCoins::*}:` 本质和 `lo
参考写法,不唯一 -```skript +```python item tag aliases: any axe = minecraft:axes any log = minecraft:logs @@ -1024,7 +1024,7 @@ on break: Function 可用于解决这些问题,函数的定义与指令注册具有相似性,例如二者都支持参数,函数的基本结构如下: -```skript +```python function 方法名(参数名: 参数类型, 参数名: 参数类型, ...): # 代码段落 @@ -1044,7 +1044,7 @@ on load: 另外,函数可以有返回,也可以没有返回值,当需要返回值时,函数的结构如下: -```skript +```python function 方法名(参数名: 参数类型, 参数名: 参数类型, ...) :: 输出参数类型: # 代码段落 return 返回值 @@ -1064,7 +1064,7 @@ on load: 我们来看一个简单的例子: -```skript +```python function getFormattedTime(time: number,type:timespanperiod = ticks) :: string: set {_time} to timespan({_time},{_type}) set {_days} to days of {_time} @@ -1096,7 +1096,7 @@ function getFormattedTime(time: number,type:timespanperiod = ticks) :: string: 通过调用该函数,可以将时间数值转换为易读的格式,例如 "1 天 2 小时 30 分钟"。 -```skript +```python on load: set {_timeString} to getFormattedTime(93784, seconds) broadcast "格式化后的时间为:%{_timeString}%" @@ -1114,7 +1114,7 @@ on load: 指令已经写好,你需要完成平滑视角的函数: -```skript +```python command /smoothlook [=20]: trigger: set {_from} to player's target block @@ -1129,7 +1129,7 @@ command /smoothlook [=20]:
参考写法,不唯一 -```skript +```python #> 平滑模块 function smoothUtils(duration:number,from:location,to:location,time:number) :: location: set {_tickrate} to ({_time} / {_duration}) diff --git a/docs-java/process/maintenance/lang/skript/skript.md b/docs-java/process/maintenance/lang/skript/skript.md index 1a3c9fa1..b07a240b 100644 --- a/docs-java/process/maintenance/lang/skript/skript.md +++ b/docs-java/process/maintenance/lang/skript/skript.md @@ -46,7 +46,7 @@ public void onPlayerJoin(PlayerJoinEvent evt) { 使用 Skript 实现的代码: -```skript +```python on join: if player has permission "xxx": // 权限判断 message "欢迎你加入服务器!你获得了64枚钻石!" // 发送消息 From f5b8e7856c60ec68782d818561963918d41b9c22 Mon Sep 17 00:00:00 2001 From: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com> Date: Sun, 21 Dec 2025 04:23:50 -0500 Subject: [PATCH 7/9] =?UTF-8?q?=E4=BD=BF=E7=94=A8=20Paper=20=E7=9A=84=20Ja?= =?UTF-8?q?vadoc=20=E5=B9=B6=E4=BF=AE=E5=A4=8D=E9=93=BE=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs-java/process/maintenance/lang/skript/advanced-tutorials.md | 2 +- docs-java/process/plugin/game/germengine.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs-java/process/maintenance/lang/skript/advanced-tutorials.md b/docs-java/process/maintenance/lang/skript/advanced-tutorials.md index 618e558c..34c5c29b 100644 --- a/docs-java/process/maintenance/lang/skript/advanced-tutorials.md +++ b/docs-java/process/maintenance/lang/skript/advanced-tutorials.md @@ -228,7 +228,7 @@ import [as ] 在 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` 等。 举例: diff --git a/docs-java/process/plugin/game/germengine.md b/docs-java/process/plugin/game/germengine.md index 71a4f3ba..f51c3da3 100644 --- a/docs-java/process/plugin/game/germengine.md +++ b/docs-java/process/plugin/game/germengine.md @@ -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 From f7fe5378a6d37bf28f4dfc70d9360ad08485b52b Mon Sep 17 00:00:00 2001 From: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com> Date: Sun, 21 Dec 2025 04:26:15 -0500 Subject: [PATCH 8/9] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lang/skript/advanced-tutorials.md | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/docs-java/process/maintenance/lang/skript/advanced-tutorials.md b/docs-java/process/maintenance/lang/skript/advanced-tutorials.md index 34c5c29b..fd4fa999 100644 --- a/docs-java/process/maintenance/lang/skript/advanced-tutorials.md +++ b/docs-java/process/maintenance/lang/skript/advanced-tutorials.md @@ -31,12 +31,12 @@ sidebar_position: 3 ```python 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 请求的玩家 @@ -81,8 +81,8 @@ on TPARequestEvent: 例如,`TPARequestEvent` 事件中没有 `event-player`,因此无法直接使用 `player` 关键字来获取发起 tpa 的玩家。 ```python - 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`。 @@ -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 中使用。 @@ -264,9 +264,9 @@ player.giveExpLevels({_levels}) # 给玩家经验等级 -> {_levels} ``` -方法可以用作 **Effects** 、 **Expressions** 和 **Conditions** 。 +方法可以用作 **Effects** 、**Expressions** 和 **Conditions** 。 -如果用作**Conditions**,则只要方法的返回值不是 `false`、`null` 或 `0`,这个 **Conditions** 就会通过。 +如果用作 **Conditions**,则只要方法的返回值不是 `false`、`null` 或 `0`,这个 **Conditions** 就会通过。 ###### 调用非公共方法 @@ -284,7 +284,7 @@ Java 中不同方法有不同的访问修饰符(如 `public`、`private`、`pr ###### 调用 Overload 的方法 -通常, **skript-reflect** 可以从运行时传递的参数中推断出要调用的正确的 Overload 方法。 +通常,**skript-reflect** 可以从运行时传递的参数中推断出要调用的正确的 Overload 方法。 如果需要使用某个方法的某种实现,可以在方法名称的末尾附加一个逗号分隔的列表,并用括号括起来。 @@ -518,4 +518,4 @@ effect put %objects% in %objects%: 这不仅能让你更好地理解 **Skript** 的工作原理,也能让你提升编程能力,并为社区做出贡献。 -在下一章中,我们将介绍一些常用的 **Skript Addon** 以及如何编写自己的 **Skript Addon** [WIP] +在下一章中,我们将介绍一些常用的 **Skript Addon** 以及如何编写自己的 **Skript Addon** [WIP] From 209574afa3ad878f874e9f63682d030848364a38 Mon Sep 17 00:00:00 2001 From: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com> Date: Tue, 23 Dec 2025 17:24:07 -0500 Subject: [PATCH 9/9] =?UTF-8?q?Revert=20`=E5=B0=86=20Skript=20=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E5=9D=97=E7=9A=84=E8=AF=AD=E8=A8=80=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=20Python=20=E4=BB=A5=E6=94=AF=E6=8C=81=E8=AF=AD=E6=B3=95?= =?UTF-8?q?=E9=AB=98=E4=BA=AE`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lang/skript/advanced-tutorials.md | 70 ++++++++-------- .../lang/skript/basic-tutorials.md | 84 +++++++++---------- .../process/maintenance/lang/skript/skript.md | 2 +- 3 files changed, 78 insertions(+), 78 deletions(-) diff --git a/docs-java/process/maintenance/lang/skript/advanced-tutorials.md b/docs-java/process/maintenance/lang/skript/advanced-tutorials.md index fd4fa999..887359a4 100644 --- a/docs-java/process/maintenance/lang/skript/advanced-tutorials.md +++ b/docs-java/process/maintenance/lang/skript/advanced-tutorials.md @@ -29,7 +29,7 @@ sidebar_position: 3 假如我们想要阻止某个玩家被其他玩家 tpa 到,Skript 本身并没有提供监听 **EssentialsX** tpa 请求的事件, -```python +```skript import: net.ess3.api.events.TPARequestEvent # 导入 Java 类 @@ -63,7 +63,7 @@ on TPARequestEvent: 这样的类我们可以在导入包后,直接在 Skript 中监听,导入包的语法如下: -```python +```skript import: net.ess3.api.events.TPARequestEvent @@ -80,7 +80,7 @@ on TPARequestEvent: 例如,`TPARequestEvent` 事件中没有 `event-player`,因此无法直接使用 `player` 关键字来获取发起 tpa 的玩家。 -```python +```skript set {_ess_IUser} to event.getTarget() # 获取 IUser 对象 set {_player} to {_ess_IUser}.getBase() # 获取 Player 对象 ``` @@ -89,7 +89,7 @@ on TPARequestEvent: 这个 `IUser` 是 EssentialsX 的一个 **接口**,`User` 类 **实现** 了它,可以在 [EssentialsX 的 Javadoc](https://jd-v2.essentialsx.net/net/ess3/api/iuser) 里查看。 -```python +```skript if {_player} is player("lilingfeng"): set {_command_sender} to event.getRequester().getPlayer() # 获取发送者 send "&clilingfeng是我的不准tpa到她那里🥵" to {_command_sender} @@ -140,7 +140,7 @@ on TPARequestEvent: ##### 编写脚本 -```python +```skript import: org.leavesmc.leaves.event.bot.BotJoinEvent as BotJoin #导入类 @@ -179,13 +179,13 @@ on BotJoin: 语法: -```python +```skript [the] [java] class %text% ``` 示例: -```python +```skript on script load: set {Player} to the class "org.bukkit.entity.Player" message "%{Player}%" # org.bukkit.entity.Player @@ -195,14 +195,14 @@ on script load: 语法: -```python +```skript [the] [java] class[es] of %objects% %objects%'[s] [java] class[es] ``` 示例: -```python +```skript command /example: executable by: players trigger: @@ -214,7 +214,7 @@ command /example: 由于导入块在 effect 命令中不可用,因此你可以使用 import effect (仅在 effect 命令中可用): -```python +```skript import [as ] ``` @@ -232,7 +232,7 @@ import [as ] 举例: -```python +```skript import: org.bukkit.event.inventory.ClickType$DROP @@ -249,13 +249,13 @@ on inventory click: 语法: -```python +```skript %object%.(%objects%) ``` 示例: -```python +```skript event-block.breakNaturally() # 让方块被破坏并自然掉落 (last spawned creeper).setPowered(true) @@ -278,7 +278,7 @@ Java 中不同方法有不同的访问修饰符(如 `public`、`private`、`pr 语法: -```python +```skript {_arraylist}.[ArrayList]fastRemove(1) ``` @@ -290,7 +290,7 @@ Java 中不同方法有不同的访问修饰符(如 `public`、`private`、`pr 语法: -```python +```skript System.out.println[Object]({_something}) Math.max[int, int](0, {_value}) @@ -300,7 +300,7 @@ Math.max[int, int](0, {_value}) 语法: -```python +```skript %object%. ``` @@ -310,7 +310,7 @@ Math.max[int, int](0, {_value}) 示例: -```python +```skript {_hashmap}.[HashMap]modCount ``` @@ -318,13 +318,13 @@ Math.max[int, int](0, {_value}) 语法: -```python +```skript [a] new %javatype%(%objects%) ``` 示例: -```python +```skript new Location(player's world, 0, 0, 0) ``` @@ -338,7 +338,7 @@ new Location(player's world, 0, 0, 0) 则应采取适当的预防措施。例如,如果要同时侦听 `org.bukkit.event.entity.ProjectileLaunchEvent` 和 `org.bukkit.event.entity.ProjectileHitEvent`: -```python +```skript import: org.bukkit.event.entity.ProjectileLaunchEvent org.bukkit.event.entity.ProjectileHitEvent @@ -357,7 +357,7 @@ on ProjectileLaunchEvent and ProjectileHitEvent: 示例: -```python +```skript import: org.bukkit.event.block.BlockBreakEvent @@ -377,7 +377,7 @@ on all BlockBreakEvent: ##### 创建数组 -```python +```skript new %javatype%[%integer%] ``` @@ -385,7 +385,7 @@ new %javatype%[%integer%] ##### 通过索引获取数组的值 -```python +```skript %array%[%integer%] ``` @@ -395,7 +395,7 @@ new %javatype%[%integer%] ##### Collect -```python +```skript [%objects%] [%objects% as %javatype%] ``` @@ -404,7 +404,7 @@ new %javatype%[%integer%] ##### Spread -```python +```skript ...%object% ``` @@ -412,13 +412,13 @@ new %javatype%[%integer%] 实例: -```python +```skript set {_list::*} to ...{_array} ``` ##### Null -```python +```skript null ``` @@ -426,7 +426,7 @@ null ##### Bits -```python +```skript [the] (bit %number%|bit(s| range) [from] %number%( to |[ ]-[ ])%number%) of %numbers% %numbers%'[s] (bit %number%|1¦bit(s| range) [from] %number%( to |[ ]-[ ])%number%) ``` @@ -435,7 +435,7 @@ null ##### Raw Expression -```python +```skript [the] raw %objects% ``` @@ -447,7 +447,7 @@ null 这将更改该参数的输入值。这可用于将数据存储在调用触发器的变量中。 -```python +```skript import: ch.njol.skript.lang.Variable @@ -463,7 +463,7 @@ effect put %objects% in %objects%: ##### 成员 -```python +```skript [the] (fields|methods|constructors) of %objects% %objects%'[s] (fields|methods|constructors) ``` @@ -474,7 +474,7 @@ effect put %objects% in %objects%: ##### 成员的名字 -```python +```skript [the] (field|method) names of %objects% %objects%'[s] (field|method) names ``` @@ -483,7 +483,7 @@ effect put %objects% in %objects%: ##### 判断对象是否是某个类的实例 -```python +```skript %objects% (is|are) [a[n]] instance[s] of %javatypes% %objects% (is not|isn't|are not|aren't) [a[n]] instance[s] of %javatypes% ``` @@ -492,7 +492,7 @@ effect put %objects% in %objects%: ##### 类引用 -```python +```skript %javatype%.class ``` @@ -500,7 +500,7 @@ effect put %objects% in %objects%: ##### 插件实例 -```python +```skript [(an|the)] instance of [the] plugin %javatype/string% ``` diff --git a/docs-java/process/maintenance/lang/skript/basic-tutorials.md b/docs-java/process/maintenance/lang/skript/basic-tutorials.md index 764eb776..138ac3f8 100644 --- a/docs-java/process/maintenance/lang/skript/basic-tutorials.md +++ b/docs-java/process/maintenance/lang/skript/basic-tutorials.md @@ -78,7 +78,7 @@ Skript 仍然是编程语言,所有的编程语言都必须在拥有理论基 我们看一个 "on click" 相关示例: -```python +```skript on right click on dirt: send "%event-world%" to console send "%event-player%" to console @@ -129,7 +129,7 @@ Events、Conditions、Effects、Expressions、Types、Functions、Sections、Str 举例: -```python +```skript on death of player: # 玩家死亡时 on click: @@ -148,7 +148,7 @@ on click: 举例: -```python +```skript on join: if player has permission "admin": # 管理员权限时执行 @@ -162,7 +162,7 @@ on join: 另外, SK 也支持省略 if 的写法,让 Conditions 单独成为一行代码: -```python +```skript on join: player has permission "admin" send "管理你好!" to player @@ -180,7 +180,7 @@ on join: 举例: -```python +```skript on player jump: # 玩家跳跃时 teleport player to world "nether" @@ -193,14 +193,14 @@ Effect 往往是脚本中最常用的语法,因为它们直接影响游戏世 因此,我们再来看一个更复杂的 Effect 示例,发送 Title 信息: -```python +```skript send title %text% [with subtitle %text%] [to %players%] [for %time span%] [with fade[(-| )]in %time span%] [(and|with) fade[(-| )]out %time span%] send subtitle %text% [to %players%] [for %time span%] [with fade[(-| )]in %time span%] [(and|with) fade[(-| )]out %time span%] ``` 我们可以大致上认识到 `EffSendTitle` 的基本用法,这里面面有很多可选项和类型,我们可以根据需要选择使用。 -```python +```skript on join: wait 1 second # Effect -> wait %timespan% @@ -218,7 +218,7 @@ on join: 在 SK 中一般配合条件判断,用于 **在脚本中传递和处理数据**。 -```python +```skript on join: # 玩家加入时 set {playerIP::%player%} to ip of player @@ -240,7 +240,7 @@ on join: 类型定义了变量、参数和返回值的数据种类。在 Skript 中,虽然不像某些编程语言那样严格区分类型,但理解不同类型的值(如字符串、数字、列表等)对于编写正确的脚本至关重要。 -```python +```skript on bed enter: # 玩家进入床时 if world of player is world "world": @@ -259,7 +259,7 @@ on bed enter: 通过查阅 [官方文档](https://docs.skriptlang.org/docs.html?search=#EffSecSpawn),我们知道生成的语法为: -```python +```skript (spawn|summon) %entity types% [%directions% %locations%] ``` @@ -279,7 +279,7 @@ on bed enter: 综合以上信息,我们得到完整代码: -```python +```skript spawn zombie at location of player ``` @@ -287,7 +287,7 @@ spawn zombie at location of player 但 Skript 会自动将 `player` 类型转换为 `location of player` 因此也可直接写成: -```python +```skript spawn zombie at player ``` @@ -309,7 +309,7 @@ spawn zombie at player 举例: -```python +```skript on player join: set {_location} to makePlayerFly(event-player) # 调用 makePlayerFly 函数,并传入 event-player 作为参数让玩家飞起来 @@ -335,7 +335,7 @@ function makePlayerFly(p: player) :: location: 举例: -```python +```skript on tool break: # 当工具用坏时 if player is op: @@ -361,7 +361,7 @@ on tool break: 举例: -```python +```skript options: servername: myserver # option 中定义 {@xxx} 的值 @@ -419,7 +419,7 @@ on join: 示例 1:禁止没有权限的玩家通过命令执行传送: -```python +```skript on teleport with priority lowest: teleport cause is command # 判断 tp 原因是否为指令 tp @@ -432,7 +432,7 @@ on teleport with priority lowest: 示例 2:记录玩家受伤情况: -```python +```skript on damage of player with priority monitor: # 监控玩家受伤事件 log "玩家 %player% 受到了伤害" @@ -458,7 +458,7 @@ Skript 使用与 Bukkit 相同的事件优先级机制,触发顺序为 `Lowest 查询 [Skript Hub](https://skripthub.net/docs/) 或 [skUnity Docs](https://docs.skunity.com/syntax),根据直觉选择,与时间和睡觉有关系的事件可能有这些: -```python +```skript every 10 seconds: at 00:00: on bed enter: @@ -470,7 +470,7 @@ on bed leave:
脚本 1 - Every %timespan% + loop -```python +```skript every 1 second: loop all players: if loop-player is not sleeping: @@ -489,7 +489,7 @@ every 1 second:
脚本 2 - Event + At time -```python +```skript on bed leave: set {%player%::sleep} to false on bed enter: @@ -512,7 +512,7 @@ at 00:00 in world "world":
脚本 3 - Event + While -```python +```skript at 00:00 in world "world": while time in world is between 00:00 and 6:00: # 注意:若时间段跨越午夜(如 23:00-02:00),请不要直接使用 between,而应拆分为两个条件判断 loop all players: @@ -530,7 +530,7 @@ at 00:00 in world "world":
脚本 4 - Skbee Async Task -```python +```skript at 00:00 in world "world": async run 1 tick later repeating every 1 second: if time in world is not between 00:00 and 06:00: @@ -558,7 +558,7 @@ at 00:00 in world "world": 不刷新怪物的事件建议去掉,直接设置 **难度为和平**。 -```python +```skript # 不推荐,即使这是有用的! on spawn of zombie: cancel event @@ -588,12 +588,12 @@ on place with priority lowest: 在这里,以下两种写法是等价的。 -```python +```skript if player does not have permission "lobby.admin": cancel event ``` -```python +```skript if player has permission "lobby.admin": # 有权限时的处理 else: @@ -602,7 +602,7 @@ else: 如果只需要判断是或不是,可以灵活选用更简洁的方法,简化为: -```python +```skript on place: player does not have permission "lobby.admin" cancel event @@ -634,7 +634,7 @@ public boolean onCommand(final CommandSender sender, Command cmd, String label, 但是在 Skript 里你只需这样即可: -```python +```skript command /<指令名称> [<类型1>] [<类型2>] [<类型3>]: aliases: <别名> executable by: <执行者> @@ -740,7 +740,7 @@ command /<指令名称> [<类型1>] [<类型2>] [<类型3>]: 如果你是新手,很有可能会写出类似以下的脚本: -```python +```skript command /world []: cooldown: 5 seconds permission: command.world @@ -769,7 +769,7 @@ command /world []: 所以,我们选择使用局部变量暂存玩家的坐标,并基于玩家所在世界及目标世界计算变量,最后根据计算出的量直接使用 `teleport player to %location%` 传送即可。 -```python +```skript command /world []: cooldown: 5 seconds permission: command.world @@ -824,7 +824,7 @@ command /world []: Skript 中的变量名几乎可以包含绝大多数字符,例如: -```python +```skript set {玩家的金币数} to 1000 set {_player::coin} to 1000 set {-cache::player::score} to 2 @@ -899,7 +899,7 @@ Loop / For 循环的结构如下: 我们先举一个简单的例子: -```python +```skript on load: set {_list::1} to "hey" set {_list::2} to "how" @@ -922,7 +922,7 @@ on load: 我们需要发奖励,给 `{playerCoins::*}` 每一个人都新增随机 1~100 金币,并计数一共增加了多少: -```python +```skript command /addcoins: trigger: loop {playerCoins::*}: @@ -949,7 +949,7 @@ command /addcoins: 这会让代码非常混乱,不推荐使用过多层级的嵌套 Loop,举个例子: -```python +```skript on load: loop all players: loop all blocks in radius 5 around loop-player: @@ -962,7 +962,7 @@ on load: For 循环与 Loop 循环类似,但 For 循环写法更简洁,用于替换 `loop` 语句,适用于简化代码结构,提高可读性。 -```python +```skript # for 循环中只有一个变量时,for each %value% in {array::*}: # 如果有多个变量时,使用 for each %key%, %value% in {array::*}: for each {_player}, {_coin} in {playerCoins::*}: @@ -975,7 +975,7 @@ For 循环中,`for each {_player}, {_coin} in {playerCoins::*}:` 本质和 `lo 但是使用了更简洁的语法来定义循环变量,直接使用了自定义变量名 `{_player}` 和 `{_coin}`,提高了代码的可读性。等价于: -```python +```skript loop {playerCoins::*}: set {_player} to loop-index set {_coin} to loop-value @@ -992,7 +992,7 @@ For 循环中,`for each {_player}, {_coin} in {playerCoins::*}:` 本质和 `lo
参考写法,不唯一 -```python +```skript item tag aliases: any axe = minecraft:axes any log = minecraft:logs @@ -1024,7 +1024,7 @@ on break: Function 可用于解决这些问题,函数的定义与指令注册具有相似性,例如二者都支持参数,函数的基本结构如下: -```python +```skript function 方法名(参数名: 参数类型, 参数名: 参数类型, ...): # 代码段落 @@ -1044,7 +1044,7 @@ on load: 另外,函数可以有返回,也可以没有返回值,当需要返回值时,函数的结构如下: -```python +```skript function 方法名(参数名: 参数类型, 参数名: 参数类型, ...) :: 输出参数类型: # 代码段落 return 返回值 @@ -1064,7 +1064,7 @@ on load: 我们来看一个简单的例子: -```python +```skript function getFormattedTime(time: number,type:timespanperiod = ticks) :: string: set {_time} to timespan({_time},{_type}) set {_days} to days of {_time} @@ -1096,7 +1096,7 @@ function getFormattedTime(time: number,type:timespanperiod = ticks) :: string: 通过调用该函数,可以将时间数值转换为易读的格式,例如 "1 天 2 小时 30 分钟"。 -```python +```skript on load: set {_timeString} to getFormattedTime(93784, seconds) broadcast "格式化后的时间为:%{_timeString}%" @@ -1114,7 +1114,7 @@ on load: 指令已经写好,你需要完成平滑视角的函数: -```python +```skript command /smoothlook [=20]: trigger: set {_from} to player's target block @@ -1129,7 +1129,7 @@ command /smoothlook [=20]:
参考写法,不唯一 -```python +```skript #> 平滑模块 function smoothUtils(duration:number,from:location,to:location,time:number) :: location: set {_tickrate} to ({_time} / {_duration}) diff --git a/docs-java/process/maintenance/lang/skript/skript.md b/docs-java/process/maintenance/lang/skript/skript.md index b07a240b..1a3c9fa1 100644 --- a/docs-java/process/maintenance/lang/skript/skript.md +++ b/docs-java/process/maintenance/lang/skript/skript.md @@ -46,7 +46,7 @@ public void onPlayerJoin(PlayerJoinEvent evt) { 使用 Skript 实现的代码: -```python +```skript on join: if player has permission "xxx": // 权限判断 message "欢迎你加入服务器!你获得了64枚钻石!" // 发送消息