匿名
未登录
创建账号
登录
Mindustry中文wiki
搜索
查看“官方维基教程-插件与JVM模组”的源代码
来自Mindustry中文wiki
命名空间
页面
讨论
更多
更多
页面操作
阅读
查看源代码
历史
←
官方维基教程-插件与JVM模组
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于这些用户组的用户执行:
管理员
、editor
您可以查看和复制此页面的源代码。
<span id="插件与-jvm-模组"></span> = 插件与 JVM 模组 = Mindustry 支持在'''桌面端及安卓'''通过 Java 字节码加载 <code>jar</code> 的文件。这个模组类似 JS 模组,必须提供一个主类来在创建时实例化。 理论上,支持一切 JVM 语言。 Jar/JVM 模组使用和基础 json 模组相同的<code>mod.hjson</code>元文件,但有一个附加条件:''全限定的主类''必须用一个名为 main 的字段指定为 <code>main: "mypackage.MyMod"</code>。并且这个类必须继承 <code>mindustry.mod.Mod</code>。 如果主类没有被指定,默认会变成<code>modnameinlowercase.ModName + "Mod".</code> 一个简单的Java模组的<code>mod.hjson</code> 看起来是这样的: <pre class="hjson">name: "nothing" author: "你自己" main: "nothing.NothingMod" description: "..." version: "114.514" </pre> 访问 [https://github.com/Anuken/MindustryJavaModTemplate Java 模组示例] 或[https://github.com/Anuken/MindustryKotlinModTemplate Kotlin 模组示例] 获得更多教程。 <span id="plugins"></span> == 插件 == 插件是仅安装于服务端的 Java 模组。 通常来说,它们添加了 ''新的命令'' 或者 ''新的游戏模式''. 所有插件的主类都应该继承<code>mindustry.mod.Plugin</code>。 这使得它们被隐式转换为''隐藏模式'' ——客户端不需要下载插件连接服务器。他们都是仅用于服务端的! 安装插件只需要把文件放在 <code><服务端目录>/config/mods/</code>. 插件命名自己的元文件 <code>plugin.[h]json</code>。该文件的结构与其他Java 模组的文件结构相同——详见上文。 你可以看一个示例插件[https://github.com/Anuken/MindustryPluginTemplate 在这里]。对于一个可以在服务器上使用的实际示例, 看 [https://github.com/Anuken/AuthorizePlugin 这个项目]. <span id="importing"></span> == 导入 == 与JS或 json 模组不同,JAR 模组需要编译。这意味着它们不能直接从Github导入,而是使用''Github Releases''进行导入。 当用户尝试安装JAR模组时,Mindustry将检查最新(且''仅''最新)的Github版本的 <code>.jar</code> 模组 。如果有更新的版本,将自动下载并安装,注意 pre-releases 会被忽略。 我建议使用Github Actions(或任何其他CI)自动构建jar并上传。 <span id="multithreading"></span> == 多线程 == 除非另有说明,'''任何Mindustry代码都不是线程安全的'''。从主线程以外的线程执行任何操作(例如发送数据包、更改磁贴)都会导致随机崩溃或网络错误。要在主线程上运行某些内容,请使用 <code>Core.app.post(() -> { /* code */ })</code>。 <span id="capabilities-security"></span> == 兼容性与安全 == 由于jar mod直接通过“URLClassLoader”加载,没有沙盒,因此它们没有任何安全限制。这意味着: * 所有Java API都可以访问。 * 反射可用于访问私有/隐藏属性。 * 模组可以完全访问客户端的计算机,为潜在的恶意行为创造良机。 * 模组可以更改游戏文件或重写核心字节码。 因此,您应该''永远不要从不受信任的来源导入jar MOD。''现在,你可能想知道:为什么 jar 模组没有沙盒?这不是一个巨大的安全风险吗? 答案显然是''正确的''。然而,我没有更好的选择。即使实现了一个“安全管理器”来限制模组功能,也不会有帮助——Java从本质上就是不安全的,任何合理的“安全”沙盒实现(''如果存在的话'')都需要禁用mods中的反射,这完全是不可接受的。 作为比较,Forge(''Minecraft的流行 Java 模组加载器'')也不使用沙盒。
返回
官方维基教程-插件与JVM模组
。
导航
导航
塞普罗
-- 战役区块
-- 物品
-- 流体
-- 建筑
-- 单位
埃里克尔
-- 战役区块
-- 物品
-- 流体
-- 建筑
-- 单位
隐藏
-- 物品
-- 液体
-- 建筑
-- 地块介绍
其他
-- 状态效果
-- 天气
-- 星球
教程中心
编辑者
-- 编辑指导
-- 语法指南
-- 表格语法
最近更改
随机页面
MediaWiki帮助
wiki工具
wiki工具
特殊页面
页面工具
页面工具
用户页面工具
更多
链入页面
相关更改
页面信息
页面日志