Repository navigation
Release 0.3.0 - #9
Merged
Merged
Conversation
Version to 0.2.1-SNAPSHOT: 0.2.0 is out, and the next thing to land will be a fix. First of those: sugar cane is contraband now. One cane crafts into one sugar, so a hold full of cane walked through a customs scan clean and became contraband on the far side with a single click - the whole crime layer was theatre for anyone who had read a recipe book (Ben, playtest). SUGAR_CANE joins SUGAR in illegal-trade.contraband-materials, in the code default AND in config.yml: a list in config REPLACES the default rather than merging, so shipping one without the other fixes nothing on a server that already has a config. Knock-on effects, all intended - farm ports no longer stock cane over the counter (saleCatalog filters contraband), customs scans catch it in hold and pockets, and the black-market premium applies to it. The rule for when the list grows next, now in the config comment: list the FEEDSTOCK as well as the finished good. 611 tests green. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014as2obVi1QJj8CRTSqXBRr
Custom stamping is gone (it went with the hold plan on 2026-08-01) but its
paperwork stayed: economy.unstamped-sellables sat in config.yml listing
SUGAR, with no @ConfigEntry behind it and nothing in the codebase reading
it - a knob that promised "traders buy this even WITHOUT a customs stamp"
and did nothing at all. Deleted, with the locale item.stamp ("Customs
Stamped") that nothing renders any more.
The comments that outlived the feature go too: Contraband's javadoc still
described stamping as the boundary of what may be sold, the booty settings
claimed drops were "customs-stamped, so salvage can be sold", the buying
page told players their goods were stamped, and CustomsService.sellableAt
called the band rule an addition "on top of the customs stamp" when it is
now the only thing that refuses a sale.
611 tests green.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014as2obVi1QJj8CRTSqXBRr
Open 0.2.1, and make the feedstock as illegal as the good
The market subtitle, warp tooltips, chart holograms and the chart and admin listings printed the raw enum for an island's type (AGRICULTURAL), three places still used a hardcoded English band name although tradewinds.band.* has existed for months, and /tw prices prettified the category enum. All of it now goes through getLocaleKey(), the English display name on SecurityBand is gone, and the dash and question-mark placeholders come from tradewinds.general too. LocaleKeyTest checks every enum constant has its line. First of three commits for #7. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011kwguMkwTr1i1C8qxqrbYT
Every item name shown to a player was the material enum prettified, which no locale could touch (#7). ItemNames now gives the locale's own line (tradewinds.materials.<key>) when the translator wrote one, and otherwise a MiniMessage lang_or tag: BentoBox substitutes variables and then parses the string, so in dialogs, GUIs and holograms the client renders the item's name in its own language for free, and chat, which BentoBox flattens to legacy text, falls back to the English name. Enchantment names on the shelf go the same way. Player-given item names are escaped before substitution, closing a MiniMessage injection into the dialogs. en-US.yml lists every traded material, blank by default, and LocaleKeyTest keeps the list complete. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011kwguMkwTr1i1C8qxqrbYT
Port names are procedural, so no locale could list them (#7). Every name is 2-4 tokens from the Elite digraph table, though, and a locale CAN list those: NameGenerator now exposes the token sequence (its joined name is byte-identical to before - a 40,000-hash test holds it to the old implementation, because the name is the island's identity in every existing world), and PortNames maps each token through tradewinds.name-token.<syllable> for the viewer's locale. Every player-facing line switches to the display name; the island registry, resident tags, logs and admin commands keep the canonical one. The star chart draws the transliterated name only when the map font can - it is ASCII bitmap and throws on anything else - so a Chinese locale sees Chinese names everywhere but the chart. The on token is quoted in the locale: bare on/off/yes/no are YAML booleans. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011kwguMkwTr1i1C8qxqrbYT
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011kwguMkwTr1i1C8qxqrbYT
Variables are substituted and then the string is parsed as MiniMessage, and the legacy flattener prints a translatable's fallback. Both are checked against the real BentoBox Util so a core change fails the build here rather than in a playtest. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011kwguMkwTr1i1C8qxqrbYT
… the locale Playtest with a Chinese BentoBox locale and an English client (#7): the spawn port read Spawn everywhere because its name is given, not generated, so the token table never touched it - PortNames now maps it to tradewinds.spawn.name. The outfitter's gear (rod, compass, iron kit, bed, pickaxe, mutton) is code, not config, so the materials list and its completeness test had missed it. And a boat's baked-in text - item name, lore, floating label - was written with the console's locale; it is now the owner's when they are online, and the hull's own item name goes through tradewinds.item.boat-name so it follows the locale (or the client) like every other material. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011kwguMkwTr1i1C8qxqrbYT
The border pane's six-clause instruction was one clipped line, in every language (playtest 2026-09-04). Hold lore keys now split on newlines into lore lines, the convention BentoBox's own panels use; each line carries its own colour tags because an open tag does not reach the next line. The border and TNT tooltips are rewritten as short lines. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011kwguMkwTr1i1C8qxqrbYT
Every key of en-US, checked by script for key, placeholder and tag parity. Materials are filled with the official zh-CN item names so chat lines name goods in Chinese too, the port-name syllables are transliterated (the lone A is 亚 rather than 阿 so no two English names can collapse into one Chinese one), and the spawn port is 出生港. Requested in #7. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011kwguMkwTr1i1C8qxqrbYT
Names in the player's own language: goods, ports, types and bands (#7)
|
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.



Names in the player's own language, and the 0.2.1 that was never published.
Goods, fuel and hulls translate themselves (#7, #8). Every item name a player saw was the material enum prettified.
ItemNamesnow gives the locale's ownmaterials.<key>line when written, and otherwise a MiniMessagelang_ortag: BentoBox substitutes variables and then parses the string, so dialogs, the hold GUI, holograms and boss bars render the item in the client's language for free. Chat, which BentoBox flattens to legacy, falls back to English unless the locale line is filled. Enchantment names on the shelf go the same way, and a player-given item name is escaped before substitution, which closes a MiniMessage injection into the dialogs.Port names transliterate (#8). A name is 2–4 tokens from the Elite digraph table;
NameGenerator.tokensexposes them andPortNames.displaymaps each throughname-token.<syllable>in the viewer's locale. The canonical name stays the island's identity everywhere else, held byte-identical by a 40,000-hash test. The star chart draws the transliterated name only when the ASCII map font can; the spawn port is named byspawn.name.The last English out of the code (#8). Island type reached players as the raw enum in five places, three places used a hardcoded band name,
/tw pricesprettified the category enum. All viagetLocaleKey();SecurityBand.getDisplayName()is deleted.LocaleKeyTestchecks every enum constant, name token and traded material (including the outfitter's shelf, which is code, not config) has a locale line.Simplified Chinese ships (#8).
zh-CN.yml: every key, checked by script for key, placeholder and tag parity.Also: hold tooltips break on newlines instead of clipping; boat item name, lore and the floating label are written in the owner's locale; the BentoBox behaviours the item-name design rests on are pinned by a test against the real
Util.From 0.2.1 (#6):
SUGAR_CANEis contraband alongsideSUGAR, in the code default andconfig.yml; the deadeconomy.unstamped-sellablesknob and theitem.stamplocale line are gone.SUGAR_CANEtoillegal-trade.contraband-materialsby hand (lists replace, they do not merge). Locale files gain 217 keys automatically on load, but three reworded lines (hold.border-lore,hold.tnt-lore,ui.market.buying-body) keep their old text until the file is regenerated. The draft release notes spell this out.633 tests green. No hold, boat or ocean model change; existing worlds and databases carry over untouched.
The draft is flagged as a pre-release so the reporter of #7 can try the 0.3.0-SNAPSHOT first: https://github.com/BentoBoxWorld/TradeWinds/releases
🤖 Generated with Claude Code
https://claude.ai/code/session_011kwguMkwTr1i1C8qxqrbYT