SimplePrefixes

Customizable player-selected prefixes!

1,53k

Quick challenge

How far can you run before the mobs catch you?

SimplePrefixes

SimplePrefixes

wakatime

A plugin aiming to allow for simple player-selected prefixes that can be used in chat!

Requirements

- Paper-based Server (ie: PurpurMC) - This plugin takes advantage of Mini-Message from Paper. - PlaceholderAPI Plugin

Features

- Player friendly GUI for selecting nicknames. - Does not interact with any other plugins directly. - The plugin uses and hold prefixes in a placeholder, it will not affect permission groups / meta. - Supports PlaceholderAPI Placeholders. - Supports Mini-Message formatting. - Supports multiple types of requirements: `PERMISSION`, `STATISTIC`, `ADVANCEMENT`, `COMPARE_INT`

Placeholders, Commands, and Permissions

`%simpleprefixes_prefix%` > Placeholder for the prefix. Use this in your chat plugin. > > Example Usage: `%sp_prefix% %player_displayname% » {message}`

`%simpleprefixes_prefix_legacy%` > Placeholder for the prefix. Still takes Mini-Message format in config.yml / prefixes.yml but converts the format to legacy (`&a` / `§a` instead of `<green>`) for other plugins. This is when you need the legacy way to display stuff, like with TAB Plugin. > > This will automatically strip `<hover>` and `<click>` tags.

`/sp gui` > Opens a generated GUI that organizes the prefixes by prefix-id.

`/sp reset` > Resets your prefix.

`/sp set <prefix-id>` > Sets your prefix.

`/sp reload` > Reloads the plugin.

Configuration

```yml saving-type: "file" mysql: ip: "localhost:3306" name: prefixes user: username1 pass: badpassword!

default-prefix: "<white>[<gray>Player</gray>]</white> " prefix-menu-name: "<bold>Prefix Menu</bold>"

header: name: "<aqua>Click to Reset Your Prefix</aqua>" lore: [] material: ENDER_EYE count: 1 custom-model-data: null ```

Configuration Settings

| Setting | Description | Valid Values | |------------------|---------------------------------------------|---------------------------| | saving-type | What type of saving system should this use? | `PDC`, `FILE`, `MYSQL` | | mysql | MySQL Connection Settings | Valid SQL Connection Info | | default-prefix | Fallback prefix, supports Placeholders. | String | | prefix-menu-name | The name of the prefix menu. | String | | header | Section for Header Item Configuration | *See Below* |

Saving Types

These are the current implementations of the saving types...

__PersistentDataContainer (PDC)__ > The plugin will save the prefix ID of the currently equipped prefix on the Player themselves. > This makes the prefix inaccessible while they are offline. > > This was primarily used for initial testing of the plugin but if you don't like file systems for some reason, there.

__YML File (FILE)__ > The plugin will save the prefix IDs of all players to a configuration YML file stored alongside the config. > This allows for the prefix to be available while they are offline, but any time a player's prefix is changed, > the plugin saves the prefix. > > This is default.

Header Configuration

The prefix menu header is configurable in multiple ways.

```yaml header: name: "<aqua>Click to Reset Your Prefix</aqua>" lore: [] material: ENDER_EYE count: 1 custom-model-data: null ```

__Name__ > This is a String representing the item's name. > > Defaults to "Click to Reset Your Prefix". > > Mini-Message and Placeholders are supported.

__Lore__ > This is a list of Strings representing each lore line. > > Defaults to an empty list. > > Mini-Message and Placeholders are supported.

__Material__ > This is a String representing the Material Enumerated Type from Paper Material Enum > > Invalid or missing values defaults to ENDER_EYE (Eye of Ender).

__Count__ > This is a String / Integer representing the item stack quantity. > > Invalid or missing values defaults to 1. Do not set to 0. > > Placeholders are supported, so long as they become an int representation.

__Custom Model Data__ > This is an integer that represents the custom model data. > > Invalid or missing value leaves the item unchanged.

Creating Prefixes

Prefixes are stored in the `prefixes.yml` file, this is the default.

```yml #####

Prefixes.yml

---

For information on how to use this config, see the readme: https://github.com/Simplexity-Development/SimplePrefixes

##### #absorption:

display-name: "<yellow>Absorption"

description:

- "<yellow><bold>FUN FACT:"

- "<white> This was a prefix I used during testing!"

- "<white> This also supports PlaceholderAPI!"

prefix: "<white>[<yellow>Absorption: %player_absorption%</yellow>]</white>"

verify-always: true

requirements:

- "compare_int %player_absorption% > 0"

permitted: display-name: "<green>The Permitted" description: - "<aqua>You do have permission to run this command!" prefix: "<white>[<green>Permitted</green>]</white>" requirements: - "permission simpleprefix.permitted" undying: display-name: "<red>The Undying" description: - "<gray>Death hunts you..." - "<gray>You evade it..." prefix: "<white>[<red>Undying</red>]</white>" verify-always: true requirements: - "statistic DEATHS == 0" wither_hunter: display-name: "<black>The Wither Hunter" description: - "Can you even read that text?" prefix: "<white>[<black>Wither Hunter</black>]</white>" show-when-locked: false requirements: - "advancement minecraft:nether/summon_wither" custom_model_data: display-name: "<aqua>Bucket Mobs!</aqua>" description: - "If you have SimpleBucketMobs' resource pack" - "then this is an Enderman Bucket!" prefix: "<white>[<aqua>Simple Bucket Mobs</aqua>]</white>" item: material: BUCKET count: 2 custom-model-data: 22000 custom_layout: display-name: "<green>Fancy Layouts!</green>" description: - "This configuration option is effectively ignored with custom layouts." prefix: "<white>[<green>LAYOUTS</green>]</white>" layout: - "<blue>Prefix ID:</blue> <prefix_id>" - "It looks like this: <prefix>" - "<gray> → I snuck this in here, how weird!" - "<yellow>Unlock State:<yellow> <unlocked>" - "<blue>Line 1 Description" - "Line 2 Description" - "<red>Line 3 Description" - " " - "<green>Hi I wanted to skip another line." ```

Prefix ID [Required] > This is the Prefix ID. Every prefix is uniquely identified by this value. > > This does mean you cannot have two of the same Prefix IDs.

Display Name (`display-name`) [Required] > This is the Display Name of the prefix. It is the formal name of the prefix. > > Supports Placeholders from PlaceholderAPI.

Prefix (`prefix`) [Required] > This is the String representation of the prefix that will be displayed in place of `%sp_prefix%` / `%sp_prefix_legacy%`. > > Supports Placeholders from PlaceholderAPI.

Description (`description`) > This is a list of strings. Each string will be a new line in the description part of the GUI. > > Supports Placeholders from PlaceholderAPI.

Item (`item`) > This is a way to define your item stacks. > > - `material` defines the material of the item. Invalid or missing defaults to `NAME_TAG`. Paper Material Enum > - `count` changes the stack size (the number of items in the stack). Invalid or missing defaults to `1`. > - `custom-model-data` changes the custom model data, used for Resource Packs. Invalid or missing leaves the item unchanged. > > If this section is missing, the itemstack is defaulted to a single name tag.

Show When Locked (`show-when-locked`) > If this is true, the prefix will not show in the menu if the requirements are not met. > > This defaults to `true`.

Verify Always (`verify-always`) > Checks the requirements each time the player's prefix is requested by PAPI. > If the check fails, the player's prefix is cleared. > > This defaults to `false`.

Layout (`layout`) > This is a list of strings. Each string will be a new line in the item's lore. > > If this is provided and is not empty, this will overwrite the default layout of the prefix item. > > Each item will have their own unique layout. > > Layout Placeholders: > - `<prefix_id>` - The prefix's ID as listed in prefixes.yml. > - `<prefix>` - The prefix itself. > - `<unlocked>` - The Unlocked / Locked text. > > This defaults to `[]` (Empty List).

Minimum Configuration for a Prefix

```yml

A prefix with the ID "example-prefix"...

example-prefix: display-name: "The Example Prefix" prefix: "<white>[<rainbow>Example</rainbow>]</white> " ```

Prefix Requirements

Requirements are conditions that must be held true in order to equip the prefix. These requirements come in multiple forms that will be explained here.

> Note > > Requirements that are incorrectly formatted or produce errors are ignored. > > Requirements that cannot guarantee failure will not be checked either. > To check player permissions, the player has to be online, > so while the player is offline, these checks are ignored. > > `verify-always` will make the requirements check every time the player's prefix is requested. > If the requirement check fails, the prefix saved is cleared.

<u>Permission</u>

Format: `permission <permission.node> [false]`

> > `<permission.node>` represents a permission the player may have. > > `[false]` is optional and must be provided to invert the result. > This means if the permission is `example.permission`, the player must NOT have this permission. > > <u>Example</u>: `permission example.permission` (Player has permission example.permission) > > <u>Example</u>: `permission example.permission false` (Player does not have permission example.permission)

<u>Statistic</u>

Format: `statistic <statistic> <operator> <value>`

> > `<statistic>` is an enum value from this page. > This represents some statistic the player has. > > `<operator>` is a comparison operator. > Valid operators are `>`, `<`, `>=`, `<=`, `==`, `!=` > > `<value>` is an integer and can be compared to the statistic. > > <u>Example</u>: `statistic ANIMALS_BRED >= 100` (Player has bred 100 or more animals).

<u>Advancement</u>

Format: `advancement <namespace:advancement> [false]`

> `<namespace:advancement>` is a Namespaced Key representing an Advancement. > > You can find vanilla advancements on this page. > This represents some advancement the player can earn. Minecraft Advancements use the `minecraft` namespace. > > `[false]` is optional and must be provided to invert the result. > This means that if the advancement is `minecraft:nether/summon_wither`, the player must not have this advancement. > > <u>Example</u>: `advancement minecraft:nether/summon_wither` (Player has the Minecraft Summon Wither advancement). > > <u>Example</u>: `advancement minecraft:nether/summon_wither false` (Player does not have the Minecraft Summon Wither advancement).

<u>Compare Int</u>

Format: `compare_int <placeholder> <operator> <value>`

> `<placeholder>` is any PlaceholderAPI placeholder that can return a valid integer. > > `<operator>` is a comparison operator. > Valid operators are `>`, `<`, `>=`, `<=`, `==`, `!=` > > `<value>` is an integer and can be compared to the placeholder. > > <u>Example</u>: `compare_int %player_absorption% > 0` (Player has absorption value greater than 0).

<u>Unimplemented</u>

- Compare String, Case Sensitive - Compare String, Case Insensitive

WIP Features

- Special Configurable Icons (ie: Player Heads) - Compare String, Requirement Checks - "Live Now" Livestreaming Implementation

ADS