본문 바로가기
Game Dev/MineCraft - Mod

모드를 입맛대로 설정가능하게하기! (Config)

by [방울] 2014. 12. 3.

 

 

말머리

 

대상 : 포지모드 개발환경 설정이 다 되어있고, 자바 프로그래밍을 어느정도 아시는분들

 

중간중간 패키지명이나 클래스명이 달라지거나, 패키지 구조, 클래스 위치가 달라질 수 있습니다.

구조가 달라서 적용에 문제가 있는부분은 방울크래프트 모드는 오픈소스상태이니 깃헙에서 구조를 확인해보시기 바랍니다.

또, 패키지 생성이나 클래스 생성에 대한 부분은 본인이 판단하여 센스있게 생성해주시기 바랍니다.

설명시 클래스위치는 패키지경로.클래스명 순으로 알려드립니다.

강좌시 몇몇 부분에서는 해당 클래스 소스 전체를 올려드리지만, 대부분의 상황에서는 해당 클래스의 일부 메소드 소스만 예시로 보여드립니다.

 

소스 작성시 일부 료형등에서 빨간 밑줄이 쳐질경우 해당 클래스를 직접 임포트해주시기 바랍니다.

일부 경우에는 임포트문을 알려드리지만, 대부분의 임포트문은 마인크래프트관련 클래스 또는 포지관련 클래스를 임포트하시면 정상작동합니다.

 

궁금한점이 있을경우 궁금한점이 생긴 포스트의 덧글로 질문해주시면 확인 후 바로 답변해드리도록 하겠습니다.

 

 

 

 일단 bellcraft.core.Config 에 가줍니다. (해당 클래스가 없다면 센스있게 생성해주세요 ^___^)

 

package bellcraft.core;

import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.common.config.Configuration;

public class Config
{
  	public static Configuration bcConfig;
  	public static boolean enableBellCraft;
  	public static boolean enableRandomBox;
	public static boolean enableRandomIngot;
	public static boolean enableRandomOreGen;
	public static boolean enableRandomOre;

	public static void Initialize(FMLPreInitializationEvent event)
  	{
		bcConfig = new Configuration(event.getSuggestedConfigurationFile());
		bcConfig.load();
		
		bcConfig.addCustomCategoryComment("General", "Here you can disable or re-enable any general options you choose.");
		enableBellCraft = bcConfig.get("General", "EnableBellCraft", true).getBoolean(true);
		
		bcConfig.addCustomCategoryComment("Ore Gen Enabled", "Here you can disable or re-enable any ore gen you choose. Change value to false to disable selected ore gen.");
		enableRandomOreGen = bcConfig.get("Ore Gen Enabled", "RandomOreGen", true).getBoolean(true);
		
		bcConfig.addCustomCategoryComment("Blocks Enabled", "Here you can disable or re-enable any blocks you choose. Change value to false to disable selected block.");
		enableRandomOre = bcConfig.get("Blocks Enabled", "RandomOre", true).getBoolean(true);
		
		bcConfig.addCustomCategoryComment("Items Enabled", "Here you can disable or re-enable any items you choose. Change value to false to disable selected item.");
		enableRandomIngot = bcConfig.get("Items Enabled", "RandomIngot", true).getBoolean(true);
		enableRandomBox = bcConfig.get("Items Enabled", "RandomBox", true).getBoolean(true);
			
		bcConfig.save();
		BellCraft.AddLog("Configuration load complete.");
	}
}

 

 

위는 현재 제 Config 클래스 예시입니다.

 

bcConfig 라는 설정 인스턴스를 생성하고, 로드시켜줍니다.

bcConfig.addCustomCategoryComment(String category, String comment);

문으로 카테고리 주석을 달아줍니다.

 

bcConfig.get(String category, String key, boolean defaultValue);

문으로 값을 받아옵니다. 지정된 값이 없거나 값에 문제가 있을경우 기본값으로 설정합니다.

 

bcConfig.save(); 설정값을 저장시켜줍니다.

 

+ 잘 응용하시면 받아오는값에 정수값을 받아올수도 있고, 문자값도 받아올 수 있습니다.

문자값을 split 하여 배열에 올릴수도 있구요.

 

 

위와같이 코딩하신 다음, bellcraft.core.Registry 클래스의 register(FMLPreInitializationEvent event) 메서드에 다음을 추가합니다.

 

	public static void register(FMLPreInitializationEvent event)
	{
		Config.Initialize(event); // 설정값 로드
	}

 

 

 

 

위 예시대로 코딩한 후 마인크래프트를 실행해주시면 다음과같은 설정파일이 생성됩니다.

파일 위치는 \Config\BellCraft.cfg 입니다.

# Configuration file

##########################################################################################################
# blocks enabled
#--------------------------------------------------------------------------------------------------------#
# Here you can disable or re-enable any blocks you choose. Change value to false to disable selected block.
##########################################################################################################

"blocks enabled" {
    B:RandomOre=true
}


##########################################################################################################
# general
#--------------------------------------------------------------------------------------------------------#
# Here you can disable or re-enable any general options you choose.
##########################################################################################################

general {
    B:EnableBellCraft=true
}


##########################################################################################################
# items enabled
#--------------------------------------------------------------------------------------------------------#
# Here you can disable or re-enable any items you choose. Change value to false to disable selected item.
##########################################################################################################

"items enabled" {
    B:RandomBox=true
    B:RandomIngot=true
}


##########################################################################################################
# ore gen enabled
#--------------------------------------------------------------------------------------------------------#
# Here you can disable or re-enable any ore gen you choose. Change value to false to disable selected ore gen.
##########################################################################################################

"ore gen enabled" {
    B:RandomOreGen=true
}

 

이제 저 값들을 이용하여 모드내의 일부 아이템을 생성하지 않거나, 조합법을 바꾸거나, 블럭이 월드에서 젠되지 않는 등 여러 설정을 하실 수 있습니다.

설정을 하는건 여러분의 몫입니다.

이제 저 값을 이용하여 주요부분에 저 값으로 기능을 ON/OFF 하게 만드실 수 있습니다.

 

 

 

ps. 게임레지스트리관련 명령줄을 모두 bellcraft.core.Registry 클래스에 옮겼습니다.

아래는 bellcraft.core.Registry 클래스의 예시입니다.

 

public class Registry {
	
	public static void register(FMLPreInitializationEvent event)
	{
		Config.Initialize(event); // 설정값 로드
	}
	
	public static void register(FMLInitializationEvent event)
	{
		Events.registerEvents(); // 이벤트 등록
		Items.registerItems(); // 아이템 등록
		Blocks.registerBlocks(); // 블럭 등록
		OreGeneration.registerOre(); // 광물 등록
		ItemRecipe.registerRecipe(); // 아이템 조합법 등록
		FurnaceRecipe.registerRecipe(); // 화로 조합법 등록
	}
}

 

 

위와같이 메서드 오버로딩을 하신 후, bellcraft.core.BellCraft 클래스에 각각 Initialize 메서드와 PreInitialize 메서드에 Registry.register(event); 문을 추가하시면 상황에 맞게 Registry 클래스에 해당 메서드가 실행됩니다.

댓글