# :-: 配置文件
很明显,一个Mod做得再好,也会有玩家不满意。这时候的一种常见的解决方案就是,开放Mod的部分参数选项,使其从配置文件中读取,这样玩家就可以通过修改Mod的配置文件来对Mod做出一些个性化设置了。
一个好的配置文件,不仅应该全面,更应该条理分明、层次紧密、简明易懂,让玩家不需要帮助甚至注释就可以理解并顺利地修改配置文件内容,而不会出现困惑的现象。
幸运的是,Forge本身就提供了配置文件的接口,Mod开发者们可以轻而易举地完成配置文件的创建、读取、以及写入等操作。
本章通过对钻石作为燃料的烧炼秒数的配置,一步一步地完成配置文件的相关操作。
# :-: 如何操作
首先,我们创建一个配置文件管理类,在包`net.xiaobang.bm.common`下创建文件`ConfigLoader.java`:
**`src/main/java/net/xiaobang/bm/common/ConfigLoader.java`**
~~~
package net.xiaobang.bm.common;
import net.minecraftforge.common.config.Configuration;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import org.apache.logging.log4j.Logger;
public class ConfigLoader
{
private static Configuration config;
private static Logger logger;
public static int diamondBurnTime;
public ConfigLoader(FMLPreInitializationEvent event)
{
logger = event.getModLog();
config = new Configuration(event.getSuggestedConfigurationFile());
//实例化了一个Configuration类,括号中填的是Forge推荐的配置文件位置,这个位置在游戏根目录的config文件夹下,
//名为<modid>.cfg,这里就是bm.cfg。
config.load();//读取配置
load();
}
public static void load()
{
logger.info("Started loading config. ");
String comment;
comment = "How many seconds can a diamond burn in a furnace. ";//加载配置
diamondBurnTime = config.get(Configuration.CATEGORY_GENERAL, "diamondBurnTime", 640, comment).getInt();//加载配置
//forge配置文件中会有多个类别,forge提供了general(Configuration.CATEGORY_GENERAL)
//get函数的第一个参数就是表示general类型
//get的第二个参数就是配置文件中的键的名称(难以看懂)
//get的第三个参数就是键的默认值(默认640),如果该键不存在,返回默认值
//get的第四个参数是该键的注释,就是获取diamondBurnTime相对应的值,getInt函数的作用就是获取整数(配置文件里面键的值一定是字符串)
//从这里阔以看出get就是为了获取diamondBurnTime的值
config.save();//保存配置
//至于为什么要保存配置呢?这是因为当配置缺失(最常见的原因就是配置文件没有创建,
//这常常发生在你第一次使用Mod的时候)的时候,这一句会将默认的配置保存下来。
logger.info("Finished loading config. ");//输出完成加载配置文件
}
public static Logger logger()
{
return logger;
}
}
~~~
在CommonProxy注册
**`src/main/java/net/xiaobang/bm/common/CommonProxy.java`**(部分)
~~~
public void preInit(FMLPreInitializationEvent event)
{
new CreativeTabsLoader(event);
//new ItemLoader(event);
//new BlockLoader(event);这两个已经不需要了,有更好的方法了
new regAll("bm","net/xiaobang/bm/item/","Item");//一键注册所有物品
new regAll("bm","net/xiaobang/bm/block/","Block");//一键注册所有方块
new ConfigLoader(event);
}
~~~
最后修改CraftLoader文件:
**`src/main/java/net/xiaobang/bm/crafting/CraftingLoader.java`(部分)**
~~~
private static void registerFuel()
{
GameRegistry.registerFuelHandler(new IFuelHandler()
{
@Override
public int getBurnTime(ItemStack fuel)//实现IFuelHandler口后需要实现这个函数,作用是判断物品的烧炼时间,如果返回为0,则为不能判断物品的烧炼时间
{
return Items.diamond != fuel.getItem() ? 0 : Math.max(0,ConfigLoader.diamondBurnTime) * 20;//把钻石作为燃料(啊这),这里的12800指能烧多久,单位是gametick,1秒=20个gametick
}
});
}
~~~
运行游戏,你会发现在config文件夹下生成了bm.cfg文件。下面是在作者电脑下生成的文件内存:
~~~
# Configuration file
general {
# How many seconds can a diamond burn in a furnace.
I:diamondBurnTime=640
}
~~~