May I know your pronouns, please?
Find a file
2026-03-30 07:30:32 +01:00
.github/workflows ci: use java 25 in actions 2026-03-29 13:52:34 +01:00
.vscode feat: init; nametags, chat, and player list pronouns 2026-03-03 08:01:23 +00:00
assets feat: init; nametags, chat, and player list pronouns 2026-03-03 08:01:23 +00:00
gradle/wrapper chore(gradle): update to v9.3.0 2026-03-29 13:53:58 +01:00
src/main feat: migrate from yarn to mojang mappings 2026-03-29 13:39:52 +01:00
.editorconfig feat: init; nametags, chat, and player list pronouns 2026-03-03 08:01:23 +00:00
.gitattributes feat: init; nametags, chat, and player list pronouns 2026-03-03 08:01:23 +00:00
.gitignore feat: init; nametags, chat, and player list pronouns 2026-03-03 08:01:23 +00:00
build.gradle fix(gradle): syntax error in jar rename block 2026-03-29 13:32:42 +01:00
gradle.properties chore: bump version to v0.1.2 2026-03-30 07:30:32 +01:00
gradlew feat: init; nametags, chat, and player list pronouns 2026-03-03 08:01:23 +00:00
gradlew.bat feat: init; nametags, chat, and player list pronouns 2026-03-03 08:01:23 +00:00
LICENSE chore(LICENSE): remove GPL appendage from file 2026-03-06 12:51:28 +00:00
README.md chore(README): update technical summary to be mojmap 2026-03-29 14:08:45 +01:00
settings.gradle feat: init; nametags, chat, and player list pronouns 2026-03-03 08:01:23 +00:00

Pronouns, Please!


A lightweight, dependency-free and fully server-side Fabric mod that lets players set their preferred pronouns to be displayed the player list, nameplates, and chat. Integrates with PronounDB as well for extra features for players that have it linked to their Minecraft account.

Features

  • Pronouns are displayed in the player list, above player heads, and in chat messages
  • Pronouns are fully localized and a player sees them in their own preferred client language
  • Cute pride flag decorations from PronounDB if equipped by the player
  • Fully server-side, no mods to be installed on the client

Commands

Command Description
/pronounspls get [player] Get your or another player's current pronouns
/pronounspls set pronoun <pronoun> Set your pronouns
/pronounspls refresh Refresh your pronouns from PronounDB
/pronounspls help Show all available commands

Technical Summary

I am pretty proud of some of the creative solutions I had to come up while making this mod, so I thought it might be worth documenting them below! :D

Virtual Team Packets

Nameplates and player list prefixes make use of Minecraft's scoreboard team system under the hood, which does not support per-player name prefixes and suffixes. Registering real teams on the server scoreboard could conflict with actual objectives and also prevent localization (see below), we construct ClientboundSetPlayerTeamPacket instances backed by throwaway Scoreboard and PlayerTeam objects that are never registered persistently. These packets are sent directly to each client's network handler and immediately discarded server-side, leaving no trace on the actual scoreboard.

Per-Client Translation

Typically, in Minecraft's translation model (and in general, too), translatable text is sent as special keys to the client, and the actual translation is performed by the client using their local locale files. However, in order to not require special resources on each client, we intercept the packets per-recipient and resolve the player's pronoun translation key into their preferred language before the packet is built and dispatched.

We use the same approach for chat messages, where we hook into PlayerList.broadcastChatMessage, and embed a carrier containing the pronoun as a translation key. In ServerPlayer.sendChatMessage where the packets are to be dispatched, we translate this to the recipient's language before it is actually sent.

PronounDB Integration & Caching

PronounDB lookups are cached in our own API client and held via weak references in a keyed store that tags each entry by source identifying it as "custom" (set via /pronounspls set) or fetched from PronounDB. This means cached PronounDB results do not need to be refetched upon every join or reload. When a refresh is requested, the PronounDB cache entry is invalidated, which both releases the weak reference in the pronouns store and triggers a refetch. Once the refetch resolves, the new value is stored and the virtual team packets are automatically as the reference to it held in the store had been invalidated.