Repository navigation
feat(tag): add an always-open tag game to the lobby - #490
Merged
Merged
Conversation
Contributor
Test results 832 files 832 suites 1h 2m 3s ⏱️ Results for commit 7710fd9. ♻️ This comment has been updated with latest results. |
Minestom 2026.10.07-26.2 does not make EntityAttackEvent cancellable, so the tag rules cannot abort an attack. The no-damage guard moves to EntityDamageEvent, and a settings write error is reported through the PlayerSettings#set exception path. Claude-Session: https://claude.ai/code/session_01AM6yGQ33vvJqWg39vCAcYt
Core event fired when a player becomes busy with a run or a hand-over, so the tag game can step out of the round without one column calling another. Claude-Session: https://claude.ai/code/session_01AM6yGQ33vvJqWg39vCAcYt
The tag column reads titan:tag.enabled through the core PlayerSettings port. /tag flips the same setting the settings menu writes; a failed write keeps the value and tells the player. Option names and descriptions for the settings menu are added in both languages. Claude-Session: https://claude.ai/code/session_01AM6yGQ33vvJqWg39vCAcYt
One tagger per lobby as soon as two players are active, passed on by a hit and handed over after two minutes of tagger inactivity. The reverse hit within five seconds is refused for that pair only. The rules take time and randomness from the caller, so every case runs without a server or a wait. Claude-Session: https://claude.ai/code/session_01AM6yGQ33vvJqWg39vCAcYt
The tag module follows the player's setting, the instance they are in, the lobby busy event and elytra flight. Damage between two players in the game is cancelled, the tagger's hit passes the role, and the tagger glows with red particles and an action bar for everyone in the game. No scoreboard team is created, so name prefixes of other modules stay intact. Claude-Session: https://claude.ai/code/session_01AM6yGQ33vvJqWg39vCAcYt
A jump and run reports busy when it starts and free when it ends; a hand-over to another server reports busy when it begins. The tag game steps the player out on that event, so no column calls another. Claude-Session: https://claude.ai/code/session_01AM6yGQ33vvJqWg39vCAcYt
Two counters: titan.tag.tags by result (tagged, cooldown) and titan.tag.toggles by state (on, off). Neither carries a player id. Claude-Session: https://claude.ai/code/session_01AM6yGQ33vvJqWg39vCAcYt
The lobby modules page gets a section for the tag game with its opt-in, command, rules, interactions and telemetry, and the README lists /tag. Claude-Session: https://claude.ai/code/session_01AM6yGQ33vvJqWg39vCAcYt
The tag module gets the shared maintainability rules and its package cycle baseline, which is empty. The settings bundle test checks the fixed keys and that every option text has a name and a description, since option keys now come from the columns. Claude-Session: https://claude.ai/code/session_01AM6yGQ33vvJqWg39vCAcYt
Spotless normalises the license header of the new files and the import order. Claude-Session: https://claude.ai/code/session_01AM6yGQ33vvJqWg39vCAcYt
TheMeinerLP
force-pushed
the
feat/lobby-tag
branch
from
October 24, 2026 20:28
82e7eb2 to
7710fd9
Compare
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.
Summary
Adds tag (Fangen): an always-open tag game in the lobby for players who opt in. One player is the tagger, a hit passes the role, and there are no rounds, timers or winners. Nothing beyond vanilla is needed (no resource pack, no scoreboard team).
Depends on
lobby-settings(merged in #480): the opt-in is the typed settingtitan:tag.enabled(SettingDefault.OPT_IN), read and written through the corePlayerSettingsport only. The column depends oncoreonly.Gameplay
/tag; both write the same setting.LobbyPlayerBusyEvent, sent byjumprunandportal).Settings, commands, telemetry
titan:tag.enabledregistered inSettingsRegistryby the column; name and description added totitan/settings/messages_{de,en}.properties(the only change to the settings bundles, keys of this option only)./tag(English only, no alias) switches the same setting. Console gets "Only players can play tag."; a failed write keeps the value and tells the player.titan.tag.tags{result=tagged|cooldown}andtitan.tag.toggles{state=on|off}, no player id, no span.Tests
TagGameTest,TagCooldownTest,TagOptInTest,TagCommandTest(console and player),TagTelemetryTest,TagMessagesBundleTest,LobbyPlayerBusyEventTest.env.tick(), fresh module per test, injectedAdjustableClock, seeded random):TagModuleIntegrationTest(damage, passing, title, reverse hit, instance change, disconnect, action bar, particles per instance, no team, elytra, busy event),TagModuleLifecycleTest(stop removes glow and leaves no listener),JumprunBusyEventTest, andPortalModuleTest#handOverSaysBusy.ColumnArchitectureTestandMaintainabilityArchitectureTest(with a new, empty freeze store for the module's package cycles)../gradlew spotlessApply build --continue --offlinegreen.Deviations from the change
EntityAttackEventis not cancellable in Minestom2026.10.07-26.2. The design's cancel-the-attack plan is replaced by a cancelledEntityDamageEventbetween active players. The change artifacts were adjusted in2edb8f3.AdjustableClockfrom coretestFixturesis not on main yet; the column keeps its own copy, as the other columns do.features/tag/src/test/resources/archunit_storeis created by hand from the tickle store (the test refuses to create one). It holds no violations; CODEOWNERS review please.Open items
/tag, glow, particles and action bar, hits without damage, Butterfly name prefixes unchanged.settings.enabled: false). Until it is on (withotis.url), the menu entry does not show and the choice is only kept in memory./tagworks either way.openspec validate --strict lobby-tagpasses with style warnings only (SHALL/MUST wording), the same aslobby-settings.https://claude.ai/code/session_01AM6yGQ33vvJqWg39vCAcYt