第一份合成表

新建包com.github.ustc_zzzz.fmltutor.crafting,并新建文件CraftingLoader.java

src/main/java/com/github/ustc_zzzz/fmltutor/crafting/CraftingLoader.java:

package com.github.ustc_zzzz.fmltutor.crafting;

import net.minecraftforge.fml.common.registry.GameRegistry;

public class CraftingLoader
{
    public CraftingLoader()
    {
        registerRecipe();
        registerSmelting();
        registerFuel();
    }

    private static void registerRecipe()
    {

    }

    private static void registerSmelting()
    {

    }

    private static void registerFuel()
    {

    }
}

registerRecipe方法添加内容:

src/main/java/com/github/ustc_zzzz/fmltutor/crafting/CraftingLoader.java(部分):

    private static void registerRecipe()
    {
        GameRegistry.addShapedRecipe(new ItemStack(ItemLoader.goldenEgg), new Object[]
        {
                "###", "#*#", "###", '#', Items.gold_ingot, '*', Items.egg
        });
        GameRegistry.addShapedRecipe(new ItemStack(BlockLoader.grassBlock), new Object[]
        {
                "##", "##", '#', Blocks.vine
        });
        GameRegistry.addShapelessRecipe(new ItemStack(Blocks.vine, 4), BlockLoader.grassBlock);
    }

前两句通过调用addShapedRecipe方法添加了有序合成表(如合成木棍等等)。

后一句通过调用addShapelessRecipe方法添加了无序合成表(如合成书等等)。

Minecraft原版所有的方块和物品都被存放在Blocks类和Items类里。

读者想必到这里已经明白,这三份合成表是什么意思了,不过需要注意的可能是表示字符的单引号和表示字符串的双引号。

第一个烧炼规则

registerSmelting方法添加内容:

src/main/java/com/github/ustc_zzzz/fmltutor/crafting/CraftingLoader.java(部分):

    private static void registerSmelting()
    {
        GameRegistry.addSmelting(BlockLoader.grassBlock, new ItemStack(Items.coal), 0.5F);
    }

第一个参数是待烧炼的物品,第二个参数是烧炼后的物品,第三个参数是烧炼后玩家可以得到的经验。

第一个燃料

registerFuel方法添加内容:

src/main/java/com/github/ustc_zzzz/fmltutor/crafting/CraftingLoader.java(部分):

    private static void registerFuel()
    {
        GameRegistry.registerFuelHandler(new IFuelHandler()
        {
            @Override
            public int getBurnTime(ItemStack fuel)
            {
                return Items.diamond != fuel.getItem() ? 0 : 12800;
            }
        });
    }

注册燃料需要实现IFuelHandler接口,这里使用了匿名类以节省代码量。

实现IFuelHandler接口需要实现getBurnTime方法,该方法判断物品的烧炼时间,如果返回0,则为不能判断物品的烧炼时间。

这里的烧炼时间为gametick,一秒为20个gametick,下面列出一些常见的烧炼时间数据:

  • 树苗  100
  • 木板  200
  • 煤炭  1600
  • 烈焰棒 2400
  • 煤炭块 16000
  • 岩浆桶 20000

这段代码添加了钻石作为燃料,想必读者也很容易看出这段代码的含义。

最后,在CommonProxy中的init阶段注册:

src/main/java/com/github/ustc_zzzz/fmltutor/common/CommonProxy.java(部分):

    public void init(FMLInitializationEvent event)
    {
        new CraftingLoader();
    }

打开游戏,进行测试吧~

results matching ""

    No results matching ""