本帖最后由 zkm00323 于 2017-1-14 19:47 编辑
现在我们来制作一个物品
1.新建item文件
我们可以新建一个放物品类的包,再在里面新建一个class
我们让ItemBloodsave来继承Item,然后我们写一个ItemCrystal的构造函数↓
public class ItemBloodsave extends Item{
public ItemBloodsave(){
setUnlocalizedName("itembloodsave");
setRegistryName("itembloodsave");
setCreativeTab(CreativeTabs.MATERIALS);
}
}unlocalizedName:注册外部名,用于写lang文件
setRegistryName:注册内部名,必须小写,游戏内部运作,以及读取贴图用
setCreativeTab:设置物品所在物品栏
如果你跟我一样懒,外部名和内部名写一样也是没关系的
2.注册物品
接下来我们要注册这个物品
在ModItems里写↓
public class ModItems {
public static Item itembloodsave = new ItemBloodsave();
public static void init(){
GameRegistry.register(itembloodsave);
}
public static void register(){
registerinit(itembloodsave);
}
public static void registerinit(Item item){
ModelLoader.setCustomModelResourceLocation(item, 0, new ModelResourceLocation(item.getRegistryName() , "inventory"));
}
}
init之后让Main呼叫
registe则是之后让客户端来呼叫
在CommonProxy里我们写
public interface CommonProxy {
public void init();
}
再来让ClientProxy重写这个方法,并且呼叫ModItems.register()
public class ClientProxy implements CommonProxy{
public void init(){
ModItems.register();
}
}
最后,在Main里的preInit方法呼叫ModItems.init()以及proxy.init()
@EventHandler
public void preInit(FMLPreInitializationEvent event){
ModItems.init();
proxy.init();
}
注意proxy.init()请务必放在preInit!并且在物品,方块,实体等注册完以后呼叫
ModelLoader.setCustomModelResourceLocation();这个渲染注册似乎
必须在preinit时呼叫才能够正常使用,当时苦恼了3天为什么贴图显示不出来
3.贴图以及model
1.8以后的每个物品和方块等都要写相对应的json文件
可以说是比较麻烦了,但也可以说自定义的东西外形更方便了
在src/main/resources下新建assets.modID......
这里新手没有把握请和的用一模一样的包名
Moditems.registerinit里面的ModelLoader.setCustomModelResourceLocation(item, 0, new ModelResourceLocation(item.getRegistryName() , "inventory"));
的item.getRegistryName()="soa:itembloodsave"
所以我们的json文件名就必须是itembloodsave才会被读取到,并且放在models.item里
在models.item里新建一个json文件
在里面输入下
{
"parent": "item/generated",
"textures": {
"layer0": "soa:items/itembloodsave"
}
}
"textures":贴图
"layer0":layer0贴图所在路径"modID:items/贴图名"
"parent":继承于哪里,这里继承的是mc
原版里的文件,我们可以在这里找到↓
最后我们往textures.items里丢入图片
附赠贴图
当然你可以自己画
好的我们现在可以打开游戏看看了
好其实今天的过程也是非常基础简单,下一节我们来玩ntb!
所有文件最后代码↓(供检查用)
src 教程3.rar
(5.07 KB, 下载次数: 181)
现在我们来制作一个物品
1.新建item文件
我们可以新建一个放物品类的包,再在里面新建一个class

我们让ItemBloodsave来继承Item,然后我们写一个ItemCrystal的构造函数↓
public class ItemBloodsave extends Item{
public ItemBloodsave(){
setUnlocalizedName("itembloodsave");
setRegistryName("itembloodsave");
setCreativeTab(CreativeTabs.MATERIALS);
}
}unlocalizedName:注册外部名,用于写lang文件
setRegistryName:注册内部名,必须小写,游戏内部运作,以及读取贴图用
setCreativeTab:设置物品所在物品栏
如果你跟我一样懒,外部名和内部名写一样也是没关系的
2.注册物品
接下来我们要注册这个物品

在ModItems里写↓
public class ModItems {
public static Item itembloodsave = new ItemBloodsave();
public static void init(){
GameRegistry.register(itembloodsave);
}
public static void register(){
registerinit(itembloodsave);
}
public static void registerinit(Item item){
ModelLoader.setCustomModelResourceLocation(item, 0, new ModelResourceLocation(item.getRegistryName() , "inventory"));
}
}
init之后让Main呼叫
registe则是之后让客户端来呼叫
在CommonProxy里我们写
public interface CommonProxy {
public void init();
}
再来让ClientProxy重写这个方法,并且呼叫ModItems.register()
public class ClientProxy implements CommonProxy{
public void init(){
ModItems.register();
}
}
最后,在Main里的preInit方法呼叫ModItems.init()以及proxy.init()
@EventHandler
public void preInit(FMLPreInitializationEvent event){
ModItems.init();
proxy.init();
}
注意proxy.init()请务必放在preInit!并且在物品,方块,实体等注册完以后呼叫
ModelLoader.setCustomModelResourceLocation();这个渲染注册似乎
必须在preinit时呼叫才能够正常使用,当时苦恼了3天为什么贴图显示不出来
3.贴图以及model
1.8以后的每个物品和方块等都要写相对应的json文件
可以说是比较麻烦了,但也可以说自定义的东西外形更方便了
在src/main/resources下新建assets.modID......

这里新手没有把握请和的用一模一样的包名
Moditems.registerinit里面的ModelLoader.setCustomModelResourceLocation(item, 0, new ModelResourceLocation(item.getRegistryName() , "inventory"));
的item.getRegistryName()="soa:itembloodsave"
所以我们的json文件名就必须是itembloodsave才会被读取到,并且放在models.item里
在models.item里新建一个json文件

在里面输入下
{
"parent": "item/generated",
"textures": {
"layer0": "soa:items/itembloodsave"
}
}
"textures":贴图
"layer0":layer0贴图所在路径"modID:items/贴图名"
"parent":继承于哪里,这里继承的是mc
原版里的文件,我们可以在这里找到↓

最后我们往textures.items里丢入图片

附赠贴图
当然你可以自己画
好的我们现在可以打开游戏看看了


好其实今天的过程也是非常基础简单,下一节我们来玩ntb!
所有文件最后代码↓(供检查用)
现在我们来制作一个物品
1.新建item文件
我们可以新建一个放物品类的包,再在里面新建一个class
我们让ItemBloodsave来继承Item,然后我们写一个ItemCrystal的构造函数↓
public class ItemBloodsave extends Item{
public ItemBloodsave(){
setUnlocalizedName("itembloodsave");
setRegistryName("itembloodsave");
setCreativeTab(CreativeTabs.MATERIALS);
}
}unlocalizedName:注册外部名,用于写lang文件
setRegistryName:注册内部名,必须小写,游戏内部运作,以及读取贴图用
setCreativeTab:设置物品所在物品栏
如果你跟我一样懒,外部名和内部名写一样也是没关系的
2.注册物品
接下来我们要注册这个物品
在ModItems里写↓
public class ModItems {
public static Item itembloodsave = new ItemBloodsave();
public static void init(){
GameRegistry.register(itembloodsave);
}
public static void register(){
registerinit(itembloodsave);
}
public static void registerinit(Item item){
ModelLoader.setCustomModelResourceLocation(item, 0, new ModelResourceLocation(item.getRegistryName() , "inventory"));
}
}
init之后让Main呼叫
registe则是之后让客户端来呼叫
在CommonProxy里我们写
public interface CommonProxy {
public void init();
}
再来让ClientProxy重写这个方法,并且呼叫ModItems.register()
public class ClientProxy implements CommonProxy{
public void init(){
ModItems.register();
}
}
最后,在Main里的preInit方法呼叫ModItems.init()以及proxy.init()
@EventHandler
public void preInit(FMLPreInitializationEvent event){
ModItems.init();
proxy.init();
}
注意proxy.init()请务必放在preInit!并且在物品,方块,实体等注册完以后呼叫
ModelLoader.setCustomModelResourceLocation();这个渲染注册似乎
必须在preinit时呼叫才能够正常使用,当时苦恼了3天为什么贴图显示不出来
3.贴图以及model
1.8以后的每个物品和方块等都要写相对应的json文件
可以说是比较麻烦了,但也可以说自定义的东西外形更方便了
在src/main/resources下新建assets.modID......
这里新手没有把握请和的用一模一样的包名
Moditems.registerinit里面的ModelLoader.setCustomModelResourceLocation(item, 0, new ModelResourceLocation(item.getRegistryName() , "inventory"));
的item.getRegistryName()="soa:itembloodsave"
所以我们的json文件名就必须是itembloodsave才会被读取到,并且放在models.item里
在models.item里新建一个json文件
在里面输入下
{
"parent": "item/generated",
"textures": {
"layer0": "soa:items/itembloodsave"
}
}
"textures":贴图
"layer0":layer0贴图所在路径"modID:items/贴图名"
"parent":继承于哪里,这里继承的是mc
原版里的文件,我们可以在这里找到↓
最后我们往textures.items里丢入图片
附赠贴图
好的我们现在可以打开游戏看看了
好其实今天的过程也是非常基础简单,下一节我们来玩ntb!
所有文件最后代码↓(供检查用)
2021.12 数据,可能有更多内容
现在我们来制作一个物品
1.新建item文件
我们可以新建一个放物品类的包,再在里面新建一个class

我们让ItemBloodsave来继承Item,然后我们写一个ItemCrystal的构造函数↓
public class ItemBloodsave extends Item{
public ItemBloodsave(){
setUnlocalizedName("itembloodsave");
setRegistryName("itembloodsave");
setCreativeTab(CreativeTabs.MATERIALS);
}
}unlocalizedName:注册外部名,用于写lang文件
setRegistryName:注册内部名,必须小写,游戏内部运作,以及读取贴图用
setCreativeTab:设置物品所在物品栏
如果你跟我一样懒,外部名和内部名写一样也是没关系的
2.注册物品
接下来我们要注册这个物品

在ModItems里写↓
public class ModItems {
public static Item itembloodsave = new ItemBloodsave();
public static void init(){
GameRegistry.register(itembloodsave);
}
public static void register(){
registerinit(itembloodsave);
}
public static void registerinit(Item item){
ModelLoader.setCustomModelResourceLocation(item, 0, new ModelResourceLocation(item.getRegistryName() , "inventory"));
}
}
init之后让Main呼叫
registe则是之后让客户端来呼叫
在CommonProxy里我们写
public interface CommonProxy {
public void init();
}
再来让ClientProxy重写这个方法,并且呼叫ModItems.register()
public class ClientProxy implements CommonProxy{
public void init(){
ModItems.register();
}
}
最后,在Main里的preInit方法呼叫ModItems.init()以及proxy.init()
@EventHandler
public void preInit(FMLPreInitializationEvent event){
ModItems.init();
proxy.init();
}
注意proxy.init()请务必放在preInit!并且在物品,方块,实体等注册完以后呼叫
ModelLoader.setCustomModelResourceLocation();这个渲染注册似乎
必须在preinit时呼叫才能够正常使用,当时苦恼了3天为什么贴图显示不出来
3.贴图以及model
1.8以后的每个物品和方块等都要写相对应的json文件
可以说是比较麻烦了,但也可以说自定义的东西外形更方便了
在src/main/resources下新建assets.modID......

这里新手没有把握请和的用一模一样的包名
Moditems.registerinit里面的ModelLoader.setCustomModelResourceLocation(item, 0, new ModelResourceLocation(item.getRegistryName() , "inventory"));
的item.getRegistryName()="soa:itembloodsave"
所以我们的json文件名就必须是itembloodsave才会被读取到,并且放在models.item里
在models.item里新建一个json文件

在里面输入下
{
"parent": "item/generated",
"textures": {
"layer0": "soa:items/itembloodsave"
}
}
"textures":贴图
"layer0":layer0贴图所在路径"modID:items/贴图名"
"parent":继承于哪里,这里继承的是mc
原版里的文件,我们可以在这里找到↓

最后我们往textures.items里丢入图片

附赠贴图

好的我们现在可以打开游戏看看了


好其实今天的过程也是非常基础简单,下一节我们来玩ntb!
所有文件最后代码↓(供检查用)
zkm00323 发表于 2017-1-14 22:37
上一篇:2.基本mod框架下一篇:4.用nbt玩耍
能写一个新建block的教程吗
本帖最后由 白天 于 2017-2-7 23:17 编辑
不是很懂mod大佬……话说帖子结尾是NBT还是NTB?
好吧我看到下一个帖子了……我以为是我看错了
不是很懂mod大佬……话说帖子结尾是NBT还是NTB?
好吧我看到下一个帖子了……我以为是我看错了
本帖最后由 nnsdldy 于 2017-7-8 23:08 编辑
楼主这个GameRegistry里面的register()是不是被取消了?我打出来报错,你的代码我打开来也是报错。
-----------------------------------------------------------------
我换了个老版本的forge果然不报错了。。。。。。
-----------------------------------------------------------------
我换了个老版本的forge果然不报错了。。。。。。
nnsdldy 发表于 2017-7-8 16:48
楼主这个GameRegistry里面的register()是不是被取消了?我打出来报错,你的代码我打开来也是报错 ...
可能是你forge版本和我不一样,方法名改了吧,eclipse应该会提示相近的方法名,懵一下看会不会中
这样写完之后直接丢到服务端就能跑?
辛苦了辛苦了
怎么新建json文件?
怎么在游戏里显示聊天信息?
items下和图片一起的db文件怎么出来的?之前一直贴图不成功,用了压缩包里的图片才成功,有什么要求吗?
nnsdldy 发表于 2017-7-8 16:48
楼主这个GameRegistry里面的register()是不是被取消了?我打出来报错,你的代码我打开来也是报错 ...
用这个
- ForgeRegistries.ITEMS.register(itembloodsave);
zkm00323 发表于 2017-7-29 18:56
可能是你forge版本和我不一样,方法名改了吧,eclipse应该会提示相近的方法名,懵一下看会不会中 ...
那1.12.2forge2768呢?
楼主请问1.12.2怎么注册物品啊