A full custom block setup for Fabric mods using the Minecraft Java API.
Covers the block class with an on-use action, block registration, block item registration,
and the lang entry. Swap yourmod with your mod ID throughout.
How to Use?
Create the block class, register the block and its block item in
ModBlocks, call
registerModBlocks() from your
mod initializer, and add the lang key to your
en_us.json.
Requirements
Fabric API, Minecraft 1.20+, Java 17+.
package com.yourmod.block;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.text.Text;
import net.minecraft.util.ActionResult;
import net.minecraft.util.hit.BlockHitResult;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
public class ExampleBlock extends Block {
public ExampleBlock(Settings settings) {
super(settings);
}
// Right-click / use action on the block
@Override
public ActionResult onUse(
BlockState state, World world,
BlockPos pos, PlayerEntity player,
BlockHitResult hit) {
if (!world.isClient) {
// Your custom logic here
player.sendMessage(
Text.literal("You clicked Example Block at " + pos.toShortString()), true
);
}
return ActionResult.SUCCESS;
}
}
package com.yourmod.block;
import com.yourmod.YourMod;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.Block;
import net.minecraft.block.MapColor;
import net.minecraft.item.BlockItem;
import net.minecraft.item.Item;
import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry;
import net.minecraft.util.Identifier;
public class ModBlocks {
public static final Block EXAMPLE_BLOCK = register(
"example_block",
new ExampleBlock(
AbstractBlock.Settings.create()
.mapColor(MapColor.PURPLE)
.strength(2.0f, 3.0f)
.requiresTool()
)
);
private static Block register(String name, Block block) {
// Register the block
Block registered = Registry.register(
Registries.BLOCK,
Identifier.of(YourMod.MOD_ID, name),
block
);
// Register the block item so it appears in inventory
Registry.register(
Registries.ITEM,
Identifier.of(YourMod.MOD_ID, name),
new BlockItem(registered, new Item.Settings())
);
return registered;
}
// Call this from your mod initializer
public static void registerModBlocks() {
YourMod.LOGGER.info("Registering blocks for " + YourMod.MOD_ID);
}
}
{
"block.yourmod.example_block": "Example Block",
"item.yourmod.example_block": "Example Block"
}