Jump to content

Recommended Posts

Posted

Hello Guys! It's Romejanic here! And I want to give you a little tutorial! If you have seen my recent mods, you would know that my config files all go to the folder /romejanic in the Minecraft folder and server folder. So in this simple tutorial, I will show you how to not only get you config files in a custom directory, but to also make it work universally!

 

Ok. So first, I would recommend making a new class. Usually I call it 'ConfigLoader.java'. You can call it anything you want though! So first in the new class, type make a new void method like this;

 

public static void load(){

 

}

 

Inside that method, you are going to type this code:

 

File location = null;

 

After that, you also need to import java.io.File. Now, the reason you have typed null at the end is because if it was not an assignment, you would not be able to use it in other declarations. Anyway, we will move on. Next, you need to type this code;

 

Side s = FMLCommonHandler.instance().getEffectiveSide();

 

After that, you need to make two if statements. One for the client declarations and one for the server declarations. You will type the statements like this;

 

if(s == s.CLIENT){

 

}

if(s == s.SERVER){

 

}

 

After you type that in, you need to import cpw.mods.fml.common.FMLCommonHandler and cpw.mods.fml.relauncher.Side. Now inside the first if statement (The client statement) you will type the following;

 

location = new File(Minecraft.getMinecraftDir().toString()+"/<foldername>/<file-name>");

 

Ok. This is where the file's null assignment is replaced. But before we go on, you need to import net.minecraft.client.Minecraft. Except you must replace <foldername> for the name of your custom folder and <file-name> for you file's name. But for the file name, it must be followed by an extension. I would suggest making the extension .txt for easy access but it is really up to you. So, if I wanted my file to go to /romejanic/Ghost.txt, I would type;

 

location = new File(Minecraft.getMinecraftDir().toString()+"/romejanic/Ghost.txt");

 

Next let's go onto the server! You will probably just copy most of the code except since the Minecaft class doesn't exist in the server, you must change the directory. Instead, you must change it to this;

 

location = new File("./<foldername>/<file-name>");

 

Once that is complete, you need to create a new void method. It should look like this;

 

private static void config(File location){

 

}

 

Now, underneath the last if statement in the first void method (the server declaration) you need to type

 

config(location);

 

Next, in the second method, you need to type the following;

 

Configuration config = new Configuration(location);

 

config.load();

 

config.save();

 

Ok, you need to import net.minecraftforge.common.Configuration and you are done with the ConfigLoader class! Next, you need to move over to your main mod class. In the pre-init method, you need to add this bit of code;

 

ConfigLoader.load();

 

If the config file is not in the same package as the main mod class, make sure to import it.

 

So that should be it! After this, just follow the tutorials on how to make config files, unless you know how to make them, but skip the step for the config variable. And when you start the game, you will have your own custom config file directory!

 

BTW The final class should look like this;

 

import java.io.File;

 

import cpw.mods.fml.common.FMLCommonHandler;

import cpw.mods.fml.relauncher.Side;

 

import net.minecraft.client.Minecraft;

import net.minecraftforge.common.Configuration;

 

public class ConfigLoader {

 

public static void load(){

 

File location = null;

Side s = FMLCommonHandler.instance().getEffectiveSide();

if(s == s.CLIENT){

 

location = new File(Minecraft.getMinecraftDir().toString()+"/romejanic/Ghost.txt");

 

}

if(s == s.SERVER){

 

location = new File("./romejanic/Ghost.txt");

 

}

config(location);

 

}

 

private static void config(File location){

 

Configuration config = new Configuration(location);

 

config.load();

 

config.save();

 

}

 

}

 

Thanks!

Romejanic

Romejanic

 

Creator of Witch Hats, Explosive Chickens and Battlefield!

Posted

Protip: DO NOT PUT YOUR CONFIGS OUTSIDE THE CONFIG FOLDER.

That's a really really stupid thing to do.

Breaking standards just because you feel like it is bad.

You can make subfolders in the config folder, but making them in the root of the MC folder just causes issues.

 

Proper way to do it is to listen for the PreInit event, and grab the config folder from that:

event.getModConfigurationDirectory();

I do Forge for free, however the servers to run it arn't free, so anything is appreciated.
Consider supporting the team on Patreon

Posted

@LexManos Really? That's strange, because I've never had any problems doing this.

 

Thanks anyway!

 

Romejanic

Romejanic

 

Creator of Witch Hats, Explosive Chickens and Battlefield!

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • just rewatched the tutorial and my code is exactly the same as kaupenjoe's.  the item is added into the game but like i said to start it doesnt have a texture or a proper name for whatever reason.
    • yes the name is en_us.json and it is in resources -> assests -> testmod -> lang folders.  i have checked my code and am pretty confident that the code itself is correct.  i even tried loading the project in eclipse and it has the same problems, I think i will just rewatch the whole tutorial and will give an update on the situation.
    • same error, I also tried removing Valkyrian skies as well because I noticed it coming up a lot in the debug log errors
    • Hey man,    i have only been modding Minecraft for a few days but maybe I can help you. First of all make sure to follow every step of Kaupenjoe's tutorial, I found it to been very helpful and complete. The game uses the raw translation key for the item (in your case "item.testmod.alexandrite") if it can't find the correct lang file. Make sure it's name is "en_us.json" and it is saved under "ressources" -> "assets" -> "testmod".
    • whenever I try to get this item to render into the game it appears with the not texture purple and black squares and calls itself by the lang translation file path instead of the name i gave it.   { "item.testmod.alexandrite": "Alexandrite" } this is the lang json file package net.Hurst.testmod.item; import net.Hurst.testmod.TestMod; import net.minecraft.world.item.Item; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.RegistryObject; public class ModItems { public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, TestMod.MOD_ID); public static final RegistryObject<Item> ALEXANDRITE = ITEMS.register("alexandrite", () -> new Item(new Item.Properties())); public static void register(IEventBus eventBus){ ITEMS.register(eventBus); } } this is my ModItems.java file package net.Hurst.testmod; import com.mojang.logging.LogUtils; import net.Hurst.testmod.item.ModItems; import net.minecraft.world.item.CreativeModeTabs; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.BuildCreativeModeTabContentsEvent; import net.minecraftforge.event.server.ServerStartingEvent; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.ModLoadingContext; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.config.ModConfig; import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import org.slf4j.Logger; // The value here should match an entry in the META-INF/mods.toml file @Mod(TestMod.MOD_ID) public class TestMod { public static final String MOD_ID = "testmod"; private static final Logger LOGGER = LogUtils.getLogger(); public TestMod() { IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); modEventBus.addListener(this::commonSetup); ModItems.register(modEventBus); MinecraftForge.EVENT_BUS.register(this); modEventBus.addListener(this::addCreative); ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, Config.SPEC); } private void commonSetup(final FMLCommonSetupEvent event) { } // Add the example block item to the building blocks tab private void addCreative(BuildCreativeModeTabContentsEvent event) { if(event.getTabKey() == CreativeModeTabs.INGREDIENTS){ event.accept(ModItems.ALEXANDRITE); } } // You can use SubscribeEvent and let the Event Bus discover methods to call @SubscribeEvent public void onServerStarting(ServerStartingEvent event) { } // You can use EventBusSubscriber to automatically register all static methods in the class annotated with @SubscribeEvent @Mod.EventBusSubscriber(modid = MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT) public static class ClientModEvents { @SubscribeEvent public static void onClientSetup(FMLClientSetupEvent event) { } } } this is my TestMod.java file { "parent": "minecraft:item/generated", "textures": { "layer0": "testmod:item/generated" } } this is my model file for the item. I am using intellij 2025.1.2 with fdk 1.21 and java 21 I would appreciate the help.
  • Topics

  • Who's Online (See full list)

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.