Custom Content
Adding custom content is the main part of datapacks in my opinion. In Beta 0.0.5 Sculk adds support for custom blocks & items.
Custom content always has to be registered in the start tag.
Blocks
In this example, we will be adding a calcite brick, similar to stone bricks but calcite.
Registering the Block
In your start script add the following.
var brickSettings = BlockSettings.of(Blocks.get("stone_bricks")); // Copy the settings of stone bricks
// If you want an item to be registered too, use registerWithItem otherwise just use register
Blocks.registerWithItem(Block("calcite_bricks", brickSettings));
There are a few settings you can tweak to customize your block. They are listed below:
hardness
hardness determines the breaking speed of the block.
resistance
resistance determines the blast resistance of the block.
collidable
collidable determines whether the block has a hitbox / is collidable with entities.
luminance
luminance determines the light level that the block emits.
slipperiness
slipperiness determines the slipperiness of the block.
burnable
burnable determines whether the block is burnable.
pistonBehavior
pistonBehavior determines what the block will do when a piston tries to push it.
NORMAL
The block will get pushed.
DESTROY
The block will get destroyed.
BLOCK
The block will not get pushed.
IGNORE
No noticeable difference to BLOCK while testing.
PUSH_ONLY
The block will only be able to get pushed and not pulled even with a sticky piston.
hasBlockBreakParticles
hasBlockBreakParticles determines whether the block will spawn particles when broken.
instrument
instrument determines what instrument a noteblock will play.
requiresTool
requiresTool determines whether the block requires a tool to drop loot.
Adding a Loot Table
In Datapack Name/data/namespace/loot_tables/blocks, create a file named <block id>.json.
{
"type": "minecraft:block",
"pools": [
{
"bonus_rolls": 0.0,
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
],
"entries": [
{
"type": "minecraft:item",
"name": "useful_calcite:calcite_bricks"
}
],
"rolls": 1.0
}
]
}
Making a Pickaxe Required to Drop Loot
To make the block break faster with a certain tool, create a file in Datapack Name/data/minecraft/tags/blocks/mineable/<tool>.json where <tool> is one of the following: pickaxe, axe, shovel, sword.
{
"replace": false,
"values": [
"useful_calcite:calcite_bricks"
]
}
Creating the Resourcepack
Creating the Blockstates
In Resourcepack Name/assets/datapack_namespace/blockstates create a file named <block id>.json.
{
"variants": {
"": {
"model": "useful_calcite:block/calcite_bricks"
}
}
}
Currently, blockstates are not supported but may in the future.
Creating the Language File
In Resourcepack Name/assets/datapack_namespace/lang create a file named en_us.json. You can replace en_us with any other language you want.
{
"item.useful_calcite.calcite_bricks": "Calcite Bricks",
"block.useful_calcite.calcite_bricks": "Calcite Bricks"
}
Creating the Item & Block Models
The Block Model
In Resourcepack Name/assets/datapack_namespace/models/block create a file named <block id>.json.
{
"parent": "minecraft:block/cube_all",
"textures": {
"all": "useful_calcite:block/calcite_bricks"
}
}
You can use Blockbench for more complex models.
The Item Model
If you didn't use registerWithItem you can skip this step.
In Resourcepack Name/assets/datapack_namespace/models/item create a file named <block id>.json.
{
"parent": "useful_calcite:block/calcite_bricks"
}
Adding Textures
In Resourcepack Name/assets/datapack_namespace/textures/block add your block texture in the format <block id>.png.
Items
Registering the Item
In your start script add the following.
var itemSettings = ItemSettings();
Items.register(Item("my_item", itemSettings));
There are a few settings you can tweak to customize your item. They are listed below:
maxCount
The max amount of items in a stack. Cannot be above 64.
maxDamage
The max amount of the damage the item can take before it breaks. maxCount has to be 1.
fireproof
Whether the item is immune to lava.
Creating the Resourcepack
The Item Model
In Resourcepack Name/assets/datapack_namespace/models/item create a file named <item id>.json.
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "useful_calcite:item/my_item"
}
}
Adding Textures
In Resourcepack Name/assets/datapack_namespace/textures/item add your item texture in the format <item id>.png.