Blocks
One section per family / decor set (concept §4.2), filled in by the family issues.
Relic cache and relic artifact
Data preservation: nothing from the old world disappears silently.
- Relic cache (
): a sealed coffer stamped CLASSIFIED that stands in for a block entity the port couldn't map. Breaking it releases its
tinfoil:relic_cacheItems: stacks whose item still exists are upgraded from 1.20.1 with Minecraft's data fixers (enchantments, damage, names survive); the rest become relic artifacts. - Relic artifact (
): an item that remembers the original id and NBT (tooltip "Relic of
tinfoil:relic_artifact"; F3+H shows the tag count and data version). /tinfoil relic inspect(look at a cache or hold an artifact) prints the stored origin;/tinfoil relic list [chunkRadius]counts caches in loaded chunks.
Block-entity format written by the porter (porter remap)
{ id: "tinfoil:relic_cache",
tinfoil_origin: { id: "ironchests:iron_chest", state: "ironchests:iron_chest[facing=north]",
data: { …original block-entity NBT, incl. Items… }, data_version: 3465 } }
The block itself is (no properties).
tinfoil:relic_cachex, y, z are set; data is the untouched 1.20.1 NBT (id, position and Items included). A cache is written for every row of
relic_cacheblock_entities.csv whose BE carries something (items, text, fluids, owners; bare numbers don't count), for converts the porter can't express (e.g. iron chests with contents, stoves with more than three stacks, paintings that would overlap), and for kept BEs whose block the table maps to air or a Tinfoil block.
Relic artifacts written by the porter
Items that items.csv maps to come in two shapes, depending on whether Minecraft's DataFixer will upgrade the container they sit in:
tinfoil:relic_artifact
- 1.20.1 stacks (vanilla containers, entities, player data; the DataFixer upgrades them on load):
{id: "tinfoil:relic_artifact", Count: n, tag: {tinfoil_origin: {id, state: "", data: <original stack NBT>, data_version: 3465}}}. The DataFixer moves the unknowntagintominecraft:custom_data, so the mod convertscustom_data.tinfoil_origininto thetinfoil:relic_origincomponent (RelicArtifactItem.migrate, done; was a follow-up inmod/). - 1.21 stacks (modded containers the DataFixer skips, e.g.
handcrafted:container):{id: "tinfoil:relic_artifact", count: n, components: {"tinfoil:relic_origin": {id, state: "", data, data_version: 3465}}}.
Block families
Generated from porter/mappings/tinfoil_blocks.csv (the porter decides what exists). Textures: tools/art/stone-textures.mjs, tools/art/material-textures.mjs; sheets in docs/art/MOODBOARD.md. Every block has a recipe: one crafting entry per family from vanilla materials, the rest from the stonecutter (slabs ×2).
| family | blocks | replaces (blocks in the transfer zones) |
|---|---|---|
| ancient_shingles | , , | 1,702 |
| atlantean_marble | , , , , , , , , , , , , , , , , , , , | 9,162 |
| bermuda_stone | , , , , , , , , , , , , , , , | 4,857 |
| crop_circle_mosaic | , , , , , , , , , , , , , , , , , , , , , | 6,395 |
| crop_thatch | , , | 2,549 |
| gantry | , , , , | 1,113 |
| hangar_alloy | , , , , , , , | 1,526 |
| herringbone_stone | , | 582 |
| ley_tiles | | 207 |
| megalith_limestone | , , , , , , , , , , , , , , , | 2,976 |
| polygonal_masonry | | 54 |
| pyramid_sandstone | , , , , , , , , | 12,310 |
| tartarian_brick | , , , , , , , , , , | 20,274 |
| tunguska_brick | , , , , , , , , , , , , , | 10,211 |
Shapes: cube, pillar, slab, stairs, wall, button, pane (), fence, and three Blockbench models:
gantry_bars (8×8 px column),
tartarian_column/
gantry_support (ceiling beam along an axis),
timber_support (catwalk edge). All three are waterloggable.
gantry_railing
Decor
34 pieces, one Blockbench model each (art/blockbench/), facing the player, waterloggable, all from the stonecutter (cut from the material they're carved or cast from):
| set | pieces |
|---|---|
| Bunker & temple furniture | agency chair, agency desk, saucer parasol (light 10), temple trellis |
| Out-of-place artifacts | amphora, amphora rack, crystal skull, gear mechanism, glyph decal, ley spout, offering bowl, star map tablet, weather balloon crate |
| Ley lights | hazard lamp (13), ley brazier (15), ley lamp (15), sandstone/stone glyph lanterns (12), signal lantern (12), tall ley torch (15) |
| Effigies & cryptids | bigfoot, grey visitor, lake serpent, lizard, moai, mothman (red eyes glow), stone sphere |
| Ancient maglev | maglev track (glowing rails) |
| Dormant devices | antenna array, dormant machine, monolith terminal, numbers station radio, specimen tank, tesla coil |
Ruin & anomaly pieces
Procedural and deterministic in a seed (logic/ruin/RuinBuilder), placed by the fold passes, the native Ancient Islands and /tinfoil ruin place <piece> [scheme] [seed]:
fallen column · wall fragment (ragged top, trapezoid doorway, glyph band) · rubble pile · half-buried monolith (glow line) · moai head (buried to the chin) · stone sphere · saucer wreck (tilted, glowing ring, scattered plates) · antenna mast · bunker hatch · crop circle · geoglyph.
- Materials: ruin schemes in
data/<ns>/tinfoil/ruin_schemes/*.json(statue-scheme format plus optionalmetal,metal_dark,,
rubblemark): atlantean, bermuda, megalith, pyramid, tartarian, hangar wreck, crop circle, geoglyph. - Patterns:
data/<ns>/tinfoil/patterns/*.json{kind: crop_circle|geoglyph, rows: ["..#.."]}; our own designs. - Crop circles and geoglyphs only press into natural ground (dirt, grass, sand, farmland, terracotta, gravel) and clear the plants above; they never cut into builds or water.
- New block:
Rubble (1–8 layers like snow, never melts; 8 from cobblestone in the stonecutter).

Conspiracy board
A cork board that hangs on a wall (place it against one). Right-click with an item to pin it in the quadrant you clicked (one item; it's shown flat on the cork); an empty hand takes it back. Use string on a pinned slot, then on another pinned slot up to 16 blocks away (same or another board): a red string connects them. Unpinning cuts the strings of that slot. Two boards from 8 sticks around a plank. The renderer (items + strings) is client-side and was checked only by compiling; look at it in the dry run.