Mc1.16Forge官混教程/教补-#2-官混版物品与物品组差异及food拓展

       Forge版本为36.2.34官方版,此帖并非教程向,主要记录的是开发过程中碰到的一些bug与注意点。如果想看纯新手向教程,可以阅读https://boson.v2mcdev.com/introducation/intro.html(不是我写的,但是讲解的比较清楚,前期够用)。

        本文会提及以下要点:定义物品,定义组,定义食物,为物品添加材质

定义物品

        首先是定义物品的文件放在哪里的问题,经测试发现:似乎只要是在mod文件夹里,哪里都可以。当然,保险起见还是建议放在和注册用的java文件同一及向下层级里。比如:

         像这样分层放会比较好整理,个人比较喜欢。不知道有没有合并这些文件的方法。(注:后来学习过程中找到了合并方法,请参考后续第12篇的物品与方块集成注册)

        教程中给出的关于黑曜石锭的物品的代码如下:

public class ObsidianIngot extends Item {
    public ObsidianIngot() {
        super(new Properties().group(ItemGroup.MATERIALS));
    }
}

        其中super这一句决定了物品出现在创造栏的哪一项中,.group(ItemGroup.MATERIALS)这一句可以删去,删去后物品将只能通过指令获得

        值得注意的是:在官方版中,给出的super一行写法应为:

        super(new Properties().tab(ItemGroup.TAB_MATERIALS))

        请多加小心。

定义组

public class ModGroupRegistry {
    public static final ItemGroup worldMaterial = new MainWorldMaterial();
    //第一个worldMaterial(金色部分)是为物品添加进组时调用的名字,第二个对应(此处为modgroup中的)对应文件
}

        对于定义图标,教程中的createIcon(那个I是大写的i,别当成小写L了)应为makeIcon,如下。这是对modgroup中方法的覆写。

public class MainWorldMaterial extends ItemGroup {
    public MainWorldMaterial(){
        super("main_world_material");
    }
    @Override
    public ItemStack makeIcon(){
        return new ItemStack(ItemRegistry.dt_crystal.get());
    }
    //makeIcon是官混版写法,和教程中不同。教程中官混版的不可用。
}

定义食物

        以我写的糖聚块代码为例:

public class Sugar_lump extends Item {
    private static final Food food = (new Food.Builder())
            .saturationMod(34)//回复34点饱和度
            .nutrition(42)//回复42点饱食度
            .effect(()->new EffectInstance(Effects.HEAL,60,1),0.5F)
            .effect(()->new EffectInstance(Effects.POISON,120,3), 0.7F)
            .fast()//加快进食速度,似乎无法自定义时间
            .alwaysEat()//在饱腹时也可以食用
            .build();
    public Sugar_lump() {
        super(new Properties().food(food).tab(ModGroupRegistry.terraCommonMaterial));
    }
}

        紫色的food名字可以变更的,但是Properties( ).后的紫色food也要记得跟着变。几个关键词讲一下:

  1. saturationMod( int ):饱和度,装了jei会显示金火腿的。正常情况不显示,一般情况是食物条的溢出部分,如saturationMod(5)指回复5点饱和值。
  2. nutrition( int ):饱食度,游戏物品栏或者右上角的一排鸡腿。nutrition(1)指回复一点饱食度,即半个鸡腿。
  3. fast( ):速食,比如西瓜,曲奇等,使用速度很快。
  4. alwaysEat( ):在饱食度满时也可以食用。
  5. effects( … )给予药水效果,传入lambda表达式。
.effect(()->new EffectInstance(Effects.POISON,120,3), 0.7F)

       EffectInstance( )中,第一项传入一个效果;第二项传入时间,每20点对应1s持续时间;第三项传入效果等级。在后方的0.7F则表示获得效果的概率为0.7(不要漏掉F)。

       虽然说中毒概率大……咱馋这34的饱和度和42的饱食度啊)

物品材质

        一个小点:models必须按规范摆。textures随意但要和models中的路径对上。

         比如这样。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值