A boat is an identity, not a plank of wood - and ports have inns now - #4
Merged
Merged
Conversation
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
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



Playtest findings from 2026-08-08, plus the two features that came out of the same session.
Boats
BoatCraftListener's refit broke up the first hull of the old boat's wood 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. 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.boat.own-resumed/boat.own-aboardnow say what happened, rate-limited through the existing prompt suppression./tw chartcould not answer "where is my old boat?" The no-arg chart raises holograms only, andworthMarkingskips a boat that is carried or within 32 blocks — so at a quay it drew nothing. It now sends the two text bearings as well.Economy
Inns
"It's very difficult to sleep — there are no beds", and structurally so. Ports whose type is in
ocean.inn-island-types(LUXURY, AGRICULTURAL, FOREST by default) now carry a 5×5 room in the island's own planks with a doorway to the plaza, a lantern, and a made bed — both halves with agreeingBedblock data. Sleeping sets the respawn point as any bed does;BEDis not on the port deny list. Only affects plazas not yet generated.Every map and list changed here also had to change in
config.yml: BentoBox replaces them rather than merging, so a code default alone fixes nothing on a server that already has a config.Version bumped to 0.2.0. New tests:
BoatIdentityTest(7) plus inn and flock-colour guards inIslandDecoratorTest. 610 tests green.🤖 Generated with Claude Code
https://claude.ai/code/session_014as2obVi1QJj8CRTSqXBRr