<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://mdtwiki.top/index.php?action=history&amp;feed=atom&amp;title=%E5%AE%98%E6%96%B9%E7%BB%B4%E5%9F%BA%E6%95%99%E7%A8%8B-%E6%8F%92%E4%BB%B6%E4%B8%8EJVM%E6%A8%A1%E7%BB%84</id>
	<title>官方维基教程-插件与JVM模组 - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://mdtwiki.top/index.php?action=history&amp;feed=atom&amp;title=%E5%AE%98%E6%96%B9%E7%BB%B4%E5%9F%BA%E6%95%99%E7%A8%8B-%E6%8F%92%E4%BB%B6%E4%B8%8EJVM%E6%A8%A1%E7%BB%84"/>
	<link rel="alternate" type="text/html" href="https://mdtwiki.top/index.php?title=%E5%AE%98%E6%96%B9%E7%BB%B4%E5%9F%BA%E6%95%99%E7%A8%8B-%E6%8F%92%E4%BB%B6%E4%B8%8EJVM%E6%A8%A1%E7%BB%84&amp;action=history"/>
	<updated>2026-05-17T22:27:31Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.41.1</generator>
	<entry>
		<id>https://mdtwiki.top/index.php?title=%E5%AE%98%E6%96%B9%E7%BB%B4%E5%9F%BA%E6%95%99%E7%A8%8B-%E6%8F%92%E4%BB%B6%E4%B8%8EJVM%E6%A8%A1%E7%BB%84&amp;diff=2491&amp;oldid=prev</id>
		<title>硫缺铅：​创建页面，内容为“&lt;span id=&quot;插件与-jvm-模组&quot;&gt;&lt;/span&gt; = 插件与 JVM 模组 =  Mindustry 支持在&#039;&#039;&#039;桌面端及安卓&#039;&#039;&#039;通过 Java 字节码加载 &lt;code&gt;jar&lt;/code&gt; 的文件。这个模组类似 JS 模组，必须提供一个主类来在创建时实例化。  理论上，支持一切 JVM 语言。  Jar/JVM 模组使用和基础 json 模组相同的&lt;code&gt;mod.hjson&lt;/code&gt;元文件，但有一个附加条件：&#039;&#039;全限定的主类&#039;&#039;必须用一个名为 main 的字段指定…”</title>
		<link rel="alternate" type="text/html" href="https://mdtwiki.top/index.php?title=%E5%AE%98%E6%96%B9%E7%BB%B4%E5%9F%BA%E6%95%99%E7%A8%8B-%E6%8F%92%E4%BB%B6%E4%B8%8EJVM%E6%A8%A1%E7%BB%84&amp;diff=2491&amp;oldid=prev"/>
		<updated>2026-02-01T12:24:12Z</updated>

		<summary type="html">&lt;p&gt;创建页面，内容为“&amp;lt;span id=&amp;quot;插件与-jvm-模组&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; = 插件与 JVM 模组 =  Mindustry 支持在&amp;#039;&amp;#039;&amp;#039;桌面端及安卓&amp;#039;&amp;#039;&amp;#039;通过 Java 字节码加载 &amp;lt;code&amp;gt;jar&amp;lt;/code&amp;gt; 的文件。这个模组类似 JS 模组，必须提供一个主类来在创建时实例化。  理论上，支持一切 JVM 语言。  Jar/JVM 模组使用和基础 json 模组相同的&amp;lt;code&amp;gt;mod.hjson&amp;lt;/code&amp;gt;元文件，但有一个附加条件：&amp;#039;&amp;#039;全限定的主类&amp;#039;&amp;#039;必须用一个名为 main 的字段指定…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;span id=&amp;quot;插件与-jvm-模组&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= 插件与 JVM 模组 =&lt;br /&gt;
&lt;br /&gt;
Mindustry 支持在&amp;#039;&amp;#039;&amp;#039;桌面端及安卓&amp;#039;&amp;#039;&amp;#039;通过 Java 字节码加载 &amp;lt;code&amp;gt;jar&amp;lt;/code&amp;gt; 的文件。这个模组类似 JS 模组，必须提供一个主类来在创建时实例化。&lt;br /&gt;
&lt;br /&gt;
理论上，支持一切 JVM 语言。&lt;br /&gt;
&lt;br /&gt;
Jar/JVM 模组使用和基础 json 模组相同的&amp;lt;code&amp;gt;mod.hjson&amp;lt;/code&amp;gt;元文件，但有一个附加条件：&amp;#039;&amp;#039;全限定的主类&amp;#039;&amp;#039;必须用一个名为 main 的字段指定为 &amp;lt;code&amp;gt;main: &amp;amp;quot;mypackage.MyMod&amp;amp;quot;&amp;lt;/code&amp;gt;。并且这个类必须继承 &amp;lt;code&amp;gt;mindustry.mod.Mod&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
如果主类没有被指定，默认会变成&amp;lt;code&amp;gt;modnameinlowercase.ModName + &amp;amp;quot;Mod&amp;amp;quot;.&amp;lt;/code&amp;gt; 一个简单的Java模组的&amp;lt;code&amp;gt;mod.hjson&amp;lt;/code&amp;gt; 看起来是这样的：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;hjson&amp;quot;&amp;gt;name: &amp;amp;quot;nothing&amp;amp;quot;&lt;br /&gt;
author: &amp;amp;quot;你自己&amp;amp;quot;&lt;br /&gt;
main: &amp;amp;quot;nothing.NothingMod&amp;amp;quot;&lt;br /&gt;
description: &amp;amp;quot;...&amp;amp;quot;&lt;br /&gt;
version: &amp;amp;quot;114.514&amp;amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
访问 [https://github.com/Anuken/MindustryJavaModTemplate Java 模组示例] 或[https://github.com/Anuken/MindustryKotlinModTemplate Kotlin 模组示例] 获得更多教程。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;plugins&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 插件 ==&lt;br /&gt;
&lt;br /&gt;
插件是仅安装于服务端的 Java 模组。 通常来说，它们添加了 &amp;#039;&amp;#039;新的命令&amp;#039;&amp;#039; 或者 &amp;#039;&amp;#039;新的游戏模式&amp;#039;&amp;#039;. 所有插件的主类都应该继承&amp;lt;code&amp;gt;mindustry.mod.Plugin&amp;lt;/code&amp;gt;。 这使得它们被隐式转换为&amp;#039;&amp;#039;隐藏模式&amp;#039;&amp;#039; ——客户端不需要下载插件连接服务器。他们都是仅用于服务端的！ 安装插件只需要把文件放在 &amp;lt;code&amp;gt;&amp;amp;lt;服务端目录&amp;amp;gt;/config/mods/&amp;lt;/code&amp;gt;. 插件命名自己的元文件 &amp;lt;code&amp;gt;plugin.[h]json&amp;lt;/code&amp;gt;。该文件的结构与其他Java 模组的文件结构相同——详见上文。 你可以看一个示例插件[https://github.com/Anuken/MindustryPluginTemplate 在这里]。对于一个可以在服务器上使用的实际示例， 看 [https://github.com/Anuken/AuthorizePlugin 这个项目].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;importing&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 导入 ==&lt;br /&gt;
&lt;br /&gt;
与JS或 json 模组不同，JAR 模组需要编译。这意味着它们不能直接从Github导入，而是使用&amp;#039;&amp;#039;Github Releases&amp;#039;&amp;#039;进行导入。&lt;br /&gt;
&lt;br /&gt;
当用户尝试安装JAR模组时，Mindustry将检查最新（且&amp;#039;&amp;#039;仅&amp;#039;&amp;#039;最新）的Github版本的 &amp;lt;code&amp;gt;.jar&amp;lt;/code&amp;gt; 模组 。如果有更新的版本，将自动下载并安装，注意 pre-releases 会被忽略。&lt;br /&gt;
&lt;br /&gt;
我建议使用Github Actions（或任何其他CI）自动构建jar并上传。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;multithreading&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 多线程 ==&lt;br /&gt;
&lt;br /&gt;
除非另有说明，&amp;#039;&amp;#039;&amp;#039;任何Mindustry代码都不是线程安全的&amp;#039;&amp;#039;&amp;#039;。从主线程以外的线程执行任何操作（例如发送数据包、更改磁贴）都会导致随机崩溃或网络错误。要在主线程上运行某些内容，请使用 &amp;lt;code&amp;gt;Core.app.post(() -&amp;amp;gt; { /* code */ })&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;capabilities-security&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 兼容性与安全 ==&lt;br /&gt;
&lt;br /&gt;
由于jar mod直接通过“URLClassLoader”加载，没有沙盒，因此它们没有任何安全限制。这意味着：&lt;br /&gt;
&lt;br /&gt;
* 所有Java API都可以访问。&lt;br /&gt;
* 反射可用于访问私有/隐藏属性。&lt;br /&gt;
* 模组可以完全访问客户端的计算机，为潜在的恶意行为创造良机。&lt;br /&gt;
* 模组可以更改游戏文件或重写核心字节码。&lt;br /&gt;
&lt;br /&gt;
因此，您应该&amp;#039;&amp;#039;永远不要从不受信任的来源导入jar MOD。&amp;#039;&amp;#039;现在，你可能想知道：为什么 jar 模组没有沙盒？这不是一个巨大的安全风险吗？&lt;br /&gt;
&lt;br /&gt;
答案显然是&amp;#039;&amp;#039;正确的&amp;#039;&amp;#039;。然而，我没有更好的选择。即使实现了一个“安全管理器”来限制模组功能，也不会有帮助——Java从本质上就是不安全的，任何合理的“安全”沙盒实现（&amp;#039;&amp;#039;如果存在的话&amp;#039;&amp;#039;）都需要禁用mods中的反射，这完全是不可接受的。&lt;br /&gt;
&lt;br /&gt;
作为比较，Forge（&amp;#039;&amp;#039;Minecraft的流行 Java 模组加载器&amp;#039;&amp;#039;）也不使用沙盒。&lt;/div&gt;</summary>
		<author><name>硫缺铅</name></author>
	</entry>
</feed>