模组开发提问区常见问题维基

FledgeXu


本贴是模组开发过程中常见问题的索引贴,开放公共编辑,欢迎大家添加内容。

环境配置中的网络问题

因为版权的规定,所有Minecraft官方内容的下载(Minecraft本体以及资源文件)必须由Mojang分发,而又因为中国大陆的网络封锁,导致访问海外服务器容易出现无法链接等情况。在Forge开发环境配置时,大概率会出现配置失败的问题。
当你构建时的日志里出现类似于:

Could not GET 'https://XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'

这样的日志,就是在网络出现了问题,这里有个典型的帖子
这有两种解决办法:

1.推荐解决办法: 如果你有购买代理的话,可以给Gradle配置代理,我这里推荐至少选购有CN2线路或者国内中转节点的代理服务。
对于Windows用户你可以在%HOMEPATH%\.gradle\gradle.properties 添加代理信息
对于macOS和Linux用户则是在~/.gradle/.gradle.properties中添加代理信息。
HTTP/HTTPS 代理:

systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=7077

systemProp.https.proxyHost=127.0.0.1
systemProp.https.proxyPort=7077

Socks 代理:

org.gradle.jvmargs=-DsocksProxyHost=127.0.0.1 -DsocksProxyPort=代理端口
  1. 第二种解决办法就是使用离线包

3.第三种办法,使用ForgeGradleCN,推荐方法。


实体之间近距离互动问题

例如怪物近战攻击,甚至是 苦力怕的近身爆炸

一般会误认为这部分代码在AI部分(Fabric系列被称为 Goal),然而应该做的是检查 collideWithEntity()onPlayerCollision() 方法是否需要重写。


关于Forge环境配置中的Zip错误

现象:

Caused by: java.util.zip.ZipException: error in opening zip file

解决办法:

到你的gradle缓存下面的.gradle/caches/forge_gradle/maven_downloader/net/minecraftforge/forge/,删除你安装mdk对应版本的文件夹,例如:1.15.2-31.2.0,代表1.15.2版本的Minecraft,31.2.0版本的Forge。


1.12 和新版 IntelliJ 兼容性问题

请注意 1.12 Forge 官方已经放弃支持,不会再有Bug修复和功能更新,官方论坛也不会再回答相关的问题
如果你是初学 Mod 开发,请从1.14+开始学起,因为Forge在1.13时候进行了一次重写

  1. 1.12 旧版 MDK 和最新版的IntelliJ IDEA不兼容,如果你一定要用旧版的MDK,不要点idea的自动升级,而是手动的将 MDK 解压目录下的 gradle/wrapper/gradle-wrapper.properties 中的 distributionUrl 的内容改成 https\://services.gradle.org/distributions/gradle-4.9-bin.zip
  2. 如果你不想升级旧版MDK的Gradle,可以安装2019版本bundle Java8 的IDEA,具体方法请在论坛里搜索。
  3. 1.12 的 MDK 目前最新版是 1.12.2 - 14.23.5.2854 ,这个版本的MDK引入了FG3,可以和最新版的IDEA兼容,配置方法发生了改变, 2854 版本的 MDK,配置方法和1.14 与 1.15 相同,可以参照高版本的MDK配置方法,论坛里的离线包也已经构建完成了。

推荐的 Java 版本

  1. 如果需要开发 Minecraft 1.7.2 或更老版本的 Mod,建议使用 JDK 1.7,在这里可以下载到旧版的 Oracle JDK 1.7(需要注册并登录 Oracle 账号);
  2. 如果需要开发 Minecraft 1.7.10 或更新版本的 Mod,推荐使用 JDK 1.8 ,在这里可以下载到最新的 Oracle JDK 1.8(需要注册并登录 Oracle 账号),如果不想注册账号,可以考虑使用 AdoptOpenJDK (注意 JVM 必须选 HotSpot,Forge 不支持 OpenJ9 JVM);
  3. 32 位操作系统下载文件名带有 x86 的安装包,64 位操作系统下载文件名带有 x64 的安装包;
  4. 如果你构建环境时遇到了以下异常,大概率是由于你的 JDK 版本低于 1.8.0_101,请升级你的 JDK 到 1.8.0_101或更高版本:
    sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    
  5. 对于 Minecraft 1.15+ ,可以考虑使用 JDK 11

修改 Windows 下运行 Java 程序的编码

由于在 Windows (简体中文)下运行 Java 程序输出的默认编码是 GBK,导致运行 Eclipse 、 IntelliJ IDEA 等基于 Java 开发的 IDE 时使用的默认编码为 GBK,如果需要一劳永逸地修改成 UTF-8,可以按如下操作(以 Windows 10 为例,对全部的 Java 程序都有效):

  1. 右键桌面 此电脑属性 → 左侧 高级系统设置环境变量(N)... → 下方系统变量的 新建(W)... (如果桌面没有 此电脑自行搜索);
  2. 变量名为 JAVA_TOOL_OPTIONS ,变量值为:
    -Duser.language=en -Dfile.encoding=UTF-8
  3. 添加完成后,切记必须全部单击 确定 按钮,绝对不可以单击右上角的 X 关闭窗口,否则无法保存添加环境变量;
  4. 如果在 cmd 或者 PowerShell 中运行 Java 程序,那么需要先输入命令 chcp 65001,会将此时的活动代码页设置为 UTF-8,否则运行的 Java 程序如果输出中含有非 ASCII 字符,那么还是会乱码。

修改 Gradle 版本

由于 IntelliJ IDEA 2020.1 开始不再支持使用 JDK8 启动,而且如果使用 JDK11 启动,那么将不再支持使用 Gradle 4.7 及更低版本。目前对于 Forge 1.8 ~ 1.12.2 所使用的 ForgeGradle 2.x 最高能兼容 Gradle 4.10.3,可以按照以下方法修改:

  1. 找到位于项目目录下的 ./gradle/wrapper/gradle.properties
  2. 将其中的 distributionUrl 后的地址修改为 https\://services.gradle.org/distributions/gradle-4.10.3-all.zip

对于 Forge 1.7.10 或更老版本所使用的 ForgeGradle 1.x,目前最高只能兼容 Gradle 4.4.1,可能无法兼容新版 IntelliJ IDEA。


修改 Gradle 构建时分配的内存大小

  1. 如果构建时出现以下异常:

    Error: Could not create the Java Virtual Machine.
    Error: A fatal exception has occurred. Program will exit.
    Invalid maximum heap size: -Xmx3G
    The specified size exceeds the maximum representable size.
    

    确保你使用的是 64 位的操作系统并安装的是 64 位的 JDK;
    如果你使用的是 32 位操作系统,那么找到项目根目录下的 gradle.properties 文件里的 org.gradle.jvmargs 这一项,把后面的 -Xmx3G 修改为 -Xmx1G
    如果你使用的是 64 位操作系统,检查你是否安装的是 32 位的 JDK (以 Windows 为例):

    打开控制面板程序和功能,找到名称含有 Java SE Development Kit 的程序,如果程序名称中没有写 (64-bit) ,那说明你安装的是 32 位的 JDK,请卸载它,并卸载含有 Java SE Runtime Environment 的程序,并按照上方的 推荐的 Java 版本 重新下载安装 JDK

  2. 如果构建时出现 java.lang.OutOfMemoryError: Java heap space 之类的字样,说明构建时内存分配不足。
    如果你使用的是 32 位操作系统,那么在项目目录下新建一个文件名为 gradle.properties,在其中写入一行: org.gradle.jvmargs=-Xmx1G,如果已有这个文件,并且已有这一行,构建时还抛出这个异常,那说明你构建的版本可能不适合在 32 位操作系统下开发;
    如果你使用的是 64 位操作系统,那么在项目目录下新建一个文件名为 gradle.properties,在其中写入一行: org.gradle.jvmargs=-Xmx3G(一般来说构建 Minecraft 开发环境提供 3 GB 内存足够了)。


修改 Gradle 缓存位置

由于 Gradle 缓存的默认位置在 C:\Users\<用户名>\.gradle (Windows) 或 ~/.gradle (UN*X) 目录下,如果需要修改,可以在环境变量中添加一项:变量名为 GRADLE_USER_HOME;变量值为你想修改到的位置,如 D:\Gradle\.gradle


开发环境中正版登录

如果有需要开发需要正版登录的模组(比如在正版服务器使用的辅助类型的模组),可以按照以下方法操作:(以 IntelliJ IDEA 为例,我觉得没人想把自己的正版账号和密码写 build.gradle 里)
菜单栏 RunEdit Configurations...ApplicationrunClientProgram Arguments 中添加参数: --username <邮箱> --password <密码>,如果仅仅想以指定用户名离线登录,那么只需要添加 --username <用户名> 即可
(以上方式仅对使用 ForgeGradle 或由其衍生的项目有效,如果使用 fabric-loom,那么可能需要参考 LaunchTesting 手动搓一套轮子)


FledgeXu



FledgeXu


该主题在最后一个回复创建后7天后自动关闭。不再允许新的回复。


FledgeXu


公共编辑的注意事项:
格式如下:

---
## 这里是标题
这行起是主题内容

每小节都应该以---分行符号作为开头,## 作为标题。