【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.pswp.cn/news/35900.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/35900.shtml
英文地址,請注明出處:http://en.pswp.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種應用場景任…

JavaScript基礎之基于數據類型和引用數據類型

原文合集地址如下,有需要的朋友可以關注 本文地址 數據類型 JavaScript的數據類型有7中,包括6個基本類型和一個引用類型 基本數據類型:number, string, boolean, null, undefined, symbol 引用數據類型:object(數組…

工業物聯網數據橋接教程: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…

H5移動端附件下載

目錄 H5移動端附件下載 1. 使用 window.open() 進行下載 2. 使用 a 標簽創建隱藏的可下載鏈接 3. 使用 iframe 進行下載 4. 使用 FileSaver.js 插件下載 4.1 Vue項目中導入并使用下載附件 4.2 FileSaver.js 的其他知識 H5移動端附件下載 1. 使用 window.open() 進行下載…

ClickHouse的數據類型

1.整數型 固定長度的整型,包括有符號整型或無符號整型。整型范圍(-2n-1~2n-1-1): Int8 - [-128 : 127] Int16 - [-32768 : 32767] Int32 - [-2147483648 : 2147483647] Int64 - [-9223372036854775808 : 9223372036854775807]無符…

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. 預約代駕:代駕小程序允許用戶在需要代駕服務時提前進行預約。用戶可以選擇出發地點、目的地以及預計用車時間,系統會自動匹配最合適的代駕司機,并確保…

黑馬B站八股文學習筆記

視頻地址:https://www.yuque.com/linxun-bpyj0/linxun/vy91es9lyg7kbfnr 大綱 基礎篇 基礎篇要點:算法、數據結構、基礎設計模式 1. 二分查找 要求 能夠用自己語言描述二分查找算法能夠手寫二分查找代碼能夠解答一些變化后的考法 算法描述 前提&a…

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

本文主要記錄幾種常用的div盒子水平垂直都居中的方法。本文主要參考了該篇博文并實踐加以記錄說明以加深理解記憶 css之div盒子居中常用方法大全 本文例子使用的 html body結構下的div 盒子模型如下&#xff1a; <body><div class"container"><div c…

休息是不可能休息的

654.最大二叉樹 分析&#xff1a;相比較遍歷順序構建二叉樹&#xff0c;這個相對簡單。 思路&#xff1a;每次找到數組最大值&#xff0c;然后分割數組 class Solution { public:TreeNode*judge(vector<int>&nums){if(nums.size()0) return nullptr;int maxNum0,in…

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版本&#…