我的世界模组开发1.12.2---------(2)第一个物品

上一期我们学习了如何让系统发送文字,这一期,我们就要实现每一个mod开发者最想实现的东西之一------物品(我猜mod开发者们东西应该就是物品,方块,实体,机器方块,维度和新的游戏机制了)

那我们不多BB直接步入正题

首先,先建立一个新包item,然后再键入以下代码:

package fenge.fmltutor.item;
//包声明
import fenge.fmltutor.ExampleMod;
//ExampleMod是mod的主类,主类就是加了@MOD注解的类
import net.minecraft.item.Item;

public class ItemDirBall extends Item {
    //所有的物品都继承自Item类
    public ItemDirBall(){
        this.setUnlocalizedName(ExampleMod.MODID +  ".dirBall");
        //设置UnlocalizedName,用于语言国际化
        this.setRegistryName("dirt_ball");
        //设置物品id
        this.setMaxStackSize(16);
        //设置最大堆叠数
    }
  

}

然后再新建一个类,名为ItemRegistryHandler.java

然后键入以下代码:

package fenge.fmltutor.item;
//包声明
import fenge.fmltutor.ExampleMod;
//主类
import fenge.fmltutor.block.BlockRegistryHandler;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.init.SoundEvents;
import net.minecraft.inventory.EntityEquipmentSlot;
//还是有很多的无用import原因是这是我从我的代码中复制出来的,请把那些无法导入的import删除
import net.minecraft.item.Item;
import net.minecraft.item.ItemArmor;
import net.minecraft.item.ItemBlock;
import net.minecraft.world.World;
import net.minecraftforge.client.event.ModelRegistryEvent;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.common.util.EnumHelper;
import net.minecraftforge.event.RegistryEvent.Register;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import net.minecraftforge.registries.IForgeRegistry;

@EventBusSubscriber
public class ItemRegistryHandler
{
    public static final ItemDirBall DIRT_BALL= new ItemDirBall();
    //我们的物品示例
     @SubscribeEvent
    public static void onRegistry(Register<Item> event)
    {
        IForgeRegistry<Item> registry= event.getRegistry();
        registry.register(DIRT_BALL);
        //注册物品
    }
    @SideOnly(Side.CLIENT)
    private static void registerModel(Item item)
    {
        //给我们的物品添加贴图的方法
        ModelResourceLocation modelResourceLocation = new ModelResourceLocation(item.getRegistryName(), "inventory");
        ModelLoader.setCustomModelResourceLocation(item, 0, modelResourceLocation);
    }
    @SubscribeEvent
    @SideOnly(Side.CLIENT)
    public static void onModelRegistry(ModelRegistryEvent event)
    {
        //为我们的物品添加贴图
        registerModel(DIRT_BALL);
    }
}

然后看向我们的目录resources,在这个目录中依次建立assets.你的ModID.blockstates.你的物品ID.json

在json文件里键入以下代码:

{
  "forge_marker": 1,
  "defaults": {
    "model": "minecraft:builtin/generated",
    "textures": { "layer0": "fmltutor:items/dirt_ball" }
        //fmltutor:items/dirt_ball是你的贴图目录
  },
  "variants": {
    "inventory": [{ "transform": "forge:default-item" }]
  }
}

当然,还有一种添加贴图的方法

在目录assets.你的ModID下建立一个名为model的目录,再在这个目录里建立item目录,再在这个目录里建立"你的物品ID.json"

然后在这个文件里键入以下代码

{
   "parent": "item/generated",
   "textures": {
      "layer0": "fmltutor:items/dirt_ball"
        //fmltutor是modid,dirt_ball是物品id
   }
}

这两种方式推荐第二个,因为以后可以自己制作物品模型(以后我会出教程) 。

最后,在assets目录中建立textures/items/你的物品id.png

贴图一定要是png格式,贴图一定要是png格式,贴图一定要是png格式

贴图一定要是16*16或者32*32的,贴图一定要是16*16或者32*32的,贴图一定要是16*16或者32*32的

最后,打开游戏,输入:

/give @p fmltutor:dirt_ball

你就会发现,你的手里多了一个物品!

但是名字却是item.fmltutor.dirtBall.name

这个时候,在assets目录里新建lang目录,在再新建zh_cn.lang,和en_us.lang键入以下代码:

#en_us英文语言文件

item.fmltutor.dirtBall.name=Dirt Ball //等号两边不要有空格,此注释不要复制

#zh_cn中文语言文件

 item.fmltutor.dirtBall.name=粪之精华 //等号两边不要有空格,此注释不要复制

然后再打开游戏,发现你手里拿的东西的名字变成了“粪之精华” 

耶!

成功了!

没有成功的也不用灰心,当时作者就是因为“:”写成了“:”导致贴图加载失败,当时找了好半天才找出问题。

本文有任何问题或读者的困惑,欢迎评论区留言,我们不见不散,拜拜!!!

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值