跳转到内容

插件 & JVM 模式

Mindustry 支持加载 jar 使用 SKIP_ 5d3d2bcbf2c74514b51c0fd9f251b2ed 的文件 桌面 & Android上的字节码. 这些功能与JS Mods类似,在Mod创建时必须提供单一的主类来即时处理.

理论上,所有JVM语言都应得到支持.

Jar/JVM Mods同样使用 mod.hjson 标准 Mods 做的元文件, 加上一个: 这个 完全合格的主类 可指定为 main: "mypackage.MyMod"。 。 。 。 此类应延长 mindustry.mod.Mod。 。 。 。

如果没有指定主类,则默认为 modnameinlowercase.ModName + "Mod".

很简单 mod.hjson SKIP_5d3d2bcbf2c74514b51c0fd9f251b2d Mod可能看起来像这样:

name: "Nothing"
author: "Yourself"
main: "nothing.NothingMod"
description: "..."
version: "99.99"

例 SKIP_ 5d3d2bcbf2c74514b51c0fd9f251b2d 调制还原实例 Kotlin mod repo 给更多的指示。

插件

插件为 SKIP_5d3d2bcbf2c74514b51c0fd9f251b2d 用于仅在服务器上运行的 Mods. 通常,这些添加 新建命令 或者说 新游戏模式。 。 。 。 所有插件主类应扩展 mindustry.mod.Plugin。 。 。 。 这使他们隐含 隐藏 - 客户端不需要下载插件即可加入服务器. 他们只是服务器侧。 要安装插件, 请将 JAR 放在 <server directory>/config/mods/。 。 。 。

插件命名其元文件 plugin.[h]json。 。 。 。 文件结构与其他Java mods相同-详见上.

您可以看到示例插件 这里。 。 。 。 一个更实用的例子,可以用于真正的服务器,请参见: 此还原。 。 。 。

导入

与JSON或JSON Mods不同,JAR Mods需要编译. 这意味着它们不能直接从Github进口, Github (英语). 释放 已使用。

当用户尝试安装 JAR mod 时, SKIP_f72cc961ef34fa6b28a645b425b35ce 将会检查最新的(和 仅限 (最新数据) Github 释放用于 .jar 文物. 发现第一件文物后,下载给客户. 注意预放出被忽略.

我建议使用 Github 动作(或任何其他CI),以自动地构建并上传到新发行的罐子文物.

多脚踏车

除非另有说明, 没有Mindustry代码是线安全。 。 。 。 从主线以外的线索执行任何动作(例如发送包,更改牌)都会造成随机崩溃或网络出错. 运行主线上的东西,使用 Core.app.post(() -> { /* code */ })。 。 。 。

能力与安全

由于罐子模具直接通过一个 URLClassLoader 没有沙盒,他们没有任何安全限制。 这意味着:

  • 所有 SKIP_5d3d2bcbf2c74514b51c0fd9f251b2d API可以访问.
  • 反射可用于访问私有/隐藏属性.
  • Mods完全可以访问客户端的计算机,为潜在的恶意行为打开了大门.
  • Mods可以更改游戏文件或重写核心字节代码.

因此,你应该 从未从不信任的来源导入过罐子模型 。 现在,你可能想知道: 为什么罐子没有放沙盒? 这不是一个巨大的安全风险吗?

答案是: 没错 然而,没有其他好选择。 即使我执行了一个 SecurityManager 为了限制机能 没用的 - SKIP_5d3d2bcbf2c74514b51c0fd9f251b2d 具有内在的不安全性,以及任何合理的“安全”的沙盒执行(第2条)如果一个甚至存在)将要求以无法接受的现代方式进行破坏性反思。

作为比较点,Forge(一款受欢迎的 Java Minecraft 的多相装填器没有沙盒的模具。