hTitles
Custom prefixes and suffixes with managed access
MiniMessage • Installation balances • Confirmation • SQLite / MySQL • Flexible actions
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
hTitles lets players create and install their own custom prefixes and suffixes. The plugin validates formatting, manages available installations, requests confirmation, and executes an action chain configured by the server owner.
There is no restricted catalog of predefined entries: players enter their own value with colors and formatting. Application is not tied to one chat plugin— actions.yml can call the command provided by your metadata, permissions, or chat system.
Access can be tracked in two ways. PLUGIN mode stores finite and unlimited installation balances in SQLite or MySQL, while LEGACY mode uses the htitle.prefix and htitle.suffix permissions. Prefixes and suffixes are always handled independently.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
CORE FEATURES
- Self-service custom prefix and suffix installation
- MiniMessage, traditional color codes, and several HEX formats
- Separate visible-length limits for prefixes and suffixes
- Configurable blocked words, characters, colors, and formatting
- Two-step confirmation before a value is applied
- Separate confirmation for self-service resets
- Finite installation counts or an unlimited -1 balance
- Configurable delay between installations for unlimited access
- Database-backed or permission-backed access modes
- Access is rechecked at confirmation; in PLUGIN mode, one finite installation is consumed transactionally
- Grants for online, offline, and not-yet-known players
- Automatic delivery of a name-based pending grant on the next matching login attempt
- SQLite by default or MySQL; both backends use HikariCP
- Asynchronous database operations
- 9 built-in action types for messages, commands, and visual effects
- PlaceholderAPI and contextual variables inside actions
- Configurable player-command aliases
- Administrator tab completion for subcommands, targets, types, amounts, and formatting examples
- Bundled Russian and English configuration templates
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
INSTALLATION FLOW
- An administrator grants one or more installations or unlimited access. In LEGACY mode, the corresponding permission is used instead of a balance.
- The player enters /hprefix <value> or /hsuffix <value>.
- The plugin normalizes color codes, validates the content, and measures rendered text without counting MiniMessage tags.
- The player receives configurable chat and BossBar prompts asking them to confirm the selection.
- The confirm command checks access again. In PLUGIN mode, one finite installation is consumed transactionally, while unlimited access is checked against its cooldown.
- After a successful check, prefixFinish or suffixFinish runs; the bundled template passes the value to an external server command. hTitles does not verify the result of that external command.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ACCESS MODES
PLUGIN — internal balances
- Prefix and suffix installation counts are stored separately in the database
- A positive grant is added to a finite balance; an existing -1 remains unlimited
- -1 provides an unlimited number of installations
- A finite balance is reduced by one only after confirmation
- Unlimited access has an independent cooldown for each type; the default is 3 minutes
- htitle.prefix and htitle.suffix are not checked in this mode
- The /htitles give administrator command is available only in this mode
- Prefix installation requires htitle.prefix
- Suffix installation requires htitle.suffix
- The internal balance database is not started
- After confirmation, prefixFinish/suffixFinish and prefixLegacyConsume/suffixLegacyConsume execute in sequence
- The bundled action template dispatches a server command intended to revoke the corresponding permission; hTitles does not verify its result, and the template can be replaced completely
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
FORMATTING AND VALIDATION
hTitles accepts native MiniMessage tags and converts common legacy color formats to MiniMessage:
Code (Text):
<gradient:#FDBE00:#FFFFFF><bold>VIP</bold></gradient>
&6&lVIP
&#FDBE00VIP
&x&F&D&B&E&0&0VIP
{#FDBE00}VIP
#FDBE00VIP
- Default prefix maximum: 8 Unicode code points in rendered text
- Default suffix maximum: 12 Unicode code points in rendered text
- MiniMessage tags and color codes are not counted as visible text
- A value that renders as empty is rejected
- Double quotes and literal LF/CR characters in the normalized input are rejected before actions run
- blockedColors rejects selected colors and formatting in the normalized value
- blockedWords checks rendered text case-insensitively
When text spans several command arguments, hTitles combines them without inserting ordinary spaces: for example, Hello World is processed as HelloWorld. Account for this when preparing player instructions.
The first reset argument always opens the reset branch, while a lone confirm confirms the pending value.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
CONFIRMATION AND RESET
- /hprefix confirm — confirm the pending prefix
- /hsuffix confirm — confirm the pending suffix
- /hprefix reset → /hprefix reset confirm — reset the prefix
- /hsuffix reset → /hsuffix reset confirm — reset the suffix
Prompts, clickable confirmation commands, BossBars, and timeouts are configurable. Prefix and suffix confirmations are independent of each other.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ACTION SYSTEM
Primary player-facing flows and administrator actions are configured as lists in actions.yml. Feedback for administrator commands run from the server console comes from messages.yml, while target set and reset chains still execute from actions.yml. Lines run from top to bottom in [TYPE] content format, with case-insensitive type names.
Available action types:
- [MESSAGE] — send a MiniMessage message to the sender
- [BROADCAST] — send a MiniMessage message to the whole server
- [CONSOLE] — execute a command as the server console
- [PLAYER] — execute a command as the player
- [BOSSBAR] — display a configurable BossBar
- [SOUND] — play a sound
- [TITLE] — display a title and subtitle
- [ACTIONBAR] — display a message above the hotbar
- [PARTICLE] — spawn particles at the supplied location
Code (Text):
actions:
prefixFinish:
- '[CONSOLE] lp user {player} meta setprefix 101 "{title}<reset> "'
- '[MESSAGE] {prefix} <green>Prefix {title}<reset> installed!'
{player} and {prefix} are supplied automatically. Depending on the event, actions also receive {title}, {target}, {type}, {amount}, {balance}, {seconds}, {maxSize}, and {blocked}. PlaceholderAPI placeholders are additionally resolved for actions that have a player context.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
VISUAL ACTIONS
Code (Text):
[BOSSBAR] TEXT;TICKS[;COLOR[;OVERLAY[;PROGRESS]]]
[SOUND] SOUND_ID[;VOLUME[;PITCH]]
[TITLE] TITLE_TEXT[&&SUBTITLE_TEXT]
[ACTIONBAR] TEXT
[PARTICLE] PARTICLE_ID[;SPEED[;COUNT[;COLOR]]]
- BossBars support PINK/BLUE/RED/GREEN/YELLOW/PURPLE/WHITE colors, PROGRESS and NOTCHED_6/10/12/20 overlays, tick-based duration, and progress from 0 to 1
- Sound uses a registered Minecraft ID with configurable volume and pitch
- Title fade-in, stay, and fade-out timings are configured globally in config.yml
- Particle count, speed, and spread have configurable defaults
- The Particle HEX color applies to DUST with a fixed size of 1.0; other supported particles must not require additional data
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ADMINISTRATION
- Grant a finite number of installations
- Grant an unlimited -1 balance
- Start direct prefix or suffix application through an action chain without consuming a balance
- Start a reset through its dedicated action chain
- Target online players, known offline players, and UUIDs
- Grant installations to a valid username not yet known by the server
- Tab completion for online players, types, amounts, and formatting examples
- Reload configuration, aliases, actions, and the database connection in PLUGIN mode
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GRANTS FOR UNKNOWN PLAYERS
In PLUGIN mode, an administrator can grant installations before a player exists in the server cache:
- An unknown UUID receives a balance directly when UUID grants are enabled
- An unknown username containing 1–16 Latin letters, digits, or underscores is stored as a pending grant when settings.unknownPlayerGrants.name is enabled
- Usernames are stored and matched case-insensitively
- On the next matching login attempt, accumulated prefix and suffix installations are merged into the player's UUID balances and the pending row is deleted in the same transaction
- Finite amounts are added together, while any -1 value preserves unlimited access
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
DATA STORAGE
The default local database is:
Code (Text):
plugins/hTitles/titles.db
- SQLite — local storage; schema initialization applies journal_mode=WAL, synchronous=NORMAL, and busy_timeout=5000, while the pool is forced to one connection
- MySQL — remote storage with a configurable HikariCP pool and JDBC properties
- Two dedicated threads are used for asynchronous database work by default
- Grant, consume, and pending-balance transfer operations are transactional
- MySQL uses row locking for concurrent balance changes
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
COMMANDS
Player commands:
Code (Text):
/hprefix <prefix>
/hprefix confirm
/hprefix reset
/hprefix reset confirm
/hsuffix <suffix>
/hsuffix confirm
/hsuffix reset
/hsuffix reset confirm
/hprefix, /hsuffix, and their aliases are player-only. /htitles and all of its subcommands can be run from the console with htitle.admin.
Administrator commands:
Code (Text):
/htitles
/htitles reload
/htitles give <player|UUID> <prefix|suffix> [amount|-1]
/htitles set <player|UUID> <prefix|suffix> <value>
/htitles reset <player|UUID> <prefix|suffix>
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PERMISSIONS
Code (Text):
htitle.admin
htitle.prefix
htitle.suffix
- htitle.admin — /htitles and all of its subcommands
- htitle.prefix — prefix installation in LEGACY mode
- htitle.suffix — suffix installation in LEGACY mode
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
CONFIGURATION FILES
- locale.yml — temporary ru or en selection during first setup
- config.yml — access mode, aliases, limits, confirmation, reset, cooldown, filters, and visual-action defaults
- actions.yml — every player and administrator action chain
- messages.yml — system and fallback messages, including action diagnostics
- storage.yml — SQLite/MySQL, HikariCP, and asynchronous worker threads
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
LOCALES AND ALIASES
The JAR contains Russian and English templates for config.yml, actions.yml, messages.yml, and storage.yml. On first launch, hTitles creates the locale selector and starts its runtime only after ru or en is selected.
After a successful selection, hTitles writes the language to its internal plain-text .locale file and deletes locale.yml. Existing config.yml, storage.yml, actions.yml, and messages.yml are not replaced automatically when the locale changes. In v1.7, twelve diagnostic entries in the English messages.yml are still written in Russian and can be edited manually.
The two locale action files are independent templates: the bundled Russian file uses permanent metadata commands, while the English file uses temporary 15-day metadata commands. Review actions.yml immediately after the files are generated and before allowing players to use the plugin, then configure consistent behavior or the exact behavior your server requires.
/prefix and /suffix can be renamed or extended in config.yml. Invalid values and conflicts with registered server commands are skipped and reported to the console.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
REQUIREMENTS AND INTEGRATIONS
Required:
- Paper 1.21.x
- Java 21
- PlaceholderAPI
To apply prefixes and suffixes:
- A metadata, permissions, or chat plugin with a server command for applying values—for example, LuckPerms
- Matching commands under prefixFinish, suffixFinish, and the reset action chains
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
INSTALLATION AND FIRST SETUP
- Make sure the server runs Paper 1.21.x with Java 21.
- Install the required PlaceholderAPI, place hTitles in plugins, and start the server.
- Open plugins/hTitles/locale.yml, select ru or en, and run /htitles reload or restart the server.
- Choose accessMode: PLUGIN for database balances or LEGACY for permission-based access.
- Open actions.yml and replace the bundled perms commands with commands from your server's metadata system. Confirm whether applied values should be permanent or temporary.
- Configure length limits, the unlimited-access cooldown, self-service resets, blocked values, and aliases.
- For PLUGIN mode, keep SQLite or enter a MySQL connection in storage.yml.
- Run /htitles reload or fully restart the server to apply the edited files.
- Grant administrators htitle.admin. In LEGACY mode, configure distribution of htitle.prefix and htitle.suffix.
- In PLUGIN mode, grant one installation to a test player through /htitles give.
- Test the complete installation, confirmation, and reset flow with a test account.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
SUPPORT
If you need help installing or configuring the plugin:
Telegram — hPlugin
SUPPORT
If you need help installing or configuring the plugin:
Telegram — hPlugin
Quick facts
- Edition: Minecraft Java
- File type: .jar
- Minecraft versions listed: 1.21, 26.1, 26.2
- How to install: Install the matching mod loader (Forge, Fabric or NeoForge) for your Minecraft version. → Download the .jar. → Put it in the .minecraft/mods folder and launch that loader profile.
- Where to get it: Opens on Spigot — not every file is mirrored on our own servers.
Install steps are the general flow for this file type — How to install Minecraft Java mods & modpacks walks through it step by step.
⭐ hTitles [1.21.X-26.X] ⭐ | PAPI, Vault, LuckPerms and more support! is a free Minecraft Java mod. Compatible with Minecraft 1.21, 26.1, 26.2. Downloaded 312 times (via Spigot). Download it and open it directly in the game.