Items
One YAML file can hold many items. Each item sets a material, a MiniMessage name and lore, custom model data, an unbreakable flag and a stack size. Tessera tags every stack it builds in the PDC, so it can recognise the item later.
Paper / Purpur 1.21.x, Java 21
Custom items, blocks, furniture and HUD for Paper servers. The resource pack builds itself.
01 modules
One YAML file can hold many items. Each item sets a material, a MiniMessage name and lore, custom model data, an unbreakable flag and a stack size. Tessera tags every stack it builds in the PDC, so it can recognise the item later.
A custom block sits on a base material, a note block by default. You set the tool and tier needed to break it, its sounds and a drop table with chances. Placed blocks are recorded in the chunk PDC.
Each piece is a display entity with an Interaction entity as its hitbox. You can scale and offset the model, snap it to four directions and make it a seat players can sit on.
Shaped, shapeless and cooking recipes registered with the server. Custom items work as both result and ingredient through the tessera:<id> reference, with an optional permission gate.
Your PNGs become bitmap font characters in the generated pack. Write :ruby: or <glyph:ruby> in any Tessera text and the icon appears in its place.
Actionbar lines are defined in YAML and can show health, ping, coordinates and other player values. Players turn their HUD on and off with /tessera hud, and a bossbar can show a wide banner glyph at the top of the screen.
The pack is assembled on boot and on reload: font providers, pack.mcmeta, icon, then a zip with a SHA-1 hash. An embedded HTTP server hands it to joining players. External zips can be merged in from imports/.
02 config
Content lives in per-module folders under plugins/Tessera/. The top-level key of each block is the id you use in commands, recipes and drop tables. This file ships with the plugin.
# plugins/Tessera/items/ruby.yml
ruby:
material: EMERALD
display_name: "<gradient:#ff416c:#ff4b2b><bold>Ruby</bold></gradient>"
lore:
- "<gray>A precious crimson gemstone"
- "<dark_gray>Common Material"
custom_model_data: 10001
max_stack_size: 64
ruby_sword:
material: DIAMOND_SWORD
display_name: "<gradient:#ff416c:#ff4b2b><bold>Ruby Sword</bold></gradient>"
lore:
- "<gray>Forged from crystallized ruby"
custom_model_data: 10002
unbreakable: true03 start
Drop the jar in plugins/, start the server on Java 21, edit the YAML files Tessera writes on first run, then /tessera reload. The resource pack is rebuilt and re-hashed every time.