How to Add Custom Blocks to Your Minecraft Server
Complete guide to adding custom blocks to a Minecraft server using resource packs, plugins, and modding frameworks for 1.21+ servers.
Custom blocks transform a generic Minecraft server into something unique, branded furniture, decorative panels, machinery, or entirely new building materials. Whether you run a modded Forge server or a vanilla-compatible Paper server, there are practical ways to add custom blocks minecraft server setups without breaking the game.
The two approaches
You can add custom blocks through server-side plugins with resource packs (no client mods required) or through Forge/NeoForge/Fabric mods (client mod required). Each has trade-offs:
- Plugin + resource pack: works on Paper/Spigot, players connect with vanilla clients, but blocks are limited to re-texturing unused block states (mushroom blocks, note blocks, tripwire).
- Modded: full creative freedom (custom hitboxes, physics, interactions), but every player must install the mod.
Method 1: ItemsAdder or Oraxen (plugin-based)
ItemsAdder and Oraxen are the two leading plugins for custom content on Paper/Spigot servers. Both let you define custom blocks in YAML, generate the resource pack automatically, and serve it to players on join.
Defining a custom block in ItemsAdder
Create a YAML file under plugins/ItemsAdder/contents/yourpack/configs/:
info:
namespace: yourpack
items:
marble_block:
display_name: "Marble Block"
resource:
generate: true
textures:
, item/marble_block
specific_properties:
block:
placed_model:
type: REAL_NOTE
break_particles_material: STONE
hardness: 1.5
blast_resistance: 6
Place your texture PNG at the matching path, run /iazip, and the block is live. Players see it as a custom-textured note block variant with correct mining behavior. You can add custom blocks minecraft server instances this way without any client-side mods.
Block types and limitations
ItemsAdder supports several block types: REAL_NOTE (note block states), REAL_WIRE (tripwire states), MUSHROOM (mushroom block states), and REAL (chorus plant states). Each type has a maximum number of available states. Note blocks offer around 800 unique states, which is enough for most servers. If you need more, combine types.
Method 2: Forge or NeoForge mods
For full control, create a custom mod. In your MDK workspace, register a new block:
public static final DeferredRegister<Block> BLOCKS =
DeferredRegister.create(ForgeRegistries.BLOCKS, "yourmod");
public static final RegistryObject<Block> MARBLE =
BLOCKS.register("marble_block",
() -> new Block(BlockBehaviour.Properties.of()
.strength(1.5f, 6.0f)
.sound(SoundType.STONE)
.requiresCorrectToolForDrops()));
Add a blockstate JSON, model JSON, and texture. Register the block item so players can place it from inventory. This approach supports custom collision shapes, tile entities, and block entity renderers, none of which are possible with the plugin method.
Resource pack best practices
Regardless of which method you use, follow these rules for clean resource packs:
- Use 16x16 textures unless your server targets a high-res aesthetic. Higher resolutions increase download size and VRAM usage.
- Compress PNGs with
optipngorpngquantbefore packaging. - Keep namespace names short and lowercase,
astronotAstroworld_Custom_Blocks_v2. - Test on both Java and Bedrock if your server supports crossplay via Geyser.
Pairing custom blocks with other content
Custom blocks work best alongside custom items and mobs. If you are already using ItemsAdder or Oraxen, you can define items and mobs in the same framework. For mob-related content, see our MythicMobs installation guide. For custom items specifically, check how to add custom items.
Once you add custom blocks minecraft server builds, players immediately notice the difference. Even a small set of decorative blocks, marble, basalt bricks, neon panels, gives builders far more creative range than vanilla alone.
Need hosting that handles custom content? Astroworld Hosting, NVMe SSDs, full panel access, 24/7 support.