# :-: 配置文件
很明顯,一個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
}
~~~