Block Textures
Block textures define the visual appearance of blocks in the game world. The texture system supports per-face textures, weighted texture variants, and biome-based tinting.
Asset Location
Section titled “Asset Location”DirectoryAssets/Common/
DirectoryBlockTextures/
- Soil_Dirt.png
- Soil_Grass_Side.png
- Soil_Grass_Top_GS.png
- Rock_Basalt.png
- Rock_Basalt_Brick.png
- Clay_Blue.png
- …645 texture files
DirectoryBlocks/
DirectoryDecorative_Sets/
DirectoryVillage/
- …
DirectoryTavern/
- …
DirectoryAncient/
- …
DirectoryStone/
- …
DirectoryFoliage/
- …
DirectoryFarming/
- …
DirectoryTintGradients/
- Grass_Cold.png
- Grass_Warm.png
Texture Organization
Section titled “Texture Organization”Block Textures Directory
Section titled “Block Textures Directory”The BlockTextures/ directory contains ~645 PNG texture files for standard blocks. Textures are organized by naming convention rather than subdirectories.
Naming Conventions
Section titled “Naming Conventions”Base Textures
Section titled “Base Textures”{Category}_{Material}.pngExamples:
Soil_Dirt.png- Basic dirt textureRock_Basalt.png- Basalt rock textureClay_Blue.png- Blue clay textureChalk.png- Chalk texture
Directional Variants
Section titled “Directional Variants”Blocks with different appearances on different faces use suffixes:
| Suffix | Description |
|---|---|
_Top | Top face of block |
_Side | Side faces |
_Bottom | Bottom face |
Examples:
Soil_Grass_Top.png- Grass top faceSoil_Grass_Side.png- Grass side face (dirt with grass edge)Bone_Top.png- Bone block topBone_Side.png- Bone block sides
Variant Textures
Section titled “Variant Textures”Multiple visual variants use numeric suffixes:
{Name}_{Variant}.pngExamples:
Peachstone_Brick.pngPeachstone_Brick02.pngPeachstone_Brick03.pngPeachstone_Brick04.png
Decorative Variants
Section titled “Decorative Variants”| Suffix | Description |
|---|---|
_Brick | Brick pattern |
_Cobble | Cobblestone pattern |
_Smooth | Smooth surface |
_Ornate | Decorative pattern |
_Decorative | Complex decorative pattern |
Examples:
Calcite.png- Base calciteCalcite_Brick.png- Calcite bricksCalcite_Brick_Smooth.png- Smooth calcite bricksCalcite_Brick_Ornate.png- Ornate calcite bricksCalcite_Cobble.png- Calcite cobblestone
Tint Gradient Textures
Section titled “Tint Gradient Textures”Suffix _GS indicates a grayscale texture used with biome tinting:
Soil_Grass_Top_GS.png- Grayscale grass for tintingSoil_Grass_Side_GS.png- Grayscale grass sideMoss_Block_GS_Top.png- Grayscale moss
Texture Definition in JSON
Section titled “Texture Definition in JSON”In a block type’s JSON definition, the Textures property is an array of BlockTypeTextures objects. Each entry assigns a texture path to specific faces and has an optional weight for random selection.
Face Keys
Section titled “Face Keys”| Key | Face | Protocol Mapping |
|---|---|---|
Up | Top (+Y) | top |
Down | Bottom (-Y) | bottom |
North | North | back |
South | South | front |
East | East | right |
West | West | left |
Shortcut Keys
Section titled “Shortcut Keys”| Key | Sets |
|---|---|
All | All six faces at once |
Sides | North, South, East, West |
UpDown | Up and Down |
Example
Section titled “Example”{ "Textures": [ { "All": "BlockTextures/Soil_Dirt.png" } ]}A block with different top and side textures:
{ "Textures": [ { "Up": "BlockTextures/Soil_Grass_Top.png", "Down": "BlockTextures/Soil_Dirt.png", "Sides": "BlockTextures/Soil_Grass_Side.png" } ]}Weighted Variants
Section titled “Weighted Variants”Multiple texture entries with Weight values allow random variation. The weights are normalized into ratios when sent to the client.
{ "Textures": [ { "All": "BlockTextures/Rock_Stone.png", "Weight": 3 }, { "All": "BlockTextures/Rock_Stone02.png", "Weight": 1 } ]}The first variant appears 75% of the time (3/4), the second 25% (1/4). Default weight is 1.
Default Texture
Section titled “Default Texture”If no textures are specified, all faces fall back to BlockTextures/Unknown.png.
Biome Tint
Section titled “Biome Tint”The BiomeTint property is an integer index applied per face. You can set it for all faces at once or individually with BiomeTintUp, BiomeTintDown, BiomeTintNorth, BiomeTintSouth, BiomeTintEast, BiomeTintWest.
{ "BiomeTint": 1}Texture Side Mask
Section titled “Texture Side Mask”The TextureSideMask property specifies a separate texture path used as a side mask overlay. It follows the same asset validation rules as regular textures (must be a .png in a valid root directory).
Texture Categories
Section titled “Texture Categories”Soil & Natural
Section titled “Soil & Natural”| Category | Count | Examples |
|---|---|---|
| Soil | ~40 | Soil_Dirt, Soil_Grass, Soil_Clay |
| Rock | ~100 | Rock_Basalt, Rock_Aqua, Rock_Crystal |
| Sand | ~15 | Sand, Sand_Red, Sand_Volcanic |
| Clay | ~30 | Clay_Blue, Clay_Smooth_Red |
Processed & Building
Section titled “Processed & Building”| Category | Count | Examples |
|---|---|---|
| Brick | ~50 | Calcite_Brick, Rock_Basalt_Brick |
| Plank | ~20 | Plank_Oak, Plank_Pine |
| Metal | ~15 | Metal_Iron, Metal_Gold |
| Glass | ~10 | Glass, Glass_Stained_* |
Special
Section titled “Special”| Category | Count | Examples |
|---|---|---|
| Crystal | ~20 | Rock_Crystal_Blue, Rock_Crystal_Purple |
| Mushroom | ~15 | Mushroom_Block_Blue, Mushroom_Block_Brown |
| Cloth | ~15 | Cloth_Black, Cloth_Blue |
Block Type Lists
Section titled “Block Type Lists”Block types are organized into lists for tool interactions and game logic.
DirectoryAssets/Server/BlockTypeList/
- Soils.json
- Rock.json
- Ores.json
- Snow.json
- TreeWood.json
- TreeLeaves.json
- Gravel.json
- PlantsAndTrees.json
Soils List
Section titled “Soils List”{ "Blocks": [ "Soil_Dirt", "Soil_Dirt_Burnt", "Soil_Dirt_Cold", "Soil_Dirt_Dry", "Soil_Dirt_Poisoned", "Soil_Grass", "Soil_Grass_Burnt", "Soil_Grass_Cold", "Soil_Grass_Deep", "Soil_Grass_Dry", "Soil_Grass_Full", "Soil_Grass_Sunny", "Soil_Grass_Wet" ]}These lists are used by tools to determine mining behavior and durability loss.
Decorative Sets
Section titled “Decorative Sets”The Blocks/Decorative_Sets/ directory contains themed block collections with models and textures.
Available Sets
Section titled “Available Sets”| Set | Contents | Theme |
|---|---|---|
| Village | Furniture, containers | Human village |
| Tavern | Tables, chairs, barrels | Inn furnishings |
| Ancient | Ruins, artifacts | Ancient civilization |
| Desert | Desert structures | Arid region |
| Frozen_Castle | Ice furniture | Frozen region |
| Jungle | Jungle structures | Tropical region |
| Kweebec | Kweebec-style | Kweebec architecture |
| Temple_Light | Temple blocks | Light temple |
| Temple_Dark | Temple blocks | Dark temple |
| Temple_Emerald | Temple blocks | Emerald temple |
| Scarak_Hive | Organic shapes | Scarak structures |
| Scarak_Temple | Temple blocks | Scarak temple |
Set Contents
Section titled “Set Contents”Each decorative set typically includes:
Directoryfunction Set() { [native code] }/
- Barrel.blockymodel
- Barrel_*.png texture variants
- Bed.blockymodel
- Bed_Texture.png
- Chair.blockymodel
- Chair_Texture.png
- Chest.blockymodel
- Chest_Texture.png
- Door.blockymodel
- Door_Texture.png
- Table.blockymodel
- Table_Texture.png
- Lantern.blockymodel
- Lantern_Texture.png
- …
Village Set Example
Section titled “Village Set Example”DirectoryVillage/
- Barrel.blockymodel
- Barrel_Ancient.png
- Barrel_Crude.png
- Barrel_Tavern.png
- Bed.blockymodel
- Bed_Texture.png
- Bench.blockymodel
- Chest.blockymodel
- Chest_Small.blockymodel
- Door.blockymodel
- Lantern.blockymodel
- Lantern_Ceiling.blockymodel
- Painting*.blockymodel various sizes
- Pot.blockymodel
- Pot_Broken.blockymodel
- Table.blockymodel
- Wardrobe.blockymodel
- Window*.blockymodel connected block variants
Texture Requirements
Section titled “Texture Requirements”Format
Section titled “Format”The server validates that all block textures must be .png files located in one of these root directories: BlockTextures/, Blocks/, Items/, NPC/, Resources/, or VFX/.
Dimensions
Section titled “Dimensions”| Requirement | Value |
|---|---|
| Standard block | 32x32 pixels |
| High-detail | 64x64 or 128x128 pixels |
| Format | PNG |
Alpha Channel
Section titled “Alpha Channel”- Opaque blocks: No alpha needed
- Transparent blocks (glass, leaves): Alpha for transparency
- Connected blocks: Alpha for edge blending
Creating Custom Textures
Section titled “Creating Custom Textures”Basic Block Texture
Section titled “Basic Block Texture”Create a 32x32 PNG file and place it in your plugin’s BlockTextures/ directory:
BlockTextures/MyPlugin_Block_Custom.pngThen reference it in your block type definition:
{ "Id": "MyPlugin_CustomBlock", "Textures": [ { "All": "BlockTextures/MyPlugin_Block_Custom.png" } ]}Directional Block
Section titled “Directional Block”Create separate texture files for different faces, then assign them using face keys:
{ "Id": "MyPlugin_GrassBlock", "Textures": [ { "Up": "BlockTextures/MyPlugin_Grass_Top.png", "Down": "BlockTextures/MyPlugin_Dirt.png", "Sides": "BlockTextures/MyPlugin_Grass_Side.png" } ]}Tinted Block
Section titled “Tinted Block”Create a grayscale texture (conventionally using a _GS suffix) and set the BiomeTint index:
{ "Id": "MyPlugin_TintedGrass", "Textures": [ { "Up": "BlockTextures/MyPlugin_Grass_Top_GS.png", "Down": "BlockTextures/MyPlugin_Dirt.png", "Sides": "BlockTextures/MyPlugin_Grass_Side_GS.png" } ], "BiomeTint": 1}Texture Variants
Section titled “Texture Variants”Use multiple entries in the Textures array with weights for random variation:
{ "Id": "MyPlugin_StoneBlock", "Textures": [ { "All": "BlockTextures/MyPlugin_Stone.png", "Weight": 2 }, { "All": "BlockTextures/MyPlugin_Stone02.png", "Weight": 1 }, { "All": "BlockTextures/MyPlugin_Stone03.png", "Weight": 1 } ]}Color Categories
Section titled “Color Categories”Natural Colors by Biome
Section titled “Natural Colors by Biome”| Biome | Grass Tint | Soil Color |
|---|---|---|
| Plains | Bright green | Brown |
| Desert | Yellow-green | Tan |
| Cold/Taiga | Blue-green | Gray-brown |
| Jungle | Deep green | Dark brown |
| Volcanic | Orange | Black/gray |
| Burnt | Brown | Charred |
Clay Colors
Section titled “Clay Colors”Available clay colors:
- Black, Blue, Cyan, Green, Grey
- Lime, Orange, Pink, Purple
- Red, White, Yellow
Each has both rough (Clay_*) and smooth (Clay_Smooth_*) variants.
Crystal Colors
Section titled “Crystal Colors”- Blue, Cyan, Green, Pink, Purple, Red
Each crystal color has base and _Top variants.
Best Practices
Section titled “Best Practices”- Follow naming conventions - Use established prefixes and suffixes
- Match existing style - Study vanilla textures for art direction
- Use weights for variation - Multiple weighted texture entries reduce visual repetition
- Use grayscale for tinting - Pair
_GStextures withBiomeTintfor biome adaptation - Prefix custom IDs - Use your plugin name to avoid asset path collisions
- Place in valid roots - Textures must be in
BlockTextures/,Blocks/, or other validated directories
Related
Section titled “Related”- Block Types - Block definitions
- Decorative Sets - Themed block sets
- Animations - Block animations
- Connected Blocks - Multi-block connections