This section covers everything you need to know about the modmeta file, and how to make a mod using it.
"modMetaVersion":"3" supports the following versions:
a0.4.0
a0.4.1
a0.4.11
To get started, create a folder and save it anywhere. Name it whatever your mod author name is.
In this folder, create another folder with your mod's name.
In the mod's folder, create a folder named "tiles", all your mod's tile images will go here. Make sure every tile image is 32x32.
Create a file named "modmeta.json" in your mod's folder. Open that file with your favorite text editor.
First of all, paste this template code into your modmeta.json file:
{
"license":"",
"modMetaVersion":"3",
"tileMeta":[]
"splashes":[]
}
If you've made a mod for Hellow World before, you may notice the "description":"" and "author":"" fields missing, that is because they are now defined on our mod.io page, more on that later.
In the "license":"" field, input the link to the license your mod uses. If you are not sure what license to use, this is a useful website that can point you in the right direction: https://choosealicense.com/. If you simply do not care what people do with your mod, think about using CC0.
Keep the "modMetaVersion":"3" field as 3, this is how the game knows your mod is compatible with the player's version.
The "tileMeta":[] field is where it gets interesting. The tile meta is what defines the special functions of the tiles in your mod.
In between the square brackets in the "tileMeta":[] field, press enter so it separates them. Indent the closing square bracket using your favorite method of indentation to help keep your mod's code clean and readable. Some text editors, for example Notepad++, do the indentation for you.
Between the square brackets, paste the following template code:
{
"tileID": {
"connectedTextureGroup": "",
"collisionShape": "",
"connectedTextureRecipes": "",
"mapColor": "FFFFFF",
"carvableByCaves": "boolean",
"showInInventory": "boolean",
"inventoryTab": "",
"tooltipName": "",
"tooltipDescription": "",
"variantIDs": "[]",
"explosionRadius": "",
"damagesPlayer": "boolean",
"isAnimated": "boolean",
"animationFrameCount": "",
"animationSpeed": "",
"tileType": "",
"worldGen": [
{
"ore": {
"enabled": "boolean",
"minimumHeight": "",
"maximumHeight": "",
"minimumVeinLength": "",
"maximumVeinLength": "",
"genChance": ""
},
"blob": {
"enabled": "boolean",
"minimumSize": "",
"maximumSize": "",
"minimumTravel": "",
"maximumTravel": "",
"minimumHeight": "",
"maximumHeight": "",
"genChance": ""
}
}
]
}
}
This is the code that defines a tile. It looks long, but don't worry, all will be explained.
"tileID": {
Starting at the top, replace "tileID" with the exact name of your tile's texture, it is case sensitive and if it's wrong you might be met with an invalid tile in game. Do not include the file extension, just the name.
"connectedTextureGroup": "",
This is only used for connected textures, if your mod doesn't use connected textures then leave it blank. If it does use connected textures, use a random high number to avoid conflict with the base game or other mods. Any other tiles that would "connect" to this tile should have the same number in the "connectedTextureGroup": "" field, if the tile doesn't connect to anything else leave it blank.
"collisionShape": "",
"collisionShape": "" is the way the game tells the player how to interact with the tile, instead of using a number, string, or boolean, it uses a symbol to define what "shape" the tile has.
# - Solid, regular tile collision.
= - Semi-Solid, collides on the top, but will fall through the bottom when crouched on. There is also no collision when jumping up to it.
~ - Liquid - No collision, player physics are switched from regular player physics to water physics when inside a tile with this collision shape.
- If left blank, the tile will have no collision.
"connectedTextureRecipes": ""
This one is a lot more complicated than all the others.
The game uses 1s and 0s to figure out whether the face of the tile should connect or not, starting from the top edge of the tile going clockwise until reaching the left edge of the tile. 1 being an edge that will connect to other tiles, 0 being an edge that will not connect to other tiles. You can have multiple recipes in a single tile separated by a space to account for all possible scenarios. The tile recipe should be no more and no less than 4 numbers, making 16 possible combinations of tile recipes total.
To help you out a bit, here's all 16 possible tile recipes: 0000, 0001, 0010, 0011, 0100, 0101, 0111, 1000, 1001, 1010, 1011, 1100, 1101, 1110, 1111
"mapColor": "FFFFFF",
This is just a simple hex color code for defining your tile's color in the world map. Only input the hex value, no # or 0x.
"carvableByCaves": "boolean",
true or false value, if your tile generates naturally, setting this to true will make it so caves cannot carve through the tile.
"showInInventory": "boolean",
true or false value, if true the tile will appear in the inventory
"inventoryTab": "",
If the tile appears in the inventory, this will define which inventory tab it appears in.
If you would like it to appear in any of the vanilla tabs, input one of these:
organic
minerals
interactive
Feel free to use your own tab name, as the game will add it automatically. Any more tiles that use the same tab name will be grouped together in the tab.
"tooltipName": "",
This is the name of the tile when you hover over it in the inventory, keep it short and simple.
"tooltipDescription": "",
This is the description that appears in the tooltip section of the inventory when the tile is hovered over. As of 0.3.0, this is only used if the tile has special functions, such as being a fuse, or an explosive. This can be left blank if you wish.
"variantIDs": [],
If the tile has variants of itself, list their IDs here. As a reminder: a tile ID is the same name as tile's png image. These variants will appear when opening the chisel menu with the tile equipped in the hotbar. For example, Stone has the following variant IDs:
["sapphire_ore", "coal_ore", "copper_ore", "gold_ore", "iron_ore", "ruby_ore", "salt_ore"]
"explosionRadius": "",
Leave this blank if the tile is not an explosive. If it is, this is how you set the radius of the explosion. An explosion is triggered upon right-clicking the tile. For reference, TNT has an explosion radius of 3, and the "Get Harvey'ed" tile from the Steve Harvey Block mod has an explosion radius of 81,920, which instantly crashes the game.
"damagesPlayer": "boolean",
true or false value, if this is set to true, this tile will kill the player instantly upon touching it. It will only work if the tile has no collision.
"isAnimated": "boolean",
true or false value, if this is set to true, this tile will be animated. There is no need to define frames of an animated tile in the tileMeta, just the base tile. If this is true, make sure your tile animation frames are numbered like this:
tileID (the base tile)
tileID2
tileID3
tileID4
tileID5
...
Replace "tileID" with the base tile's tileID.
"animationFrameCount": "",
number value, set this to the total amount of frames that this tile has in its animation. If the tile is not animated, leave this blank.
"animationSpeed": "",
number value, set this to the speed in which the tile's animation will play.
"tileType": "",
Defines the type of tile. Available types are:
-log
-door
-fuse
-foliage
Log will allow the tile to generate as logs in a tree. Make sure your log tile also has a "leafy_<tileID>" variant so it generates correctly.
Door defines the tile as a door. Make sure your door also has a "closed_<tileID>" variant so it toggles closed correctly.
Fuse defines the tile as a fuse tile, right clicking a fuse tile will ignite other connected fuse tiles, and if the fuse leads to an explosive, it will detonate the explosive.
Foliage defines the tile as foliage, and will allow the tile to generate with other foliage in foliage patches.
"ore": {
"ore": { is the part of the Modmeta which lets you generate a tile naturally in the world as an ore.
"enabled": "boolean",
true or false value, if true the tile will generate naturally in the world as an ore using the values below.
"minimumHeight": "",
This defines the minimum Y level the tile can generate at. Surface level is around Y 175. The highest Y level possible is Y 360.
"maximumHeight": "",
This defines the maximum Y level the tile can generate at. Surface level is around Y 175. The highest Y level possible is Y 360.
"minimumVeinLength": "",
This defines the minimum length of a tile vein.
"maximumVeinLength": "",
This defines the maximum length of a tile vein.
"genChance": ""
This defines the percent chance the tile has to generate. 0 means it will not generate, 100 might replace every stone tile with the ore*
*not tested
"blob": [
"blob": { is the part of the Modmeta which lets you generate a tile naturally in the world as a blob
"enabled": "boolean",
true or false value, if true the tile will generate naturally in the world as a blob using the values below.
"minimumSize": "",
This defines the minimum radius of the blob.
"maximumSize": "",
This defines the maximum radius of the blob.
"minimumTravel": "",
This defines the minimum distance a blob can "travel", similar to ore vein length.
"maximumTravel": "",
This defines the maximum distance a blob can "travel", similar to ore vein length.
"minimumHeight": "",
This defines the minimum Y level the blob can generate at. Surface level is around Y 175. The highest Y level possible is Y 360.
"maximumHeight": "",
This defines the maximum Y level the blob can generate at. Surface level is around Y 175. The highest Y level possible is Y 360.
"genChance": ""
This defines the percent chance the blob has to generate. 0 means it will not generate, 100 might replace every stone tile with the blob*
*not tested
Adding more than one tile to your mod:
The bottom of your modmeta.json file should look something like this:
}
}
]
}
}
]
}
To add another tile, put a comma on the bracket that is 3rd from the bottom, like this:
}
}
]
}
},
]
}
Then, paste more of the tile template code one line below the bracket with the comma. Make sure it is also indented so it fits directly under the bracket to make your code look clean.
}
}
]
}
},
Replace this with tile template code.
]
}
Repeat for every tile in your mod.
You may have noticed the "splashes":[] field, this is for adding your own custom splash texts.
Like with the "tileMeta":[] field, press enter between the square brackets to separate them, then you can add your splash texts!
An example:
"splashes":[
"Splash 1!",
"Splash 2!",
"Splash 3!"
]
Remember to add commas outside of the quotation marks on all splashes except the last splash.
Testing your mod:
To make sure you got the JSON code correct, use a JSON validator, such as https://jsonformatter.org/. If it shows errors, then you made a mistake somewhere.
Your mod's file structure should look something like this:
mod-name.zip/
modmeta.json
tiles/
tile.png
Getting your mod into the official repo:
To get your mod in the official mod repo, all you have to do is upload it to our mod.io page and give it the "Mod" tag, then it should appear in the Mods tab in game!
IMPORTANT: DO NOT SKIP THE MOD TAG STEP, OTHERWISE IT WILL NOT APPEAR IN THE MODS TAB
If you have any questions or suggestions, join our Discord server, linked in the footer below.
This section covers everything you need to know about the modmeta file, and how to make a mod using it.
"modMetaVersion":"2" supports the following versions:
a0.3.1
a0.3.11
To get started, create a folder and save it anywhere. Name it whatever your mod author name is.
In this folder, create another folder with your mod's name.
In the mod's folder, create a folder named "tiles", all your mod's tile images will go here. Make sure every tile image is 32x32.
Create a file named "modmeta.json" in your mod's folder. Open that file with your favorite text editor.
First of all, paste this template code into your modmeta.json file:
{
"description":"",
"author":"",
"license":"",
"modMetaVersion":"2",
"tileMeta":[]
}
In the "description":"" field, input a short summary of your mod, it will appear in-game on the right side of the mods tab when a mod is selected.
In the "author":"" field, input your username. It should be the same username that you used for your author folder.
In the "license":"" field, input the link to the license your mod uses. If you are not sure what license to use, this is a useful website that can point you in the right direction: https://choosealicense.com/. If you simply do not care what people do with your mod, think about using CC0.
Keep the "modMetaVersion":"2" field as 2, this is how the game knows your mod is compatible with the player's version.
The "tileMeta":[] field is where it gets interesting. The tile meta is what defines the special functions of the tiles in your mod.
In between the square brackets in the "tileMeta":[] field, press enter so it separates them. Indent the closing square bracket using your favorite method of indentation to help keep your mod's code clean and readable. Some text editors, for example Notepad++, do the indentation for you.
Between the square brackets, paste the following template code:
{
"tileID": {
"connectedTextureGroup": "",
"collisionShape": "",
"connectedTextureRecipes": "",
"mapColor": "FFFFFF",
"carvableByCaves": "boolean",
"showInInventory": "boolean",
"inventoryTab": "",
"tooltipName": "",
"tooltipDescription": "",
"variantIDs": "[]",
"explosionRadius": "",
"isFuse": "boolean",
"isPaintable": "boolean",
"damagesPlayer": "boolean",
"isAnimated": "boolean",
"animationFrameCount": "",
"animationSpeed": "",
"worldGen": [
{
"ore": {
"enabled": "boolean",
"minimumHeight": "",
"maximumHeight": "",
"minimumVeinLength": "",
"maximumVeinLength": "",
"genChance": ""
},
"blob": {
"enabled": "boolean",
"minimumSize": "",
"maximumSize": "",
"minimumTravel": "",
"maximumTravel": "",
"minimumHeight": "",
"maximumHeight": "",
"genChance": ""
}
}
]
}
}
This is the code that defines a tile. It looks long, but don't worry, all will be explained.
"tileID": {
Starting at the top, replace "tileID" with the exact name of your tile's texture, it is case sensitive and if it's wrong you might be met with an invalid tile in game. Do not include the file extension, just the name.
"connectedTextureGroup": "",
This is only used for connected textures, if your mod doesn't use connected textures then leave it blank. If it does use connected textures, use a random high number to avoid conflict with the base game or other mods. Any other tiles that would "connect" to this tile should have the same number in the "connectedTextureGroup": "" field, if the tile doesn't connect to anything else leave it blank.
"collisionShape": "",
"collisionShape": "" is the way the game tells the player how to interact with the tile, instead of using a number, string, or boolean, it uses a symbol to define what "shape" the tile has.
# - Solid, regular tile collision.
= - Semi-Solid, collides on the top, but will fall through the bottom when crouched on. There is also no collision when jumping up to it.
~ - Liquid - No collision, player physics are switched from regular player physics to water physics when inside a tile with this collision shape.
- If left blank, the tile will have no collision.
"connectedTextureRecipes": ""
This one is a lot more complicated than all the others.
The game uses 1s and 0s to figure out whether the face of the tile should connect or not, starting from the top edge of the tile going clockwise until reaching the left edge of the tile. 1 being an edge that will connect to other tiles, 0 being an edge that will not connect to other tiles. You can have multiple recipes in a single tile separated by a space to account for all possible scenarios. The tile recipe should be no more and no less than 4 numbers, making 16 possible combinations of tile recipes total.
To help you out a bit, here's all 16 possible tile recipes: 0000, 0001, 0010, 0011, 0100, 0101, 0111, 1000, 1001, 1010, 1011, 1100, 1101, 1110, 1111
"mapColor": "FFFFFF",
This is just a simple hex color code for defining your tile's color in the world map. Only input the hex value, no # or 0x.
"carvableByCaves": "boolean",
true or false value, if your tile generates naturally, setting this to true will make it so caves cannot carve through the tile.
"showInInventory": "boolean",
true or false value, if true the tile will appear in the inventory
"inventoryTab": "",
If the tile appears in the inventory, this will define which inventory tab it appears in.
If you would like it to appear in any of the vanilla tabs, input one of these:
organic
minerals
interactive
Feel free to use your own tab name, as the game will add it automatically. Any more tiles that use the same tab name will be grouped together in the tab.
"tooltipName": "",
This is the name of the tile when you hover over it in the inventory, keep it short and simple.
"tooltipDescription": "",
This is the description that appears in the tooltip section of the inventory when the tile is hovered over. As of 0.3.0, this is only used if the tile has special functions, such as being a fuse, or an explosive. This can be left blank if you wish.
"variantIDs": "[]",
If the tile has variants of itself, list their IDs here. As a reminder: a tile ID is the same name as tile's png image. These variants will appear when opening the chisel menu with the tile equipped in the hotbar. For example, Stone has the following variant IDs:
["sapphire_ore", "coal_ore", "copper_ore", "gold_ore", "iron_ore", "ruby_ore", "salt_ore"]
"explosionRadius": "",
Leave this blank if the tile is not an explosive. If it is, this is how you set the radius of the explosion. An explosion is triggered upon right-clicking the tile. For reference, TNT has an explosion radius of 3, and the "Get Harvey'ed" tile from the Steve Harvey Block mod has an explosion radius of 81,920, which instantly crashes the game.
"isFuse": "boolean",
true or false value, if this is set to true, this tile will act as a fuse, activating any other fuse tiles next to it. If a fuse leads to an explosive, it will detonate the explosive. A fuse is triggered upon right-clicking the tile.
"isPaintable": "boolean",
true or false value, if this is set to true, this tile will be able to be painted by the Paintbrush item. For this to work properly, make sure the base tile texture is colored red.
"damagesPlayer": "boolean",
true or false value, if this is set to true, this tile will kill the player instantly upon touching it. It will only work if the tile has no collision.
"isAnimated": "boolean",
true or false value, if this is set to true, this tile will be animated. There is no need to define frames of an animated tile in the tileMeta, just the base tile. If this is true, make sure your tile animation frames are numbered like this:
tileID (the base tile)
tileID2
tileID3
tileID4
tileID5
...
Replace "tileID" with the base tile's tileID.
"animationFrameCount": "",
number value, set this to the total amount of frames that this tile has in its animation. If the tile is not animated, leave this blank.
"animationSpeed": "",
number value, set this to the speed in which the tile's animation will play.
"ore": {
"ore": { is the part of the Modmeta which lets you generate a tile naturally in the world as an ore.
"enabled": "boolean",
true or false value, if true the tile will generate naturally in the world as an ore using the values below.
"minimumHeight": "",
This defines the minimum Y level the tile can generate at. Surface level is around Y 175. The highest Y level possible is Y 360.
"maximumHeight": "",
This defines the maximum Y level the tile can generate at. Surface level is around Y 175. The highest Y level possible is Y 360.
"minimumVeinLength": "",
This defines the minimum length of a tile vein.
"maximumVeinLength": "",
This defines the maximum length of a tile vein.
"genChance": ""
This defines the percent chance the tile has to generate. 0 means it will not generate, 100 might replace every stone tile with the ore*
*not tested
"blob": [
"blob": { is the part of the Modmeta which lets you generate a tile naturally in the world as a blob
"enabled": "boolean",
true or false value, if true the tile will generate naturally in the world as a blob using the values below.
"minimumSize": "",
This defines the minimum radius of the blob.
"maximumSize": "",
This defines the maximum radius of the blob.
"minimumTravel": "",
This defines the minimum distance a blob can "travel", similar to ore vein length.
"maximumTravel": "",
This defines the maximum distance a blob can "travel", similar to ore vein length.
"minimumHeight": "",
This defines the minimum Y level the blob can generate at. Surface level is around Y 175. The highest Y level possible is Y 360.
"maximumHeight": "",
This defines the maximum Y level the blob can generate at. Surface level is around Y 175. The highest Y level possible is Y 360.
"genChance": ""
This defines the percent chance the blob has to generate. 0 means it will not generate, 100 might replace every stone tile with the blob*
*not tested
Adding more than one tile to your mod:
The bottom of your modmeta.json file should look something like this:
}
}
]
}
}
]
}
To add another tile, put a comma on the bracket that is 3rd from the bottom, like this:
}
}
]
}
},
]
}
Then, paste more of the tile template code one line below the bracket with the comma. Make sure it is also indented so it fits directly under the bracket to make your code look clean.
}
}
]
}
},
Replace this with tile template code.
]
}
Repeat for every tile in your mod.
Testing your mod:
To make sure you got the JSON code correct, use a JSON validator, such as https://jsonformatter.org/. If it shows errors, then you made a mistake somewhere.
To test your mod in game without getting it into the official repo, you can utilize the "upload repo zip" button in the mods section of the main menu.
Your repo zip file structure should look something like this:
hellow-world.zip/
author name/
mod name/
modmeta.json
tiles/
tile.png
If you would like, you can have multiple mods in one zip file to test them all at once.
Getting your mod into the official repo:
To get your mod in the official mod repo, you need to fork the mods repo, which is found here: https://github.com/Hellow-Media/mods
Once that is done, you need to make a pull request from your fork. If you don't know how to make a pull request, check the "How to make a PR" page. If your mod is approved, your pull request will be merged and your mod will be available in the Mods section!
If you have any questions or suggestions, join our Discord server, linked in the footer below.
This section covers everything you need to know about the modmeta file, and how to make a mod using it.
"modMetaVersion":"1" supports the following versions:
a0.3.0
a0.3.01
To get started, create a folder and save it anywhere. Name it what your mod author name is, whether it be your username, whatever.
In this folder, create another folder with your mod's name.
In the mod's folder, create a folder named "tiles", all your mod's tile images will go here. Make sure every tile image is 32x32.
Create a file named "modmeta.json" in your mod's folder. Open that file with your favorite text editor.
First of all, paste this template code into your modmeta.json file:
{
"description":"",
"author":"",
"license":"",
"modMetaVersion":"1",
"tileMeta":[]
}
In the "description":"" field, input a short summary of your mod, it will appear in-game on the right side of the mods tab when a mod is selected.
In the "author":"" field, input your username. It should be the same username that you used for your author folder.
In the "license":"" field, input the link to the license your mod uses. If you are not sure what license to use, this is a useful website that can point you in the right direction: https://choosealicense.com/. If you simply do not care what people do with your mod, think about using CC0.
Keep the "modMetaVersion":"1" field as 1, this is how the game knows your mod is compatible with the player's version.
The "tileMeta":[] field is where it gets interesting. The tile meta is what defines the special functions of the tiles in your mod.
In between the square brackets in the "tileMeta":[] field, press enter so it separates them. Indent the closing square bracket using your favorite method of indentation to help keep your mod's code clean and readable. Some text editors, for example Notepad++, do the indentation for you.
Between the square brackets, paste the following template code:
{
"tileID": {
"connectedTextureGroup": "",
"collisionShape": "",
"connectedTextureRecipes": "",
"mapColor": "FFFFFF",
"carvableByCaves": "boolean",
"showInInventory": "boolean",
"inventoryTab": "",
"tooltipName": "",
"tooltipDescription": "",
"variantIDs": "[]",
"explosionRadius": "",
"isFuse": "boolean",
"worldGen": [
{
"ore": {
"enabled": "boolean",
"minimumHeight": "",
"maximumHeight": "",
"minimumVeinLength": "",
"maximumVeinLength": "",
"genChance": ""
},
"blob": {
"enabled": "boolean",
"minimumSize": "",
"maximumSize": "",
"minimumTravel": "",
"maximumTravel": "",
"minimumHeight": "",
"maximumHeight": "",
"genChance": ""
}
}
]
}
}
This is the code that defines a tile. It looks long, but don't worry, all will be explained.
"tileID": {
Starting at the top, replace "tileID" with the exact name of your tile's texture, it is case sensitive and if it's wrong you might be met with an invalid tile in game. Do not include the file extension, just the name.
"connectedTextureGroup": "",
This is only used for connected textures, if your mod doesn't use connected textures then leave it blank. If it does use connected textures, use a random high number to avoid conflict with the base game or other mods. Any other tiles that would "connect" to this tile should have the same number in the "connectedTextureGroup": "" field, if the tile doesn't connect to anything else leave it blank.
"collisionShape": "",
"collisionShape": "" is the way the game tells the player how to interact with the tile, instead of using a number, string, or boolean, it uses a symbol to define what "shape" the tile has.
# - Solid, regular tile collision.
= - Semi-Solid, collides on the top, but will fall through the bottom when crouched on. There is also no collision when jumping up to it.
~ - Liquid - No collision, player physics are switched from regular player physics to water physics when inside a tile with this collision shape.
- If left blank, the tile will have no collision.
"connectedTextureRecipes": ""
This one is a lot more complicated than all the others.
The game uses 1s and 0s to figure out whether the face of the tile should connect or not, starting from the top edge of the tile going clockwise until reaching the left edge of the tile. 1 being an edge that will connect to other tiles, 0 being an edge that will not connect to other tiles. You can have multiple recipes in a single tile separated by a space to account for all possible scenarios. The tile recipe should be no more and no less than 4 numbers, making 16 possible combinations of tile recipes total.
To help you out a bit, here's all 16 possible tile recipes: 0000, 0001, 0010, 0011, 0100, 0101, 0111, 1000, 1001, 1010, 1011, 1100, 1101, 1110, 1111
"mapColor": "FFFFFF",
This is just a simple hex color code for defining your tile's color in the world map. Only input the hex value, no # or 0x.
"carvableByCaves": "boolean",
true or false value, if your tile generates naturally, setting this to true will make it so caves cannot carve through the tile.
"showInInventory": "boolean",
true or false value, if true the tile will appear in the inventory
"inventoryTab": "",
If the tile appears in the inventory, this will define which inventory tab it appears in.
If you would like it to appear in any of the vanilla tabs, input one of these:
organic
minerals
interactive
Feel free to use your own tab name, as the game will add it automatically. Any more tiles that use the same tab name will be grouped together in the tab.
"tooltipName": "",
This is the name of the tile when you hover over it in the inventory, keep it short and simple.
"tooltipDescription": "",
This is the description that appears in the tooltip section of the inventory when the tile is hovered over. As of 0.3.0, this is only used if the tile has special functions, such as being a fuse, or an explosive. This can be left blank if you wish.
"variantIDs": "[]",
If the tile has variants of itself, list their IDs here. As a reminder: a tile ID is the same name as tile's png image. These variants will appear when opening the chisel menu with the tile equipped in the hotbar. For example, Stone has the following variant IDs:
["sapphire_ore", "coal_ore", "copper_ore", "gold_ore", "iron_ore", "ruby_ore", "salt_ore"]
"explosionRadius": "",
Leave this blank if the tile is not an explosive. If it is, this is how you set the radius of the explosion. An explosion is triggered upon right-clicking the tile. For reference, TNT has an explosion radius of 3, and the "Get Harvey'ed" tile from the Steve Harvey Block mod has an explosion radius of 81,920, which instantly crashes the game.
"isFuse": "boolean",
true or false value, if this is set to true, this tile will act as a fuse, activating any other fuse tiles next to it. If a fuse leads to an explosive, it will detonate the explosive. A fuse is triggered upon right-clicking the tile.
"ore": {
"ore": { is the part of the Modmeta which lets you generate a tile naturally in the world as an ore.
"enabled": "boolean",
true or false value, if true the tile will generate naturally in the world as an ore using the values below.
"minimumHeight": "",
This defines the minimum Y level the tile can generate at. Surface level is around Y 175. The highest Y level possible is Y 360.
"maximumHeight": "",
This defines the maximum Y level the tile can generate at. Surface level is around Y 175. The highest Y level possible is Y 360.
"minimumVeinLength": "",
This defines the minimum length of a tile vein.
"maximumVeinLength": "",
This defines the maximum length of a tile vein.
"genChance": ""
This defines the percent chance the tile has to generate. 0 means it will not generate, 100 might replace every stone tile with the ore*
*not tested
"blob": [
"blob": { is the part of the Modmeta which lets you generate a tile naturally in the world as a blob
"enabled": "boolean",
true or false value, if true the tile will generate naturally in the world as a blob using the values below.
"minimumSize": "",
This defines the minimum radius of the blob.
"maximumSize": "",
This defines the maximum radius of the blob.
"minimumTravel": "",
This defines the minimum distance a blob can "travel", similar to ore vein length.
"maximumTravel": "",
This defines the maximum distance a blob can "travel", similar to ore vein length.
"minimumHeight": "",
This defines the minimum Y level the blob can generate at. Surface level is around Y 175. The highest Y level possible is Y 360.
"maximumHeight": "",
This defines the maximum Y level the blob can generate at. Surface level is around Y 175. The highest Y level possible is Y 360.
"genChance": ""
This defines the percent chance the blob has to generate. 0 means it will not generate, 100 might replace every stone tile with the blob*
*not tested
Adding more than one tile to your mod:
The bottom of your modmeta.json file should look something like this:
}
}
]
}
}
]
}
To add another tile, put a comma on the bracket that is 3rd from the bottom, like this:
}
}
]
}
},
]
}
Then, paste more of the tile template code one line below the bracket with the comma. Make sure it is also indented so it fits directly under the bracket to make your code look clean.
}
}
]
}
},
Replace this with tile template code.
]
}
Repeat for every tile in your mod.
Testing your mod:
To make sure you got the JSON code correct, use a JSON validator, such as https://jsonformatter.org/. If it shows errors, then you made a mistake somewhere.
To test your mod in game without getting it into the official repo, you can utilize the "upload repo zip" button in the mods section of the main menu.
Your repo zip file structure should look something like this:
hellow-world.zip/
author name/
mod name/
modmeta.json
tiles/
tile.png
If you would like, you can have multiple mods in one zip file to test them all at once.
Getting your mod into the official repo:
To get your mod in the official mod repo, you need to fork the mods repo, which is found here: https://github.com/Hellow-Media/mods
Once that is done, you need to make a pull request from your fork. If you don't know how to make a pull request, check the "How to make a PR" page. If your mod is approved, your pull request will be merged and your mod will be available in the Mods section!
If you have any questions or suggestions, join our Discord server, linked in the footer below.