用户:MashKJo/1.12.2模组开发教程/9.第一个方块:修订间差异

→‎添加一个新方块的流程:​ // Edit via Wikiplus
(创建页面,内容为“在开始制作我们的第一个方块前,笔者先区分一下两个概念:方块(Block)和方块的物品形式(ItemBlock)——平时,我们说“方块”,是同时涵盖了这两个概念的:广义上的方块,被放置在世界中时,即为Block;而在物品栏中时,它则是一种特殊的物品,也即ItemBlock。 好,区分了这两个概念后,我们就可以开始了。 == 添加一个新方块的流程 == 所有方…”)
 
→‎添加一个新方块的流程:​ // Edit via Wikiplus
 
想必读者肯定猜到了,Block类也有很多getter和setter可以用。与Item的类似,Block类的getter牵扯到BlockState这一概念,因此后面再讲,现在只讲setter:
* setLightOpacity:传入一个int量,用于设定方块的透光度,传入的数值越大透光度越低。完全不透光的方块,该值为255;完全透光则为0;部分透光则在两者之间,如树叶的lightOpacity为1。该值默认由一个三目运算决定,具体为:如果该方块为渲染意义上的完整方块,lightOpacity为255,否则为0
* setLightLevel:传入一个float量,设置方块的光照等级,注意实际的光照值要把这个传入的参数乘以15。具体设定为多少,读者可以去查阅原版中会发光的方块的源代码,这块是怎么设定的
* setResistance:传入一个float量,用于设置方块的爆炸抗性,实际抗性值为传入参数乘以3的结果
* setHardness:传入一个float量,用于设置方块的挖掘硬度,注意这个setter也有可能影响爆炸抗性。特别地,还有一个该setter的特化版:setBlockUnbreakable,会把hardness设定为-1.0F,即让该方块变得像基岩一样不可破坏
* setUnlocalizedName、setCreativeTab:作用类似于Item类中的同名方法
* setHarvestLevel:形参列表为<code>(String toolClass, int level)</code>,用于设定该方块的挖掘等级和应被什么种类的工具挖掘。实际上这个方法是Forge塞进去的——没错,Minecraft原版甚至没有挖掘等级这一概念,原版中某些方块需要特定等级的工具才能挖掘的例子纯属硬编码的结果。toolClass这个String代表工具类型,如<code>"picakxe"</code>、<code>"axe"</code>等等。而level的规则是:木制/金制工具的等级为0,石制为1,铁制为2,钻石工具则为3,-1则代表空手挖掘。另外注意:该方法的返回值类型为void,即不符合链式调用规则
 
例如,笔者新增了一个方块:红宝石块:
 
<code>src/main/java/net/tutorial_mod/block/BlockRuby.java:</code>
 
package net.tutorial_mod.block;
import net.minecraft.block.Block;
import net.minecraft.block.material.MapColor;
import net.minecraft.block.material.Material;
import net.tutorial_mod.TutorialMod;
public class BlockRuby extends Block{
public BlockRuby(){
super(Material.ROCK, MapColor.RED);
this.setRegistryName(TutorialMod.MODID, "ruby_block");
this.setUnlocalizedName("ruby_block");
this.setCreativeTab(TutorialMod.TutorialModTab);
this.setHarvestLevel("pickaxe", 2);
}
}
 
最后,监听RegistryEvent.Register<Block>事件,把我们的新方块注册进游戏。
 
== 添加方块对应的物品形式 ==
行政员、​优秀编辑者、​界面管理员、​监督员、​管理员、​小部件编辑者
3,334

个编辑