Release 0.12.0 — Admin GUI, i18n, Data Importers, API Expansion - #109
Merged
Conversation
* feat: add i18n infrastructure (Phase 0)
Add the foundational i18n system following Ecotale's proven pattern
with Hytale's native I18nModule:
- HFMessages: translation resolution engine with player/server language
support and {0}/{1} placeholder formatting
- MessageKeys: static key constants organized by nested inner classes
covering common, commands, protection, territory, GUI nav, and more
- MessageUtil: i18n-aware overloads (PlayerRef + key) alongside existing
string-literal methods for gradual migration
- ServerConfig: defaultLanguage and usePlayerLanguage settings with
JSON load/write support
- ConfigManager: convenience accessors for language settings
- PlayerData: languagePreference and notification preference fields
(territoryAlerts, deathAnnouncements, powerNotifications)
- en-US/hyperfactions.lang: initial common.* translation keys (~25 keys)
* feat: migrate faction management and claim commands to i18n keys (Phase 1a)
Migrate hardcoded English strings to MessageKeys constants for:
- FactionSubCommand.requireFaction()
- Create, Disband, Rename, Desc, Open, Close, Color commands
- Claim command (territory)
Add corresponding keys to MessageKeys.java and hyperfactions.lang.
* feat: migrate member commands to i18n keys (Phase 1b)
Migrate hardcoded English strings to MessageKeys constants for:
- Invite, Accept/Join, Kick, Leave commands
- Promote, Demote, Transfer commands
Add corresponding keys to MessageKeys.java and hyperfactions.lang.
* feat: migrate territory and teleport commands to i18n keys (Phase 1c)
Migrate hardcoded English strings to MessageKeys constants for:
- Unclaim, Overclaim, Stuck commands (territory)
- Home, SetHome, DelHome commands (teleport)
Add corresponding keys to MessageKeys.java and hyperfactions.lang.
* feat: migrate relation, social, info, and economy commands to i18n keys (Phase 1d)
Migrate hardcoded English strings to MessageKeys constants for:
- Ally, Enemy, Neutral, Relations commands (relation)
- Chat, Invites, Request commands (social)
- Info, Members, List, Help, Who, Map, Power commands (info)
- Money, TreasuryCommandHandler (economy)
Add Invites and Request inner classes to MessageKeys. Expand
Relation, Chat, Info, Power, and Economy classes with new keys.
* feat: migrate UI commands and ProtectionChecker to i18n keys (Phase 1e)
Migrate GuiSubCommand, SettingsSubCommand, FactionCommand to use
MessageKeys constants. Convert ProtectionChecker's 40 hardcoded
strings (action phrases, denial reasons, PvP, entity damage, combat
tag) to HFMessages.get() with server-default language fallback.
* feat: migrate AnnouncementManager, TeleportManager, ChatManager to i18n keys (Phase 1f)
Convert AnnouncementManager to per-player i18n resolution for server
broadcasts. Migrate TeleportManager's 10 hardcoded strings (warmup,
cooldown, cancellation messages) and ChatManager's channel display
names. Add mount entry/teleport blocking messages from
TerritoryTickingSystem. Completes Phase 1 command/system migration.
* feat: add help system markdown-to-lang build pipeline (Phase 2)
Replace hardcoded help content with build-generated .lang files from
markdown sources. Add HelpLangGenerator build-time tool that parses
22 markdown topic files into hyperfactions_help.lang and
help-manifest.json. Refactor HelpRegistry to load structure from
manifest, HelpMessages to delegate to HFMessages/I18nModule, and
HelpCategory to use i18n display name keys. Create initial
hyperfactions_gui.lang with help category names. Add generateHelpLang
Gradle task wired into processResources.
* chore: exclude build package from gitignore pattern
* feat: localize nav system, shared pages, and modal pages (Phase 3a)
Migrate navigation infrastructure to resolve display names via i18n keys
instead of hardcoded English strings. NavBarUtil.buildButtons() now accepts
PlayerRef and resolves keys through HFMessages. All page registry entries
in GuiManager updated to use MessageKeys constants.
Shared pages migrated: MainMenuPage (section titles), FactionInfoPage
(status labels, descriptions), RenameModalPage, DescriptionModalPage,
TagModalPage (all validation/success messages).
New files: hyperfactions_admin.lang (admin nav keys).
* feat: localize FactionDashboardPage and FactionMainPage (Phase 3b)
Migrate ~55 hardcoded English strings to i18n keys across both pages.
Reuse existing command keys (Home, Claim, Common, Leave) where messages
are semantically identical. Add DashboardGui and FactionMainGui key
classes for page-specific labels and messages.
* feat: localize Members, Browser, Leaderboard, and PlayerInfo pages (Phase 3c)
Migrate all hardcoded English strings in FactionMembersPage, FactionBrowserPage,
FactionLeaderboardPage, and PlayerInfoPage to use HFMessages.get() with MessageKeys.
Add GuiCommon, MembersGui, BrowserGui, LeaderboardGui, and PlayerInfoGui key classes.
* feat: localize Relations, Settings, and Modules pages (Phase 3d)
Migrate all hardcoded English strings in FactionRelationsPage,
SetRelationModalPage, FactionSettingsPage, and FactionModulesPage to
use HFMessages.get() with MessageKeys. Add RelationsGui, SettingsGui,
and ModulesGui key classes. Relation type labels use internal English
identifiers for logic with localizeType() resolving display text.
* feat: localize Treasury pages (Phase 3e)
Migrate all 5 treasury page classes to i18n:
- TreasuryPage: dashboard stats, upkeep, transaction type names, actor names
- TreasuryDepositModalPage: deposit/withdraw modal labels and messages
- TreasuryTransferSearchPage: search results, player/faction tags
- TreasuryTransferConfirmPage: fee labels, transfer result messages
- TreasurySettingsPage: leader-only permission errors, limit validation
Add ~70 treasury keys to MessageKeys.TreasuryGui and hyperfactions_gui.lang.
* feat: localize confirmation, logs, chat, invites, and map pages (Phase 3f)
Migrate hardcoded strings to i18n keys across 8 remaining faction GUI pages:
- DisbandConfirmPage, LeaderLeaveConfirmPage, LeaveConfirmPage, TransferConfirmPage
- LogsViewerPage, FactionChatPage, FactionInvitesPage, ChunkMapPage
Adds ConfirmGui, LogsGui, ChatGui, InvitesGui, and MapGui key groups
with ~90 new translation entries in hyperfactions_gui.lang.
* feat: localize create faction and new player pages (Phase 3g)
Migrate 85+ hardcoded strings across 4 new player GUI pages to i18n keys:
- CreateFactionPage: preview labels, validation errors, success messages
- InvitesPage: headers, counts, time formats, join result messages
- NewPlayerBrowsePage: sort dropdown, status badges, action buttons, join/request flows
- NewPlayerMapPage: position info, hint text, legend labels
Add CreateGui and NewPlayerGui inner classes to MessageKeys with 53 new keys.
Add MessageUtil.text() overload for i18n with color parameter.
Reuse existing keys: FactionInfoGui.STATUS_*, SettingsGui.PVP_*, MapGui.POSITION,
MapGui.LEGEND_PROTECTED, Common.ALREADY_IN_FACTION, Common.FACTION_NOT_FOUND.
* feat: localize admin GUI pages (Phase 4)
Migrate all 25 admin page files to use HFMessages.get() and MessageKeys.
Add ~170 admin i18n keys to MessageKeys.AdminGui and hyperfactions_admin.lang
covering dashboard, actions, factions, members, relations, settings,
players, economy, zones, zone map, zone wizard, and version pages.
* feat: add Player Settings GUI with language and notification preferences (Phase 5)
- PlayerSettingsPage with language dropdown and notification toggles
- Language override cache in HFMessages for per-player i18n
- TerritoryNotifier checks player alert preferences before sending
- PlayerDeathSystem checks member preferences before death broadcasts
- /f settings player command opens personal settings
- Page registered in both faction and new player nav bars
- Preferences loaded on connect, cleared on disconnect
* feat: add Spanish translations, locale stubs, and translator workflow (Phase 6)
- Full es-ES translations for commands, GUI, admin, and help content
- Stub .lang files for 7 additional locales (de-DE, fr-FR, ja-JP, pt-BR, ru-RU, tr-TR, zh-CN)
- Locale scaffolding scripts (new-translation.sh/bat)
- TRANSLATION_GUIDE.md with format docs and contribution process
- checkTranslations Gradle task to diff keys across locales
- fallback.lang for locale fallback documentation
* fix: redesign Player Settings UI and fix nav bar placement
- Rewrite player_settings.ui to follow established Container/Title/Content
pattern from browse.ui and faction_settings.ui
- Fix crash from Style (HorizontalAlignment) on Group elements
- Fix DropdownBox crash by using DropdownEntryInfo with LocalizableString
instead of plain List<String>, and string Value instead of integer index
- Move "Player" nav button to far right of both faction and new player
nav bars using FlexWeight spacer pattern
- Remove player_settings from nav bar button list (rendered separately)
- Use rebuild() for state changes since page stores preferences as
instance fields (async load race condition with openPlayerSettings)
* feat: use native locale display names and add es-ES to language selector
- Replace hardcoded LOCALE_DISPLAY_NAMES list with Java's Locale class
to generate native display names (e.g. "Español (España)")
- Add es-ES as second available locale in the language dropdown
- Fix es-ES nav.player_settings to match en-US ("Jugador" not "Ajustes")
* feat: localize all GUI pages with i18n support
Add cmd.set() calls to override hardcoded English text in all .ui
templates with HFMessages.get() lookups. Covers faction pages, admin
pages, shared/modal pages, new player pages, and help pages.
- Add ~570 new MessageKeys constants across all page domains
- Add ~280 new en-US .lang keys for GUI labels
- Add ~320 new es-ES admin .lang keys
- Add ~280 new es-ES GUI .lang keys
- Add element IDs to ~95 .ui template files for runtime text override
- Add common keys: clear, back, leave, transfer, disband
* feat: localize admin zone wizard, unclaim confirm, and type modal pages
Add i18n support for remaining admin pages: zone creation wizard,
zone type change modal, and unclaim-all confirmation page. Fix
duplicate GUI_CANCEL constant in MessageKeys.
* fix: admin GUI crash, help i18n resolution, and dropdown display names
- Fix crash: #Title.Text selector on admin pages — add #PageTitle ID to
all 29 admin .ui templates and update 28 Java files to use #PageTitle
- Fix help content showing English for non-English players — thread
PlayerRef through HelpTopic.title(), HelpEntry.text(), and
HelpMainPage.buildTopicCards() so help resolves per-player locale
- Fix category title using server default — use displayName(playerRef)
- Fix language dropdown truncation — use compact display names
(English (US) instead of English (United States)) and widen to 220px
* fix: persist player preferences to JSON storage
The custom serializePlayerData/deserializePlayerData methods in
JsonPlayerStorage did not include the i18n preference fields added
to PlayerData. Settings were saved in memory but lost on restart.
Also includes compact locale display names and help i18n threading
from earlier fixes that were committed separately.
* fix: disable Power Notifications toggle (not yet wired up)
The checkbox is shown but disabled since no power change
notifications are currently sent to players.
* refactor: relocate help markdown to Server/Languages and remove stale config.json
Move help source files from src/main/help/{locale}/ to
src/main/resources/Server/Languages/{locale}/help/ so the build-time
HelpLangGenerator reads from the same directory structure as the
runtime language loader. Update translation scripts and build.gradle
to match the new path. Remove unused config.json (replaced by
per-feature config files in config/).
* feat: restructure admin test commands and extend help markdown syntax
Restructure /f admin testgui and sentrytest under /f admin test <sub>
via new AdminTestHandler, adding /f admin test md for a future
markdown visual test page.
Extend the help system with 9 new markdown entry types: bold, italic,
list (bullet + numbered), separator, callout boxes (with colored
accent bars), inline hex colors ([#RRGGBB]), named color shortcuts
(!warning, !success, !note, !muted), and typed callouts (>[!WARNING],
>[!INFO], >[!NOTE], >[!SUCCESS], >[!TIP]).
HelpEntry gains a color field for dynamic color overrides. The
build-time HelpLangGenerator parses all new syntax and emits color
metadata in help-manifest.json. HelpRegistry and HelpMainPage handle
the new types at runtime, applying colors to text and callout accent
bars. Five new .ui templates support the visual rendering.
TIP entries are unified into CALLOUT (backward-compatible: old TIP
manifests render as green callouts).
* feat: add markdown rendering test page (/f admin test md)
Visual test page that renders every supported help markdown entry
type using the real .ui templates. Shows syntax labels alongside
rendered output for verification: text, heading, command, bold,
italic, bullet/numbered lists, separators, hex colors, named color
shortcuts, and all callout box types. Includes edge cases for text
wrapping and mixed content flow.
* docs: add help markdown style guide and move translation guide to docs/
Add docs/help-markdown.md covering the full help markdown syntax
(bold, italic, lists, separators, colors, callouts) with examples.
Move TRANSLATION_GUIDE.md to docs/translation-guide.md and update it
with the new syntax types and clear guidance on what to translate
vs. what to keep (color codes, callout type tags, named shortcuts
stay in English across all locales).
* feat: add new UI Gallery elements to button test page
Add elements discovered from 2026.02.17 UI Gallery to the element
test page: TabNavigation with HeaderTabsStyle, MultilineTextField,
tooltip demo (TooltipText + DefaultTextTooltipStyle), ContentSeparator
and PanelSeparatorFancy, ProgressBar template, HeaderSearch, Panel
and SimpleContainer variants. Update command reference to /f admin
test gui.
* fix: pin markdown test page title bar to top of container
* fix: remove invalid #Title/#Content slots from Panel and SimpleContainer
These templates are flat containers — content goes directly inside
with no insertion point wrappers. Only @Container/@DecoratedContainer
have #Title/#Content slots.
* fix: enable text wrapping and vertical centering in help templates
Replace fixed Height with auto-sizing (remove Anchor Height, use
Padding for spacing). Add Wrap: true to all Label styles so long
text wraps instead of truncating with ellipsis. Add VerticalAlignment:
Center for proper vertical text positioning.
Applies to all 8 help line templates: text, command, heading, bold,
italic, list, tip, and callout.
* feat: add table support to help markdown system
Tables use standard markdown pipe syntax (| col | col |) with
separator rows for headers. Supports per-cell inline formatting
(**bold**, *italic*, `command`, [#hex] colors) and row-level
color overrides. Includes 4 new .ui templates, parser/registry/
renderer updates, and visual test entries.
* fix: improve table visual styling with GitHub-style grid borders
Redesign table templates with proper grid lines: left border on each
cell for column separators, top/bottom borders on rows, header row
background, 200px cell width with generous padding. Add per-cell
inline formatting support (bold, italic, command, hex colors).
* feat: add admin help infrastructure with category filtering
Add 8 admin help categories (ADMIN_OVERVIEW through ADMIN_REFERENCE)
to HelpCategory enum with isAdmin() filter. Rewrite AdminHelpPage from
placeholder to full sidebar+content rendering. Filter admin categories
from player HelpMainPage. Add admin directory scanning to
HelpLangGenerator build pipeline.
* feat: rewrite player help categories 1-4 (en-US) with enhanced formatting
Comprehensive rewrite of welcome, your_faction, power_land, and
diplomacy help using tables, callouts, bold formatting, and accurate
default config values. 14 topics expanded with detailed mechanics.
* feat: rewrite player help categories 5-7 (en-US), add spawn protection/upkeep/permissions topics
Rewrite combat, economy, and quick_ref help with enhanced formatting.
Add 3 new topics: spawn_protection (combat mechanics), upkeep (territory
maintenance costs), and permissions (key permission nodes reference).
* feat: add comprehensive admin help content (en-US) — 18 topics across 8 categories
Complete admin help documentation covering overview, faction management,
zones, power manipulation, economy, configuration, maintenance (backups,
updates, imports), and admin command reference. All values sourced from
actual config defaults and handler implementations.
* feat: rewrite Spanish player help translations (es-ES) — 25 topics
Full rewrite of all es-ES player help to match updated en-US content.
Preserves command syntax, markdown formatting, and frontmatter IDs.
Includes 3 new topics: spawn_protection, upkeep, permissions.
* feat: add Spanish admin help translations (es-ES), remove placeholder languages
Add 18 es-ES admin help topics mirroring en-US structure. Remove
de-DE, fr-FR, ja-JP, pt-BR, ru-RU, tr-TR, zh-CN placeholder
translations — will be regenerated later with complete content.
* fix: strip inline markdown markers, join continuation lines, fix invalid commands
- Add inline marker stripping to HelpLangGenerator (build-time):
**bold** → bold, `code` → code, *italic* → italic, -- → em-dash
- Join multi-line prose into single lines (each line = one UI entry)
- Remove non-existent /f admin modify and /f admin bypass references
- Fix duplicate debug toggle entry in admin command reference
- Apply same fixes to both en-US and es-ES help content
* feat: table rendering with inline rows, rich text, and help window resize
- Switch table rendering from .ui templates to appendInline with explicit
calculated heights (fixes content-driven height not working with TextSpans)
- Support 2/3/4 column tables with dynamic width calculation and borders
- Add HelpRichText parser for inline markdown (bold, italic, code, colors)
- Increase help window size ~15% (750x650 → 863x748) for both player/admin
- Fix Y/N → Yes/No in roles permission table
- Use 2px row borders for visibility on all table rows
- Remove stripped inline markers from lang generator (rich text handles them)
* fix: remove duplicate gui.cancel key in admin lang files
Hytale's I18nModule rejects the entire lang file when it encounters a
duplicate key, causing ALL admin GUI translations to show raw keys.
* feat: localize GUI labels for es-ES — browse stats, log time/types, sort labels
Add i18n support for previously hardcoded English text across player and
admin GUI pages: browse entry stat labels (power/claims/members), activity
log time formatting and type names, leaderboard/browser/members sort labels.
Fix truncated Spanish button text (relations, settings, sort labels).
* feat(i18n): localize admin GUI pages, entry templates, and zone flag display names
Localize admin dashboard stats, faction/player/zone list entries,
activity log types and timestamps, economy/treasury labels, zone
flags with display names, integration flags, relation buttons,
action buttons, and faction log enhancements. Add ~100 new keys
to both en-US and es-ES admin and GUI lang files.
* feat(i18n): localize player member and browser entry templates
Add #IDs to anonymous labels in member_entry.ui (Power, Joined,
Last Death) and wire cmd.set() for all entry-level labels and
buttons in FactionMembersPage. Add no_description fallback key
for browser entries. Widen Recruitment label for Spanish. Add
11 new keys to both en-US and es-ES gui lang files.
* feat(i18n): localize admin member entries and player info page
Add #IDs to anonymous labels in admin_faction_members_entry.ui,
wire cmd.set() for entry labels and buttons in
AdminFactionMembersPage. Localize formatReason(), bypass checkbox
labels, and NoFactionLabel in AdminPlayerInfoPage. Widen sort
label and teleport button for Spanish. Add 13 new keys per locale.
* feat(i18n): localize player invite and relation entry templates
Add #IDs to anonymous labels in faction_invite_entry.ui and
faction_relation_entry.ui, wire cmd.set() for all entry-level labels
and buttons in FactionInvitesPage and FactionRelationsPage, add 17
new MessageKeys constants, and add en-US/es-ES lang entries.
Width adjustments: ClaimsLabel 50->55px, DirectionLabel 65->70px
for Spanish translations.
* feat(i18n): localize all hardcoded Java strings in GUI pages
Replace hardcoded English strings with HFMessages.get() calls:
- FactionPageOpener: "Treasury is not available." (5 occurrences)
- AdminPageOpener: "Economy system is not enabled." (3 occurrences)
- AdminFactionInfoPage: "+N more" officer list truncation
- FactionDashboardPage: "in <duration>" upkeep time prefix
- AdminVersionPage: "Unknown" fallbacks
- AdminActivityLogPage: "1h"/"24h"/"7d"/"All" time filter labels
- CreateZoneWizardPage: "circular"/"square" shape names
- ZoneChangeTypeModalPage: "flags reset"/"flags kept"
Add 14 new MessageKeys constants and en-US/es-ES lang entries.
* feat(i18n): localize admin nav bar title and economy entry buttons
Wire cmd.set() for Admin Panel title in AdminNavBarHelper and
Adjust/Info button text in AdminEconomyPage entries. Add 3 new
MessageKeys constants and en-US/es-ES lang entries.
Stage 5 (new player pages) already fully localized — no changes needed.
* feat(i18n): localize remaining hardcoded fallbacks and format strings
Replace all "Unknown", "None", "world", "another zone" fallbacks with
localized equivalents across admin and player GUI pages. Localize
treasury upkeep cost format ("every Nh") and time-left display strings.
* fix(i18n): resolve Spanish truncation, crashes, and missing translations across GUI
- Widen label/button widths across admin pages for longer Spanish text:
player info (Primera conexion, Ultima conexion, Set/Reset/SetMax buttons),
sort labels (Ordenar:) on players/economy/zones/members pages,
bypass state label (Desactivado) on dashboard, teleport button and
last online label on player entries, lock hints on faction settings
and create faction pages
- Fix admin player info crash: replace CheckBoxWithLabel @text (not
dynamically settable) with empty checkbox + separate addressable labels
for bypass toggles (Sin Perdida de Poder / Sin Decaimiento de Reclamos)
- Widen admin player info container 720->780px for button space
- Add lock hint Wrap:true and increased height for long Spanish text
- Fix treasury column widths to fit Spanish type names (Transferencia)
- Fix help table 4-column widths for longer Spanish headers
- Add missing NOTE callout to es-ES combat/tagging.md (line count parity)
- Remove unsupported mid-text color code from es-ES alliances table
- Add i18n cmd.set() calls for new player map page legend labels
* i18n: add German (de-DE) translations
Complete German translations for all 3 .lang files:
hyperfactions.lang, hyperfactions_gui.lang, hyperfactions_admin.lang
* i18n: add French (fr-FR) translations
Complete French translations for all 3 .lang files:
hyperfactions.lang, hyperfactions_gui.lang, hyperfactions_admin.lang
* i18n: add Brazilian Portuguese (pt-BR) translations
Complete Brazilian Portuguese translations for all 3 .lang files:
hyperfactions.lang, hyperfactions_gui.lang, hyperfactions_admin.lang
* i18n: add Simplified Chinese (zh-CN) translations
Complete Simplified Chinese translations for all 3 .lang files:
hyperfactions.lang, hyperfactions_gui.lang, hyperfactions_admin.lang
* i18n: add Japanese (ja-JP) translations
Complete Japanese translations for all 3 .lang files:
hyperfactions.lang, hyperfactions_gui.lang, hyperfactions_admin.lang
* i18n: add Russian (ru-RU) translations
Complete Russian translations for all 3 .lang files:
hyperfactions.lang, hyperfactions_gui.lang, hyperfactions_admin.lang
* i18n: add Korean (ko-KR) translations
Complete Korean translations for all 3 .lang files:
hyperfactions.lang, hyperfactions_gui.lang, hyperfactions_admin.lang
* i18n: add Polish (pl-PL) translations
Complete Polish translations for all 3 .lang files:
hyperfactions.lang, hyperfactions_gui.lang, hyperfactions_admin.lang
* i18n: add Italian (it-IT) translations
Complete Italian translations for all 3 .lang files:
hyperfactions.lang, hyperfactions_gui.lang, hyperfactions_admin.lang
* i18n: add Dutch (nl-NL) translations
Complete Dutch translations for all 3 .lang files:
hyperfactions.lang, hyperfactions_gui.lang, hyperfactions_admin.lang
* i18n: add Filipino/Tagalog (tl-PH) translations
Complete Filipino/Tagalog translations for all 3 .lang files:
hyperfactions.lang, hyperfactions_gui.lang, hyperfactions_admin.lang
* i18n: add all 13 locales to settings dropdown and CI verification
- Update AVAILABLE_LOCALES to include all 13 supported languages
- Update fallback.lang documentation with all locale statuses
- Add GitHub Action to verify missing translation keys on push/PR
* i18n: remove zh-CN, ja-JP, ko-KR locales
Hytale client does not currently support CJK characters, so these
translations cannot render in-game. Removed until character support
is added.
* i18n: add French (fr-FR) help file translations
Translate all 42 help markdown files into French, covering welcome,
faction management, power/land, diplomacy, combat, economy, quick
reference, and all admin sections.
* i18n: add Brazilian Portuguese (pt-BR) help file translations
Translate all 42 help markdown files into Brazilian Portuguese, covering
welcome, faction management, power/land, diplomacy, combat, economy,
quick reference, and all admin sections.
* i18n: add Russian (ru-RU) help file translations
Translate all 42 help markdown files into Russian, covering welcome,
faction management, power/land, diplomacy, combat, economy, quick
reference, and all admin sections.
* i18n: add Italian (it-IT) help file translations
Translate all 42 help markdown files into Italian, covering welcome,
faction management, power/land, diplomacy, combat, economy, quick
reference, and all admin sections.
* i18n: add Polish (pl-PL) help file translations
Translate all 42 help markdown files into Polish, covering welcome,
faction management, power/land, diplomacy, combat, economy, quick
reference, and all admin sections.
* i18n: add German (de-DE) help file translations
Translate all 42 help markdown files into German, covering welcome,
faction management, power/land, diplomacy, combat, economy, quick
reference, and all admin sections.
* i18n: add Dutch (nl-NL) help file translations
Translate all 42 help markdown files into Dutch, covering welcome,
faction management, power/land, diplomacy, combat, economy, quick
reference, and all admin sections.
* i18n: add Filipino/Tagalog (tl-PH) help file translations
Translate all 42 help markdown files into Filipino/Tagalog, covering
welcome, faction management, power/land, diplomacy, combat, economy,
quick reference, and all admin sections.
* ci: add help file verification to check-translations workflow
Add a second job that verifies all locales have matching help .md files
relative to en-US. Detects missing files (error), untranslated files
identical to en-US (warning), and extra files not in en-US (notice).
Also narrows trigger to pull_request only.
* feat: add i18n infrastructure (Phase 0)
Add the foundational i18n system following Ecotale's proven pattern
with Hytale's native I18nModule:
- HFMessages: translation resolution engine with player/server language
support and {0}/{1} placeholder formatting
- MessageKeys: static key constants organized by nested inner classes
covering common, commands, protection, territory, GUI nav, and more
- MessageUtil: i18n-aware overloads (PlayerRef + key) alongside existing
string-literal methods for gradual migration
- ServerConfig: defaultLanguage and usePlayerLanguage settings with
JSON load/write support
- ConfigManager: convenience accessors for language settings
- PlayerData: languagePreference and notification preference fields
(territoryAlerts, deathAnnouncements, powerNotifications)
- en-US/hyperfactions.lang: initial common.* translation keys (~25 keys)
* feat: migrate faction management and claim commands to i18n keys (Phase 1a)
Migrate hardcoded English strings to MessageKeys constants for:
- FactionSubCommand.requireFaction()
- Create, Disband, Rename, Desc, Open, Close, Color commands
- Claim command (territory)
Add corresponding keys to MessageKeys.java and hyperfactions.lang.
* feat: migrate member commands to i18n keys (Phase 1b)
Migrate hardcoded English strings to MessageKeys constants for:
- Invite, Accept/Join, Kick, Leave commands
- Promote, Demote, Transfer commands
Add corresponding keys to MessageKeys.java and hyperfactions.lang.
* feat: migrate territory and teleport commands to i18n keys (Phase 1c)
Migrate hardcoded English strings to MessageKeys constants for:
- Unclaim, Overclaim, Stuck commands (territory)
- Home, SetHome, DelHome commands (teleport)
Add corresponding keys to MessageKeys.java and hyperfactions.lang.
* feat: migrate relation, social, info, and economy commands to i18n keys (Phase 1d)
Migrate hardcoded English strings to MessageKeys constants for:
- Ally, Enemy, Neutral, Relations commands (relation)
- Chat, Invites, Request commands (social)
- Info, Members, List, Help, Who, Map, Power commands (info)
- Money, TreasuryCommandHandler (economy)
Add Invites and Request inner classes to MessageKeys. Expand
Relation, Chat, Info, Power, and Economy classes with new keys.
* feat: migrate UI commands and ProtectionChecker to i18n keys (Phase 1e)
Migrate GuiSubCommand, SettingsSubCommand, FactionCommand to use
MessageKeys constants. Convert ProtectionChecker's 40 hardcoded
strings (action phrases, denial reasons, PvP, entity damage, combat
tag) to HFMessages.get() with server-default language fallback.
* feat: migrate AnnouncementManager, TeleportManager, ChatManager to i18n keys (Phase 1f)
Convert AnnouncementManager to per-player i18n resolution for server
broadcasts. Migrate TeleportManager's 10 hardcoded strings (warmup,
cooldown, cancellation messages) and ChatManager's channel display
names. Add mount entry/teleport blocking messages from
TerritoryTickingSystem. Completes Phase 1 command/system migration.
* feat: add help system markdown-to-lang build pipeline (Phase 2)
Replace hardcoded help content with build-generated .lang files from
markdown sources. Add HelpLangGenerator build-time tool that parses
22 markdown topic files into hyperfactions_help.lang and
help-manifest.json. Refactor HelpRegistry to load structure from
manifest, HelpMessages to delegate to HFMessages/I18nModule, and
HelpCategory to use i18n display name keys. Create initial
hyperfactions_gui.lang with help category names. Add generateHelpLang
Gradle task wired into processResources.
* chore: exclude build package from gitignore pattern
* feat: localize nav system, shared pages, and modal pages (Phase 3a)
Migrate navigation infrastructure to resolve display names via i18n keys
instead of hardcoded English strings. NavBarUtil.buildButtons() now accepts
PlayerRef and resolves keys through HFMessages. All page registry entries
in GuiManager updated to use MessageKeys constants.
Shared pages migrated: MainMenuPage (section titles), FactionInfoPage
(status labels, descriptions), RenameModalPage, DescriptionModalPage,
TagModalPage (all validation/success messages).
New files: hyperfactions_admin.lang (admin nav keys).
* feat: localize FactionDashboardPage and FactionMainPage (Phase 3b)
Migrate ~55 hardcoded English strings to i18n keys across both pages.
Reuse existing command keys (Home, Claim, Common, Leave) where messages
are semantically identical. Add DashboardGui and FactionMainGui key
classes for page-specific labels and messages.
* feat: localize Members, Browser, Leaderboard, and PlayerInfo pages (Phase 3c)
Migrate all hardcoded English strings in FactionMembersPage, FactionBrowserPage,
FactionLeaderboardPage, and PlayerInfoPage to use HFMessages.get() with MessageKeys.
Add GuiCommon, MembersGui, BrowserGui, LeaderboardGui, and PlayerInfoGui key classes.
* feat: localize Relations, Settings, and Modules pages (Phase 3d)
Migrate all hardcoded English strings in FactionRelationsPage,
SetRelationModalPage, FactionSettingsPage, and FactionModulesPage to
use HFMessages.get() with MessageKeys. Add RelationsGui, SettingsGui,
and ModulesGui key classes. Relation type labels use internal English
identifiers for logic with localizeType() resolving display text.
* feat: localize Treasury pages (Phase 3e)
Migrate all 5 treasury page classes to i18n:
- TreasuryPage: dashboard stats, upkeep, transaction type names, actor names
- TreasuryDepositModalPage: deposit/withdraw modal labels and messages
- TreasuryTransferSearchPage: search results, player/faction tags
- TreasuryTransferConfirmPage: fee labels, transfer result messages
- TreasurySettingsPage: leader-only permission errors, limit validation
Add ~70 treasury keys to MessageKeys.TreasuryGui and hyperfactions_gui.lang.
* feat: localize confirmation, logs, chat, invites, and map pages (Phase 3f)
Migrate hardcoded strings to i18n keys across 8 remaining faction GUI pages:
- DisbandConfirmPage, LeaderLeaveConfirmPage, LeaveConfirmPage, TransferConfirmPage
- LogsViewerPage, FactionChatPage, FactionInvitesPage, ChunkMapPage
Adds ConfirmGui, LogsGui, ChatGui, InvitesGui, and MapGui key groups
with ~90 new translation entries in hyperfactions_gui.lang.
* feat: localize create faction and new player pages (Phase 3g)
Migrate 85+ hardcoded strings across 4 new player GUI pages to i18n keys:
- CreateFactionPage: preview labels, validation errors, success messages
- InvitesPage: headers, counts, time formats, join result messages
- NewPlayerBrowsePage: sort dropdown, status badges, action buttons, join/request flows
- NewPlayerMapPage: position info, hint text, legend labels
Add CreateGui and NewPlayerGui inner classes to MessageKeys with 53 new keys.
Add MessageUtil.text() overload for i18n with color parameter.
Reuse existing keys: FactionInfoGui.STATUS_*, SettingsGui.PVP_*, MapGui.POSITION,
MapGui.LEGEND_PROTECTED, Common.ALREADY_IN_FACTION, Common.FACTION_NOT_FOUND.
* feat: localize admin GUI pages (Phase 4)
Migrate all 25 admin page files to use HFMessages.get() and MessageKeys.
Add ~170 admin i18n keys to MessageKeys.AdminGui and hyperfactions_admin.lang
covering dashboard, actions, factions, members, relations, settings,
players, economy, zones, zone map, zone wizard, and version pages.
* feat: add Player Settings GUI with language and notification preferences (Phase 5)
- PlayerSettingsPage with language dropdown and notification toggles
- Language override cache in HFMessages for per-player i18n
- TerritoryNotifier checks player alert preferences before sending
- PlayerDeathSystem checks member preferences before death broadcasts
- /f settings player command opens personal settings
- Page registered in both faction and new player nav bars
- Preferences loaded on connect, cleared on disconnect
* feat: add Spanish translations, locale stubs, and translator workflow (Phase 6)
- Full es-ES translations for commands, GUI, admin, and help content
- Stub .lang files for 7 additional locales (de-DE, fr-FR, ja-JP, pt-BR, ru-RU, tr-TR, zh-CN)
- Locale scaffolding scripts (new-translation.sh/bat)
- TRANSLATION_GUIDE.md with format docs and contribution process
- checkTranslations Gradle task to diff keys across locales
- fallback.lang for locale fallback documentation
* fix: redesign Player Settings UI and fix nav bar placement
- Rewrite player_settings.ui to follow established Container/Title/Content
pattern from browse.ui and faction_settings.ui
- Fix crash from Style (HorizontalAlignment) on Group elements
- Fix DropdownBox crash by using DropdownEntryInfo with LocalizableString
instead of plain List<String>, and string Value instead of integer index
- Move "Player" nav button to far right of both faction and new player
nav bars using FlexWeight spacer pattern
- Remove player_settings from nav bar button list (rendered separately)
- Use rebuild() for state changes since page stores preferences as
instance fields (async load race condition with openPlayerSettings)
* feat: use native locale display names and add es-ES to language selector
- Replace hardcoded LOCALE_DISPLAY_NAMES list with Java's Locale class
to generate native display names (e.g. "Español (España)")
- Add es-ES as second available locale in the language dropdown
- Fix es-ES nav.player_settings to match en-US ("Jugador" not "Ajustes")
* feat: localize all GUI pages with i18n support
Add cmd.set() calls to override hardcoded English text in all .ui
templates with HFMessages.get() lookups. Covers faction pages, admin
pages, shared/modal pages, new player pages, and help pages.
- Add ~570 new MessageKeys constants across all page domains
- Add ~280 new en-US .lang keys for GUI labels
- Add ~320 new es-ES admin .lang keys
- Add ~280 new es-ES GUI .lang keys
- Add element IDs to ~95 .ui template files for runtime text override
- Add common keys: clear, back, leave, transfer, disband
* feat: localize admin zone wizard, unclaim confirm, and type modal pages
Add i18n support for remaining admin pages: zone creation wizard,
zone type change modal, and unclaim-all confirmation page. Fix
duplicate GUI_CANCEL constant in MessageKeys.
* fix: admin GUI crash, help i18n resolution, and dropdown display names
- Fix crash: #Title.Text selector on admin pages — add #PageTitle ID to
all 29 admin .ui templates and update 28 Java files to use #PageTitle
- Fix help content showing English for non-English players — thread
PlayerRef through HelpTopic.title(), HelpEntry.text(), and
HelpMainPage.buildTopicCards() so help resolves per-player locale
- Fix category title using server default — use displayName(playerRef)
- Fix language dropdown truncation — use compact display names
(English (US) instead of English (United States)) and widen to 220px
* fix: persist player preferences to JSON storage
The custom serializePlayerData/deserializePlayerData methods in
JsonPlayerStorage did not include the i18n preference fields added
to PlayerData. Settings were saved in memory but lost on restart.
Also includes compact locale display names and help i18n threading
from earlier fixes that were committed separately.
* fix: disable Power Notifications toggle (not yet wired up)
The checkbox is shown but disabled since no power change
notifications are currently sent to players.
* refactor: relocate help markdown to Server/Languages and remove stale config.json
Move help source files from src/main/help/{locale}/ to
src/main/resources/Server/Languages/{locale}/help/ so the build-time
HelpLangGenerator reads from the same directory structure as the
runtime language loader. Update translation scripts and build.gradle
to match the new path. Remove unused config.json (replaced by
per-feature config files in config/).
* feat: restructure admin test commands and extend help markdown syntax
Restructure /f admin testgui and sentrytest under /f admin test <sub>
via new AdminTestHandler, adding /f admin test md for a future
markdown visual test page.
Extend the help system with 9 new markdown entry types: bold, italic,
list (bullet + numbered), separator, callout boxes (with colored
accent bars), inline hex colors ([#RRGGBB]), named color shortcuts
(!warning, !success, !note, !muted), and typed callouts (>[!WARNING],
>[!INFO], >[!NOTE], >[!SUCCESS], >[!TIP]).
HelpEntry gains a color field for dynamic color overrides. The
build-time HelpLangGenerator parses all new syntax and emits color
metadata in help-manifest.json. HelpRegistry and HelpMainPage handle
the new types at runtime, applying colors to text and callout accent
bars. Five new .ui templates support the visual rendering.
TIP entries are unified into CALLOUT (backward-compatible: old TIP
manifests render as green callouts).
* feat: add markdown rendering test page (/f admin test md)
Visual test page that renders every supported help markdown entry
type using the real .ui templates. Shows syntax labels alongside
rendered output for verification: text, heading, command, bold,
italic, bullet/numbered lists, separators, hex colors, named color
shortcuts, and all callout box types. Includes edge cases for text
wrapping and mixed content flow.
* docs: add help markdown style guide and move translation guide to docs/
Add docs/help-markdown.md covering the full help markdown syntax
(bold, italic, lists, separators, colors, callouts) with examples.
Move TRANSLATION_GUIDE.md to docs/translation-guide.md and update it
with the new syntax types and clear guidance on what to translate
vs. what to keep (color codes, callout type tags, named shortcuts
stay in English across all locales).
* feat: add new UI Gallery elements to button test page
Add elements discovered from 2026.02.17 UI Gallery to the element
test page: TabNavigation with HeaderTabsStyle, MultilineTextField,
tooltip demo (TooltipText + DefaultTextTooltipStyle), ContentSeparator
and PanelSeparatorFancy, ProgressBar template, HeaderSearch, Panel
and SimpleContainer variants. Update command reference to /f admin
test gui.
* fix: pin markdown test page title bar to top of container
* fix: remove invalid #Title/#Content slots from Panel and SimpleContainer
These templates are flat containers — content goes directly inside
with no insertion point wrappers. Only @Container/@DecoratedContainer
have #Title/#Content slots.
* fix: enable text wrapping and vertical centering in help templates
Replace fixed Height with auto-sizing (remove Anchor Height, use
Padding for spacing). Add Wrap: true to all Label styles so long
text wraps instead of truncating with ellipsis. Add VerticalAlignment:
Center for proper vertical text positioning.
Applies to all 8 help line templates: text, command, heading, bold,
italic, list, tip, and callout.
* feat: add table support to help markdown system
Tables use standard markdown pipe syntax (| col | col |) with
separator rows for headers. Supports per-cell inline formatting
(**bold**, *italic*, `command`, [#hex] colors) and row-level
color overrides. Includes 4 new .ui templates, parser/registry/
renderer updates, and visual test entries.
* fix: improve table visual styling with GitHub-style grid borders
Redesign table templates with proper grid lines: left border on each
cell for column separators, top/bottom borders on rows, header row
background, 200px cell width with generous padding. Add per-cell
inline formatting support (bold, italic, command, hex colors).
* feat: add admin help infrastructure with category filtering
Add 8 admin help categories (ADMIN_OVERVIEW through ADMIN_REFERENCE)
to HelpCategory enum with isAdmin() filter. Rewrite AdminHelpPage from
placeholder to full sidebar+content rendering. Filter admin categories
from player HelpMainPage. Add admin directory scanning to
HelpLangGenerator build pipeline.
* feat: rewrite player help categories 1-4 (en-US) with enhanced formatting
Comprehensive rewrite of welcome, your_faction, power_land, and
diplomacy help using tables, callouts, bold formatting, and accurate
default config values. 14 topics expanded with detailed mechanics.
* feat: rewrite player help categories 5-7 (en-US), add spawn protection/upkeep/permissions topics
Rewrite combat, economy, and quick_ref help with enhanced formatting.
Add 3 new topics: spawn_protection (combat mechanics), upkeep (territory
maintenance costs), and permissions (key permission nodes reference).
* feat: add comprehensive admin help content (en-US) — 18 topics across 8 categories
Complete admin help documentation covering overview, faction management,
zones, power manipulation, economy, configuration, maintenance (backups,
updates, imports), and admin command reference. All values sourced from
actual config defaults and handler implementations.
* feat: rewrite Spanish player help translations (es-ES) — 25 topics
Full rewrite of all es-ES player help to match updated en-US content.
Preserves command syntax, markdown formatting, and frontmatter IDs.
Includes 3 new topics: spawn_protection, upkeep, permissions.
* feat: add Spanish admin help translations (es-ES), remove placeholder languages
Add 18 es-ES admin help topics mirroring en-US structure. Remove
de-DE, fr-FR, ja-JP, pt-BR, ru-RU, tr-TR, zh-CN placeholder
translations — will be regenerated later with complete content.
* fix: strip inline markdown markers, join continuation lines, fix invalid commands
- Add inline marker stripping to HelpLangGenerator (build-time):
**bold** → bold, `code` → code, *italic* → italic, -- → em-dash
- Join multi-line prose into single lines (each line = one UI entry)
- Remove non-existent /f admin modify and /f admin bypass references
- Fix duplicate debug toggle entry in admin command reference
- Apply same fixes to both en-US and es-ES help content
* feat: table rendering with inline rows, rich text, and help window resize
- Switch table rendering from .ui templates to appendInline with explicit
calculated heights (fixes content-driven height not working with TextSpans)
- Support 2/3/4 column tables with dynamic width calculation and borders
- Add HelpRichText parser for inline markdown (bold, italic, code, colors)
- Increase help window size ~15% (750x650 → 863x748) for both player/admin
- Fix Y/N → Yes/No in roles permission table
- Use 2px row borders for visibility on all table rows
- Remove stripped inline markers from lang generator (rich text handles them)
* fix: remove duplicate gui.cancel key in admin lang files
Hytale's I18nModule rejects the entire lang file when it encounters a
duplicate key, causing ALL admin GUI translations to show raw keys.
* feat: localize GUI labels for es-ES — browse stats, log time/types, sort labels
Add i18n support for previously hardcoded English text across player and
admin GUI pages: browse entry stat labels (power/claims/members), activity
log time formatting and type names, leaderboard/browser/members sort labels.
Fix truncated Spanish button text (relations, settings, sort labels).
* feat(i18n): localize admin GUI pages, entry templates, and zone flag display names
Localize admin dashboard stats, faction/player/zone list entries,
activity log types and timestamps, economy/treasury labels, zone
flags with display names, integration flags, relation buttons,
action buttons, and faction log enhancements. Add ~100 new keys
to both en-US and es-ES admin and GUI lang files.
* feat(i18n): localize player member and browser entry templates
Add #IDs to anonymous labels in member_entry.ui (Power, Joined,
Last Death) and wire cmd.set() for all entry-level labels and
buttons in FactionMembersPage. Add no_description fallback key
for browser entries. Widen Recruitment label for Spanish. Add
11 new keys to both en-US and es-ES gui lang files.
* feat(i18n): localize admin member entries and player info page
Add #IDs to anonymous labels in admin_faction_members_entry.ui,
wire cmd.set() for entry labels and buttons in
AdminFactionMembersPage. Localize formatReason(), bypass checkbox
labels, and NoFactionLabel in AdminPlayerInfoPage. Widen sort
label and teleport button for Spanish. Add 13 new keys per locale.
* feat(i18n): localize player invite and relation entry templates
Add #IDs to anonymous labels in faction_invite_entry.ui and
faction_relation_entry.ui, wire cmd.set() for all entry-level labels
and buttons in FactionInvitesPage and FactionRelationsPage, add 17
new MessageKeys constants, and add en-US/es-ES lang entries.
Width adjustments: ClaimsLabel 50->55px, DirectionLabel 65->70px
for Spanish translations.
* feat(i18n): localize all hardcoded Java strings in GUI pages
Replace hardcoded English strings with HFMessages.get() calls:
- FactionPageOpener: "Treasury is not available." (5 occurrences)
- AdminPageOpener: "Economy system is not enabled." (3 occurrences)
- AdminFactionInfoPage: "+N more" officer list truncation
- FactionDashboardPage: "in <duration>" upkeep time prefix
- AdminVersionPage: "Unknown" fallbacks
- AdminActivityLogPage: "1h"/"24h"/"7d"/"All" time filter labels
- CreateZoneWizardPage: "circular"/"square" shape names
- ZoneChangeTypeModalPage: "flags reset"/"flags kept"
Add 14 new MessageKeys constants and en-US/es-ES lang entries.
* feat(i18n): localize admin nav bar title and economy entry buttons
Wire cmd.set() for Admin Panel title in AdminNavBarHelper and
Adjust/Info button text in AdminEconomyPage entries. Add 3 new
MessageKeys constants and en-US/es-ES lang entries.
Stage 5 (new player pages) already fully localized — no changes needed.
* feat(i18n): localize remaining hardcoded fallbacks and format strings
Replace all "Unknown", "None", "world", "another zone" fallbacks with
localized equivalents across admin and player GUI pages. Localize
treasury upkeep cost format ("every Nh") and time-left display strings.
* fix(i18n): resolve Spanish truncation, crashes, and missing translations across GUI
- Widen label/button widths across admin pages for longer Spanish text:
player info (Primera conexion, Ultima conexion, Set/Reset/SetMax buttons),
sort labels (Ordenar:) on players/economy/zones/members pages,
bypass state label (Desactivado) on dashboard, teleport button and
last online label on player entries, lock hints on faction settings
and create faction pages
- Fix admin player info crash: replace CheckBoxWithLabel @text (not
dynamically settable) with empty checkbox + separate addressable labels
for bypass toggles (Sin Perdida de Poder / Sin Decaimiento de Reclamos)
- Widen admin player info container 720->780px for button space
- Add lock hint Wrap:true and increased height for long Spanish text
- Fix treasury column widths to fit Spanish type names (Transferencia)
- Fix help table 4-column widths for longer Spanish headers
- Add missing NOTE callout to es-ES combat/tagging.md (line count parity)
- Remove unsupported mid-text color code from es-ES alliances table
- Add i18n cmd.set() calls for new player map page legend labels
* feat: add SimpleClaims data importer
Import parties, claims, and alliances from SimpleClaims into
HyperFactions. Supports both SQLite (modern) and JSON (legacy)
storage formats with automatic detection.
Key conversion details:
- Party Owner → Leader, Members → Member (no Officer role in SC)
- Only mutual alliances imported as ALLY (one-way skipped)
- Player allies logged as data loss (no HF equivalent)
- Protection overrides mapped to outsider permission flags
- Default max power assigned (SC has no power system)
- No zones or homes (SC doesn't have these concepts)
Includes SQLite JDBC driver detection with clear error message
if the driver is unavailable.
* feat: add i18n infrastructure (Phase 0)
Add the foundational i18n system following Ecotale's proven pattern
with Hytale's native I18nModule:
- HFMessages: translation resolution engine with player/server language
support and {0}/{1} placeholder formatting
- MessageKeys: static key constants organized by nested inner classes
covering common, commands, protection, territory, GUI nav, and more
- MessageUtil: i18n-aware overloads (PlayerRef + key) alongside existing
string-literal methods for gradual migration
- ServerConfig: defaultLanguage and usePlayerLanguage settings with
JSON load/write support
- ConfigManager: convenience accessors for language settings
- PlayerData: languagePreference and notification preference fields
(territoryAlerts, deathAnnouncements, powerNotifications)
- en-US/hyperfactions.lang: initial common.* translation keys (~25 keys)
* feat: migrate faction management and claim commands to i18n keys (Phase 1a)
Migrate hardcoded English strings to MessageKeys constants for:
- FactionSubCommand.requireFaction()
- Create, Disband, Rename, Desc, Open, Close, Color commands
- Claim command (territory)
Add corresponding keys to MessageKeys.java and hyperfactions.lang.
* feat: migrate member commands to i18n keys (Phase 1b)
Migrate hardcoded English strings to MessageKeys constants for:
- Invite, Accept/Join, Kick, Leave commands
- Promote, Demote, Transfer commands
Add corresponding keys to MessageKeys.java and hyperfactions.lang.
* feat: migrate territory and teleport commands to i18n keys (Phase 1c)
Migrate hardcoded English strings to MessageKeys constants for:
- Unclaim, Overclaim, Stuck commands (territory)
- Home, SetHome, DelHome commands (teleport)
Add corresponding keys to MessageKeys.java and hyperfactions.lang.
* feat: migrate relation, social, info, and economy commands to i18n keys (Phase 1d)
Migrate hardcoded English strings to MessageKeys constants for:
- Ally, Enemy, Neutral, Relations commands (relation)
- Chat, Invites, Request commands (social)
- Info, Members, List, Help, Who, Map, Power commands (info)
- Money, TreasuryCommandHandler (economy)
Add Invites and Request inner classes to MessageKeys. Expand
Relation, Chat, Info, Power, and Economy classes with new keys.
* feat: migrate UI commands and ProtectionChecker to i18n keys (Phase 1e)
Migrate GuiSubCommand, SettingsSubCommand, FactionCommand to use
MessageKeys constants. Convert ProtectionChecker's 40 hardcoded
strings (action phrases, denial reasons, PvP, entity damage, combat
tag) to HFMessages.get() with server-default language fallback.
* feat: migrate AnnouncementManager, TeleportManager, ChatManager to i18n keys (Phase 1f)
Convert AnnouncementManager to per-player i18n resolution for server
broadcasts. Migrate TeleportManager's 10 hardcoded strings (warmup,
cooldown, cancellation messages) and ChatManager's channel display
names. Add mount entry/teleport blocking messages from
TerritoryTickingSystem. Completes Phase 1 command/system migration.
* feat: add help system markdown-to-lang build pipeline (Phase 2)
Replace hardcoded help content with build-generated .lang files from
markdown sources. Add HelpLangGenerator build-time tool that parses
22 markdown topic files into hyperfactions_help.lang and
help-manifest.json. Refactor HelpRegistry to load structure from
manifest, HelpMessages to delegate to HFMessages/I18nModule, and
HelpCategory to use i18n display name keys. Create initial
hyperfactions_gui.lang with help category names. Add generateHelpLang
Gradle task wired into processResources.
* chore: exclude build package from gitignore pattern
* feat: localize nav system, shared pages, and modal pages (Phase 3a)
Migrate navigation infrastructure to resolve display names via i18n keys
instead of hardcoded English strings. NavBarUtil.buildButtons() now accepts
PlayerRef and resolves keys through HFMessages. All page registry entries
in GuiManager updated to use MessageKeys constants.
Shared pages migrated: MainMenuPage (section titles), FactionInfoPage
(status labels, descriptions), RenameModalPage, DescriptionModalPage,
TagModalPage (all validation/success messages).
New files: hyperfactions_admin.lang (admin nav keys).
* feat: localize FactionDashboardPage and FactionMainPage (Phase 3b)
Migrate ~55 hardcoded English strings to i18n keys across both pages.
Reuse existing command keys (Home, Claim, Common, Leave) where messages
are semantically identical. Add DashboardGui and FactionMainGui key
classes for page-specific labels and messages.
* feat: localize Members, Browser, Leaderboard, and PlayerInfo pages (Phase 3c)
Migrate all hardcoded English strings in FactionMembersPage, FactionBrowserPage,
FactionLeaderboardPage, and PlayerInfoPage to use HFMessages.get() with MessageKeys.
Add GuiCommon, MembersGui, BrowserGui, LeaderboardGui, and PlayerInfoGui key classes.
* feat: localize Relations, Settings, and Modules pages (Phase 3d)
Migrate all hardcoded English strings in FactionRelationsPage,
SetRelationModalPage, FactionSettingsPage, and FactionModulesPage to
use HFMessages.get() with MessageKeys. Add RelationsGui, SettingsGui,
and ModulesGui key classes. Relation type labels use internal English
identifiers for logic with localizeType() resolving display text.
* feat: localize Treasury pages (Phase 3e)
Migrate all 5 treasury page classes to i18n:
- TreasuryPage: dashboard stats, upkeep, transaction type names, actor names
- TreasuryDepositModalPage: deposit/withdraw modal labels and messages
- TreasuryTransferSearchPage: search results, player/faction tags
- TreasuryTransferConfirmPage: fee labels, transfer result messages
- TreasurySettingsPage: leader-only permission errors, limit validation
Add ~70 treasury keys to MessageKeys.TreasuryGui and hyperfactions_gui.lang.
* feat: localize confirmation, logs, chat, invites, and map pages (Phase 3f)
Migrate hardcoded strings to i18n keys across 8 remaining faction GUI pages:
- DisbandConfirmPage, LeaderLeaveConfirmPage, LeaveConfirmPage, TransferConfirmPage
- LogsViewerPage, FactionChatPage, FactionInvitesPage, ChunkMapPage
Adds ConfirmGui, LogsGui, ChatGui, InvitesGui, and MapGui key groups
with ~90 new translation entries in hyperfactions_gui.lang.
* feat: localize create faction and new player pages (Phase 3g)
Migrate 85+ hardcoded strings across 4 new player GUI pages to i18n keys:
- CreateFactionPage: preview labels, validation errors, success messages
- InvitesPage: headers, counts, time formats, join result messages
- NewPlayerBrowsePage: sort dropdown, status badges, action buttons, join/request flows
- NewPlayerMapPage: position info, hint text, legend labels
Add CreateGui and NewPlayerGui inner classes to MessageKeys with 53 new keys.
Add MessageUtil.text() overload for i18n with color parameter.
Reuse existing keys: FactionInfoGui.STATUS_*, SettingsGui.PVP_*, MapGui.POSITION,
MapGui.LEGEND_PROTECTED, Common.ALREADY_IN_FACTION, Common.FACTION_NOT_FOUND.
* feat: localize admin GUI pages (Phase 4)
Migrate all 25 admin page files to use HFMessages.get() and MessageKeys.
Add ~170 admin i18n keys to MessageKeys.AdminGui and hyperfactions_admin.lang
covering dashboard, actions, factions, members, relations, settings,
players, economy, zones, zone map, zone wizard, and version pages.
* feat: add Player Settings GUI with language and notification preferences (Phase 5)
- PlayerSettingsPage with language dropdown and notification toggles
- Language override cache in HFMessages for per-player i18n
- TerritoryNotifier checks player alert preferences before sending
- PlayerDeathSystem checks member preferences before death broadcasts
- /f settings player command opens personal settings
- Page registered in both faction and new player nav bars
- Preferences loaded on connect, cleared on disconnect
* feat: add Spanish translations, locale stubs, and translator workflow (Phase 6)
- Full es-ES translations for commands, GUI, admin, and help content
- Stub .lang files for 7 additional locales (de-DE, fr-FR, ja-JP, pt-BR, ru-RU, tr-TR, zh-CN)
- Locale scaffolding scripts (new-translation.sh/bat)
- TRANSLATION_GUIDE.md with format docs and contribution process
- checkTranslations Gradle task to diff keys across locales
- fallback.lang for locale fallback documentation
* fix: redesign Player Settings UI and fix nav bar placement
- Rewrite player_settings.ui to follow established Container/Title/Content
pattern from browse.ui and faction_settings.ui
- Fix crash from Style (HorizontalAlignment) on Group elements
- Fix DropdownBox crash by using DropdownEntryInfo with LocalizableString
instead of plain List<String>, and string Value instead of integer index
- Move "Player" nav button to far right of both faction and new player
nav bars using FlexWeight spacer pattern
- Remove player_settings from nav bar button list (rendered separately)
- Use rebuild() for state changes since page stores preferences as
instance fields (async load race condition with openPlayerSettings)
* feat: use native locale display names and add es-ES to language selector
- Replace hardcoded LOCALE_DISPLAY_NAMES list with Java's Locale class
to generate native display names (e.g. "Español (España)")
- Add es-ES as second available locale in the language dropdown
- Fix es-ES nav.player_settings to match en-US ("Jugador" not "Ajustes")
* feat: localize all GUI pages with i18n support
Add cmd.set() calls to override hardcoded English text in all .ui
templates with HFMessages.get() lookups. Covers faction pages, admin
pages, shared/modal pages, new player pages, and help pages.
- Add ~570 new MessageKeys constants across all page domains
- Add ~280 new en-US .lang keys for GUI labels
- Add ~320 new es-ES admin .lang keys
- Add ~280 new es-ES GUI .lang keys
- Add element IDs to ~95 .ui template files for runtime text override
- Add common keys: clear, back, leave, transfer, disband
* feat: localize admin zone wizard, unclaim confirm, and type modal pages
Add i18n support for remaining admin pages: zone creation wizard,
zone type change modal, and unclaim-all confirmation page. Fix
duplicate GUI_CANCEL constant in MessageKeys.
* fix: admin GUI crash, help i18n resolution, and dropdown display names
- Fix crash: #Title.Text selector on admin pages — add #PageTitle ID to
all 29 admin .ui templates and update 28 Java files to use #PageTitle
- Fix help content showing English for non-English players — thread
PlayerRef through HelpTopic.title(), HelpEntry.text(), and
HelpMainPage.buildTopicCards() so help resolves per-player locale
- Fix category title using server default — use displayName(playerRef)
- Fix language dropdown truncation — use compact display names
(English (US) instead of English (United States)) and widen to 220px
* fix: persist player preferences to JSON storage
The custom serializePlayerData/deserializePlayerData methods in
JsonPlayerStorage did not include the i18n preference fields added
to PlayerData. Settings were saved in memory but lost on restart.
Also includes compact locale display names and help i18n threading
from earlier fixes that were committed separately.
* fix: disable Power Notifications toggle (not yet wired up)
The checkbox is shown but disabled since no power change
notifications are currently sent to players.
* refactor: relocate help markdown to Server/Languages and remove stale config.json
Move help source files from src/main/help/{locale}/ to
src/main/resources/Server/Languages/{locale}/help/ so the build-time
HelpLangGenerator reads from the same directory structure as the
runtime language loader. Update translation scripts and build.gradle
to match the new path. Remove unused config.json (replaced by
per-feature config files in config/).
* feat: restructure admin test commands and extend help markdown syntax
Restructure /f admin testgui and sentrytest under /f admin test <sub>
via new AdminTestHandler, adding /f admin test md for a future
markdown visual test page.
Extend the help system with 9 new markdown entry types: bold, italic,
list (bullet + numbered), separator, callout boxes (with colored
accent bars), inline hex colors ([#RRGGBB]), named color shortcuts
(!warning, !success, !note, !muted), and typed callouts (>[!WARNING],
>[!INFO], >[!NOTE], >[!SUCCESS], >[!TIP]).
HelpEntry gains a color field for dynamic color overrides. The
build-time HelpLangGenerator parses all new syntax and emits color
metadata in help-manifest.json. HelpRegistry and HelpMainPage handle
the new types at runtime, applying colors to text and callout accent
bars. Five new .ui templates support the visual rendering.
TIP entries are unified into CALLOUT (backward-compatible: old TIP
manifests render as green callouts).
* feat: add markdown rendering test page (/f admin test md)
Visual test page that renders every supported help markdown entry
type using the real .ui templates. Shows syntax labels alongside
rendered output for verification: text, heading, command, bold,
italic, bullet/numbered lists, separators, hex colors, named color
shortcuts, and all callout box types. Includes edge cases for text
wrapping and mixed content flow.
* docs: add help markdown style guide and move translation guide to docs/
Add docs/help-markdown.md covering the full help markdown syntax
(bold, italic, lists, separators, colors, callouts) with examples.
Move TRANSLATION_GUIDE.md to docs/translation-guide.md and update it
with the new syntax types and clear guidance on what to translate
vs. what to keep (color codes, callout type tags, named shortcuts
stay in English across all locales).
* feat: add new UI Gallery elements to button test page
Add elements discovered from 2026.02.17 UI Gallery to the element
test page: TabNavigation with HeaderTabsStyle, MultilineTextField,
tooltip demo (TooltipText + DefaultTextTooltipStyle), ContentSeparator
and PanelSeparatorFancy, ProgressBar template, HeaderSearch, Panel
and SimpleContainer variants. Update command reference to /f admin
test gui.
* fix: pin markdown test page title bar to top of container
* fix: remove invalid #Title/#Content slots from Panel and SimpleContainer
These templates are flat containers — content goes directly inside
with no insertion point wrappers. Only @Container/@DecoratedContainer
have #Title/#Content slots.
* fix: enable text wrapping and vertical centering in help templates
Replace fixed Height with auto-sizing (remove Anchor Height, use
Padding for spacing). Add Wrap: true to all Label styles so long
text wraps instead of truncating with ellipsis. Add VerticalAlignment:
Center for proper vertical text positioning.
Applies to all 8 help line templates: text, command, heading, bold,
italic, list, tip, and callout.
* feat: add table support to help markdown system
Tables use standard markdown pipe syntax (| col | col |) with
separator rows for headers. Supports per-cell inline formatting
(**bold**, *italic*, `command`, [#hex] colors) and row-level
color overrides. Includes 4 new .ui templates, parser/registry/
renderer updates, and visual test entries.
* fix: improve table visual styling with GitHub-style grid borders
Redesign table templates with proper grid lines: left border on each
cell for column separators, top/bottom borders on rows, header row
background, 200px cell width with generous padding. Add per-cell
inline formatting support (bold, italic, command, hex colors).
* feat: add admin help infrastructure with category filtering
Add 8 admin help categories (ADMIN_OVERVIEW through ADMIN_REFERENCE)
to HelpCategory enum with isAdmin() filter. Rewrite AdminHelpPage from
placeholder to full sidebar+content rendering. Filter admin categories
from player HelpMainPage. Add admin directory scanning to
HelpLangGenerator build pipeline.
* feat: rewrite player help categories 1-4 (en-US) with enhanced formatting
Comprehensive rewrite of welcome, your_faction, power_land, and
diplomacy help using tables, callouts, bold formatting, and accurate
default config values. 14 topics expanded with detailed mechanics.
* feat: rewrite player help categories 5-7 (en-US), add spawn protection/upkeep/permissions topics
Rewrite combat, economy, and quick_ref help with enhanced formatting.
Add 3 new topics: spawn_protection (combat mechanics), upkeep (territory
maintenance costs), and permissions (key permission nodes reference).
* feat: add comprehensive admin help content (en-US) — 18 topics across 8 categories
Complete admin help documentation covering overview, faction management,
zones, power manipulation, economy, configuration, maintenance (backups,
updates, imports), and admin command reference. All values sourced from
actual config defaults and handler implementations.
* feat: rewrite Spanish player help translations (es-ES) — 25 topics
Full rewrite of all es-ES player help to match updated en-US content.
Preserves command syntax, markdown formatting, and frontmatter IDs.
Includes 3 new topics: spawn_protection, upkeep, permissions.
* feat: add Spanish admin help translations (es-ES), remove placeholder languages
Add 18 es-ES admin help topics mirroring en-US structure. Remove
de-DE, fr-FR, ja-JP, pt-BR, ru-RU, tr-TR, zh-CN placeholder
translations — will be regenerated later with complete content.
* fix: strip inline markdown markers, join continuation lines, fix invalid commands
- Add inline marker stripping to HelpLangGenerator (build-time):
**bold** → bold, `code` → code, *italic* → italic, -- → em-dash
- Join multi-line prose into single lines (each line = one UI entry)
- Remove non-existent /f admin modify and /f admin bypass references
- Fix duplicate debug toggle entry in admin command reference
- Apply same fixes to both en-US and es-ES help content
* feat: table rendering with inline rows, rich text, and help window resize
- Switch table rendering from .ui templates to appendInline with explicit
calculated heights (fixes content-driven height not working with TextSpans)
- Support 2/3/4 column tables with dynamic width calculation and borders
- Add HelpRichText parser for inline markdown (bold, italic, code, colors)
- Increase help window size ~15% (750x650 → 863x748) for both player/admin
- Fix Y/N → Yes/No in roles permission table
- Use 2px row borders for visibility on all table rows
- Remove stripped inline markers from lang generator (rich text handles them)
* fix: remove duplicate gui.cancel key in admin lang files
Hytale's I18nModule rejects the entire lang file when it encounters a
duplicate key, causing ALL admin GUI translations to show raw keys.
* feat: localize GUI labels for es-ES — browse stats, log time/types, sort labels
Add i18n support for previously hardcoded English text across player and
admin GUI pages: browse entry stat labels (power/claims/members), activity
log time formatting and type names, leaderboard/browser/members sort labels.
Fix truncated Spanish button text (relations, settings, sort labels).
* feat(i18n): localize admin GUI pages, entry templates, and zone flag display names
Localize admin dashboard stats, faction/player/zone list entries,
activity log types and timestamps, economy/treasury labels, zone
flags with display names, integration flags, relation buttons,
action buttons, and faction log enhancements. Add ~100 new keys
to both en-US and es-ES admin and GUI lang files.
* feat(i18n): localize player member and browser entry templates
Add #IDs to anonymous labels in member_entry.ui (Power, Joined,
Last Death) and wire cmd.set() for all entry-level labels and
buttons in FactionMembersPage. Add no_description fallback key
for browser entries. Widen Recruitment label for Spanish. Add
11 new keys to both en-US and es-ES gui lang files.
* feat(i18n): localize admin member entries and player info page
Add #IDs to anonymous labels in admin_faction_members_entry.ui,
wire cmd.set() for entry labels and buttons in
AdminFactionMembersPage. Localize formatReason(), bypass checkbox
labels, and NoFactionLabel in AdminPlayerInfoPage. Widen sort
label and teleport button for Spanish. Add 13 new keys per locale.
* feat(i18n): localize player invite and relation entry templates
Add #IDs to anonymous labels in faction_invite_entry.ui and
faction_relation_entry.ui, wire cmd.set() for all entry-level labels
and buttons in FactionInvitesPage and FactionRelationsPage, add 17
new MessageKeys constants, and add en-US/es-ES lang entries.
Width adjustments: ClaimsLabel 50->55px, DirectionLabel 65->70px
for Spanish translations.
* feat(i18n): localize all hardcoded Java strings in GUI pages
Replace hardcoded English strings with HFMessages.get() calls:
- FactionPageOpener: "Treasury is not available." (5 occurrences)
- AdminPageOpener: "Economy system is not enabled." (3 occurrences)
- AdminFactionInfoPage: "+N more" officer list truncation
- FactionDashboardPage: "in <duration>" upkeep time prefix
- AdminVersionPage: "Unknown" fallbacks
- AdminActivityLogPage: "1h"/"24h"/"7d"/"All" time filter labels
- CreateZoneWizardPage: "circular"/"square" shape names
- ZoneChangeTypeModalPage: "flags reset"/"flags kept"
Add 14 new MessageKeys constants and en-US/es-ES lang entries.
* feat(i18n): localize admin nav bar title and economy entry buttons
Wire cmd.set() for Admin Panel title in AdminNavBarHelper and
Adjust/Info button text in AdminEconomyPage entries. Add 3 new
MessageKeys constants and en-US/es-ES lang entries.
Stage 5 (new player pages) already fully localized — no changes needed.
* feat(i18n): localize remaining hardcoded fallbacks and format strings
Replace all "Unknown", "None", "world", "another zone" fallbacks with
localized equivalents across admin and player GUI pages. Localize
treasury upkeep cost format ("every Nh") and time-left display strings.
* fix(i18n): resolve Spanish truncation, crashes, and missing translations across GUI
- Widen label/button widths across admin pages for longer Spanish text:
player info (Primera conexion, Ultima conexion, Set/Reset/SetMax buttons),
sort labels (Ordenar:) on players/economy/zones/members pages,
bypass state label (Desactivado) on dashboard, teleport button and
last online label on player entries, lock hints on faction settings
and create faction pages
- Fix admin player info crash: replace CheckBoxWithLabel @text (not
dynamically settable) with empty checkbox + separate addressable labels
for bypass toggles (Sin Perdida de Poder / Sin Decaimiento de Reclamos)
- Widen admin player info container 720->780px for button space
- Add lock hint Wrap:true and increased height for long Spanish text
- Fix treasury column widths to fit Spanish type names (Transferencia)
- Fix help table 4-column widths for longer Spanish headers
- Add missing NOTE callout to es-ES combat/tagging.md (line count parity)
- Remove unsupported mid-text color code from es-ES alliances table
- Add i18n cmd.set() calls for new player map page legend labels
* feat: add FactionsX data importer
Add importer for migrating servers from FactionsX (by Humblegod666) to
HyperFactions. Follows the same pattern as existing HyFactions and
ElbaphFactions importers.
- 8 Gson-mapped data model records matching FactionsX JSON format
- Full importer with validate/importFrom, per-player power, permission
mapping, zone chunk parsing ("x:z" strings), and ChunkY=Z quirk
- Admin command: /f admin import factionsx [path] [flags]
- Cross-importer lock safety across all three importers
* feat: add i18n message keys to FactionsX importer FactionLog calls
Add MessageKeys for MSG_IMPORTED_FROM, MSG_LEFT_IMPORT, and
MSG_LEADER_IMPORT_TRANSFER to match the i18n pattern used by
HyFactionsImporter and ElbaphFactionsImporter.
Also add missing hardcorePower parameter to Faction constructor
(added in i18n branch).
…hardcoded strings (#100) Split the monolithic MessageKeys.java (2,789 lines, ~1,298 constants) into 6 focused domain files: CommonKeys, CommandKeys, HelpKeys, AdminKeys, GuiKeys, and AdminGuiKeys. Consolidated ~25 duplicate keys into shared CommonKeys.Common constants. Localized ~70 remaining hardcoded strings in territory display banners, update notifications, death broadcasts, and admin handlers. Added ~467 new translation entries per locale across all 10 supported languages.
* feat: implement admin GUI features — Updates, Backups, and Config Editor Add three complete admin GUI pages accessible from the admin navigation bar: - Updates page: version info display, update checking, rollback support - Backups page: create, restore, delete backups with paginated list - Config Editor: 11-tab editor covering all HyperFactions settings with size-adaptive layouts (narrow/standard/wide), inline editing, color pickers, enum dropdowns, faction permissions with parent/child toggling, world overrides, upkeep scaling tiers modal, edit session caching, input validation, and debounced text updates Includes config module getters/setters, ConfigSnapshot for applying changes, ConfigValidator for input bounds, localization keys for all 10 languages, and ConfigV7→V8 migration for new settings. * fix: polish admin GUI pages — button styles, updates redesign, backup filter - Replace all $C.@DefaultTextButtonStyle/$C.@SecondaryTextButtonStyle with $S.@ButtonStyle/$S.@CyanButtonStyle/$S.@RedButtonStyle to match codebase styling (no more uppercase/wrong-looking buttons) - Remove double-background wrapper on backup name text field - Redesign Updates page as two-column layout: HyperFactions (left) and HyperProtect Mixin (right) with mirrored version info, shared "Check for Updates" button that checks both simultaneously - Fix HPM detection using ProtectionMixinBridge instead of update checker - Fix "Latest" showing "-" when up-to-date (now shows current version) - Add backup type filter dropdown (All/Hourly/Daily/Weekly/Manual/Migration) - Move Updates and Mixin config sections adjacent in server tab * fix: standardize action bar sizing to match zone settings pattern Match button height (32px), bar height (40px), and Label spacers from admin_zone_settings.ui across all admin GUI action bars: config editor (narrow/standard/wide), backups pagination, and updates action bar. * docs: add admin GUI features to changelog
#102) Respect world config WorldMap settings (#96) and add BetterMap compatibility (#97). - Inherit WorldMapSettings from vanilla generator instead of hardcoding - Skip disabled worlds (WorldMapSettings.DISABLED sentinel) - Per-world generator instances with configurable overrides (settingsOverrides) - BetterMap detection via Class.forName with auto/always/never config - Dual-layer player visibility: setPlayerMapFilter + HiddenPlayersManager - Admin GUI: settings overrides, Respect World Config, BetterMap Compat - Live settings reapply on config save (no restart needed) - Consolidated registration through WorldMapService with delayed init - Sentry error reporting for all worldmap catch blocks - Test fixes for PlayerPower record and PlayerStorage interface changes Closes #96, Closes #97
…le (#104) Move the claim color overlay to render after the fluid/water color application in the world map rendering pipeline. Previously, the water tint was applied last, effectively erasing the claim overlay in ocean biomes. Now claims render on top of the fully-rendered water, making them clearly visible regardless of water depth. Closes #90
* chore: remove unused imports and fix volatile field in SentryIntegration - Remove unused MessageUtil import from AdminSubCommand and AdminEconomyHandler - Remove unused UUID import from TreasuryCommandHandler - Make SentryIntegration.initialized volatile for thread safety - Replace System.err.println in EventBus with ErrorHandler.report * fix: route all error handling through Sentry via ErrorHandler Convert Logger-only catch blocks across the codebase to use ErrorHandler.report(), which logs to console AND sends to Sentry. Covers platform, managers, integrations, storage, worldmap, GUI, migrations, territory, and update packages. Informational warnings (not in catch blocks) are intentionally left as Logger.warn calls. * docs: update changelog, README, and internal docs for v0.12.0 - Add missing changelog entries: SimpleClaims/FactionsX importers, BetterMap compatibility, i18n localization, ocean claim visibility fix - Update README feature tables: importers, config version, admin GUI status, localization, GUI page count - Update all 12 docs/ version headers to 0.12.0 - Add SimpleClaims and FactionsX sections to data-import.md - Add V6->V7 and V7->V8 to migration table - Add admin GUI pages to gui.md (ConfigPage, BackupsPage, UpdatesPage) - Add ZoneMobClearManager to managers.md - Add BetterMap compatibility to integrations.md - Add import subcommands to commands.md admin tree * docs: update CurseForge description for v0.12.0 - Replace What's New section with v0.12.0 features (i18n, admin GUI pages, SimpleClaims/FactionsX importers, BetterMap, ocean fix) - Update data import references to include all 4 importers - Update GUI page count from 65+ to 70+ - Update JitPack version to v0.12.0 * chore: bump version to 0.12.0 * fix: correct CurseForge description inaccuracies - Fix zone flag count: 50 -> 51 (verified against ZoneFlags.ALL_FLAGS) - Fix Integration flags category: was listing removed flags (command blocking, fluid spread, map visibility), now lists actual flags (gravestone access, show on map, essentials homes/warps/kits) - Fix GUI page count: 76 -> 70+ (67 actual page classes) - Add missing Core Features: faction economy with upkeep system, localization (10 languages) - Remove Sentry from public-facing description (dev-only feature) - Convert integrations section from nested lists to tables for easier maintenance as the list grows - Also fix zone flag count in README (50 -> 51) * fix: additional accuracy corrections from code verification - Fix HyperProtect-Mixin hook count: 27 -> 28 (verified SLOT_ constants) - Remove "Command blocking in zones" from README (not yet implemented)
…ig persistence (#106) * refactor: centralize supported locales list in HFMessages as single source of truth * feat(api): add language control API — setPlayerLanguage, getPlayerLanguage, getSupportedLocales * feat(api): add chat color customization API — granular setters, bulk setChatColors, getChatColors * fix(events): publish FactionCreateEvent and FactionClaimEvent (were defined but never fired) * feat(events): add FactionUnclaimEvent, FactionRelationEvent, FactionRenameEvent, FactionHomeEvent - FactionUnclaimEvent with UNCLAIM/DISBAND/OVERCLAIM/DECAY reasons - FactionRelationEvent published from acceptAlly, setEnemy, setNeutral - FactionRenameEvent published from 3 commands + 5 GUI pages (NAME/TAG/DESC/COLOR) - FactionHomeEvent published from FactionManager.setHome() * feat(api): add ChatManager, EconomyAPI, JoinRequestManager accessors and extended queries Adds getFactionPowerStats, getFactionClaimCount, getFactionCount, isFactionRaidable, getPlayerRelation, getFactionClaims convenience methods. * feat(events): add Cancellable interface and cancellable pre-events - Cancellable interface with setCancelReason for custom denial messages - EventBus.publishCancellable() for short-circuit cancellation - Pre-events: FactionCreatePreEvent, FactionDisbandPreEvent, FactionMemberPreEvent (JOIN), FactionClaimPreEvent, FactionRelationPreEvent, FactionHomePreEvent - Pre-event classes also created for FactionRenamePreEvent (wiring deferred) - All pre-events fire after validation but before state changes * feat(api): add saveConfig and reloadConfig for persisting runtime changes * fix(tests): resolve 53 pre-existing test failures - Add ConfigManager.initTestDefaults() for test environments - Initialize ConfigManager with defaults in all manager/protection tests - Set allowWithoutPermissionMod=true for tests (no permission mod present) - Fix FactionTest color default assertion ("f" → "#FFFFFF") - Fix ClaimManagerTest home chunk coordinate (block 80 → 160 for chunk 5) - Fix ClaimManagerTest buildIndex rebuild to recreate managers - Fix ProtectionCheckerTest ally build permissions (enable allyBreak/allyPlace) - Disable getDenialMessage test (requires Hytale I18nModule on test classpath) * docs: update API reference with language, chat colors, events, pre-events, config persistence - Add Language/i18n section (setPlayerLanguage, getPlayerLanguage, getSupportedLocales) - Add Chat Color Customization section (granular + bulk setters, getChatColors) - Add Configuration section (saveConfig, reloadConfig) - Add 3 new manager accessors (ChatManager, EconomyAPI, JoinRequestManager) - Add extended queries (getFactionPowerStats, getFactionClaimCount, etc.) - Add 4 new post-events (FactionUnclaimEvent, FactionRelationEvent, FactionRenameEvent, FactionHomeEvent) - Add Cancellable Pre-Events section with all 7 pre-event types - Update Economy API to use new getEconomyAPI() accessor - Update examples throughout
* feat: essentials integration — API convenience methods, zone flag, and teleport event Add HyperFactionsAPI convenience methods for faction home queries and zone flag checks so HyperEssentials can use stable API methods instead of direct Faction class reflection: - hasFactionHome(UUID), getFactionHomeWorld(UUID), getFactionHomeCoords(UUID) - getFactionHomeCooldownRemaining(UUID) - isZoneFlagAllowed(String, double, double, String) Add ESSENTIALS_BACK zone flag alongside existing ESSENTIALS_HOMES/WARPS/KITS for controlling /back teleport in zones. Defaults to allowed in both safe and war zones. Add FactionHomeTeleportEvent fired when a player teleports to faction home (both instant and warmup-completed), enabling HyperEssentials to subscribe via EventBus for back location tracking without coupling. * feat(events): complete event coverage — 16 new events across all systems New post-events: - CombatTagEvent (TAGGED/EXPIRED/CLEARED), CombatLogoutEvent - PlayerTerritoryChangeEvent (territory entry/exit) - PlayerPowerChangeEvent (DEATH/KILL/NEUTRAL_KILL/REGEN/COMBAT_LOGOUT/ADMIN) - FactionChatEvent (FACTION/ALLY channels) - FactionTransactionEvent (treasury operations) - TeleportCancelledEvent (MOVED/DAMAGE/COMBAT_TAGGED/MANUAL) - FactionInviteEvent, FactionJoinRequestEvent (CREATED/ACCEPTED/DECLINED/EXPIRED) - ZoneCreateEvent, ZoneRemoveEvent New cancellable pre-events: - CombatTagPreEvent — prevent combat tagging - FactionChatPreEvent — filter/block faction chat messages - FactionTransactionPreEvent — block treasury transactions - FactionHomeTeleportPreEvent — cancel /f home teleports - FactionUnclaimPreEvent — prevent manual unclaims Wired into: CombatTagManager, PowerManager, ChatManager, EconomyManager, ClaimManager, TeleportManager, InviteManager, JoinRequestManager, ZoneManager, TerritoryNotifier, TerritoryTickingSystem, HomeSubCommand Updated API docs with complete event reference organized by system.
Audit all docs against actual codebase and fix stale counts, missing sections, and outdated references across 11 files. CHANGELOG: add missing #106 (API expansion) and #107 (essentials integration) entries. Architecture: update to 480 classes, 16 managers, ~46 subcommands, ~76 GUI pages, add missing packages (messages/, economy/, importers). Config: migration chain v1→v8, add V7→V8 docs. Protection zones: 57 flags with new pve_damage, interaction flags (mount_use, light_use, npc/crate flags), transport mount_entry, and essentials integration flags. Commands: remove nonexistent AdminSentryHandler. Managers: add ChatHistoryManager to index and init order. Storage: version and importer updates. API: JitPack v0.12.0. README: remove Sentry rows, add BetterMap/HyperEssentials integrations, update all counts. CurseForge: reduce per-bullet emoji density while keeping section headers and semantic indicators.
* feat: per-world max claims and World Settings API
Add maxClaims per-world setting to limit how many claims a faction can
hold in a specific world. Null/0 = use global limit, >0 = hard cap.
Enforced in both claim and overclaim flows.
Add thread-safe World Settings API for external plugins to register,
query, and remove per-world settings programmatically with upsert
semantics and immediate persistence.
- WorldSettings record: 5th param maxClaims (Integer, nullable)
- WorldSettingsResolver: volatile + copy-on-write for thread safety
- ConfigManager: registerWorldSettings/removeExternalWorldSettings
- ClaimManager: WORLD_MAX_CLAIMS_REACHED + per-world check
- HyperFactionsAPI: 4 new world settings methods
- Admin commands: maxclaims support in set/info/list
- Localized messages in all 10 locales (20 .lang files)
- Documentation: config, api, commands, managers
* feat: add maxClaims to admin config world settings GUI
Add integer stepper for maxClaims in the world override expanded
settings panel. Supports increment/decrement buttons and direct
numeric input. Value of 0 = use global limit (stored as null).
* fix: pass world claim limit to locale placeholders and warn on login
Fix {0} placeholder not being filled in world_max_claims messages across
all 5 call sites (claim command, overclaim command, dashboard, chunk map).
Add login warning for officers/leaders when their faction exceeds any
per-world claim limit — existing claims are preserved (soft cap) but
officers are notified to voluntarily unclaim excess territory.
- Make ClaimManager.countFactionClaimsInWorld() public
- Add ConfigManager.getWorldsConfig() getter
- Add world_overclaimed locale key (all 10 languages)
Add 7 per-event color settings to AnnouncementConfig with admin GUI color pickers, replacing hardcoded broadcast colors in AnnouncementManager. Add 6 new API methods to HyperFactionsAPI for zone queries (getZone, getZoneByName, getAllZones, getZonesByType) and hardcore power queries (isHardcoreMode, getFactionHardcorePower).
Line-by-line verification of every doc file against source code. Fixes wrong method signatures, enum values, default values, class types (records vs classes), constructor parameters, flag counts, permission nodes, placeholder defaults, zone defaults, migration descriptions, file paths, and navigation flows. Adds missing content including undocumented API methods, GUI pages, config fields, protection systems, and interaction types.
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.
Description
HyperFactions 0.12.0 — major release adding Admin GUI (config editor, backup manager, updates page), built-in localization (10 languages), two new data importers (SimpleClaims, FactionsX), comprehensive API expansion (31 events, zone/power queries, config persistence, world settings), configurable announcement colors, per-world max claims, BetterMap compatibility, and a full documentation audit correcting all 20 doc files against source code.
Type of Change
Related Issues
Fixes #40, #41, #42, #90, #92, #95, #98, #99, #102, #106, #107, #108
Testing
Admin GUI: Config Editor (#40)
/f admin→ Config tab/f admin reloadAdmin GUI: Backup Manager (#41)
Admin GUI: Updates Page (#42)
Localization / i18n (#92, #100)
de-DE), verify all commands output translated text/f help, verify help content renders in player's languageData Importers (#98, #99)
/f admin import simpleclaimswith valid SimpleClaims data — verify claims import correctly/f admin import simpleclaimswith invalid/missing path — verify error message/f admin import factionsxwith valid FactionsX data — verify factions, claims, and players import/f admin import factionsxwith invalid/missing path — verify error messageWorld Map & BetterMap (#102)
Bug Fixes (#90, #95)
fireSpreadAllowedis disabledAPI Expansion (#106)
ConfigManager.saveConfig()andConfigManager.reloadConfig()from another pluginEssentials Integration (#107)
hasFactionHome(),getFactionHomeWorld()return correct valuesESSENTIALS_BACKzone flag: disable in a zone, verify/backis blocked in that zoneFactionHomeTeleportEventfires when a player teleports to faction homePer-World Max Claims (#108)
maxClaimsfor a world via/f admin world set <world> maxclaims 5WORLD_MAX_CLAIMS_REACHEDmessage/f admin world set <world> maxclaims default, verify global limit applies againConfigurable Announcement Colors
Zone & Power Query API
getZone(world, chunkX, chunkZ)for a chunk inside a zone — verify correct zone returnedgetZoneByName("SafeZone")— verify returns the zone or nullgetAllZones()— verify returns unmodifiable collection of all zonesgetZonesByType("SAFE")— verify only SafeZones returnedisHardcoreMode()— verify matches config settinggetFactionHardcorePower(factionId)— verify returns power pool valueWorld Settings API (#108)
registerWorldSettings()— verify settings persist after restartgetWorldSettings()with wildcard pattern — verify resolution worksremoveWorldSettings()— verify settings are removed and persistedRegression: Core Gameplay
/f gui), navigate all pages without errors/f chat), ally chat, normal chat all workChecklist