minecraft mod教程:添加烧炼、合成以及材质-GameRegistry的使用3

前言

这篇文章本来打算放在语言那篇教程的前面的,但是由于上回时间比较紧(明明现在也没有什么时间)就拿了那么一篇关于语言的教程来充数。但是从实际的效果来看这个充数的文章还是消耗了我很多的时间。


 

虽然我现在还是很忙,还要每天搬砖,但是更新什么的是不能断的。上一篇文章写了好长的GameRegistry什么的,由于精力限制后面收尾收的有点快……不知道都能不能跟上。今天来介绍一下GameRegistry的更常用的使用。顺带补充上一节没有说的材质的创建。



创建材质

在上一节我们已经学会了创建一个有自己的名字的但是没有任何作用的方块和物品。但是这样是远远不够的,因为这连MOD制作器的水平还没有达到。所以现在这篇教程来让你达到MOD制作器的水平。

现在先说一说上一节没有说的材质的创建。

每个方块在注册的时候必须要有一个它自己的材质才能实例化这个方块。所谓的材质就是Material类。如果你要创建一个自己的方块材质你就必须要构造一个Material对象。这里说的材质并不是3D绘图软件的材质编辑器里的材质那样。你不能通过Material来指定一个方块的贴图以及法线贴图,但是你可以指定一个方块是否可以被瞬间摧毁,是否可以在冒险模式破坏,是否可以被活塞推动这样的特性。

下面就列出Material的重要的属性:

  • canBurn:是否可以燃烧
  • replaceable:是否可以被其他方块直接替代(就像草一样直接放置方块就会消失
  • isTranslucent:是否是透明方块
  • materialMapColor:显示在小地图的颜色
  • requiresNoTool:是否可以不需要工具被瞬间破坏
  • mobilityFlag:是否可以被活塞推动或者拉回
  • isAdventureModeExempt:是否可以在冒险模式破坏
  • isLiquid:是否是液态方块
  • isSolid:是否是固体方块
  • getCanBlockGrass:是否可以生长植物
  • blocksMovement:是否移动中

通过这些我们可以创建出拥有我们自己特性的方块材质。但是,那么问题来了,如何贴图呢?

其实贴图就和添加语言一样的简单。minecraft和forge已经帮你完成了很多的事情,你需要的只是绘制你的图片并且把它们放到正确的位置。

一般来讲你需要在你的资源目录下面建立一个“assets.你的modid.textures.blocks”的包。然后把你的方块的纹理文件制作成png文件,命名成你的方块名字。复制过去。然后万事俱备了。就是这样简单



 

添加合成和烧炼

上一期(严格的讲是上上期)的没有说完的东西终于都说完了。下面我们来介绍一下如何添加物品合成和物品烧炼。但是在这之前我们要先讲一讲什么是物品栈(ItemStack)的概念。


预备知识:物品栈

物品栈,这个名词虽然名字中包含了一个栈,但是它完全不是一个栈。如果要往简单的理解一个物品栈就是玩家手头的堆叠起来的一堆物品。(感觉名字如果叫物品堆可能会更加贴切一点,不过要是叫这个名字就完全不霸气了呢)

在Minecraft中有许许多多的物品的存在在世界上,但是不可能给每一个物品或者方块在内存中都产生一个实例。所以一种代替的方法就出来了:在物品方面的解决方法就是物品栈。一个Item在Minecraft中代表的不是一个物品而是一类物品。如果没有什么异常的话,在内存中一类注册的物品大概只有那一个Item对象。如果想要表示玩家手里有64个物品该怎么办呢,那么物品栈就出来了。物品栈里面包括了堆叠个数、耐久值、附魔数据等等各种各样的数据。游戏中的绝大多数地方都是和物品栈在打交道而不是和物品本身打交道。关于物品栈的介绍我会在以后放出来专门一篇来充数,但是现在我就不介绍了。只要知道我们添加合成和烧炼也要和物品栈打交道。


正片

添加烧炼和合成的方法真的很简单,GameRegistry里面有添加合成以及烧炼的方法。你只需要在init事件的时候进行添加就可以了。

我们先看添加合成。合成基本分为有序合成和无需合成两种。虽然是两种不同的合成,他们的API还是很类似的。添加合成的话你只需要类似下面的代码就可以完成了(我又直接COPY的szszss的代码……)

addRecipe(new ItemStack(Item.sign, 3), new Object[] {"###", "###", " X ", '#', Block.planks, 'X', Item.stick});

虽然添加合成的参数难以用语言描述,但是如果看代码的话还是很简单的呢。只要把合成表直接画出来就好了呢。

添加烧炼的调用更简单,因为这完全省略了绘制合成表……

public static void addSmelting(Block input, ItemStack output, float xp);
public static void addSmelting(Item input, ItemStack output, float xp);
public static void addSmelting(ItemStack input, ItemStack output, float xp);

这三个函数就是添加烧炼的重载。xp是游戏中的经验值。如果你对于经验值还不是很了解可以去参看wiki
 


今天的教程先写到这里吧。两天没有睡觉了……再这样下去会崩坏的说

20 thoughts on “minecraft mod教程:添加烧炼、合成以及材质-GameRegistry的使用3

  1. 大大,我的材质一直加载不上去,无论怎么对,怎么改,就是不行,材质我是从原版Minecrate里复制出来的,资源文件夹虽然是我自己创建的,但是语言文件放在里面却能被识别,那为什么材质不行?材质的名字是方块的哪个名字?

  2. [13:43:09] [Client thread/ERROR] [TEXTURE ERRORS]: DOMAIN first
    [13:43:09] [Client thread/ERROR] [TEXTURE ERRORS]: ————————————————–
    [13:43:09] [Client thread/ERROR] [TEXTURE ERRORS]: domain first is missing 2 textures
    [13:43:09] [Client thread/ERROR] [TEXTURE ERRORS]: domain first is missing a resource manager – it is probably a side-effect of automatic texture processing
    [13:43:09] [Client thread/ERROR] [TEXTURE ERRORS]: ————————-
    [13:43:09] [Client thread/ERROR] [TEXTURE ERRORS]: The missing resources for domain first are:
    [13:43:09] [Client thread/ERROR] [TEXTURE ERRORS]: textures/blocks/Rubyore.png
    [13:43:09] [Client thread/ERROR] [TEXTURE ERRORS]: textures/items/Ruby.png
    [13:43:09] [Client thread/ERROR] [TEXTURE ERRORS]: ————————-
    这是怎么回事啊?求大神救我!

    • 很抱歉,好久没有看评论,你这个是什么版本的forge,有没有正确添加材质。新版本(1.8)的方块使用json引入不知道你这个是不是新版本的锅。

      嘛,我反正好久不开发Minecraft MOD了,基本算是半隐退状态了。新的教程可以看szszss的教程或者darkyoooooo的教程。我在mcdev-wiki里面都有收录

  3. 如何添加一个六个面不相同的贴图呢?

    • 怎么说呢1.8之后要大改啦。我这里教程已经过时了,还是看新的教程吧。szszss以及darkyooooo的教程都1.8了。我实在是无力填坑。

      可以到我的Minecraft开发Wiki寻找教程:http://www.mcdev-wiki.org/

  4. Material的参数到底怎么设置,我没有找到相关的东西,我看到的方法都是获取,没有设置的。

  5. 为啥图片放到相应文件夹下仍然不行呢?

  6. 请问能不能分享一个例子代码呢?你这个是基于 1.8开发的吗?我一直找不到相关的资料

蓝色冰寒进行回复 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注