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也要记得跟着变。几个关键词讲一下:
- saturationMod( int ):饱和度,装了jei会显示金火腿的。正常情况不显示,一般情况是食物条的溢出部分,如saturationMod(5)指回复5点饱和值。
- nutrition( int ):饱食度,游戏物品栏或者右上角的一排鸡腿。nutrition(1)指回复一点饱食度,即半个鸡腿。
- fast( ):速食,比如西瓜,曲奇等,使用速度很快。
- alwaysEat( ):在饱食度满时也可以食用。
- effects( … )给予药水效果,传入lambda表达式。
.effect(()->new EffectInstance(Effects.POISON,120,3), 0.7F)
EffectInstance( )中,第一项传入一个效果;第二项传入时间,每20点对应1s持续时间;第三项传入效果等级。在后方的0.7F则表示获得效果的概率为0.7(不要漏掉F)。
虽然说中毒概率大……咱馋这34的饱和度和42的饱食度啊)
物品材质
一个小点:models必须按规范摆。textures随意但要和models中的路径对上。
比如这样。