Skip to content

Release 0.2.0 - #5

Merged
tastybento merged 2 commits into
mainfrom
develop
Aug 9, 2026
Merged

Release 0.2.0#5
tastybento merged 2 commits into
mainfrom
develop

Conversation

@tastybento

Copy link
Copy Markdown
Member

Two playtests' worth of boat bugs, the economy holes they turned up, and somewhere to sleep. Rolls in 0.1.1, which was drafted but never published.

A boat is an identity, not a plank of wood. Two places matched your ship by its material rather than its record: the crafting refit broke up the first hull of the old boat's wood in your pack, and the spawn auto-launch consumed whatever hull matched the type and launched your record out of it. With a stranger's hull aboard, either one takes somebody else's boat. Both now match the record id; a hull stamped with another record is never touched, and an unstamped hull of the right type is only a last resort.

A hold never changes hands in silence. Picking up a hull you own makes it your hold again and demotes whatever you were sailing to an unowned OLD BOAT — previously without a word. boat.own-aboard and boat.own-resumed now say which boat is the hold and what became of the other.

No double hulls from a pickup. The claim-outright branch removed the ground item and handed over a stamped copy but never cancelled the event, and the server delivers the stack it captured regardless. Two items, one hold.

/tw chart answers "where is my old boat?" The hologram compass skips a boat you are carrying or standing beside, so at a quay it drew nothing and you could not tell "no old boat" from "the marker didn't draw". Bare /tw chart now sends the two text bearings as well.

Pale oak was worth nothing. PALE_OAK_LOG and MANGROVE_LOG had no base price, and pale oak no fuel value — the wood the top two hulls are built from was unsellable at every counter and unburnable in every hold. The 15 dyed wools had no prices either: most dyes come from flowers, which have no price, so recipe derivation returned zero for every colour.

Port inns. This is an ocean; a bed needs a floor that isn't moving, and until you claimed an islet there was nowhere to put one. Ports whose type is in the new ocean.inn-island-types (LUXURY, AGRICULTURAL, FOREST) build a room off the plaza with a lantern and a made bed — both halves with agreeing Bed block data. Sleeping sets your respawn as any bed does. Only affects plazas not yet generated.

Farm ports outfit a home. White wool, cooked beef and mutton, plus one dyed colour per port, seeded from the island so the same port always sells the same wool. Outfitter stock rather than cargo on purpose: trader-bought cargo can only leave the hold by sale or destruction, so wool bought as cargo could never become a bed.

Also here, from the unpublished 0.1.1: the respawn loaner is yours and active the moment it is handed over (an unowned raft is not a hold, and every trader refused it), no loaner on a keepInventory death, and releases publish themselves to Modrinth, CurseForge and Hangar.

⚠️ Every map and list here also changed in config.yml. BentoBox replaces map settings rather than merging them, so a code default alone fixes nothing on a server that already has a config. The draft release notes list the exact keys to add.

610 tests green. No hold, boat or ocean model change, so existing worlds and databases carry over untouched.

Draft release notes: https://github.com/BentoBoxWorld/TradeWinds/releases

🤖 Generated with Claude Code

https://claude.ai/code/session_014as2obVi1QJj8CRTSqXBRr

tastybento and others added 2 commits August 8, 2026 18:12
Playtest, straight after the loaner fix: died, was lent the bamboo raft,
walked over an oak hull at spawn and pocketed it with NO message of any
kind; dropped the raft, picked it back up, and the oak boat vanished from
the pack; /tw chart mentioned no OLD BOAT at all.

Matching by MATERIAL instead of identity, twice. BoatCraftListener's
refit broke up the first hull of the old boat's wood it found in the
pack - with a stranger's oak hull aboard, that is somebody else's boat.
StarterKit's spawn auto-launch had the same bug: it consumed whatever
hull matched the type and launched OUR record out of it. Both now match
the record id, fall back to an unstamped hull of that type only when
nothing carries the id, and never touch a hull stamped with another
record. Two oak boats are not the same boat; this rule has now cost four
playtests.

A hold changing hands in silence. Picking up a hull you own re-points
your active boat and demotes whatever you were sailing - here, the loaner
handed over a minute earlier - to an unowned OLD BOAT, and said nothing
at all. boat.own-resumed / boat.own-aboard now say which boat is the hold
and what became of the other, rate-limited through the existing prompt
suppression so a full pack cannot spam it.

A duplication route through the pickup listener: the "nothing to lose,
claim it outright" branch removed the ground item and handed over a
stamped copy but never cancelled the event, and vanilla adds the stack it
captured regardless of the entity dying. Two items, one record - exactly
what the rest of that class exists to prevent. Cancelled now.

/tw chart could not answer "where is my old boat?". The no-argument chart
raises holograms only, and worthMarking deliberately skips a boat that is
carried or within 32 blocks, so at a quay it draws nothing and a sailor
cannot tell "no OLD BOAT" from "the marker did not draw". It now sends
the two text bearings as well.

Economy, same session: pale oak was missing from every table - no base
price and no fuel value - so the wood the top two hulls are built from
was literally unsellable and unburnable. Mangrove had fuel but no price.

Somewhere to sleep. "It's very difficult to sleep - there are no beds",
and structurally so: this is an ocean, a bed needs a floor that is not
moving, and until you claim an islet there is nowhere to put one. Ports
whose type is in ocean.inn-island-types (LUXURY, AGRICULTURAL, FOREST)
now carry an inn: a 5x5 room in the island's own planks, doorway to the
plaza, lantern on the beam, and a made bed - both halves with agreeing
Bed block data, because a half bed cannot be slept in. It stands across
the plaza from the galley and never on the spawn pad. BED is not on the
port deny list, so it is usable at visitor rank, and sleeping sets the
respawn point the way any bed does.

Farm ports sell white wool, cooked beef and mutton, plus ONE dyed colour
of their own (TypeEconomy.localWool, seeded from the island cell - the
same port always sells the same wool, so a sailor after a colour has
somewhere to sail to). Outfitter stock, deliberately: trader-bought cargo
may only leave the hold by sale or destruction, so wool bought as cargo
could never become a bed. The 15 dyed wools needed explicit prices - most
dyes come from flowers, which have no price, so recipe derivation
returned zero for every colour and none of them were tradeable at all.

Note that every map and list here had to change in config.yml too:
BentoBox REPLACES them rather than merging, so a code default alone fixes
nothing on a server that already has a config.

Version 0.2.0. New tests: BoatIdentityTest (7) plus inn and flock-colour
guards in IslandDecoratorTest. 610 tests green.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014as2obVi1QJj8CRTSqXBRr
…ts-have-inns

A boat is an identity, not a plank of wood - and ports have inns now
@tastybento
tastybento merged commit 8ea00f1 into main Aug 9, 2026
5 checks passed
@sonarqubecloud

sonarqubecloud Bot commented Aug 9, 2026

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant