【Minecraft】Fabric Mod开发完整流程2 - 创造模式物品栏与第一个方块

创造模式物品栏


添加到当前已有物品栏

再添加自定义的创造模式物品栏之前,请确保你的确有这个需求!否则建议直接添加到当前已有的物品栏内部

创建新文件:com/example/item/ModItemGroup.java

package com.example.item;import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroup;
import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroupEntries;
import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents;
import net.minecraft.item.ItemGroup;
import net.minecraft.item.ItemGroups;
import net.minecraft.item.ItemStack;
import net.minecraft.text.Text;public class ModItemGroup {// 定义我们要把什么物品添加到物品栏里面private static void addItemsToGroup(FabricItemGroupEntries entries){entries.add(ModItems.ZER_DIAMOND);entries.add(ModItems.ZER_INGOT);}// 注册物品栏方法public static void registerItemGroup(){// 添加到已有的物品栏INGREDIENTS里面ItemGroupEvents.modifyEntriesEvent(ItemGroups.INGREDIENTS).register(ModItemGroup::addItemsToGroup);}
}

最后别忘了在 TutorialMod.java 里面执行初始化

package com.example;import com.example.item.ModItemGroup;
import com.example.item.ModItems;
import net.fabricmc.api.ModInitializer;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class TutorialMod implements ModInitializer {...@Overridepublic void onInitialize() {ModItems.registerModItems();// 在这里注册物品栏哦!// 由于我们需要使用到自定义物品,所以注册物品栏顺序必须晚于物品注册ModItemGroup.registerItemGroup();}
}

最终结果:
在这里插入图片描述


注册自定义物品栏

其他内容保持不变,我们仅需修改 ModItemGroup.java

package com.example.item;import com.example.TutorialMod;
import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroup;
import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroupEntries;
import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents;
import net.minecraft.item.ItemGroup;
import net.minecraft.item.ItemGroups;
import net.minecraft.item.ItemStack;
import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry;
import net.minecraft.text.Text;
import net.minecraft.util.Identifier;public class ModItemGroup {// 注册的物品栏private static final ItemGroup ZER_GROUP = FabricItemGroup.builder()// 物品栏显示的名称// Text.translatable表示根据lang文件下的不同语言来翻译名称.displayName(Text.translatable("itemgroup.tutorialmod"))// 选择一个物品作为物品栏图标.icon(() -> new ItemStack(ModItems.ZER_INGOT))// 选择你要加入物品栏的物品.entries((displayContext, entries) -> {entries.add(ModItems.ZER_DIAMOND);entries.add(ModItems.ZER_INGOT);}).build();// 注册物品栏public static void registerItemGroup() {TutorialMod.LOGGER.debug(TutorialMod.MOD_ID + "已经创建好物品栏了");// 在这里注册自定义物品栏Registry.register(Registries.ITEM_GROUP,new Identifier(TutorialMod.MOD_ID, "zer_group"),ZER_GROUP);}
}

别忘了在 en_us.json 或者 zh_cn.json 添加对应名称翻译哦!

{"item.tutorialmod.zer_diamond": "Zhiller's Diamond","item.tutorialmod.zer_ingot": "Zhiller's Ingot","itemgroup.tutorialmod": "Zhiller's ItemGroup"
}

打开游戏,发现创造模式下物品栏多出来了一个,点进去就可以看见我们注册好的物品栏了

物品栏内部有两个我们上一期制作的自定义物品

在这里插入图片描述


创建方块

资源文件下载:https://kaupenjoe.net/files/Minecraft/Videos/MBKJ2023-51%20-%20Fabric%201.20.X%20Blocks/


方块注册流程

方块注册和物品注册基本上没啥区别

但要注意,对于方块,需要注册两次:一次是注册手上拿着的物品,一次是注册放在地上的方块

创建管理方块注册的类:com/example/block/ModBlocks.json

package com.example.block;import com.example.TutorialMod;
import net.fabricmc.fabric.api.item.v1.FabricItemSettings;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.minecraft.block.Block;
import net.minecraft.block.Blocks;
import net.minecraft.item.BlockItem;
import net.minecraft.item.Item;
import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry;
import net.minecraft.sound.BlockSoundGroup;
import net.minecraft.util.Identifier;public class ModBlocks {// copyOf表示直接复制现有方块的属性(比如硬度、可开采性以及亮度可堆叠啥的)// sounds表示直接复制现有方框的声音(如行走表面声音、破坏声音)public static final Block ZER_BLOCK = regBlock("zer_block",new Block(FabricBlockSettings.copyOf(Blocks.IRON_BLOCK).sounds(BlockSoundGroup.AMETHYST_BLOCK)));public static final Block RAW_ZER_BLOCK = regBlock("raw_zer_block",new Block(FabricBlockSettings.copyOf(Blocks.IRON_BLOCK).sounds(BlockSoundGroup.AMETHYST_BLOCK)));// 再注册可放置的实体方块private static Block regBlock(String name, Block block){regBlockItem(name, block);return Registry.register(Registries.BLOCK,new Identifier(TutorialMod.MOD_ID,name),block);}// 先注册方块物品private static Item regBlockItem(String name, Block block){return Registry.register(Registries.ITEM,new Identifier(TutorialMod.MOD_ID,name),new BlockItem(block, new FabricItemSettings()));}public static void registerModBlocks(){TutorialMod.LOGGER.debug(TutorialMod.MOD_ID+"的方块已加载完毕");}
}

最后别忘了在主入口中执行初始化

package com.example;import com.example.block.ModBlocks;
import com.example.item.ModItemGroup;
import com.example.item.ModItems;
import net.fabricmc.api.ModInitializer;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class TutorialMod implements ModInitializer {...@Overridepublic void onInitialize() {ModItems.registerModItems();ModBlocks.registerModBlocks(); // 初始化方块管理类ModItemGroup.registerItemGroup();}
}

材质纹理处理

blockstates

方块状态文件夹下创建 blockstates/zer_block.json

{"variants": {"": {"model": "tutorialmod:block/zer_block"}}
}

models/block

在这里设置方块的渲染模型,创建文件 models/block/zer_block.json

{"parent": "block/cube_all","textures": {"all": "tutorialmod:block/zer_block"}
}

models/item

创建手持方块的模型,创建文件 models/item/zer_block.json

这里不需要写啥了,直接继承前面定义的方块模型即可

{"parent": "tutorialmod:block/zer_block"
}

然后就是翻译文件的内容添加啦,这里就不多做赘述了,大家按照这个模板来做就可以了


成果展示

中途我切换了一下资源包,改成了下面红色的宝石,之前是蓝色的,纹理名称都没有改变,只是图片变了而已,没有影响滴~

在这里插入图片描述


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

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

相关文章

世界算力简史(下)

世界算力简史(上) 世界算力简史(中) 今天终于要完结了…… █ 1980-1990:PC时代 IBM-PC和“兼容机” 上一篇,我们说到,70年代微处理器崛起,使得个人电脑开始大量出现。 这种情况&…

怎么裁剪视频大小尺寸?简单的裁剪方法分享

怎么裁剪视频的画面大小尺寸呢?有时当我们下载下来一段视频,由于视频的画面大小比例不同,会有很多的黑边,我们不管是观看还是进行二次编辑都非常影响体验,而调整视频画面比例以适应观众的设备或平台,比如将…

绽放趋势:Python折线图数据可视化艺术

文章目录 一 json数据格式1.1 json数据格式认识1.2 Python数据和Json数据的相互转换 二 pyecharts模块2.1 pyecharts概述2.2 pyecharts模块安装 三 pyecharts快速入门3.1 基础折线图3.2 pyecharts配置选项3.2.1 全局配置选项 3.4 折线图相关配置3.4.1 .add_yaxis相关配置选项3.…

检测文本是否由AI生成,GPT、文心一言等均能被检测

背景 目前很多机构推出了ChatGPT等AI文本检测工具,但是准确率主打一个模棱两可,基本和抛硬币没啥区别。 先说结论,我们对比了常见的几款AI检测工具,copyleaks检测相比较而言最准确。 检测文本 AI文本片段1 来源:G…

【Opencv入门到项目实战】(九):项目实战|信用卡识别|模板匹配|(附代码解读)

所有订阅专栏的同学可以私信博主获取源码文件 文章目录 0.背景介绍1.模板处理1.1模板读取1.2预处理1.3轮廓计算 2.输入图像处理2.1图形读取2.2预处理2.3轮廓计算2.4计算匹配得分 3.小结 0.背景介绍 接下来我们正式进入项目实战部分,这一章要介绍的是一个信用卡号识…

五粮液快闪酒吧亮相大运会,在传承中彰显创新精神

摇风、糖塑、弄窑、趣闻、琉璃、沉香、绣彩、刻花......一座以“中国风,巴蜀韵”为主题的快闪酒吧,是五粮液献给中外来宾的“和美之礼”,一项项身临其境的传统文化体验让全球友人仿佛“梦回大唐盛世,再现繁华风尚”。 &#xff0…

面试热题(反转链表)

给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right 。请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回 反转后的链表 。 链表的题&#xff0c;大部分都可以用指针或者递归可以做&#xff0c;指针如果做不出来的话&#xff0c;…

【腾讯云 Cloud Studio 实战训练营】深度体验 | 使用腾讯云 Cloud Studio 快速构建 Vue + Vite 完成律师 H5 页面

【腾讯云 Cloud Studio 实战训练营】深度体验 | 使用腾讯云 Cloud Studio 快速构建 Vue Vite 完成律师 H5 页面 写在前面的话一、腾讯云 Cloud Studio 介绍1.1 Cloud Studio 应用场景1.2 Cloud Studio 开发优势 二、沉浸式体验开发快速构建 H5 页面2.1 注册与登录 Cloud Studi…

React Dva项目小优化之redux-action

之前 我们讲过 models 接下啦 我们来给大家讲一个新的库 这个库的话 有最好 没有影响也不大 它主要是帮助我们处理 action的 我们直接在 GitHub 官网上搜索 redux-action 我们搜出来 第一个就是 从星数来看 还是非常优秀的 我们拉下来 找到这个Documentation 然后点击进去 进…

JVM垃圾回收篇-垃圾回收器

JVM垃圾回收篇-垃圾回收器 串行垃圾回收器 Serial串行&#xff1a;为单线程环境设计且只使用一个线程进行垃圾回收&#xff0c;会暂停所有用户的线程&#xff0c;所以不适合服务器环境&#xff0c;适用于堆内存小&#xff0c;适合于个人电脑 开启串行垃圾回收 -XX:UseSeria…

Spring整合MyBatis(详细步骤)

Spring与Mybatis的整合&#xff0c;大体需要做两件事&#xff0c; 第一件事是:Spring要管理MyBatis中的SqlSessionFactory 第二件事是:Spring要管理Mapper接口的扫描 具体的步骤为: 步骤1:项目中导入整合需要的jar包 <dependency><!--Spring操作数据库需要该jar包…

2023年初中信息技术学科暑假备课

目录 2023年初中信息技术学科暑假备课1. 创意空间1.1 教师的空间1.2 学生的空间1.3 关于FTP服务器设置 2. 什么是编程2.1 编程语言2.2 人人都应学好编程2.3. 编程难吗&#xff1f;2.4 python用途 3. 开发环境3.1 打开IDLE3.2 IDLE窗口3.2.1 shell窗口和编辑窗口 4. 项目式教学4…

使用雅可比行列式方法求Henon映射的lyapunov exponent

雅可比行列式方法 计算Henon映射的Lyapunov exponent图谱,算法描述为: 0:初始化:初始化用到的值。参数a:[0,1.4],b:0.3,初始值x和y:1,迭代次数M:2000。 1:遍历参数a:计算不同a值所对应的Henon映射的Lyapunov exponent图谱。 2:迭代M次: 计算得到Henon映射的…

【VSCode】查看二进制文件

1.安装插件Hex Editor 2.打开二进制文件 3.执行Hex Editor命令

通用FIR滤波器的verilog实现(内有Lowpass、Hilbert参数生成示例)

众所周知&#xff0c;Matlab 中的 Filter Designer 可以直接生成 FIR 滤波器的 verilog 代码&#xff0c;可以方便地生成指定阶数、指定滤波器参数的高通、低通、带通滤波器&#xff0c;生成的 verilog 代码也可以指定输入输出信号的类型和位宽。然而其生成的代码实在算不上美观…

统计列表加小计

提供个思路&#xff0c;欢迎其他大佬指正 注意使用 排序&#xff08;seq&#xff09;&#xff0c;group by&#xff0c;union all SELECTf.* FROM(SELECTcus_id,max( cusname ) cusname,NULL dodate,sum( money ) sumMoney,NULL payed,NULL unpayed,1 seq FROMtb_outbase GRO…

python numpy数组水平和垂直合并

1 水平Horizontal合并 Horizontal:水平向右拉长 利用np.hstack()&#xff1a;原始数据size可以不一致 利用np.concatenate()&#xff1a;原始数据size可以不一致 import numpy as np # 三个一维数组 array1 np.array([1, 2, 3]) array2 np.array([4, 5, 6]) array3 np.ar…

【数据结构OJ题】移除元素

原题链接&#xff1a;https://leetcode.cn/problems/remove-element/ 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 方法一&#xff1a;暴力删除&#xff0c;挪动数据覆盖。即遍历整个nums[ ]数组&#xff0c;遇到值等于val的元素&#xff0c;就将整…

JVM工作的总体机制概述

JDK、JRE、JVM关系回顾 JVM&#xff1a;Java Virtual Machine&#xff0c;翻译过来是Java虚拟机JRE&#xff1a;Java Runtime Environment&#xff0c;翻译过来是Java运行时环境 JREJVMJava程序运行时所需要的类库JDK&#xff1a;Java Development Kits&#xff0c;翻译过来是…

电脑怎么查看连接过的WIFI密码(测试环境win11,win10也能用)

电脑怎么查看连接过的WIFI密码 方法一&#xff1a;适用于正在连接的WIFI密码的查看 打开设置 点击“网络和Internet”&#xff0c;在下面找到“高级网络设置”点进去 在下面找到 “更多网络适配器选项” 点进去 找到 WLAN &#xff0c;然后双击它 5.然后点击“无线属性” 6.…