Minecraft Fabric模组开发 (二) 第一个物品

第一个物品

  • 创建第一个物品

    • 在模组主文件类中实例化一个新的Item类型对象,实例化时需要传入一个Settings类型参数。Settings参数可以设置物品的基本属性,比如物品堆叠数量,所属创造物品栏等。

      • public static final Item GREEN_APPLE_ITEM = new Item(new Item.Settings());
    • onInitialize()方法中,注册我们的物品,使用Registry.register()进行注册。该方法有三个参数,第一个是注册的类型,第二个是Identifier类型参数,第三个是物品对象。

      • Identifier类有两个参数,模组ID,物品ID
      • Registry.register(Registry.ITEM,new Identifier("demo","green_apple_item"),GREEN_APPLE_ITEM);
    • 进入游戏,输入give 玩家名 模组ID:物品名 将会得到我们的第一个物品——一个紫黑色的方块。

  • 给物品添加模型

    • resources\assets\modid文件夹下新建modelstextures文件夹,在这两个文件夹下分别新建item文件夹。

    • 将模型图片green_apple_item.png加入到textures\item文件夹下,名称与物品名称相同。

    • 在models\item文件夹下新建模组id为名的json文件,green_apple_item.json

    • 文件内添加以下代码:

      {
          "parent": "item/generated",//正常手持时的模型
          "textures": {
              "layer0": "demo:item/green_apple_item"
              //layer0为模型位置
          }
      }
      
      
    • 运行游戏,即可看到模型已经设置成功

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7iMDCMbD-1584774546183)(./Resource/image/12.png)]

  • 给物品添加语言翻译·

    • resources\assets\modid文件夹下新建lang文件夹,文件夹内新建en_us.jsonzh_cn.json文件,分别是英文和中文的翻译文件,其他语言可添加相应翻译文件。

    • 在翻译文件内添加如下代码

      {//zh_cn.json
        "item.demo.green_apple_item": "青苹果"
      }
      {//en_us.json
        "item.demo.green_apple_item": "Green Apple"
      }
      //格式 "item.模组ID.物品ID":"对应翻译"
      
    • 运行游戏,翻译已生效。

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eQakBKkl-1584774546185)(./Resource/image/13.png)]

  • 添加自定义创造标签栏

    • 使用FabricItemGroupBuilder 来添加创造标签栏,一旦FabricItemGroupBuilder.build()被调用,该标签栏就将添加在创造栏的列表中

      //静态创建
      public static final ItemGroup DEMO_GROUP = FabricItemGroupBuilder.build(
                  new Identifier("demo", "demo_group"),
                  () -> new ItemStack(INSTANCE.GREEN_APPLE_ITEM)); //图标物品
      //动态创建
      public static final ItemGroup DEMO_GROUP = FabricItemGroupBuilder.create(
                  new Identifier("demo", "demo_group"))
                .icon(() -> new ItemStack(GREEN_APPLE_ITEM))
                  .build();
      
    - 添加物品到创造标签栏
    
    - 第一种方式: 物品对象实例化时,设置传入的Settings参数:
    
      ~~~java
        //静态创建物品栏时
        public static final Item YOUR_ITEM = new Item(new Item.Settings().itemGroup(ExampleMod.ITEM_GROUP));
    
    • 第二种方式:标签栏声明时:

      //动态创建物品栏时
      public static final ItemGroup DEMO_GROUP = FabricItemGroupBuilder.create(
        new Identifier("demo", "demo_group"))
          .icon(() -> new ItemStack(GREEN_APPLE_ITEM))
        .appendItems(stacks->{
              stacks.add(new ItemStack(GREEN_APPLE_ITEM));
          })
          .build();
      
    
    
  • 给标签栏添加翻译词条

    "itemGroup.demo.demo_group": "Demo Mod"
    
    • 运行验证是否生效

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ooN0KBck-1584774546189)(./Resource/image/14.png)]

实现自定义功能的物品

  • 创建自定义物品类,继承自Item

    public class GreenAppleItem extends Item {
        public GreenAppleItem(Settings settings) {
            super(settings);
        }
    }
    
  • 在类中实现重写父类的方法,来实现自定义的功能,以右键使用为例:

    //右键使用,会播放羊的叫声    
    
    @Override
        public TypedActionResult<ItemStack> use(World world, PlayerEntity user, Hand hand) 		{
            user.playSound(SoundEvents.ENTITY_SHEEP_HURT,1.0F,1.0F);
            return new TypedActionResult<>				(ActionResult.SUCCESS,user.getStackInHand(hand));
        }
    
发布了52 篇原创文章 · 获赞 45 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/m0_37771142/article/details/105010339