【Minecraft】Fabric Mod开发完整流程1 - 环境配置与第一个物品

前言

Fabric 是 Minecraft 一款非官方的模组 API,与 Forge mod 不同。它以轻量级和高性能为设计目标,专注于支持新版本的 Minecraft。

Fabric 和 Forge 在各自的加载编译流程上差别很大,所以你很难看见有同时支持二者的 mod,除非做了兼容性处理

Fabric 还支持 kotlin 编程


环境配置

以下及后续的所有教程均基于 fabric 官方 wiki 总结精华与踩坑得来,如有觉得下方内容不够详细的,可以查看原网站:https://fabricmc.net/wiki/zh_cn:tutorial:setup


安装必要前置

JDK17 及以上版本(硬性要求,低于此版本的 JDK 无法编译 Gradle)

Intellij Idea 任意版本

此外,我们还需要使用 fabric 提供的 fabric-example-mod 作为第一个 mod 的开发模板
前往官网的模板生成器,生成你想要的对应 MC 版本模板,我这里使用的是 1.20 的
https://fabricmc.net/develop/template/


配置 gradle

众所周知,这是最最最最恶心的环节,有可能卡的你生无可恋并出现无法预知的弱智错误,在此处我将详细介绍我所踩到的坑以及目前遇到错误的解决方案

解压 template 文件

把上一步下载好的 ZIP 文件解压到任意一个文件夹内,并确保全路径绝对不能包含中文和其他特殊符号(下划线可以)

删除多余的 RAEDME.md .github LICENSE

然后使用 IDEA 打开该项目文件夹
紧接着此时 IDEA 会自动开始配置 gradle,立马点击停止!!!等我们配置代理和镜像源后再重新构建,否则巨慢!!!而且可能直接下载到一半就报错


修改镜像源

配置镜像源以及代理可以参考这个网站:Fabric 镜像与代理配置

settings.gradle 替换为以下内容

pluginManagement {repositories {maven {name = 'Fabric'url = 'https://repository.hanbings.io/proxy'}gradlePluginPortal()}
}

build.gradle 添加如下内容(如果已存在,则直接替换掉)

repositories {maven {url 'https://maven.aliyun.com/nexus/content/groups/public'}maven {url 'https://repository.hanbings.io/proxy'}
}

配置外部代理

是的,即使你配置了镜像源,可能依然会非常卡,如果你掌握了科学上网的方法,那么可以尝试添加一个代理

打开项目目录下的 gradle.properties 文件

添加如下代码

  • proxyHost 即为代理地址(我这边默认就是 127.0.0.1)
  • proxyPort 为你开的代理软件对应的端口
systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=10809

实际上,如果你参考其他教程,可能会在上方顺便注册 https 代理,但是我一旦注册了必定报错而无法下载对应库,所以我就索性删掉了,只留下比较核心的内容


构建 gradle 与反编译

构建

构建的方式很简单,打开 IDEA,右键点击项目目录,选择“重新构建”即可

构建成功的标志是你在构建输出窗口看见 BUILD SUCCESSFUL


反编译

该步骤必须要在 gradle 构建成功后执行,否则会一直卡着动不了

使用管理员权限打开命令提示符,进入项目所在的目录
执行该代码:gradlew genSources

等待时长浮动较大,反正最后构建成功会给你一个大大的绿色提示滴~


第一个物品

此系列参考油管教程:https://www.youtube.com/watch?v=fQYNhfAwLf8&list=PLKGarocXCE1EeLZggaXPJaARxnAbUD8Y_&index=2

制作物品所需的图像资源包:https://url.kaupenjoe.net/yt331/assets

由于油管上最新的教程只有 1.19 的,而目前代码风格有所变动,我会针对 1.20 新改动做出对应解释


物品注册

首先请各位按照下图所示文件结构,在对应位置新建空的 Java 类文件,如果文件已存在就不管
新建的文件将在后续逐步填充,不要在意

在这里插入图片描述

TutorialMod.java

该文件原始的名称应该是 ExampleMod.java

由于 Java 特性,类名必须和文件名一致,故我们可以使用快捷键 shift+f6 快速执行主类名称的更改,同时任何引用此类的位置的名称都会做出对应更改,十分方便!

package com.example;import com.example.item.ModItems;
import net.fabricmc.api.ModInitializer;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;// 主要类,用于初始化模组
public class TutorialMod implements ModInitializer {// 定义模组的MOD_IDpublic static final String MOD_ID = "tutorialmod";public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID);@Overridepublic void onInitialize() {// 在模组初始化时注册自定义物品ModItems.registerModItems();}
}

TutorialModClient.java

定义客户端,目前暂且用不到,先写入以下代码

package com.example;import net.fabricmc.api.ClientModInitializer;public class TutorialModClient implements ClientModInitializer {@Overridepublic void onInitializeClient() {}
}

ModItems.java

在该文件内执行物品的注册操作

当我们注册物品时,务必牢记注册物品所用到的物品名!!!后续为物品添加纹理以及模型时都会用到的

package com.example.item;import com.example.TutorialMod;
import net.fabricmc.fabric.api.item.v1.FabricItemSettings;
import net.minecraft.item.Item;
import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry;
import net.minecraft.util.Identifier;public class ModItems {// 自定义物品示例:ZER_DIAMONDpublic static final Item ZER_DIAMOND = regItem("zer_diamond",new Item(new FabricItemSettings()));// 自定义物品示例:ZER_INGOTpublic static final Item ZER_INGOT = regItem("zer_ingot",new Item(new FabricItemSettings()));// 定义注册物品到游戏的物品注册表的方法// 物品注册需要接收两个参数:1.MODID 2.物品名称private static Item regItem(String name, Item item) {return Registry.register(Registries.ITEM, new Identifier(TutorialMod.MOD_ID, name), item);}// 在模组初始化时调用,用于注册自定义物品public static void registerModItems() {TutorialMod.LOGGER.debug("TutorialMod正在注册Items,MOD_ID:" + TutorialMod.MOD_ID);// 在这里添加更多的自定义物品注册逻辑}
}

资源文件

为 resources 文件夹新增如下图所示结构
在这里插入图片描述

下面将介绍对应结构的作用

  1. lang/en_us.json 定义物品或者方块在游戏内部显示的名称
  2. models/item/zer_diamond.json 定义模型
  3. textures/item/zer_diamond.png 定义模型对应的贴图
  4. fabric.mod.json 模组属性设置
  5. tutorialmod.mixins.json 模组混合属性设置

en_us.json

首先当然是配置我们的语言文件啦

对于我们开发者来说,推荐首先使用英文,后续可以逐步补全中文翻译

所以en_us.json表示当你的 MC 客户端使用英文时显示的翻译,对于的中文翻译文件就是zh_cn.json

填入代码

{// 注意格式 item.MOD_ID.物品名称// 所以知道为什么我要叫你牢记物品注册时用到的名称了吧!"item.tutorialmod.zer_diamond": "Zhiller's Diamond","item.tutorialmod.zer_ingot": "Zhiller's Ingot"
}

zer_diamond.json

在这里配置物品的模型文件

因为当前物品只是一个手拿物品,所以模型可以说就是一个简单的平面,不需要做过多修饰
写入以下代码

{"parent": "item/generated","textures": {"layer0": "tutorialmod:item/zer_diamond"}
}

另外一个方块文件 zer_ingot.json 大家直接如法炮制即可


纹理

在 textures 文件夹下对应的 block 以及 item 文件夹添加方块和物品的纹理文件

注意,纹理文件名必须和方块或物体注册名完全一致!使用 png 格式!


fabric.mod.json

目前仅需修改我打了注释的几个地方的内容,其他的不管

{"schemaVersion": 1,"id": "tutorialmod", // 在这修改MOD_ID"version": "${version}","name": "Example mod", // 你的MOD名字"description": "This is an example description! Tell everyone what your mod is about!","authors": ["zhiller"], // MOD作者"contact": {"homepage": "https://fabricmc.net/","sources": "https://github.com/FabricMC/fabric-example-mod"},"license": "CC0-1.0","environment": "*","entrypoints": {// main入口点文件所在位置"main": ["com.example.TutorialMod"],// client客户端入口点文件所在位置"client": ["com.example.TutorialModClient"]},// 混合文件所在位置"mixins": ["tutorialmod.mixins.json"],"depends": {"fabricloader": ">=0.14.21","minecraft": "~1.20.1","java": ">=17","fabric-api": "*"},"suggests": {"another-mod": "*"}
}

tutorialmod.mixins.json

由于我们在 src 根目录下的 mixin 包内文件没有做任何修改,故下方代码也不需要做任何修改

但请注意要修改该文件的文件名,开头必须是你的 MOD_ID 哦!

{"required": true,"package": "com.example.mixin","compatibilityLevel": "JAVA_17","mixins": ["ExampleMixin"],"injectors": {"defaultRequire": 1}
}

运行!

没错!你目前已经创建了第一个属于你的个人物品,现在进入客户端来看看成果把~

依次点击:gradle->fabric->runClient 执行客户端

在这里插入图片描述


新建一个超平坦世界,输入该指令获取你注册的物品:give @p tutorialmod:zer_diamond 1

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/35900.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java笔记】对象存储服务MinIO

1 MinIO简介 MinIO基于Apache License v2.0开源协议的对象存储服务,可以做为云存储的解决方案用来保存海量的图片,视频,文档。由于采用Golang实现,服务端可以工作在Windows,Linux, OS X和FreeBSD上。配置简单,基本是复…

mac-右键-用VSCode打开

1.点击访达,搜索自动操作 2.选择快速操作 3.执行shell脚本 替换代码如下: for f in "$" doopen -a "Visual Studio Code" "$f" donecommand s保存会出现一个弹框,保存为“用VSCode打开” 5.使用

基于百度语音识别API智能语音识别和字幕推荐系统——深度学习算法应用(含全部工程源码)+测试数据集

目录 前言总体设计系统整体结构图系统流程图 运行环境模块实现1. 数据预处理2. 翻译3. 格式转换4. 音频切割5. 语音识别6. 文本切割7. main函数 系统测试工程源代码下载其它资料下载 前言 本项目基于百度语音识别API,结合了语音识别、视频转换音频识别以及语句停顿…

【人工智能124种任务大集合】-集齐了自然语言处理(NLP),计算机视觉(CV),语音识别,多模态等任务

大家好,我是微学AI,今天给大家介绍一下人工智能124种任务大集合,任务集合主要包括4大类:自然语言处理(NLP)、计算机视觉(CV)、语音识别、多模态任务。 我这里整理了124种应用场景任…

工业物联网数据桥接教程:Modbus 桥接到 MQTT

Modbus 介绍 Modbus 是一种串行通信协议,用于连接工业自动化设备,最初由 Modicon 公司开发,诞生于 1979 年,现在已成为通用的通讯标准之一,广泛用于工业自动化场景。 Modbus 采用主从模式,支持多种传输方…

PyTorch深度学习实战(11)——卷积神经网络

PyTorch深度学习实战(11)——卷积神经网络 0. 前言1. 全连接网络的缺陷2. 卷积神经网络基本组件2.1 卷积2.2 步幅和填充2.3 池化2.3 卷积神经网络完整流程 3. 卷积和池化相比全连接网络的优势4. 使用 PyTorch 构建卷积神经网络4.1 使用 PyTorch 构建 CNN…

Linux学习之sed多行模式

N将下一行加入到模式空间 D删除模式空间中的第一个字符到第一个换行符 P打印模式空间中的第一个字符到第一个换行符 doubleSpace.txt里边的内容如下: goo d man使用下边的命令可以实现把上边对应的内容放到doubleSpace.txt。 echo goo >> doubleSpace.txt e…

sealos安装k8s

一、前言 1、我前面文章有写过使用 kubeadm 安装的方式,大家可以去参考 (二)k8s集群安装,有一系列的k8s文章说明 2、安装k8s的方式有很多 kubeadmsealoskubespray等等 3、关于sealos来安装 k8s ,也是非常建议大家去…

Idea 反编译jar包

实际项目中,有时候会需要更改jar包源码来达到业务需求,本文章将介绍一下如何通过Idea来进行jar反编译 1、Idea安装decompiler插件 2、找到decompiler插件文件夹 decompiler插件文件夹路径为:idea安装路径/plugins/java-decompiler/lib 3、…

可独立创建应用的SaaS多租户低代码平台之租户的应用管理说明

在IT系统中,“租户”(tenant)通常用于指代一种多租户架构(multi-tenancy),它是一种软件架构模式,允许多个用户或组织共享相同的应用程序或系统实例,但彼此之间的数据和配置被隔离开来…

C#软件外包开发框架

C# 是一种由微软开发的多范式编程语言,常用于开发各种类型的应用程序,从桌面应用程序到移动应用程序和Web应用程序。在 C# 开发中,有许多框架和库可供使用,用于简化开发过程、提高效率并实现特定的功能。下面和大家分享一些常见的…

代驾小程序怎么做

代驾小程序是一款专门为用户提供代驾服务的手机应用程序。它具有以下功能: 1. 预约代驾:代驾小程序允许用户在需要代驾服务时提前进行预约。用户可以选择出发地点、目的地以及预计用车时间,系统会自动匹配最合适的代驾司机,并确保…

div 中元素居中的N种常用方法

本文主要记录几种常用的div盒子水平垂直都居中的方法。本文主要参考了该篇博文并实践加以记录说明以加深理解记忆 css之div盒子居中常用方法大全 本文例子使用的 html body结构下的div 盒子模型如下&#xff1a; <body><div class"container"><div c…

Springboot 实践(1)MyEclipse2019创建maven工程

项目讲解步骤&#xff0c;基于本机已经正确安装Java 1.8.0及MyEclipse2019的基础之上&#xff0c;Java及MyEclipse的安装&#xff0c;请参考其他相关文档&#xff0c;Springboot 实践文稿不再赘述。项目创建讲解马上开始。 一、首先打开MyEclipse2019&#xff0c;进入工作空间选…

Linux系统下安装Git软件

环境说明 Linux系统&#xff1a;CentOS 7.9 安装GCC等 JDK版本&#xff1a;jdk-8u202-linux-x64.tar.gz Maven版本&#xff1a;apache-maven-3.8.8-bin.tar.gz 在以上环境下安装Git&#xff08;git-2.41.0.tar.gz&#xff09;软件。 查看是否安装Git软件 查看Git版本&#…

如何建设指标管理平台,实现企业运营效率提升

随着企业数字化转型的深入推进&#xff0c;建设指标管理平台已经成为企业数字化转型的重要组成部分。 建设指标管理平台可以帮助企业更好地了解业务数据和业务指标&#xff0c;实现数据可视化和智能化分析&#xff0c;提高企业的决策效率和管理水平。 在过去&#xff0c;企业通…

最小路径和——力扣64

文章目录 题目描述动态规划题目描述 动态规划 class Solution {public:int minPathSum(vector<vector<int>>

Python爬虫(十一)_案例:使用正则表达式的爬虫

本章将结合先前所学的爬虫和正则表达式知识&#xff0c;做一个简单的爬虫案例&#xff0c;更多内容请参考:Python学习指南 现在拥有了正则表达式这把神兵利器&#xff0c;我们就可以进行对爬取到的全部网页源代码进行筛选了。 下面我们一起尝试一下爬取内涵段子网站&#xff1…

2023年国赛数学建模思路 - 案例:异常检测

文章目录 赛题思路一、简介 -- 关于异常检测异常检测监督学习 二、异常检测算法2. 箱线图分析3. 基于距离/密度4. 基于划分思想 建模资料 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 一、简介 – 关于异常…

软考高级之系统架构师之数据通信与计算机网络

概念 OSPF 在划分区域之后&#xff0c;OSPF网络中的非主干区域中的路由器对于到外部网络的路由&#xff0c;一定要通过ABR(区域边界路由器)来转发&#xff0c;既然如此&#xff0c;对于区域内的路由器来说&#xff0c;就没有必要知道通往外部网络的详细路由&#xff0c;只要由…