Two problems, one of them mine.
Reverts thrown_banger/bundle/dynamite from geometry.snowball back to
geometry.item_sprite. Syncing these from main to the host produced
"[Geometry][error] geometry not found?" on the client -- geometry.snowball
does not resolve, while the April item_sprite version the host had been
running does. main was newer but had never been deployed, so the change had
never been validated against a running client. Newer is not the same as
correct, and this should have been verified before syncing rather than
assumed from the timestamps.
Separately, the client was reporting "Missing referenced asset" for every
custom block geometry -- tent_panel_l/r, hammock_slab, portal_field,
dragon_basket -- and spamming "A block must have baked material data in order
to tessellate!" 182,683 times, once per frame per unrenderable block. Those
geometry files exist and are valid; the client was serving stale cached copies
of the resource packs that predate them. Dynamite was the one pack that
refreshed, precisely because its version had just been bumped, which is why
dynamite appeared in game and camping supplies did not.
So every RP that ships models/blocks geometry is bumped to force a re-download:
spark_pet, camping_supplies and lobby_transfer, plus dynamite to carry the
geometry revert. Dependent BP manifests follow, and the world pins were set
explicitly rather than by the repin helper, which correctly refused these --
shared/ holds duplicate copies of the same UUIDs at older versions, so
"version on disk" is ambiguous for them.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015Gf1kZypRDfPL1YiWUS1LC
The four portal blocks referenced vanilla texture paths from their own pack
(emerald_block, amethyst_block, prismarine_bricks, end_portal_frame_top)
without shipping those files. While the blocks rendered through the legacy
blocks.json path this was invisible; once minecraft:geometry made
material_instances take effect the lookup failed outright and they rendered
as missing-texture.
Ships real 16x16 textures generated through scripts/build-textures.py: a dark
stone frame around a glowing field, one hue per destination -- jamie green,
lyla purple, mya teal, plus a gold-ringed frame. terrain_texture.json now
points at these instead of vanilla paths, so every key in the pack resolves
to a file the pack actually contains.
lobby_transfer_RP bumped to 1.0.1 so clients re-download rather than serving
cached art; the lobby world pin was updated to match.
Known issue, not fixed here: lobby_transfer_RP and hub_return_transfer_BP
share pack UUID b2c3d4e5-1111-2222-3333-fedcba654321. They never load on the
same server today, so the collision is latent, but it makes version bumps on
either pack risky and should be resolved with a fresh UUID plus a pin update.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015Gf1kZypRDfPL1YiWUS1LC
Two silent failure modes hit eight addons today:
1. BP→RP dep drift. When an RP version was bumped, dependent BPs kept
naming the old version. Bedrock loaded both packs but disconnected
the texture pipeline, so blocks rendered as map_color cubes in the
inventory. Aligned spark_pet, heyhe_pet, camping_supplies, dynamite,
home_sign, postal_service, private_chest BP deps to actual RP
versions. Bumped postal/private_chest RP versions to 1.0.1 to bust
client RP caches.
2. Missing minecraft:geometry. Bedrock 1.21+ silently fails to render
custom blocks in inventory unless geometry is declared — even for
plain full cubes, no warning logged. Added
minecraft:geometry.full_block to post_office, mailbox, and
private_chest. Same fix already applied to sun_lamp and the wild
cherry tree blocks in their respective addon commits.
Saved both failure modes to project memory so they're easy to recognise
next time someone sees "all my custom blocks show as solid coloured
cubes in the inventory".
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
New basic/improved/advanced detectors (8/16/32 block range). Aim and
right-click to ping the nearest ore on the view ray; pitch-coded sound
and action-bar text show distance and ore type. Any ore within 4 blocks
of a silverlabs:private_chest is hidden — chests act as faraday cages
so claimed bases stay private from neighbours' detectors.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- camping: replace cube tent with A-frame slope panels (tent_panel_l/r) +
cardinal_direction permutations; vote-skip sleep that mixes
player.isSleeping bed sleepers with tent occupants and respects the
playersSleepingPercentage gamerule; new weathered-canvas texture.
- lobby: walk-through silverlabs:portal_field block (no collision,
translucent swirl, cross-plane geo) auto-placed above each portal frame;
invisible silverlabs:portal_label entity floats above each portal with
the destination world name; transfer detection now scans down through
the field to find the destination frame.
- postal: regenerate post_office and mailbox block textures so they fill
the full block face (brick + POST plaque, full red panel with slot/latch
/flag/rivets) instead of small sprites floating on transparent.
- dynamite + tow-boat: ship the addons (volumes wired into all four
worlds; enabled_packs registers them into Mya's world).
- art: build-textures.py extended; build-art-catalog.py added to project.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Two live-testing regressions:
- block.isSolid is not a reliable member of the @minecraft/server Block
API in BDS 1.26 — it returned undefined, so !b.isSolid was always
true and every ground cell failed. Replaced with !b.isAir &&
!b.isLiquid (same predicate the clear-space check below already
uses), which correctly accepts grass/dirt/stone and only rejects air
or water/lava.
- The half-slab hammock geometry was silently rejected and rendered
invisible. The block-model parser wants the legacy 1.12.0 format
with simple "uv": [0, 0], not 1.21.0 with per-face UV objects.
Rewritten hammock_slab.geo.json to match the working
addon/spark_pet_RP/models/blocks/dragon_basket.geo.json format.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Hammock now uses a custom geometry.silverlabs.hammock_slab (8-voxel
tall half-slab instead of a full cube), matching its thin collision
box so the block reads visually as a hammock cradle, not a brick.
- Tent placement now projects the player's feet down to the nearest
solid block (up to 3 blocks) before picking the base Y, so mid-jump
fractional positions or standing-on-slab cases don't mis-place the
footprint one block too high.
- Failure messages now include the exact failing cell coordinates and
the block type that's in the way, so we can diagnose live pitch
attempts without guesswork.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The nested {"texture": "..."} form for minecraft:icon is rejected by the
1.21.0 item schema (BDS warned: "this member was found in the input,
but is not present in the Schema"), so tent and hammock had no inventory
icons at all. Switched to the plain-string form used by every other
addon in the repo.
While here, replaced the placeholder PNGs (a flat green triangle and a
red squiggle) with proper 16x16 pixel art:
- tent: A-frame canvas silhouette with doorway slit and ground line
- hammock: side-view sling with rope ends rising off-screen and a
sagging red-and-white striped fabric
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Tent pitches over a 2x3 flat footprint and lets players skip to dawn
without touching their spawn point. Hammock strings between two posts
3-6 blocks apart (straight or diagonal, +/-1 block height) and keeps
hostile mobs at bay while occupied. Both are craftable (wool/sticks and
wool/string) and mounted in all four worlds.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>