Overview#
CustomThings is a powerful framework designed for Minecraft that enables the addition of new content without the need for Java programming. By utilizing JSON (JavaScript Object Notation) files, users can define a wide array of game elements including custom blocks, items, crafting recipes, and ore generation. This mod is particularly essential for modpack creators who wish to bridge gaps between mods or add unique thematic elements to their gameplay experience.
Key Features
- Custom Blocks: Define hardness, resistance, light levels, and custom textures.
- Custom Items: Create new materials, tools, and food items with unique lore and stack sizes.
- Recipe Management: Add shaped, shapeless, and smelting recipes for any item in the game.
- World Generation: Configure custom ores to spawn in the world with specific height and frequency settings.
- Creative Tabs: Organize your custom content into dedicated tabs in the creative inventory.
- Achievements: Create custom achievement trees to guide player progression.
Getting Started#
To begin adding content, you must first install the mod and its dependency, EnderCore. Upon the first launch, the mod will generate a directory structure within your Minecraft instance.
Directory Structure
All custom content is managed within the config/CustomThings/ folder. You should create the following subfolders if they do not exist:
/blocks/: JSON files for custom blocks./items/: JSON files for custom items./recipes/: JSON files for crafting and smelting recipes./worldgen/: JSON files for ore generation./creativetabs/: JSON files for custom creative inventory tabs./achievements/: JSON files for custom achievements./fuels/: JSON files for defining furnace fuels.
Texture Allocation
Textures for your custom things should be placed in a resource pack under assets/customthings/textures/blocks/ or assets/customthings/textures/items/. The textureName property in your JSON files will point to these locations.
Custom Blocks#
Blocks are defined by creating a .json file in the config/CustomThings/blocks/ folder. Each file represents one block.
Block Properties
| Property | Description | Default Value |
|---|---|---|
name |
The internal unlocalized name of the block. | Required |
textureName |
The name of the texture file (without.png). | Required |
material |
The material type (determines sounds and tools). | rock |
stepSound |
The sound made when walking on the block. | stone |
creativeTab |
The ID of the creative tab to place the block in. | buildingBlocks |
hardness |
How long it takes to mine the block. | 1.5 |
resistance |
The block's resistance to explosions. | 10.0 |
lightLevel |
The amount of light emitted (0.0 to 1.0). | 0.0 |
harvestLevel |
The tool tier required (0=Wood, 3=Obsidian). | 0 |
harvestTool |
The tool type required (pickaxe, axe, shovel). |
pickaxe |
opaque |
Whether the block blocks light and vision. | true |
Valid Materials and Sounds
- Materials:
rock,iron,wood,glass,cloth,sand,grass,ground,water,lava,leaves,plants,vine,sponge,circuits,carpet,snow,craftedSnow,ice,packedIce,cactus,clay,gourd,dragonEgg,portal,cake,web. - Step Sounds:
stone,wood,grass,gravel,cloth,sand,snow,ladder,anvil,metal,slime.
Example Block JSON
{
"name": "ruby_ore",
"textureName": "ruby_ore",
"material": "rock",
"hardness": 3.0,
"resistance": 15.0,
"harvestLevel": 2,
"harvestTool": "pickaxe",
"creativeTab": "materials"
}Custom Items#
Items are defined in the config/CustomThings/items/ folder. These can be simple crafting ingredients or complex tools.
Item Properties
| Property | Description | Default Value |
|---|---|---|
name |
The internal unlocalized name of the item. | Required |
textureName |
The name of the texture file. | Required |
creativeTab |
The creative tab ID. | materials |
maxStackSize |
Maximum number of items per stack. | 64 |
lore |
An array of strings for the item's tooltip. | [] |
full3D |
Whether the item renders in 3D when held. | false |
effect |
Adds an enchantment glow (glint). | false |
Example Item JSON
{
"name": "ruby_gem",
"textureName": "ruby",
"maxStackSize": 64,
"lore": [
"A rare and precious gem.",
"Used for high-tier crafting."
],
"creativeTab": "materials"
}Recipes#
Recipes allow you to integrate your custom items and blocks into the game's progression. Place these in config/CustomThings/recipes/.
Shaped Recipes
Shaped recipes require items to be placed in a specific grid pattern.
{
"type": "shaped",
"output": "customthings:ruby_block",
"amount": 1,
"input": [
"RRR",
"RRR",
"RRR"
],
"ingredients": {
"R": "customthings:ruby_gem"
}
}
Shapeless Recipes
Shapeless recipes only require the ingredients to be present anywhere in the grid.
{
"type": "shapeless",
"output": "customthings:ruby_gem",
"amount": 9,
"ingredients": [
"customthings:ruby_block"
]
}
Smelting Recipes
Smelting recipes define an input for the furnace and the resulting output.
{
"type": "smelting",
"input": "customthings:ruby_ore",
"output": "customthings:ruby_gem",
"xp": 1.0
}World Generation#
CustomThings allows you to spawn your custom blocks as ores in the natural world. Define these in config/CustomThings/worldgen/.
World Gen Properties
- block: The block to generate (e.g.,
customthings:ruby_ore). - baseBlock: The block to replace (usually
minecraft:stone). - clusterSize: The number of blocks in a single vein.
- numClusters: The number of veins per chunk.
- minHeight: The minimum Y-level for spawning.
- maxHeight: The maximum Y-level for spawning.
Example World Gen JSON
{
"block": "customthings:ruby_ore",
"baseBlock": "minecraft:stone",
"clusterSize": 6,
"numClusters": 4,
"minHeight": 0,
"maxHeight": 32
}Fuels and Smelting#
You can turn any item into a furnace fuel by defining its burn time in config/CustomThings/fuels/.
Fuel Properties
- item: The item ID to be used as fuel.
- burnTime: The duration the fuel lasts in ticks (200 ticks = 1 item smelted).
Example Fuel JSON
{
"item": "customthings:compressed_coal",
"burnTime": 16000
}Creative Tabs#
To keep your custom items organized, you can create a custom tab in the Creative Inventory via config/CustomThings/creativetabs/.
Creative Tab Properties
- label: The internal name of the tab.
- iconItem: The item ID to use as the tab's icon.
Example Creative Tab JSON
{
"label": "my_mod_tab",
"iconItem": "customthings:ruby_gem"
}Localization#
To give your items and blocks proper names in-game, you must use a language file within a resource pack. Create a file at assets/customthings/lang/en_US.lang and add entries using the following format:
tile.customthings:ruby_ore.name=Ruby Ore
item.customthings:ruby_gem.name=Ruby
itemGroup.my_mod_tab=My Custom Mod