多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# :-: 配置文件 很明显,一个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 } ~~~