我的世界1.13 mod制作——制作一个Item(二)

article/2025/3/11 8:14:05

(一) 修改mod信息

            forge 默认提供了一个mod配置,ExampleMod.java,接下来修改mod信息。

首先修改的是包的结构,去掉默认的包结构,改成符合mod信息的结构,我这里修改成了com.qiao.mymod.

修改类名,改成自己的(其实改成什么都没啥关系,但是按照习惯改成自己需要的mod名称,这里的mod名称要符合驼峰写法,每个单词首字母大写)MyMod ,同样的需要修改java文件的名称,构造方法名称,不改会报错。

然后修改@Mod注解 为@Mod(“mymod”) 这里双引号内容就是mod的id,id在mod中具有唯一性,同时映射了mod的配置信息。

 

打开resources/META-INF 文件夹下的 mods.toml (resources是资源文件夹),forge会根据@Mod("mymod") 注解找到这个配置文件中相关的配置。(根据以下的中文解释来修改自己的mod,翻译可能不太准确,这个锅可以甩给有道词典)

# This is an example mods.toml file. It contains the data relating to the loading mods.
# There are several mandatory fields (#mandatory), and many more that are optional 
# The overall format is standard TOML format, v0.5.0.
# Note that there are a couple of TOML lists in this file.
# Find more information on toml format here:  https://github.com/toml-lang/toml
# 要加载的mod加载器类型的名称——对于常规FML @Mod mods,它应该是javafml
modLoader="javafml" #mandatory
# A version range to match for said mod loader - for regular FML @Mod it will be the forge version
loaderVersion="[25,)" #mandatory (24 is current forge version)
# A URL to refer people to when problems occur with this mod
issueTrackerURL="http://my.issue.tracker/" #optional
# A list of mods - how many allowed here is determined by the individual mod loader
# logoFile应该放在mods之前 ,如果放在里面,就不会显示了
logoFile="jj.png" #optional
[[mods]] #mandatory
# mod的id,这个和@Mod注解对应,不然会出问题
modId="mymod" #mandatory
# 当前mod的版本, 我这里直接写了版本,默认的会根据jar包来构建这里
version="0.1" #mandatory# Mod 的名称,用来显示在游戏mod列表中
displayName="My Mod" #mandatory
# A URL to query for updates for this mod. See the JSON update specification <here>
updateJSONURL="http://myurl.me/" #optional
# 一个连接,表示mod的官方位置
displayURL="http://example.com/" #optional
# logo 标志 文件名
# logoFile="jj.png" #optional
# mod UI中显示的文本
credits="Thanks for this example mod goes to Java" #optional
# 作者
authors="Love, Cheese and small house plants" #optional
# 说明  以下在单引号中的都会展示在mod信息中
description='''
This is a long form description of the mod. You can write whatever you want hereHave some lorem ipsum.Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed mollis lacinia magna. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed sagittis luctus odio eu tempus. Interdum et malesuada fames ac ante ipsum primis in faucibus. Pellentesque volutpat ligula eget lacus auctor sagittis. In hac habitasse platea dictumst. Nunc gravida elit vitae sem vehicula efficitur. Donec mattis ipsum et arcu lobortis, eleifend sagittis sem rutrum. Cras pharetra quam eget posuere fermentum. Sed id tincidunt justo. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
'''

"说明"  以后的代码是用来设置关联mod的,有些mod有前置mod,这里就不写了,因为我也不会。

mod标志图片的设置: 默认情况下logoFile[[mods]]下面,这个是错误的,应该放在[[mods]] 前面,图片直接放在resources下就行

 

配置文件改完了,然后改jar包的信息。这就需要打开build.gradle  这个文件。

version = '0.1'
group = 'com.qiao.mymod' // http://maven.apache.org/guides/mini/guide-naming-conventions.html
archivesBaseName = 'mymod'

version 是jar包的版本,默认情况下会和mod版本关联

group mod的发布位置

archivesBaseName  jar包名称。(我这里的mymod不会和modid关联,改成什么就看自己了)

熟悉maven的人都知道要怎么引入一个包,就是这三个属性。

将这些信息都改成自己的。因为可以直接运行,暂时不用打jar包。

信息修改完毕,运行,会在mod列表中找到你的mod,是不是自己修改的,如果不是肯定什么地方修改错了。

(二) 新建自己的Item

新建jar包item ,与MyMod.java同级

然后新建类 MyItem.java ,然后让MyItem 继承Item类。

然后创建构造方法匹配超类。根据idea的提示会自动创建的。

到这里一个物品建立完成了。

(三) 注册Item

打开MyMod.java

找到这段换 

 // You can use EventBusSubscriber to automatically subscribe events on the contained class (this is subscribing to the MOD// Event bus for receiving Registry Events)@Mod.EventBusSubscriber(bus=Mod.EventBusSubscriber.Bus.MOD)public static class RegistryEvents {@SubscribeEventpublic static void onBlocksRegistry(final RegistryEvent.Register<Block> blockRegistryEvent) {// register a new block hereLOGGER.info("HELLO from Register Block");}/*** * 订阅 事件 RegistryEvent.Register<Item> * @param itemRegisterEvent*/@SubscribeEventpublic static void onItemRegistry(final  RegistryEvent.Register<Item> itemRegisterEvent){Item.Properties properties=new Item.Properties(); //新建一Item的属性类 Item.Properties 是Item下的一个内部类,可以摁住CTRL+左键点进去看看具体有那些属性properties.group(ItemGroup.FOOD); //将这个物品暂时寄存在食物选卡下面itemRegisterEvent.getRegistry().register(new MyItem(properties).setRegistryName("mymod:my_item"));// .setRegistryName("mymod:my_item") 这个方法是设置Item的Id 规则是modID:物品idLOGGER.info("加载 物品 my_item"); //后台打印个日志}}

在静态内部类RegistryEvents中添加方法  onItemRegistry 方法,参数如上图所示。

方法前面的@SubscribeEvent 注解是告诉FML  这里有个方法订阅了事件。订阅的事件是 关于Item的注册事件(由参数决定)。(注意前面的方块注册,跟这个Item形似)

方法里的内容是注册一个Item ,注释里面很详细。 

然后运行客户端 新建一个世界,打开创造模式,点开食物选卡,新建的物品就躺在那里。

这个物品暂时没有材质,也没有什么功能。

总结

关于新建物品官方文档基本没啥可以参考的。因为forge 各个版本的变化,新建物品的方式方法各不相同。但是物品的注册都是通过FML的事件发布机制来完成的。


http://chatgpt.dhexx.cn/article/j0FG7Q2p.shtml

相关文章

java版我的世界如何做mod_《我的世界手机版》怎么制作mod制作JS教程图文攻略

&#xfeff;我的世界手机版中&#xff0c;用惯其他人分享的JS之后觉得不满意&#xff0c;自己想要创作专属的JS&#xff1f;今天当乐网小编给大家带来的是我的世界手机版的JS基础教程&#xff0c;各位小伙伴学习一下然后自己制作JS吧&#xff1a; 教程作者&#xff1a;s某某世…

【MineCraft】-- 学习我的世界Mod制作引雷附魔书与事件

基于前面搭建的环境继续。 下面完成一个附魔书制作&#xff0c;并且附魔武器后有雷击效果。 一、监听事件两种情况 成员函数 对象构造时AddToEventBus 如&#xff1a; 函数开头上一行加SubscribeEvent 如&#xff1a; 静态函数 类开头Mod.EventBusSubscriber(括号里可写…

【MC 网易-我的世界-mod开发基础笔记】 --- 创建第一个空白Mod

目录 创建Mod文件夹构建Mod的基本目录结构构建行为包基本结构构建脚本文件夹基本结构构建 mod 启动入口脚本 构建资源包基本结构构建国际化文件基本结构自定义物品配置中文名称自定义方块配置中文名称自定义实体配置中文名 构建贴图资源文件夹的基本结构 创建Mod文件夹 在电脑…

我的世界1.13 mod制作——环境搭建(一)

说明&#xff1a;已经玩过好多年《我的世界》&#xff0c;大概从13年开始吧&#xff0c;虽然不算早&#xff0c;但是也不是很晚。因为高度自由、丰富的mod、精美的材质光影&#xff0c;简单的方块游戏风靡世界。最近心血来潮想学学怎么做mod&#xff0c;但是直接从1.13.2直接起…

我的世界MOD制作(2)|| 你的第一个MOD

正文&#xff1a;I. 开发环境配置 我们需要一个带mixin的forge开发环境&#xff0c;这一步相当折磨人&#xff0c;网络不好的话半天时间都得砸这上面&#xff0c;但是不要灰心&#xff0c;过了这个坎接下来基本是顺风顺水。 1. 下载资源 & 修改build.gradle 首先去forge官网…

Ts 简单随机迷宫迷宫地图

直接上代码 //随机地图const { ccclass, property } cc._decorator;ccclass export default class NewClass extends cc.Component {property(cc.Node)mapItem: cc.Node null;property(cc.Node)mapContent: cc.Node null;private mapArr: any [];onLoad() {}start() {}ran…

C++游戏编程--实现鼠标编辑迷宫地图界面

鼠标左键放砖&#xff0c;右键取消。 void Change() {Show();while (true) {ExMessage m;//定义一个消息变量m getmessage(EM_MOUSE);//获取鼠标消息switch (m.message){case WM_MOUSEMOVE:// 鼠标移动的时候画红色的小点putpixel(m.x, m.y, RED);break;case WM_LBUTTONDOWN:/…

台州oj 5061 迷宫地图

5061: 迷宫地图 时间限制(普通/Java):1000MS/3000MS 内存限制:65536KByte 总提交: 114 测试通过:28 描述 在一些迷宫游戏中,往往有多个关卡,每个关卡有不同的地图,地图往往是由n行m列的方格组成,每个格子上可能是通道、墙壁、道具、玩家等。在设计时,…

关于矩形迷宫地图的数组化处理和相应寻路算法的思考

目录 矩形地图的数组化 思路 提取实现 实现过程 &#xff08;1&#xff09;特征 &#xff08;2&#xff09;取点问题 &#xff08;3&#xff09;需要确定的变量值 &#xff08;4&#xff09;另外的 (5)适用的迷宫类型 寻路算法 数组迷宫的特点 数组迷宫的缺点 算法…

C#迷宫Winform小游戏,生成可连通的迷宫地图

上一篇本人已经写了一个控制台小游戏&#xff0c;这次使用Winform来生成可连通的地图&#xff0c;并测试运行游戏 迷宫小游戏控制台 一、先更改控制台游戏的一点点代码&#xff0c;用于测试迷宫是否连通的【即&#xff1a;从起点可以到达终点】。只用更改 MazeUtil.cs的查找路…

迷宫游戏|自动寻径|随机生成迷宫地图|UI|闯关|地图反转

MazeGame 遵循开源协议 MIT 开发工具及运行环境 开发IDE环境 : Visual Studio 2019 代码管理工具: Git 开发语言:C 程序运行环境(开发环境为(Windows10)其他兼容性未知) 依赖库 EasyX 图形界面库 EasyX官网&#xff1a;EasyX Git仓库地址 Gitee:Gitee 仓库 Github:h…

Java程序:迷宫地图生成器

Java程序:迷宫地图生成器 1、运行效果 可以在【0,50】之间随意设置行数和列数,比如设置为25行25列的迷宫地图数组。 迷宫地图的每一个方格,如果是白色,单击就变成黑色,如果是黑色,单击就变成白色。黑色对应数组里的1,白色对应数组里的0。 因为没有采用路径搜索算法来设…

Java 开发实例(第3篇),绘制迷宫1 生成迷宫地图

开发环境&#xff1a; 操作系统Win10。 1.下载Java 15&#xff0c;提取码&#xff1a;soft 2.下载软件 Eclipse 2020-12&#xff0c;提取码&#xff1a;soft 下载本博客的实例工程代码&#xff0c;提取码&#xff1a;soft 前天2月9日在逛B站App时&#xff0c;意外看到一个很…

Python 打印迷宫地图小游戏

在实现玩转小迷宫这个游戏时&#xff0c;分别使用了input()输入函数、print()输出函数、if…elif…else语句、二维列表、while循环、for循环 下面对这些用法再一次重温 1.input()输入函数 在 Python 中&#xff0c;使用内置函数 input() 可以接收用户的键盘输入。input() 函数…

html5的canvas绘制迷宫地图

canvas标签一直是html5的亮点,用它可以实现很多东西。我想用它来绘画像迷宫那样的地图。借助到的工具有瓦片地图编辑器tiled(点击跳转到下载链接)。 如图:如果你想要画像这样的迷宫地图,如果不用canvas,可以通过dom操作拼接一个一个div,以达成这个效果。那样是不是很不合…

深度优先,Kruskal,Prim几种方式生成迷宫地图

小时候玩过一款3D版迷宫&#xff0c;那时还是功能机时代&#xff0c;黑白界面拼凑的伪3D效果还是给我带来了很多快乐。后来出现了智能机&#xff0c;却再也没找到过那样纯粹的迷宫游戏。总算自己找时间做一个出来。 本文主要介绍一下深度优先&#xff0c;Kruskal,Prim几种方式生…

二维数组随机生成地图迷宫_经验分享:三套简单的迷宫地图生成方案

文/兔四 概述:文章基于一种基础的地图,来讨论三套不同的地图生成方案。 文章不会出现跟代码相关的内容,会以较为通俗的语句和不少简单的示意图来表示迷宫的生成方案。其中不少方法来自于游戏界前辈,我根据自己的基础地图做了不少修正(毕竟迷宫和地图的形式多种多样,适合自…

算法自动生成迷宫地图

文章目录 前言一、什么是&#xff08;DFS&#xff09;深度优先算法&#xff1f;深度优先算法实现步骤1.引入库2.初始化参数3.Turtle画方格函数4.开始生成数组并调用Turtle画图 二、什么是&#xff08;BFS&#xff09;广度优先算法&#xff1f;广度优先算法实现步骤1.引入库2.初…

【工具篇】Unity迷宫地图生成器MazeSpawner随机迷宫信手拈来

目录 一.迷宫生成效果 二.使用流程 三.使用场景 四.源码地址 一.迷宫生成效果 二.使用流程 1.导入后结构目录如下,打开prefab文件夹找到MazeSpawner放进场景里面

C++实现随机生成迷宫地图自动完成寻径

#include<iostream> #include<stack> #include<vector> using namespace std;template<class T> class Maze { public:Maze( //默认参数值pair<int, int> initSize make_pair(15, 17),pair<string, string> initStyle m…