HomeJavaMods⭐ hTitles [1.21.X-26.X] ⭐ | PAPI, Vault, LuckPerms and more support!
⭐ hTitles [1.21.X-26.X] ⭐ | PAPI, Vault, LuckPerms and more support!
ModsJava

⭐ hTitles [1.21.X-26.X] ⭐ | PAPI, Vault, LuckPerms and more support!

⬇ Download on Spigot

hTitles
Custom prefixes and suffixes with managed access
MiniMessage • Installation balances • Confirmation • SQLite / MySQL • Flexible actions

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
OVERVIEW
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
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
INSTALLATION FLOW
  1. An administrator grants one or more installations or unlimited access. In LEGACY mode, the corresponding permission is used instead of a balance.
  2. The player enters /hprefix <value> or /hsuffix <value>.
  3. The plugin normalizes color codes, validates the content, and measures rendered text without counting MiniMessage tags.
  4. The player receives configurable chat and BossBar prompts asking them to confirm the selection.
  5. The confirm command checks access again. In PLUGIN mode, one finite installation is consumed transactionally, while unlimited access is checked against its cooldown.
  6. 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.
Confirmation is available for 300 server ticks by default—nominally 15 seconds at 20 TPS. A new value of the same type replaces the previous pending confirmation. Pending confirmations are kept in memory and are cancelled by a plugin or server reload.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ACCESS MODES
PLUGIN — internal balances
LEGACY — permission-based access
Select the mode with settings.accessMode. Prefixes and suffixes have independent access and confirmations; in PLUGIN mode, unlimited-access cooldowns are also tracked separately.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
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
 
The bundled configuration blocks obfuscation and a selection of potentially unwanted characters. Both lists and both length limits can be adapted to your server rules.
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
Self-service reset is enabled separately for each type through settings.resetEnabled. The reset handler runs a configurable action without consuming, refunding, or changing the internal installation balance or unlimited-access cooldown.
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:
Example prefix application through LuckPerms:
Code (Text):

actions:
  prefixFinish:
    - '[CONSOLE] lp user {player} meta setprefix 101 "{title}<reset> "'
    - '[MESSAGE] {prefix} <green>Prefix {title}<reset> installed!'
 
LuckPerms is not a hard dependency: the lp command above is an example, while the bundled action templates call an external perms command that hTitles does not provide. Install a compatible metadata system or replace those lines with its commands. Commands in CONSOLE and PLAYER actions are written without a leading /.
{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]]]
 
PLAYER and visual actions are intended for flows with an online player context. Without a player context, PLAYER is skipped, while BOSSBAR, SOUND, TITLE, and ACTIONBAR apply to every online player. Use server-side CONSOLE actions in administrator chains that may target offline players.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ADMINISTRATION
/htitles and all of its subcommands require htitle.admin and can be used from the console. The type argument is prefix or suffix. The set and reset subcommands pass the target to configured action chains; their handlers do not change installation balances or verify the result of external commands.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GRANTS FOR UNKNOWN PLAYERS
In PLUGIN mode, an administrator can grant installations before a player exists in the server cache:
Configure the behavior independently with settings.unknownPlayerGrants.name and settings.unknownPlayerGrants.uuid. When set to false, no new record is created for an unknown target; however, if that UUID balance or pending-name row already exists, later /htitles give commands can still add to it. Disabling the option does not delete stored records.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
DATA STORAGE
The default local database is:
Code (Text):

plugins/hTitles/titles.db
 
The database stores separate prefix and suffix balances, unlimited-access cooldown timestamps, and pending name-based grants. hTitles passes the value being applied to a configurable chain in actions.yml, but it neither stores that text in its database nor verifies the result of the external command.
Database type, credentials, MySQL pool properties, and worker-thread count are configured in storage.yml. Data is not copied automatically when switching between SQLite and MySQL, changing the SQLite file, or selecting another MySQL connection, so migrate it separately.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
COMMANDS
Player commands:
Code (Text):

/hprefix <prefix>
/hprefix confirm
/hprefix reset
/hprefix reset confirm
/hsuffix <suffix>
/hsuffix confirm
/hsuffix reset
/hsuffix reset confirm
 
Default configurable aliases: /prefix and /suffix.
/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>
 
When give has no amount, one installation is granted. An explicit amount must be a 64-bit integer equal to -1 or at least 1; 0 and values below -1 are rejected. -1 means an unlimited number of installations, not the lifetime of the applied prefix or suffix.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PERMISSIONS
Code (Text):

htitle.admin
htitle.prefix
htitle.suffix
 
All three permissions default to server operators. In PLUGIN mode, htitle.prefix and htitle.suffix do not determine player access; database balances do. Self-service reset does not require htitle.prefix or htitle.suffix even in LEGACY mode; it is controlled by settings.resetEnabled.prefix and settings.resetEnabled.suffix.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
CONFIGURATION FILES
With a valid locale selection, /htitles reload stops the active runtime, rereads the four existing files, registers aliases again, and rebuilds the database connection in PLUGIN mode. Changing locale does not overwrite existing files.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
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:
hTitles 1.7 directly uses Paper API and Adventure. Plain Spigot/CraftBukkit and Folia are not supported.
To apply prefixes and suffixes:
HikariCP, SQLite JDBC, and MySQL Connector are declared as runtime libraries and are resolved by the server unconditionally, including in LEGACY mode. Initial resolution requires dependency-repository access when the libraries are not already cached.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
INSTALLATION AND FIRST SETUP
  1. Make sure the server runs Paper 1.21.x with Java 21.
  2. Install the required PlaceholderAPI, place hTitles in plugins, and start the server.
  3. Open plugins/hTitles/locale.yml, select ru or en, and run /htitles reload or restart the server.
  4. Choose accessMode: PLUGIN for database balances or LEGACY for permission-based access.
  5. 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.
  6. Configure length limits, the unlimited-access cooldown, self-service resets, blocked values, and aliases.
  7. For PLUGIN mode, keep SQLite or enter a MySQL connection in storage.yml.
  8. Run /htitles reload or fully restart the server to apply the edited files.
  9. Grant administrators htitle.admin. In LEGACY mode, configure distribution of htitle.prefix and htitle.suffix.
  10. In PLUGIN mode, grant one installation to a test player through /htitles give.
  11. Test the complete installation, confirmation, and reset flow with a test account.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

SUPPORT
If you need help installing or configuring the plugin:
Telegram — hPlugin

Commands

Plugin details

Read from the plugin's own plugin.yml.

Quick facts

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.

Explore more