Minecraft 1.12.2模组开发(三) 创建一个物品(item)+物品栏

本次我们来介绍一下如何创建一个基础物品:

演示包名:com.Joy187.newmod (之后都简称为包名)

1. 新建 -> 创建一个 包名.init 包

Minecraft 1.12.2模组开发(三) 创建一个物品(item)+物品栏_第1张图片

2.在刚刚创建的init包中新建一个类 ModItems

Minecraft 1.12.2模组开发(三) 创建一个物品(item)+物品栏_第2张图片

3.在util包中新建 -> 接口 -> 名称为 IHasModel -> 完成

Minecraft 1.12.2模组开发(三) 创建一个物品(item)+物品栏_第3张图片

在IHasModel.java 中编辑如下代码:

package com.Joy187.newmod.util; //这个是你的包名,和我的不一样

public interface IHasModel {
	
	public void registerModels();
	
}

4.新建 -> 创建一个 包名.items包

Minecraft 1.12.2模组开发(三) 创建一个物品(item)+物品栏_第4张图片

5.在items包中新建 ItemBase 类

Minecraft 1.12.2模组开发(三) 创建一个物品(item)+物品栏_第5张图片

在ItemBase.java中进行编辑:

package com.Joy187.newmod.items;

import com.Joy187.newmod.Main;
import com.Joy187.newmod.init.ModItems;
import com.Joy187.newmod.util.IHasModel;

import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;

public class ItemBase extends Item implements IHasModel{
								//物品名称     放置的物品栏
	public ItemBase(String name,CreativeTabs tab) {
		setUnlocalizedName(name);
		setRegistryName(name);
		setCreativeTab(tab);
		
		ModItems.ITEMS.add(this);
	}
	
	
	@Override
	public void registerModels() {
		Main.proxy.registerItemRenderer(this, 0, "inventory");
	}
}

6.对包名.CommonProxy.java 进行编辑

package com.Joy187.newmod.proxy;

import net.minecraft.item.Item;

public class CommonProxy {
	public void registerItemRenderer(Item item, int meta,String id) {}
}

7.对包名.ClientProxy.java 进行编辑

package com.Joy187.newmod.proxy;

import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.item.Item;
import net.minecraftforge.client.model.ModelLoader;

public class ClientProxy extends CommonProxy{
	public void registerItemRenderer(Item item, int meta,String id) {
	    //对你自定义的物品进行定位
		ModelLoader.setCustomModelResourceLocation(item, meta, new ModelResourceLocation(item.getRegistryName(), id));
	
	}
}

代码示例:

Minecraft 1.12.2模组开发(三) 创建一个物品(item)+物品栏_第6张图片

8.在util包中新建一个包 -> 命名为 包名.util.handlers

Minecraft 1.12.2模组开发(三) 创建一个物品(item)+物品栏_第7张图片

9.在刚刚创建的handlers包中新建一个类 -> 命名为RegistryHandler

Minecraft 1.12.2模组开发(三) 创建一个物品(item)+物品栏_第8张图片

在 RegistryHandler.java 中进行编辑,之后保存:

package com.Joy187.newmod.util.handlers;

import com.Joy187.newmod.init.ModItems;
import com.Joy187.newmod.util.IHasModel;

import net.minecraft.item.Item;
import net.minecraftforge.client.event.ModelRegistryEvent;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;

@EventBusSubscriber
public class RegistryHandler {
	@SubscribeEvent
	public static void onItemRegister(RegistryEvent.Register event) {
		event.getRegistry().registerAll(ModItems.ITEMS.toArray(new Item[0]));
	}

	@SubscribeEvent
	public static void onModelRegister(ModelRegistryEvent event) {
		for(Item item: ModItems.ITEMS){
			if(item instanceof IHasModel) {
				((IHasModel)item).registerModels();
			}
		}

	}
}

10.对ModItems.java 编写代码:

这里我创建了一个铲子作为我的一个物品,可以根据个人创意进行修改

package com.Joy187.newmod.init;

import java.util.ArrayList;
import java.util.List;

import com.Joy187.newmod.items.ItemBase;

import net.minecraft.item.Item;

public class ModItems {

	public static final List ITEMS = new ArrayList();
	
	 //要全部大写,可以加下划线    //你的物品名称    //放在哪个物品栏           
	public static final Item LABOR_SHOVEL = new ItemBase("labor_shovel", Main.ITEM_TAB);
	//你可以往下续写...
	                        
}

11.在src/main/resources 包中新建三个包,分别命名为lang,models,textures

Minecraft 1.12.2模组开发(三) 创建一个物品(item)+物品栏_第9张图片

你的mod名称实际上是你的modid

Minecraft 1.12.2模组开发(三) 创建一个物品(item)+物品栏_第10张图片

12.在models包下新建 item (单数)包,在textures包下新建 items (复数)包

Minecraft 1.12.2模组开发(三) 创建一个物品(item)+物品栏_第11张图片

这两个文件夹分别放置物品的 物品栏 模型(model) 和实际的材质(texture)

13.新建一无标题文本文件 (对语言文件进行编辑)

Minecraft 1.12.2模组开发(三) 创建一个物品(item)+物品栏_第12张图片

输入代码

//item
item.labor_shovel.name=Labor Shovel 
     //这个应于你的ModItems中的物品名称保持一致 ,等号后面的是你在游戏中的真实方块名称

将其命名为en_us.lang -> 保存在lang包下面就可以了

Minecraft 1.12.2模组开发(三) 创建一个物品(item)+物品栏_第13张图片

14.新建一无标题文本文件 (对物品模型文件进行编辑)

输入代码

{
	"parent": "item/generated",
	"textures": {
		"layer0": "joymod:items/labor_shovel"
		           //你的modid:items/你的物品名称(和ModItems中保持一致)
	}
}

将其命名为 物品名称.json -> 保存在models/item包下面就可以了

Minecraft 1.12.2模组开发(三) 创建一个物品(item)+物品栏_第14张图片

15.对物品材质文件进行操作

将你的材质(.png文件)放入textures/items文件夹下

Minecraft 1.12.2模组开发(三) 创建一个物品(item)+物品栏_第15张图片

演示材质:

labor_shovel.png

16. 保存所有文件,对项目进行刷新,之后进入游戏

Minecraft 1.12.2模组开发(三) 创建一个物品(item)+物品栏_第16张图片

17.个人物品栏

新建一个ItemTab类,用于制作我们的物品栏

ItemTab.java

public class ItemTab extends CreativeTabs{

	public ItemTab( ) {
		super("item_tab" );
	}

	@Override
	public ItemStack getTabIconItem() {
		//这里的参数是你的某一个物品,到时候物品栏会显示该物品的贴图
		return new ItemStack(ModItems.LEI);
	}
	
}

在Main.java中添加一个物品栏的声明:

Main.java

public class Main
{
    public static CreativeTabs ITEM_TAB = new ItemTab( );
    
    //你可以添加更多的个人物品栏
    //public static CreativeTabs BLOCK_TAB = new BlockTab( );
		
}

在resources包中的lang包中的en_us.lang中添加物品栏游戏内名称

itemGroup.item_tab=RE8 Item

18.保存项目,启动游戏

进入存档中,你会发现自己模组的物品都在该物品栏中。
Minecraft 1.12.2模组开发(三) 创建一个物品(item)+物品栏_第17张图片

游戏中成功出现我们的物品,起飞!

Minecraft 1.12.2模组开发(三) 创建一个物品(item)+物品栏_第18张图片

你可能感兴趣的:(我的世界,游戏,开发工具,java)