- 771
- 5
Ну наконец-то, еще одна фишка, достояная внимания!
Закотите рукава и приготовтесь к какому-то сумашествию, у нас теперь есть конфиг с гуи!
Это работает как в 1.7.2 (Build 1147), так и в 1.7.10 (Build 1146).
С его помощью вы сможете настроить свой мод прям внутри Minecraft!
Теперь не нужно копаться в текстовых файлах!
Это займет достаточно много времени на создание, но поверьте мне, это не трудно.
Что же это такое?
Чтобы получить представление о том, что мы собираемся делать, запустите среду разработки(Eclipse или интеллидж) с последней версией фордж, щелкните на кнопку Mods в главном меню, затем выберите Forge Mod Loader и нажмите кнопку Config - это своего рода конфигурация GUI, которую мы собираемся создавать сегодня.
Вы можете получить более продвинутые (открыть конфигурационный графический интерфейс для MinecraftForge, например), но я не собираюсь здесь это описывать, чтобы узреть более сложные вещи - вы можете просматривать исходные файлы сами.
Конфиг файл:
Я не буду рассказывать, как работает обычный конфиг, потому что вы и так это знаете =)
Просто убедитесь, что у вас есть файл конфигурации и убедитесь, что он инициализируется во время стадии PreInit.
Существует один нюанс:
Вы должны иметь публичную статическую переменную своего конфига.
Вот так должен выглядеть ваш код:
Как вы можете видеть, у нас есть три значения (Integer, String и Boolean), которые мы будем загружать с нашего конфигурационного файла.
Вы можете заметить, что я поместил загрузочные данные конфигурации в отдельный метод.
Это сделано для того, чтобы не писать много раз одно и тоже, так как там это понадобится в будущем.
Обнаружения при изменении конфига:
Итак, как мы узнаем, когда наши данные конфигурации были изменены в игре?
С помощью ивентов, конечно же!
Сначала нужно зарегистрировать наш ивент, это делается так:
FMLCommonHandler.instance().bus().register(instance);
Далее напишем сам ивент:
Здесь мы просто проверяем, что если изменения в конфиге произошли в нашем моде - то синхронизировать их.
Обработчик GUI:
Теперь нам нужно создать обработчик GUI.
Это то, что отвечает за открытие нашего конфиг GUI, это так же легко настроить.
Также нужно измененить вашу @Mod аннотацию, что мы сделаем потом.
Создайте новый класс и реализуйте(implements) в нем IModGuiFactory интерфейс:
Единственный метод, о котором мы должны волноваться - это mainConfigGuiClass().
Остальное на не нужно, так как оно еще не доделано и не несет никакого смысла.
Метод mainConfigGuiClass() возвращает класс, который мы собираемся использовать для нашего основного конфига GUI(достаточно просто, не так ли?).
Теперь, когда мы сделали это, перейдите к скоей @Mod аннотации и добавьте туда параметр:
Создаем конфиг GUI:
Пришло время для создания самого гуи!
Предупреждение: Это будет очень легко! =)
Наш класс конфиг GUI нужно только наследовать от класса GuiConfig, и мы просто передадим в конструктор некоторые вещи, чтобы он знал, из какой категории брать информацию (примечание: Если вы хотите использовать несколько категорий, смотрите реализацию класса Forge GUI выше):
После того как вы сделали это, компилируйте, запускайте и изменять конфигурацию вашего мода сколько душе угодно! ^-^
Оригинальная статься на английском:
Тык.
Закотите рукава и приготовтесь к какому-то сумашествию, у нас теперь есть конфиг с гуи!
Это работает как в 1.7.2 (Build 1147), так и в 1.7.10 (Build 1146).
С его помощью вы сможете настроить свой мод прям внутри Minecraft!
Теперь не нужно копаться в текстовых файлах!
Это займет достаточно много времени на создание, но поверьте мне, это не трудно.
Что же это такое?
Чтобы получить представление о том, что мы собираемся делать, запустите среду разработки(Eclipse или интеллидж) с последней версией фордж, щелкните на кнопку Mods в главном меню, затем выберите Forge Mod Loader и нажмите кнопку Config - это своего рода конфигурация GUI, которую мы собираемся создавать сегодня.
Вы можете получить более продвинутые (открыть конфигурационный графический интерфейс для MinecraftForge, например), но я не собираюсь здесь это описывать, чтобы узреть более сложные вещи - вы можете просматривать исходные файлы сами.
Конфиг файл:
Я не буду рассказывать, как работает обычный конфиг, потому что вы и так это знаете =)
Просто убедитесь, что у вас есть файл конфигурации и убедитесь, что он инициализируется во время стадии PreInit.
Существует один нюанс:
Вы должны иметь публичную статическую переменную своего конфига.
Вот так должен выглядеть ваш код:
Код:
package your_package;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.common.config.Configuration;
@Mod(modid = "testmod", name = "Test Mod", version = "1.0")
public class TestMod {
public static Configuration configFile;
@Mod.Instance("testmod")
public static TestMod instance;
public static int myConfigInteger = 32;
public static String myConfigString = "Hello!";
public static boolean myConfigBool = false;
@Mod.EventHandler
public void preInit(FMLPreInitializationEvent event) {
configFile = new Configuration(event.getSuggestedConfigurationFile());
syncConfig();
}
public static void syncConfig() {
myConfigInteger = configFile.getInt("My Config Integer", Configuration.CATEGORY_GENERAL, myConfigInteger, 0, Integer.MAX_VALUE, "An Integer!");
myConfigString = configFile.getString("My Config String", Configuration.CATEGORY_GENERAL, myConfigString, "A String!");
myConfigBool = configFile.getBoolean("My Config Bool", Configuration.CATEGORY_GENERAL, myConfigBool, "A Boolean!");
if(configFile.hasChanged())
configFile.save();
}
}
Как вы можете видеть, у нас есть три значения (Integer, String и Boolean), которые мы будем загружать с нашего конфигурационного файла.
Вы можете заметить, что я поместил загрузочные данные конфигурации в отдельный метод.
Это сделано для того, чтобы не писать много раз одно и тоже, так как там это понадобится в будущем.
Обнаружения при изменении конфига:
Итак, как мы узнаем, когда наши данные конфигурации были изменены в игре?
С помощью ивентов, конечно же!
Сначала нужно зарегистрировать наш ивент, это делается так:
FMLCommonHandler.instance().bus().register(instance);
Далее напишем сам ивент:
Код:
@SubscribeEvent
public void onConfigChanged(ConfigChangedEvent.OnConfigChangedEvent event){
if(event.modID.equals("testmod")){
syncConfig();
}
}
Обработчик GUI:
Теперь нам нужно создать обработчик GUI.
Это то, что отвечает за открытие нашего конфиг GUI, это так же легко настроить.
Также нужно измененить вашу @Mod аннотацию, что мы сделаем потом.
Создайте новый класс и реализуйте(implements) в нем IModGuiFactory интерфейс:
Код:
package your_package;
import cpw.mods.fml.client.IModGuiFactory;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiScreen;
import java.util.Set;
public class TestModGuiFactory implements IModGuiFactory {
@Override
public void initialize(Minecraft minecraftInstance) {
}
@Override
public Class<? extends GuiScreen> mainConfigGuiClass() {
return TestModConfigGUI.class;
}
@Override
public Set<RuntimeOptionCategoryElement> runtimeGuiCategories() {
return null;
}
@Override
public RuntimeOptionGuiHandler getHandlerFor(RuntimeOptionCategoryElement element) {
return null;
}
}
Остальное на не нужно, так как оно еще не доделано и не несет никакого смысла.
Метод mainConfigGuiClass() возвращает класс, который мы собираемся использовать для нашего основного конфига GUI(достаточно просто, не так ли?).
Теперь, когда мы сделали это, перейдите к скоей @Mod аннотации и добавьте туда параметр:
Код:
guiFactory = "your_package.TestModGuiFactory"
Пришло время для создания самого гуи!
Предупреждение: Это будет очень легко! =)
Наш класс конфиг GUI нужно только наследовать от класса GuiConfig, и мы просто передадим в конструктор некоторые вещи, чтобы он знал, из какой категории брать информацию (примечание: Если вы хотите использовать несколько категорий, смотрите реализацию класса Forge GUI выше):
Код:
package your_package;
import cpw.mods.fml.client.config.GuiConfig;
import net.minecraft.client.gui.GuiScreen;
import net.minecraftforge.common.config.ConfigElement;
import net.minecraftforge.common.config.Configuration;
public class TestModConfigGUI extends GuiConfig {
public TestModConfigGUI(GuiScreen parent) {
super(parent,
new ConfigElement(TestMod.configFile.getCategory(Configuration.CATEGORY_GENERAL)).getChildElements(),
"TestMod", false, false, GuiConfig.getAbridgedConfigPath(TestMod.configFile.toString()));
}
}
Оригинальная статься на английском:
Тык.