Adrian Siekierka edited this page 6 months ago

Modpack Developer Tips

Last updated on 31st March 2018.

Taming modules.cfg

NOTE: If you are using the CurseForge release of Charset, this entire section does not apply to you.

Due to the amount of content, granularity of content Charset provides, as well as my hesitancy to keep ideas which don’t meet my standards around for very long, a fairly complex (relative to other mods) configuration system had to be built to faciliate all of this while not harming the experience for modpack developers and end users.

Charset’s module configuration system is based around profiles. These provide a sane set of default settings for modpacks. There are four profiles:

  • STABLE - It’s stable and I probably won’t remove it, at least not until the next Minecraft version.
  • TESTING - It’s reasonably stable, but I’m not sure if it’s going to stay.
  • EXPERIMENTAL - I feel confident enough in it to let people play with it. Nothing else is promised.
  • INDEV - No touchie, it probably doesn’t work. (You can’t enable this one outside of a dev environment.)

By the way - If you’re unsure which profile to pick, you can always ask me!

But wait - there’s more! There’s also a category system. Certain modules have categories for them, such as “overhaul” - if you know your modpack doesn’t want a specific type of content, you can disable the category to make sure it won’t appear in the pack with future updates!

In addition, you can manually force each module to be enabled or disabled in the “overrides” list - this is especially important as a few “niche” modules are off by default. They are marked as such, but their profile is still visible. The default setting for each override is DEFAULT, which means that Charset will decide whether or not to load the module itself, based on your profile configuration and whether the dependencies for a given module are present. You can, alternatively, set them to ENABLE or DISABLE.

Taming module/lib.cfg

Another important configuration file is module/lib.cfg. It contains the functionalityRegistry, allowing you to whitelist and/or blacklist certain blocks or tile entities from given functionality.

The format for entries is “[functionality]:[registry name]“, for example “carry:minecraft:stone”. You may also use “carry:minecraft:*” to list an entire mod ID at a time, though I urge you to use this sparingly and with caution.

Available functionalities (DevTips also contains a list):



(Format: [module name] functionality name: description. To whitelist, use “functionality name:registry name” as outlined above.)

  • [immersion.stacks] immersionStacksFlat: Allow a given stack to be placed in in-world stacks in the “flat” manner.
  • [storage.locks] lock: Allow a given tile entity to be locked. (Tile entity registry name required)
  • [tweak.bonemeal] bonemeal, instantBonemeal: Those let you configure which blocks can be bonemealed at all and which can be bonemealed instantly (old Minecraft behaviour).
  • [tweak.carry] carry: Allow a block to be carried by shift-middleclicking it.
  • [tweak.doubleDoor] doubleDoor: Allow a given door to be used by the double door tweak.


A few Charset modules come with CraftTweaker support. (Eventually, Charset will release its own scripting system, most likely based around LuaJ. However, that is not yet the case.)

Functionality Registry

mods.charset.Registry.allow("carry", "minecraft:stone");
mods.charset.Registry.allow("carry", <minecraft:stone>);
mods.charset.Registry.forbid("carry", "minecraft:stone");
mods.charset.Registry.forbid("carry", <minecraft:stone>);

See the above section (“Taming module/lib.cfg”) for details.

Material Registry

mods.charset.MaterialRegistry.registerTypes(<minecraft:stone>, "block", "stone");
mods.charset.MaterialRegistry.registerRelation(<minecraft:stone>, "brick", <minecraft:stonebrick>);

Use this only when you have to. It’s an internal Charset registry which lets you register blocks as “materials” for usage by, say, block reskinning. Many vanilla-originating block relations (woods, stones, metals) are supported, but not all of them are.


mods.charset.Cauldron.addItemRecipe(<minecraft:dirt>, <liquid:water> * 100, <minecraft:diamond>)

Creates a recipe in which at least 100 mB of water is used to convert one item of dirt to one item of diamond.

mods.charset.Cauldron.addItemRecipe(<minecraft:dirt>, <liquid:water> * 100, <minecraft:diamond>, false)

Creates a recipe in which at least 100 mB of water is needed to convert one item of dirt to one item of diamond, but is not consumed.

mods.charset.Cauldron.addItemFluidRecipe(<minecraft:dirt>, <liquid:water> * 500, <minecraft:diamond>, <liquid:lava> * 500)

Creates a recipe in which exactly 500 mB of water is needed to convert one item of dirt to one item of diamond, while turning the cauldron’s contents into 500 mB of lava.

mods.charset.Cauldron.addItemFluidRecipe(<minecraft:dirt>, <liquid:water> * 500, <minecraft:diamond>, <liquid:lava> * 500, true)

Creates a recipe in which at least 500 mB of water is needed to convert one item of dirt to one item of diamond, while turning the cauldron’s contents into at least 500 mB of lava. (If you had 1000 mB of water, it becomes 1000 mB of lava, say.)