4.1 方块介绍

方块


方块对于Minecraft显然是必不可缺的。它们构成了所有的地形、建筑和机械。如果你对制作一个模组感兴趣,你会有想要往里面加入一些方块的机会。这个页面将会引导你创建方块,以及你可以对它们做的一些事情。

创建一个方块


基本方块

对于不需要特殊功能(想想圆石、木板等)的简单方块并不需要一个自定义的类。只需要实例化Block类并调用众多赋值器中的一些,你就可以创建许多不同种类的方块。例如:

  • setHardness—— 控制破坏这个方块的时间。它可以是任意值。作为对照,石头的硬度(hardness)是1.5,泥土是0.5。如果这个方块应该被设为不可破坏,可以使用setBlockUnbreakable这个方便的方法。
  • setResistance—— 控制方块的爆炸抗性。这个是与硬度分开的,但是如果 setResistance的值低于 setHardness 的5倍的话,setResistance 的值也会被替换为 setHardness 的5倍。
  • setSoundType—— 控制当方块被打击、被破坏或被放置时发出的声音。需要一个 SoundType类型的参数,相见声音页面(译者注:即本教程的效果-声音)以了解更多细节。
  • setLightLevel—— 控制方块发出的光线。注意:这个值的取值范围是0~1,不是0~15。要计算这个值,用你期望的光亮级别值除以16。例如一个光亮等级为5的方块应当传递一个 5/16f的值给这个方法。
  • setLightOpacity—— 控制透过该方块的光线会被抹除的量。不像 setLightLevel那样,这个值的范围是0~15。例如,将这项设置为3将会在每次有光线透过这个方块时将透过的光降低3个亮度等级。
  • setUnlocalizedName—— 几乎不言而喻,设置方块的未本地化名称。名字的前缀会是“tile.”并且会出于本地化的目的以“.name”作为后缀。例如 setUnlocalizedName("foo")会使得方块的世纪本地化键变为“tile.foo.name”。关于更多高级的本地化控制则需要一个自定义物品。后续我们再来讲。
  • setCreativeTab—— 控制这个方块将会落在哪一个创造模式标签中。如果方块应该在创造模式菜单中出现的话,这一项必须被调用。标签选项可以在 CreativeTabs类中找到。

所有的这些方法都是支持责任链调用的(译者注:chainable,应该是指设计模式中的责任链模式),这意味着你可以链式调用它们。要查看这个的例子,参见 Block#registerBlocks

高级方块

当然,以上只适用于极度简单的方块。如果你需要添加功能,比如玩家互动,那就需要一个自定义类了。然而,Block类有许多方法而且不幸的是并不是每一个方法都能够在这里一一文档化。阅读本节剩下的部分来了解你用方块能够做的事情。

注册方块


方块必须注册给函数。

重要: 世界中的一个方块和物品中的一个“方块”是有很大不同的。世界里的一个方块是由 IBlockState
表示的,它的行为是由Block的一个实例定义的。同时,一个物品栏里的物品是一个 ItemStack,被 Item控制着。作为 BlockItem世界之间的桥梁,ItemBlock出现了。ItemBlockItem的一个子类,它拥有一个block字段,这个字段存储着它所代表的方块的Block引用。ItemBlock作为物品定义了“方块”的一些属性,比如右键如何放置方块。不需要 ItemBlock来创建一个 Block也是有可能的(例如:minecraft:water存在一个方块,但是却没有对应的物品。因此它不可能像一个物品被手持。)
当一个方块被注册的时候,只有一个方块被注册。这个方块并不会自动拥有一个 ItemBlock。要为一个方块创建一个 ItemBlock,应当使用 new ItemBlock(block).setRegistryName(block.getRegistryName())。未本地化的名字也跟方块的一致。也可以用ItemBlock的子类。只要一个 ItemBlock为一个 方块注册了,就可以使用 Item.getItemFromBlock来获取它。如果没有这个 Block类对应的 ItemBlock类, Item.getItemFromBlock将会返回null,所以当你不确定一个 Block类有没有对应的 ItemBlock类的时候,检查返回值是否是null即可。

进一步阅读


有关方块属性的信息,比如像木橱、围栏、墙以及更多,请参见方块状态(blockstates)一节。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值