第一份合成表
新建包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();
}
打开游戏,进行测试吧~