denizen-reflect

允许Denizen脚本直接与和操纵Java对象。

资源图片
pdenizenreflect **denizen-reflect**
允许 Denizen 脚本直接与 Java 对象交互和操控。 [![CodeFactor](https://www.codefactor.io/repository/github/meigoc/denizen-reflect/badge?style=flat-square)](https://www.codefactor.io/repository/github/meigoc/denizen-reflect) [![Total line](https://tokei.rs/b1/github/meigoc/denizen-reflect?category=code&style=flat-square)](https://github.com/meigoc/denizen-reflect) [![GitHub Issues or Pull Requests](https://img.shields.io/github/issues/meigoc/denizen-reflect?style=flat-square&logo=github)](https://github.com/meigoc/denizen-reflect/issues) * * * ## ⚠️ 注意:Denizen-Reflect 处于测试阶段。 插件仍在测试中,因此可能存在错误和缺陷。 请在 Discord 上报告任何错误或问题。 🔹 目前,我们建议在实际使用前预热标签。(暂时) 🔹 我们已经意识到了某些缺点和临时的解决方法 — 它们将在未来的更新中得到修复。 * * *
# 示例 ## 此示例展示了如何使用 Collections.rotate() 将列表向后移动 2 位。 ### 原始:[1, 2, 3, 4, 5] **→** 结果:[4, 5, 1, 2, 3] ```yaml RotateList: type: task debug: false script: - import java.util.Collections as:Collections - narrate <[Collections].invoke[rotate(, 2)].interpret> ``` ## [?](https://helpch.at/docs/1.21/org/bukkit/block/Crafter.html) — 此示例展示了如何获取 Crafter 的所有禁用的槽位。 ```yaml disabledSlots: type: task debug: false script: - import org.bukkit.Location constructor:<[1].world>|<[1].x>|<[1].y>|<[1].z> as:crafter - define crafter <[crafter].invoke[getBlock().getState()]> # - repeat 9 from:0 as:x: - define disabledSlots:|:<[x].add[1]> if:<[crafter].invoke[isSlotDisabled(<[x]>)]> ``` # 文档: ## 对象类型 ### JavaObjectTag - **前缀**: `java` - **描述**: 任何 Java 对象的包装器。它可以持有对象的实例(以 `java@` 标识)或类的静态引用(以 `java@` 标识)。 #### JavaObjectTag 上的标签 - **`]>`** 返回对象或类中特定字段的值。 - **``** 将持有的 Java 对象转换回其最佳匹配的标准 Denizen 对象类型(例如,Java `String` 变成 `ElementTag`)。 - **``** 返回持有的对象的完整类名。 --- ## 命令 ### import - **名称**: `import` - **语法**: `import [] [constructor:[|...]] [as:]` - **描述**: 创建新的 Java 对象实例或获取静态类引用。使用 `constructor` 参数创建新实例。省略它来获取静态引用。 - **用法**: ```yaml # 获取对 Bukkit 类的静态引用 - import org.bukkit.Bukkit as:bukkit # 创建一个新的 ArrayList 实例 - import java.util.ArrayList constructor as:my_list ``` ### invoke - **名称**: `invoke` - **语法**: `invoke []` - **描述**: 执行给定的 Java 表达式字符串。这用于高级用例或不返回值的操作。 - **用法**: ```yaml # 调用静态方法向控制台记录消息 - invoke 'org.bukkit.Bukkit.getLogger().info("Hello from Denizen!")' ``` --- ## 全局标签 这些标签添加到 **所有** 对象类型中。 ### invoke - **标签**: `<[object].invoke[]>` - **描述**: 在输入对象上执行 Java 表达式。这是与 Java 对象交互的主要方式。表达式可以是方法调用、字段访问或一系列调用。 - **返回**: 表示表达式结果的 `ObjectTag`。 - **用法**: ```yaml # 获取玩家的世界名称 - narrate # 获取列表的大小 - narrate ``` ### identify - **标签**: `<[object].identify>` - **描述**: 将任何标准 Denizen 对象转换为一个新的、持久化的 `JavaObjectTag`。 当您需要存储对象的引用以进行复杂的 Java 交互时,此方法很有用。 - **返回**: `JavaObjectTag` - **用法**: ```yaml # 将 MaterialTag 转换为 JavaObjectTag - define my_java_material - narrate "Java 对象是: <[my_java_material]>" # 叙述:Java 对象是:java@ ```