Forge1.8文档——入门

本文介绍了如何从零开始使用Forge创建MinecraftMod,包括安装必要的工具,配置开发环境,编辑build.gradle,以及自定义Mod信息。涵盖了从基础设置到构建和测试的详细步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍

文章是基于Forge文档翻译过来的,旨在理解和学习,存在错误请指正。
链接地址为https://docs.minecraftforge.net/en/1.18.x

Forge入门

这是一个简单的指南,让你从无到有的写出一个基本的Mod。本文档的其余本部为这里的详细介绍。

从零开始
  1. 在电脑上安装Java17开发工具包(JDK)和64位的Java虚拟机(JVM)。Minecraft和MinecraftForge都是针对Java17编译的。

  2. 从Forge网站站点获取Mod开发工具包(MDK)。

  3. 将下载的MDK放到空目录中。你应该能看到src/main/java中有一堆文件和示例Mod。这些文件中只有少数是Mod开发所必须的,你可以在所有项目中重复是有这些文件。这些文件是:

    1. build.gradle
    2. gradlew.bat
    3. gradlew
    4. gradle文件夹
  4. 将上面列出的文件移到新的文件夹中。这将是你的Mod项目文件夹中。

  5. 选择你的IDE

    1. Forge只明确支持使Eclipse进行开发,但对于Inerllij IDEA、Visual Studio Code平台有额外运行任务进行开发。然而,任何平台都可以进行开发。
    2. 对于Intellij IDEA和Eclipse,他们的Gradle集成可以配置初始工作区的设置。
    3. 对于build.gradle文件更改要生效,则需要调用Gradle重新加载项目。
  6. 生成IDE启动/运行配置

    1. 对于Eclipse,运行genEclipseRuns Gradle任务(gradlew genEclipseRuns) 。这将生成启动配置并下载游戏运行所需的所有资源。完成后,刷新/重启你的项目。
    2. 对于IEDA,运行genIntellijRuns gradle任务(gradlew-genIntellijRun)。这将生成启动配置并下载游戏运行所需的所有资源。如果遇到一个错误:“module not specified”,可以在编辑配置选择“main”,也可以通过ideaModule属性指定它。
    3. 对于VsCode,运行genVSCodeRuns Gradle任务(gradlew-genVSCodeRun)。这将生成启动配置并下载游戏运行所需的所有资源。
      自定义Mod信息
      用自定义Mod的构建方式去编辑build.gradle文件。

重要:
不要编辑build.gradle文件buildscript{}部分,它的默认配置是ForgeGradle运行所必需的。

所有的配置都在//下面进行编辑修改,许多东西都可以在此进行移除和定制。

简单的自定义build.gradle配置

强烈建议所有的项目使用这些自定义项:

  • 更改生成文件的名称,编辑archivesBaseName的值
  • 更改项目包名,编辑group的值
  • 更改版本号,编辑version的值
  • 要更改运行配置需要将所有的examplemod替换自己的ModId
迁移官方映射到Mojang’s

Forge在未来会使用Mojang’s的官方映射或者MojMaps。官方映射中提供 类、方法、和字段名称。此映射集不提供参数和JavaDocs。目前无法保证这些映射是安全的,但是Forge已决定使用。
构建和测试Mod

  1. 构建Mod,运行Gradlew中的build。这将在build/libs中输出一个名为[archivesBaseName]-[version].jar的文件。这个文件可以放到Forge的Minecraft中的mods文件中。
  2. 测试Mod,运行Gradle中的runClient。这将从位置启动我的世界,以及运行配置中指定的Mod代码。默认的MDK包括主源代码集,因此应在src/main/java中编写代码。
  3. 可以在服务器运行配置或者通过Gradlew中运行runServer运行专用服务器。这将启动带有GUI的Mincraft服务器。第一次运行后,服务器将立即关闭,直到修改run/eula.txt接受minecraft EULA.一旦接受,服务器将加载并通过直接链接到localhost进行访问。?
    如果Mod在专用服务器环境中运行,最好是在专用服务器上进行测试。

构建Mod

Mod是由那些文件组成,这些文件是做什么的?让我们来了解一下。

包(Packaging)

选择一个唯一的包名称。如果你有相关的域名,也可以作为其顶级包。例如,如果你拥有"example.com"域名,则可以使用con.example作为顶级包。

如果没有域名,请不要将其作为顶级包。你可以使用你的电子邮件、名字、用户名,只要他在你的项目里面是唯一。

在拥有顶级包之后,你会为你的Mod附加一个唯一的名称,比如examplemod。在这个例子中,它将以com.example.examplemod结束。(我这边的设置为com.zw.yaotu)

mods.toml

mods.toml中的license字段是必须的。如果未提提供或删除,则会发送错误。license字段是Mod的许可证,是必须的。具体参数也可以查看如下网址:https://choosealicense.com/

这个文件定义了Mod的初始数据,用户可以通过在游戏主屏幕的"Mods"按钮查看其Mod信息。多个Mod库由一个文件来进行描述。

mods.toml文件的格式为toml,MDK中的示例文件提供了相关注释。它应该被存在src/main/resources/META-INFO/mods.toml中。一个基本的mods.toml。描述了一个mod,例如:

# 加载程序类型名称,对于常规FML它应该为"javafml"
modLoader="javafml"

# 与所述mod加载程序匹配的版本范围,对于常规FML它就是Forge对于的版本
# Forge1.18对应版本38以上
loaderVersion="[38,)"

# Mod许可证,这是必须的并且更容易理解你分配的属性。我在这里用的 MIT
# 相关选项可以去这个网址查看("https://choosealicense.com/")
license="All Rights Reserved"

# Mod运行出错时,提供解决方案的网址
issueTrackerURL="github.com/MinecraftForge/MinecraftForge/issues"

# 该字段定义是否显示为独立资源包
showAsResourcePack=false

# Mod定义
[[mods]]
  modId="examplemod"
  version="${file.jarVersion}"
  displayName="Example Mod"
  updateJSONURL="minecraftforge.net/versions.json"
  displayURL="minecraftforge.net"
  logoFile="logo.png"
  credits="I'd like to thank my mother and father."
  authors="Author"
  description='''
  Lets you craft dirt into diamonds. This is a traditional mod that has existed for eons. It is ancient. The holy Notch created it. Jeb rainbowfied it. Dinnerbone made it upside down. Etc.
  '''
# 依赖Mod
  [[dependencies.examplemod]]
    modId="forge"
    mandatory=true
    versionRange="[38,)"
    ordering="NONE"
    side="BOTH"

  [[dependencies.examplemod]]
    modId="minecraft"
    mandatory=true
    versionRange="[1.18,1.19)"
    ordering="NONE"
    side="BOTH"

如果以下任意字符=“ f i l e . j a r V e r s i o n " (例如: v e r s i o n = " {file.jarVersion}"(例如:version=" file.jarVersion"(例如:version="{file.jarVersion}”),在Forge运行是会用jar配置中的指定版本替换掉该字符串。由于用户开发环境没有可从中提取的jar配置,因此这个字符会被改为NONE。因此,通常建议不要使用这个进行版本控制。这里只是一个建议。因为缺少属性会导致错误。

属性(Property)类型(Type)默认值(Default)描述(Description)
modidstringmandatoryModId为文件的唯一标识,用于关联到此处
versionstringmandatorymod的版本。最好符合Forge的结构。
displayNamestringmandatoryMod的名称
updateJSONURLstring“”JSON版本的地址
displayURLstring“”Mod主页链接
logoFilestring“”Mod的Logn文件
creditsstring“”Mod的感谢语录
authorsstring“”Mod的作者
descriptionstringmandatoryMod的描述
dependencies[list][]ModId为文件的唯一标识,用于关联到此处

*所有版本范围都使用Maven的版本范围规范。

Mod文件

通常,我们会使用一个你自己命名的Mod文件开始,并放到你自己的包中。这个是你Mod的入口,并且需要一些特殊的注解来进行标记。

什么是 @Mod 注解

@Mod是一个注解,用于标识一个Mod的入口。并且它的值应当和src/main/resources/META-INF/mods.toml文件中的NodId匹配。

子包

在项目中,你可以按照各个功能建立不同的子包,用于代码的整洁性。

类命名方案

学习过Java的同学会了解基本的命名规则,驼峰命名法等。这个按照自己习惯就好。比如包的命名为全小写。类的命名是首字母大写,后面为驼峰命名法等。按照自己的习惯就好。

版本控制

在平常的项目中,经常使用版本控制(格式为 大版本.小版本.序号)
大版本:Mod方法变化,数据结构变化等
小版本:Mod的添加方块、物品等
序号:Mod的Bug修复等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值