diff --git a/.github/workflows/wiki.yml b/.github/workflows/wiki.yml new file mode 100644 index 0000000..4112571 --- /dev/null +++ b/.github/workflows/wiki.yml @@ -0,0 +1,49 @@ +# +# This is a GitHub Action that allows us to auto-update the wiki +# when a Pull request changes specific files in a folder. +# +name: Update Wiki + +on: + push: + # + # Only trigger when the push changes any files in the wiki-folder. + # + paths: + - 'wiki/**' + branches: + - 'master' + # + # Releases cause this action to also fire. + # Using this prevents this problem. + # + tags-ignore: + - '**' + +jobs: + update: + runs-on: ubuntu-latest + steps: + - name: 'Checkout Code' + uses: actions/Checkout@v2 + - name: 'Update Wiki' + uses: docker://decathlon/wiki-page-creator-action:latest + env: + # + # We can use the E-Mail and Name of the GitHub Actions account + # for our convenience. + # + ACTION_MAIL: '41898282+github-actions[bot]@users.noreply.github.com' + ACTION_NAME: 'github-actions[bot]' + GH_PAT: '${{ secrets.GITHUB_TOKEN }}' + OWNER: 'PlaceholderAPI' + REPO_NAME: 'PlaceholderAPI' + # + # We only want to target files in the wiki folder + # + MD_FOLDER: 'wiki' + WIKI_PUSH_MESSAGE: 'Updating wiki from commit ${{ github.event.after }}' + # + # We skip/ignore the README.md file in the Wiki folder + # + SKIP_MD: README.md diff --git a/wiki/Commands.md b/wiki/Commands.md new file mode 100644 index 0000000..c1970bd --- /dev/null +++ b/wiki/Commands.md @@ -0,0 +1,239 @@ +This page shows all commands, including with a detailed description of what every command does. + +## Overview + +- **[Parse Commands](#parse-commands)** + - [`/papi bcparse `](#papi-bcparse) + - [`/papi cmdparse `](#papi-cmdparse) + - [`/papi parse `](#papi-parse) + - [`/papi parserel `](#papi-parserel) + +- **[eCloud Commands](#ecloud-commands)** + - [`/papi ecloud clear`](#papi-ecloud-clear) + - [`/papi ecloud disable`](#papi-ecloud-disable) + - [`/papi ecloud download [version]`](#papi-ecloud-download) + - [`/papi ecloud enable`](#papi-ecloud-enable) + - [`/papi ecloud info [version]`](#papi-ecloud-info) + - [`/papi ecloud list |installed>`](#papi-ecloud-list) + - [`/papi ecloud placeholders `](#papi-ecloud-placeholders) + - [`/papi ecloud refresh`](#papi-ecloud-refresh) + - [`/papi ecloud status`](#papi-ecloud-status) + +- **[Expansion Commands](#expansion-commands)** + - [`/papi info `](#papi-info) + - [`/papi list`](#papi-list) + - [`/papi register `](#papi-register) + - [`/papi unregister `](#papi-unregister) + +- **[Other Commands](#other-commands)** + - [`/papi dump`](#papi-dump) + - [`/papi reload`](#papi-reload) + +---- +### Parse Commands +These commands are used to parse placeholders into their respective values. Useful for debugging. + +#### `/papi bcparse` +**Description**: +Parses placeholders of a String and broadcasts the result to all players. + +**Arguments**: +* `` - The Player to parse values of the placeholder (Use `me` for yourself). +* `` - The text to parse. + +**Example**: +``` +/papi bcparse funnycube My name is %player_name%! +``` + +---- +#### `/papi cmdparse` +**Description**: +Parses placeholders of a String and executes it as a command. + +**Arguments**: +- `` - The player to parse placeholders against. Use `me` for yourself. +- `` - The Text to parse and execute as command. Please leave away the `/` of the command. + +**Example**: +``` +/papi cmdparse funnycube say My name is %player_name%! +``` + +---- +#### `/papi parse` +**Description**: +Parses the placeholders in a given text and shows the result. + +**Arguments**: +* `` - The Player to parse values of the placeholder (Use `me` for yourself). +* `` - The text to parse. + +**Example**: +``` +/papi parse funnycube My group is %vault_group% +``` + +---- +#### `/papi parserel` +**Description**: +Parses a relational placeholder. + +**Arguments**: +* `` - The first player. +* `` - the second player to compare with. +* `` - The actual placeholder to parse. + +**Example**: +``` +/papi parserel funnycube extended_clip %placeholder% +``` + +---- +### eCloud Commands +These commands all start with `/papi ecloud` and are used for things related about the [[Expansion Cloud]]. + +#### `/papi ecloud clear` +**Description**: +Clears the cache for the eCloud. + +---- +#### `/papi ecloud disable` +**Description**: +Disables the connection to the eCloud. + +---- +#### `/papi ecloud download` +**Description**: +Allows you to download an expansion from the eCloud + +**Arguments**: +- `` - The expansion to download. +- `[version]` - The specific version of the expansion to download (Optional) + +**Example**: +``` +/papi ecloud download Vault +/papi ecloud download Vault 1.5.2 +``` + +---- +#### `/papi ecloud enable` +**Description**: +Enables the connection to the eCloud + +---- +#### `/papi ecloud info` +**Description**: +Gives information about a specific Expansion. + +**Arguments**: +- `` - The Expansion to retrieve information from. +- `[version]` - The Expansion's version to get information from. + +**Example**: +``` +/papi ecloud info Vault +``` + +---- +#### `/papi ecloud list` +**Description**: +Lists either all Expansions on the eCloud, only those by a specific author or only those that you have [installed](#papi-ecloud-download). +Installed Expansions show as green in the list and Expansions that are installed and have an update available show as gold. + +**Arguments**: +- `|installed>` - List all Expansions, Expansions of a specific author or all Expnansions you have installed. + +**Example**: +``` +/papi ecloud list all +/papi ecloud list clip +/papi ecloud list installed +``` + +---- +#### `/papi ecloud placeholders` +**Description**: +List all placeholders of an Expansion. + +**Arguments**: +- `` - The Expansion to list placeholders of. + +**Example**: +``` +/papi ecloud placeholders Vault +``` + +---- +#### `/papi ecloud refresh` +**Description**: +Refresh the cached data from the eCloud. + +---- +#### `/papi ecloud status` +**Description**: +Displays the actual Status of the eCloud. + +---- +### Expansion Commands +These commands can be used to manage the expansions that you have currently installed. + +#### `/papi info` +**Description**: +Gives you information about the specified Expansion. + +**Argument(s)**: +- `` - The Expansion to get info from (Needs to be registered and active). + +**Example**: +``` +/papi info Vault +``` + +---- +#### `/papi list` +**Description**: +Lists all active/registered expansions. +This is different to [/papi ecloud list installed](#papi-ecloud-list) in the fact, that it also includes expansions that were installed through a plugin (That aren't a separate jar-file) and it also doesn't show which one have updates available. + +---- +#### `/papi register` +**Description**: +Registers an expansion from a specified filename. +This is useful in cases, where you downloaded the expansion manually and don't want to restart the server. +The file needs to be inside `/plugins/PlaceholderAPI/expansions`. + +**Arguments**: +- `` - The file to register (including the file-extension). + +**Example**: +``` +/papi register MyExpansion.jar +``` + +---- +#### `/papi unregister` +**Description**: +Unregisters the specified expansion. + +**Arguments**: +- `` - The expansion to unregister. + +**Example**: +``` +/papi unregister MyExpansion.jar +``` + +---- +### Other Commands +These are other commands of PlaceholderAPI that don't fit any of the above categories. + +#### `/papi dump` +**Description**: +Pastes useful information from PlaceholderAPI such as plugin version, server version and installed expansions to https://paste.helpch.at for simple sharing and support. + +#### `/papi reload` +**Description**: +Reloads the config settings. +You need to use this command after [downloading Expansions](#papi-ecloud-download) from the eCloud or they won't be properly registered. \ No newline at end of file diff --git a/wiki/Expansion-cloud.md b/wiki/Expansion-cloud.md new file mode 100644 index 0000000..5b9e767 --- /dev/null +++ b/wiki/Expansion-cloud.md @@ -0,0 +1,67 @@ +## About +PlaceholderAPI uses an expansion-cloud (A website that has all kinds of expansions stored), to download jar-files, that contain the placeholders for it to use. + +The expansion-cloud can be seen under https://api.extendedclip.com/home + +## How it works +PlaceholderAPI connects to the ecloud on startup of your server, to check if the cloud is available and how many expansions are available on it. +If you run `/papi ecloud download ` PlaceholderAPI will connect to the site to first check if the specified expansion exists and then downloads it if it does. +Note that not all listed expansions are on the ecloud. Some are in the corresponding plugin itself and are registered on the startup of the server. + +You can disable the connection to the cloud by setting `cloud_enabled` in the config.yml to false. + +## Adding your own expansion +You can add your own expansion to the expansion-cloud for others to use. +In order to do that, you have to follow those steps: +1. Make sure you have created a seperate jar-file like explained on the page [[PlaceholderExpansion]]. +2. Create an account on the site, or log in, if you already have one. +3. Click on `Expansions` and then on [`Upload New`](https://api.extendedclip.com/manage/add/). +4. Fill out the required information. `Source URL` and `Dependency URL` are optional. +5. Click on the button that says `Choose an file...` and select the jar of your expansion. + * **Important**! Make sure, that the name of the jar-file contains the same version like you set in the version-field! +6. Click on `Submit Expansion` + +Your expansion is now uploaded and will be reviewed by a moderator. +If everything is ok will your expansion be approved and will be available on the ecloud for PlaceholderAPI*. + +> *You can only download verified Expansions through PlaceholderAPIs command, unless you enable the option `cloud_allow_unverified_expansions` in the config.yml +> Unverified expansions can be downloaded manually by going to the site and download it yourself. + +## Updating your expansion +Before you update, please note the following: +If you aren't a verified dev and you upload an update, your expansion will become **unverified** until a moderator reviews the update and approves it! +It is recommended to only update the expansion, if it contains huge changes or bug fixes. + +To update your expansion, you first have to go to the list of [your expansions](https://api.extendedclip.com/manage/). +For that click on `Expansions` and select `Your Expansions`. +After that, follow those steps: +1. Click the name of the expansion, that you want to update. +2. Click on the button that says `Version` +3. Click on `Add Version` +4. Fill out the fields and upload the new jar. + * **Important**! Make sure, that the name of the jar-file contains the same version like you set in the version-field! +5. Click on `Save Changes` + +If you're a verified dev, your version will be approved and is available directly. +If you aren't a verified dev, you have to wait until a moderator approves the update. + +## Downloading a specific expansion version +In some cases, you may want to use a specific, older version of expansion. Such a case could be for example, when you run an old server version and the newest version of an expansion uses methods that aren't available on that particular server version. +For that case is there a way, to download a specific version of expansion. You can download the expansion either manually, or through PlaceholderAPI itself. +Here is how you can do it for each. + +### Download with PlaceholderAPI +This is the easiest of both methods since it requires the least amount of effort. +Run the following command in-game or in your console to download a specific version: +`/papi ecloud download [version]` + +To find out, what versions are available for the expansion, run `/papi ecloud info ` +You can then run `/papi ecloud versioninfo ` to receive more infor about a specific version. + +After you downloaded the specific version, run `/papi reload` to refresh the installed expansions. + +### Download manually +To download an expansion manually, you first have to connect to the website and go to the expansion of your choice. +There, you click on the button that says `Version` and click on the download-icon of the version you want to download. + +Finally, stop your server, upload the jar to the folder in `/plugins/PlaceholderAPI/expansions` (Make sure to delete the old jar, if there's already one) and start the server again. \ No newline at end of file diff --git a/wiki/FAQ.md b/wiki/FAQ.md new file mode 100644 index 0000000..5fef6e1 --- /dev/null +++ b/wiki/FAQ.md @@ -0,0 +1,22 @@ +Here are frequently asked questions about stuff related to PlaceholderAPI. + +## It only shows %placeholder% and not the variable +Make sure, that you've tried the following steps: +- PlaceholderAPI is installed and running (Shows green in `/pl` and responds to the `/papi` command) +- You downloaded the expansion with `/papi ecloud download [expansion]` +A list of available expansions and their placeholders can be found [[here|Placeholders]]! +Also note that not all placeholders are in a seperate expansion. Some are "hardcoded" into a plugin. +- You reloaded PlaceholderAPI with `/papi reload` after downloading an expansion. +- Any possible dependency for the expansion (Plugin) is installed and running. +- The placeholder doesn't contain any typos. +- The plugin that should use the placeholder actually supports PlaceholderAPI. +For a list of plugins supporting PlaceholderAPI go [[here|Plugins-using-PlaceholderAPI]]. + +## I can't download the expansion +Make sure, that the connection to the cloud (https://api.extendedclip.com) isn't blocked by a firewall or similar. +Next step would be to check if the expansion actually exists on the cloud. Not all plugins provide their placeholders through a separate jar on the cloud. Some have them build in and register them on startup. + +If both checks failed, go to the cloud-page and download the jar manually. Put it then in the `expansions` folder of PlaceholderAPI (`/plugins/PlaceholderAPI/expansions`) + +## How can other plugins use my placeholders with PlaceholderAPI? +A tutorial can be found [[here|Hook into PlaceholderAPI]]! \ No newline at end of file diff --git a/wiki/Home.md b/wiki/Home.md new file mode 100644 index 0000000..f480bb0 --- /dev/null +++ b/wiki/Home.md @@ -0,0 +1,76 @@ +

+ PlaceholderAPI +

+This wiki gives you information on how to create placeholders in your plugin that can be used in other plugins, how to use other placeholders inside your plugin, or how to make an expansion. +It also has a list with all available placeholders (Work in progress). + +### Setup +**[[Hook into PlaceholderAPI]]** +* [[First steps|Hook-into-PlaceholderAPI#first-steps]] +* [[Adding placeholders to PlaceholderAPI|Hook-into-PlaceholderAPI#adding-placeholders-to-placeholderapi]] + * [[PlaceholderExpansion]] + * [[Without an external plugin|PlaceholderExpansion#without-an-external-plugin]] + * [[With external plugin|PlaceholderExpansion#with-external-plugin]] +* [[Setting placeholders in your plugin|Hook-into-PlaceholderAPI#setting-placeholders-in-your-plugin]] + +### Other +**[[Commands]]** +**[[Expansion cloud]]** +**[[FAQ]]** +**[[Plugins using PlaceholderAPI]]** +**[[Placeholders|Placeholders]]** +(Click the arrows to expand) +
+ [[PAPI-placeholders|Placeholders#papi-placeholders-1]] + + - [[Advancements|Placeholders#advancements]] + - [[BungeeCord|Placeholders#bungeecord]] + - [[CooldownBar|Placeholders#cooldownbar]] + - [[CheckItem|Placeholders#checkitem]] + - [[Javascript|Placeholders#javascript]] + - [[ListPlayers|Placeholders#listplayer]] + - [[Math|Placeholders#math]] + - [[MVdW placeholders|Placeholders#mvdw-placeholders]] + - [[OtherPlayer|Placeholders#otherplayer]] + - [[Pinger|Placeholders#pinger]] + - [[Player|Placeholders#player]] + - [[Plugin|Placeholders#plugin]] + - [[Progress|Placeholders#progress]] + - [[RainbowColor|Placeholders#rainbowcolor]] + - [[RandomColor|Placeholders#randomcolor]] + - [[RedisBungee|Placeholders#redisbungee]] + - [[RelCon|Placeholders#relcon]] + - [[ScoreboardObjectives|Placeholders#scoreboardobjectives]] + - [[Server|Placeholders#server]] + - [[Sound|Placeholders#sound]] + - [[Spectators|Placeholders#spectators]] + - [[Statistic|Placeholders#statistic]] +
+
+ [[Plugin-placeholders|Placeholders#plugin-placeholders-1]] + + - [[A|Placeholders#a]] + - [[B|Placeholders#b]] + - [[C|Placeholders#c]] + - [[D|Placeholders#d]] + - [[E|Placeholders#e]] + - [[F|Placeholders#f]] + - [[G|Placeholders#g]] + - [[H|Placeholders#h]] + - [[I|Placeholders#i]] + - [[J|Placeholders#j]] + - [[K|Placeholders#k]] + - [[L|Placeholders#l]] + - [[M|Placeholders#m]] + - [[N|Placeholders#n]] + - [[O|Placeholders#o]] + - [[P|Placeholders#p]] + - [[Q|Placeholders#q]] + - [[R|Placeholders#r]] + - [[S|Placeholders#s]] + - [[T|Placeholders#t]] + - [[U|Placeholders#u]] + - [[V|Placeholders#v]] + - [[W|Placeholders#w]] + - [[Z|Placeholders#z]] +
\ No newline at end of file diff --git a/wiki/Hook-into-PlaceholderAPI.md b/wiki/Hook-into-PlaceholderAPI.md new file mode 100644 index 0000000..afb0715 --- /dev/null +++ b/wiki/Hook-into-PlaceholderAPI.md @@ -0,0 +1,137 @@ +[APIBadge]: https://img.shields.io/nexus/r/http/repo.extendedclip.com/me.clip/placeholderapi.svg?label=API-Version + +[SpigotBadge]: https://img.shields.io/spiget/version/6245?label=Spigot +[Spigot]: https://spigotmc.org/resources/6245 + +[GitHubBadge]: https://img.shields.io/github/v/release/PlaceholderAPI/PlaceholderAPI?label=GitHub%20Release +[GitHub]: /PlaceholderAPI/PlaceholderAPI/releases/latest + +> [![SpigotBadge]][Spigot] [![GitHubBadge]][GitHub] +> +> ![APIBadge] +> +> *The GitHub release may be different from the spigot release* + +This page is about using PlaceholderAPI in your own plugin, to either let other plugins use your plugin, or just use placeholders from other plugins in your own. + +Please note, that the examples in this page are only available for **PlaceholderAPI 2.10.0 or higher**! + +## First steps +Before you can actually make use of PlaceholderAPI, you first have to import it into your project. + +### Import with Maven +To import PlaceholderAPI, simply add the following code to your **pom.xml** +Replace `{VERSION}` with the version listed at the top of this page. +```xml + + + placeholderapi + https://repo.extendedclip.com/content/repositories/placeholderapi/ + + + + + me.clip + placeholderapi + {VERSION} + provided + + +``` + +### Import with Gradle +Here is how you can import PlaceholderAPI through gradle. +Put this into your **Gradle.build**. +Replace `{VERSION}` with the version listed at the top of this page. +```gradle +repositories { + maven { + url = 'https://repo.extendedclip.com/content/repositories/placeholderapi/' + } +} + +dependencies { + compileOnly 'me.clip:placeholderapi:{VERSION}' +} +``` + +### Set PlaceholderAPI as (soft)depend +Next step is to go to your plugin.yml and add PlaceholderAPI as a depend or softdepend, depending (no pun intended) on if it is optional or not. + +**Example Softdepend**: +```yaml +name: ExamplePlugin +version: 1.0 +author: author +main: your.main.path.here + +softdepend: [PlaceholderAPI] # This is used, if your plugin works without PlaceholderAPI. +``` + +**Example Depend**: +```yaml +name: ExamplePlugin +version: 1.0 +author: author +main: your.main.path.here + +depend: [PlaceholderAPI] # If your plugin requires PlaceholderAPI, to work, use this. +``` + +## Adding placeholders to PlaceholderAPI + +A full guide on how to create expansions can be found on the [[PlaceholderExpansion]] page of this wiki. + +## Setting placeholders in your plugin +PlaceholderAPI offers the ability, to automatically parse placeholders from other plugins within your own plugin, giving the ability for your plugin to support thousands of other placeholders without depending on each plugin individually. +To use placeholders from other plugins in our own plugin, we simply have to [(soft)depend on PlaceholderAPI](#set-placeholderapi-as-softdepend) and use the `setPlaceholders` method. + +It is also important to point out, that any required plugin/dependency for an expansion has to be on the server and enabled, or the `setPlaceholders` method will just return the placeholder itself (do nothing). + +**Example**: +Let's assume we want to send an own join message that shows the group a player has. +To achieve that, we can do the following: +```java +package at.helpch.placeholderapi; + +import me.clip.placeholderapi.PlaceholderAPI; + +import org.bukkit.Bukkit; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.plugin.java.JavaPlugin; +import me.clip.placeholderapi.PlaceholderAPI; + +public class JoinExample extends JavaPlugin implements Listener { + + @Override + public void onEnable() { + + if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) { + /* + * We register the EventListener here, when PlaceholderAPI is installed. + * Since all events are in the main class (this class), we simply use "this" + */ + Bukkit.getPluginManager().registerEvents(this, this); + } else { + throw new RuntimeException("Could not find PlaceholderAPI!! Plugin can not work without it!"); + } + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onJoin(PlayerJoinEvent event) { + String joinText = "%player_name% &ajoined the server! He/she is rank &f%vault_rank%"; + + /* + * We parse the placeholders using "setPlaceholders" + * This would turn %vault_rank% into the name of the Group, that the + * joining player has. + */ + joinText = PlaceholderAPI.setPlaceholders(event.getPlayer(), joinText); + + event.setJoinMessage(withPlaceholdersSet); + } +} +``` \ No newline at end of file diff --git a/wiki/PlaceholderExpansion.md b/wiki/PlaceholderExpansion.md new file mode 100644 index 0000000..8daabab --- /dev/null +++ b/wiki/PlaceholderExpansion.md @@ -0,0 +1,411 @@ +## Overview +This page covers how you can use the `PlaceholderExpansion` to add own placeholders to PlaceholderAPI, which then can be used by other plugins. + +PlaceholderAPI is using Expansions for its placeholders, with PlaceholderAPI providing the core. Users can download Expansions from the cloud server using commands in-game or by going [here](https://api.extendedclip.com/home/) if they want to use the placeholder. + +## Note +You can either make a separate jar file, to upload it to the expansion-cloud (recommended) or have it as a local class inside your plugin. + +## Examples +There are multiple methods and ways you can use the PlaceholderExpansion. +Those depend on what you want to display through the placeholders in the end. + +* [Without external plugin](#without-external-plugin) +* [With external plugin](#with-external-plugin) + * [Separate jar](#separate-jar) + * [Internal class](#internal-class) + +### Without an external plugin +This part here covers how you create an expansion that doesn't require any external/additional plugins to function. +Examples of such expansions are: +- [Player expansion](/PlaceholderAPI/Player-Expansion) +- [Math expansion](https://github.com/Andre601/Math-Expansion) +- [Statistics expansion](/PlaceholderAPI/Statistics-Expansion) + +Since it would be weird (and also make no real sense) to have this inside your plugin, we assume you make a separate jar-file as an expansion. + +To begin, first make the class extend the `PlaceholderExpansion` and add the required methods: +```java +package at.helpch.placeholderapi.example.expansions; + +import org.bukkit.OfflinePlayer; +import me.clip.placeholderapi.expansion.PlaceholderExpansion; + +/** + * This class will automatically register as a placeholder expansion + * when a jar including this class is added to the directory + * {@code /plugins/PlaceholderAPI/expansions} on your server. + *
+ *
If you create such a class inside your own plugin, you have to + * register it manually in your plugins {@code onEnable()} by using + * {@code new YourExpansionClass().register();} + */ +public class SomeExpansion extends PlaceholderExpansion { + + /** + * This method should always return true unless we + * have a dependency we need to make sure is on the server + * for our placeholders to work! + * + * @return always true since we do not have any dependencies. + */ + @Override + public boolean canRegister(){ + return true; + } + + /** + * The name of the person who created this expansion should go here. + * + * @return The name of the author as a String. + */ + @Override + public String getAuthor(){ + return "someauthor"; + } + + /** + * The placeholder identifier should go here. + *
This is what tells PlaceholderAPI to call our onRequest + * method to obtain a value if a placeholder starts with our + * identifier. + *
This must be unique and can not contain % or _ + * + * @return The identifier in {@code %_%} as String. + */ + @Override + public String getIdentifier(){ + return "example"; + } + + /** + * This is the version of this expansion. + *
You don't have to use numbers, since it is set as a String. + * + * @return The version as a String. + */ + @Override + public String getVersion(){ + return "1.0.0"; + } + + /** + * This is the method called when a placeholder with our identifier + * is found and needs a value. + *
We specify the value identifier in this method. + *
Since version 2.9.1 can you use OfflinePlayers in your requests. + * + * @param player + * A {@link org.bukkit.OfflinePlayer OfflinePlayer}. + * @param identifier + * A String containing the identifier/value. + * + * @return Possibly-null String of the requested identifier. + */ + @Override + public String onRequest(OfflinePlayer player, String identifier){ + + // %example_placeholder1% + if(identifier.equals("placeholder1")){ + return "placeholder1 works"; + } + + // %example_placeholder2% + if(identifier.equals("placeholder2")){ + return "placeholder2 works"; + } + + // We return null if an invalid placeholder (f.e. %example_placeholder3%) + // was provided + return null; + } +} +``` +---- + +### With external plugin +Those examples here applies to people who want to provide information from their own plugin through placeholders from PlaceholderAPI. +There exists a repository showcasing an [example-expansion](/PlaceholderAPI/Example-Expansion) with what you can/should do. + +In our examples do we have the plugin `SomePlugin` and want to show certain placeholders with it. + +There are two ways to actually get information from your plugin and they only are different in if you have the expansion as a separate jar-file or as an internal class. + +#### Separate jar +In our separate jar do we have to make some checks, to be sure, that the required plugin is installed and running. +The below code shows how the class can look like in case the plugin doesn't have a public and easy to access API. + +```java +package at.helpch.placeholderapi.example.expansions; + +import org.bukkit.OfflinePlayer; +import me.clip.placeholderapi.expansion.PlaceholderExpansion; +import at.helpch.placeholderapi.example.SomePlugin; + +/** + * This class will automatically register as a placeholder expansion + * when a jar including this class is added to the directory + * {@code /plugins/PlaceholderAPI/expansions} on your server. + *
+ *
If you create such a class inside your own plugin, you have to + * register it manually in your plugins {@code onEbale()} by using + * {@code new YourExpansionClass().register();} + */ +public class SomeExpansion extends PlaceholderExpansion { + + // We get an instance of the plugin later. + private SomePlugin plugin; + + /** + * Since this expansion requires api access to the plugin "SomePlugin" + * we must check if said plugin is on the server or not. + * + * @return true or false depending on if the required plugin is installed. + */ + @Override + public boolean canRegister(){ + return (plugin = (SomePlugin) Bukkit.getPluginManager().getPlugin(getRequiredPlugin())) != null; + } + + /** + * The name of the person who created this expansion should go here. + * + * @return The name of the author as a String. + */ + @Override + public String getAuthor(){ + return "someauthor"; + } + + /** + * The placeholder identifier should go here. + *
This is what tells PlaceholderAPI to call our onRequest + * method to obtain a value if a placeholder starts with our + * identifier. + *
This must be unique and can not contain % or _ + * + * @return The identifier in {@code %_%} as String. + */ + @Override + public String getIdentifier(){ + return "someplugin"; + } + + /** + * if the expansion requires another plugin as a dependency, the + * proper name of the dependency should go here. + *
Set this to {@code null} if your placeholders do not require + * another plugin to be installed on the server for them to work. + *
+ *
This is extremely important to set your plugin here, since if + * you don't do it, your expansion will throw errors. + * + * @return The name of our dependency. + */ + @Override + public String getRequiredPlugin(){ + return "SomePlugin"; + } + + /** + * This is the version of this expansion. + *
You don't have to use numbers, since it is set as a String. + * + * @return The version as a String. + */ + @Override + public String getVersion(){ + return "1.0.0"; + } + + /** + * This is the method called when a placeholder with our identifier + * is found and needs a value. + *
We specify the value identifier in this method. + *
Since version 2.9.1 can you use OfflinePlayers in your requests. + * + * @param player + * A {@link org.bukkit.Player Player}. + * @param identifier + * A String containing the identifier/value. + * + * @return possibly-null String of the requested identifier. + */ + @Override + public String onPlaceholderRequest(Player player, String identifier){ + + if(p == null){ + return ""; + } + + // %someplugin_placeholder1% + if(identifier.equals("placeholder1")){ + return plugin.getConfig().getString("placeholder1", "value doesnt exist"); + } + + // %someplugin_placeholder2% + if(identifier.equals("placeholder2")){ + return plugin.getConfig().getString("placeholder2", "value doesnt exist"); + } + + // We return null if an invalid placeholder (f.e. %someplugin_placeholder3%) + // was provided + return null; + } +} +``` + +---- +#### Internal class +You can have the class inside your plugin. +This has some advantages but can also have some disadvantages. +If you include a PlaceholderExpansion class in your plugin, you MUST add an override the persist() method to return true +otherwise, if PlaceholderAPI is reloaded, your expansion will be unregistered and lost forever. + + +```java +package at.helpch.placeholderapi.example.expansions; + +import org.bukkit.OfflinePlayer; +import me.clip.placeholderapi.expansion.PlaceholderExpansion; +import at.helpch.placeholderapi.example.SomePlugin; + +/** + * This class will be registered through the register-method in the + * plugins onEnable-method. + */ +public class SomeExpansion extends PlaceholderExpansion { + + private SomePlugin plugin; + + /** + * Since we register the expansion inside our own plugin, we + * can simply use this method here to get an instance of our + * plugin. + * + * @param plugin + * The instance of our plugin. + */ + public SomeExpansion(SomePlugin plugin){ + this.plugin = plugin; + } + + /** + * Because this is an internal class, + * you must override this method to let PlaceholderAPI know to not unregister your expansion class when + * PlaceholderAPI is reloaded + * + * @return true to persist through reloads + */ + @Override + public boolean persist(){ + return true; + } + + /** + * Because this is a internal class, this check is not needed + * and we can simply return {@code true} + * + * @return Always true since it's an internal class. + */ + @Override + public boolean canRegister(){ + return true; + } + + /** + * The name of the person who created this expansion should go here. + *
For convienience do we return the author from the plugin.yml + * + * @return The name of the author as a String. + */ + @Override + public String getAuthor(){ + return plugin.getDescription().getAuthors().toString(); + } + + /** + * The placeholder identifier should go here. + *
This is what tells PlaceholderAPI to call our onRequest + * method to obtain a value if a placeholder starts with our + * identifier. + *
This must be unique and can not contain % or _ + * + * @return The identifier in {@code %_%} as String. + */ + @Override + public String getIdentifier(){ + return "someplugin"; + } + + /** + * This is the version of the expansion. + *
You don't have to use numbers, since it is set as a String. + * + * For convienience do we return the version from the plugin.yml + * + * @return The version as a String. + */ + @Override + public String getVersion(){ + return plugin.getDescription().getVersion(); + } + + /** + * This is the method called when a placeholder with our identifier + * is found and needs a value. + *
We specify the value identifier in this method. + *
Since version 2.9.1 can you use OfflinePlayers in your requests. + * + * @param player + * A {@link org.bukkit.Player Player}. + * @param identifier + * A String containing the identifier/value. + * + * @return possibly-null String of the requested identifier. + */ + @Override + public String onPlaceholderRequest(Player player, String identifier){ + + if(player == null){ + return ""; + } + + // %someplugin_placeholder1% + if(identifier.equals("placeholder1")){ + return plugin.getConfig().getString("placeholder1", "value doesnt exist"); + } + + // %someplugin_placeholder2% + if(identifier.equals("placeholder2")){ + return plugin.getConfig().getString("placeholder2", "value doesnt exist"); + } + + // We return null if an invalid placeholder (f.e. %someplugin_placeholder3%) + // was provided + return null; + } +} +``` + +As you can see is this method pretty similar to the one without any external plugins, since we can get an instance of our plugin much easier and also have a 100% guarantee that the plugin is installed and running. + +Our final step now is to register the class and its placeholders. The plugin doesn't do this on its own. +To achieve this, add the following to your `onEnable()` section (Use your expansion name of course): +```java +package at.helpch.placeholderapi.example + +import org.bukkit.Bukkit; +import org.bukkit.plugin.java.JavaPlugin; + +public class SomePlugin extends JavaPlugin{ + + @Override + public void onEnable(){ + // Small check to make sure that PlaceholderAPI is installed + if(Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null){ + new SomeExpansion(this).register(); + } + } +} +``` \ No newline at end of file diff --git a/wiki/Placeholders.md b/wiki/Placeholders.md new file mode 100644 index 0000000..c8c6519 --- /dev/null +++ b/wiki/Placeholders.md @@ -0,0 +1,4300 @@ +This is a list of all available placeholders. +A download-command for the extension can be found at the area of the placeholder. +If the command itself isn't there and `NO DOWNLOAD COMMAND` instead is shown, then it means, that the plugin actually has the placeholders hard-coded into them and doesn't require a manual download of any expansion. + +> ## Notes (Please read) +> We only add and/or update placeholders on request. +> We aren't responsible, to keep the placeholders of your plugin(s) up to date. +> If you changed, removed or added placeholders, or made your plugin(s) and/or expansion(s) no longer available and want us to update this page, [create an issue](/PlaceholderAPI/PlaceholderAPI/issues/new?template=change_request_wiki.md) and let us know. +> This is also the case for when you want your plugin to be added to the list. + +## [PAPI-placeholders](#papi-placeholders-1) + +- **[Advancements](#advancements)** +- **[Animations](#animations)** +- **[Armor](#armor)** +- **[ASCII](#ascii)** +- **[BungeeCord](#bungeecord)** +- **[CheckItem](#checkitem)** +- **[CooldownBar](#cooldownbar)** +- **[Formatter](#formatter)** +- **[Javascript](#javascript)** +- **[ListPlayers](#listplayers)** +- **[LocalTime](#localtime)** +- **[Math](#math)** +- **[MVdW placeholders](#mvdw-placeholders)** +- **[OtherPlayer](#otherplayer)** +- **[ParseNear](#parsenear)** +- **[ParseOther](#parseother)** +- **[Pinger](#pinger)** +- **[Player](#player)** +- **[PlayerList](#playerlist)** +- **[Plugin](#plugin)** +- **[Progress](#progress)** +- **[RainbowColor](#RainbowColor)** +- **[RandomColor](#RandomColor)** +- **[RedisBungee](#redisbungee)** +- **[RelCon](#relcon)** +- **[ScoreboardObjectives](#scoreboardobjectives)** +- **[Server](#server)** +- **[Sound](#sound)** +- **[Spectators](#spectators)** +- **[SpeedPerSec](#speedpersec)** +- **[Statistic](#statistic)** +- **[Team](#team)** +- **[World](#world)** +---- + +## [Plugin-placeholders](#plugin-placeholders-1) + +## **A** +- **[AAC - AdvancedAntiCheat](#aac)** +- **[AbstractMenus](#abstractmenus)** +- **[AcidIsland](#acidisland)** +- **[Advanced Abilities](#advanced-abilities)** +- **[AdvancedAFK](#advancedafk)** +- **[AdvancedCustomMenu+](#advancedcustommenu)** +- **[AdvancedLottery](#advancedlottery)** +- **[AdvancedModReq](#advancedmodreq)** +- **[ajParkour](#ajparkour)** +- **[Animated Menu](#animated-menu)** +- **[AParkour](#aparkour)** +- **[ASkyBlock](#askyblock)** +- **[AsyncKeepAlive](#asynckeepalive)** +- **[AutoRank](#autorank)** +- **[AutoSell](#autosell)** + +## **B** +- **[BankSystem](#banksystem)** +- **[BattleLevels](#battlelevels)** +- **[BeautyQuests](#beautyquests)** +- **[BedWars1058](#bedwars1058)** +- **[BentoBox](#bentobox)** +- **[BlockParty](#blockparty)** +- **[BlockQuests](#blockquests)** +- **[BuildBattlePro](#buildbattlepro)** +- **[BungeePerms](#bungeeperms)** + +## **C** +- **[CarlTheCreeper](#carlthecreeper)** +- **[ChatColor+](#chatcolor)** +- **[ChatColor+ Premium](#chatcolor-premium)** +- **[ChatReaction](#chatreaction)** +- **[CheckNameHistory](#checknamehistory)** +- **[Clans](#clans)** +- **[Clans](#clans-1)** +- **[Clans-API for Spigot/Clan tag in chat](#clans-api-for-spigotclan-tag-in-chat)** +- **[ClanSystem](#clansystem)** +- **[CombatLogX](#combatlogx)** +- **[Compassance](#compassance)** +- **[Country on Join](#country-on-join)** +- **[CraftConomy](#craftconomy)** +- **[CraftingStore.net](#craftingstorenet)** +- **[CursedVIP](#cursedvip)** + +## **D** +- **[Daily Rewards](#daily-rewards)** +- **[DeliveryMan](#deliveryman)** +- **[DeluxeChat](#deluxechat)** +- **[DeluxeCombat](#deluxecombat)** +- **[DeluxePM](#deluxepm)** +- **[DeluxeTags](#deluxetags)** +- **[Denize](#denize)** +- **[DiscordSRV](#discordsrv)** +- **[Disease](#disease)** +- **[DonateParty](#donateparty)** +- **[Donations Holograms](#donations-holograms)** +- **[DragonSlayer](#dragonslayer)** +- **[DungeonsXL](#dungeonsxl)** + +## **E** +- **[Economy Bank](#economy-bank)** +- **[Enjin & DonationCraft 2.x](#enjin--donationcraft-2x)** +- **[Envoys](#envoys)** +- **[EpicFriends](#epicfriends)** +- **[EpicLevels](#epiclevels)** +- **[essCore](#esscore)** +- **[Essentials](#essentials)** +- **[EZBlocks](#ezblocks)** +- **[EZPrestige](#ezprestige)** +- **[EZRanksPro](#ezrankspro)** + +## **F** +- **[Factions MCore](#factions-mcore)** +- **[FactionsUUID](#factionsuuid)** +- **[Factions relation placeholders](#factions-relation-placeholders)** +- **[FunnyGuilds](#funnyguilds)** + +## **G** +- **[GAListener](#galistener)** +- **[GangsPlus](#gangsplus)** +- **[GemsEconomy](#gemseconomy)** +- **[GriefDefender](#griefdefender)** +- **[GriefPrevention](#griefprevention)** +- **[Guilds](#guilds)** +- **[GuiRedeemMCMMO](#guiredeemmcmmo)** + +## **H** +- **[Head Database](#head-database)** +- **[Heroes](#heroes)** +- **[HoloBlock](#holoblock)** +- **[HPWizard](#hpwizard)** +- **[Hugs](#hugs)** + +## **I** +- **[interactionvisualizer](#interactionvisualizer)** +- **[Island Border (ASkyblock / BentoBox / uSkyBlock / AcidIsland)](#island-border-askyblock--bentobox--uskyblock--acidisland)** +- **[IslandRate (ASkyBlock Addon)](#islandrate-askyblock-addon)** +- **[IslandRate (AcidIsland Addon)](#islandrate-acidisland-addon)** +- **[IslandWorld](#islandworld)** + +## **J** +- **[Jobs Reborn](#jobs-reborn)** + +## **K** +- **[Karma](#karma)** +- **[KillStats](#killstats)** +- **[KitPvP](#kitpvp)** +- **[Kingdoms+](#kindoms)** +- **[KP-PVP](#kp-pvp)** + +## **L** +- **[LastLoginAPI](#lastloginapi)** +- **[LeaderHeads](#leaderheads)** +- **[LegendQuest](#legendquest)** +- **[LemonMobCoins](#lemonmobcoins)** +- **[LuckPerms](#luckperms)** +- **[LWC](#lwc)** + +## **M** +- **[Marcely's Bedwars](#marcelys-bedwars)** +- **[Marriage](#marriage)** +- **[Marriage (Reloaded)](#marriage-reloaded)** +- **[MarriageMaster](#marriagemaster)** +- **[McInfected](#mcinfected)** +- **[McInfected-Ranks](#mcinfected-ranks)** +- **[McJobs](#mcjobs)** +- **[McMMO](#mcmmo)** +- **[MineChess](#minechess)** +- **[MineCord](#minecord)** +- **[MineCrates](#minecrates)** +- **[MobHunting](#mobhunting)** +- **[Multiverse-Core](#multiverse-core)** +- **[MyCommand](#mycommand)** +- **[MyPet](#mypet)** +- **[MyPrefixSystem](#myprefixsystem)** +- **[MySQL](#mysql)** +- **[MySQLTokens](#mysqltokens)** + +## **N** +- **[Nameless Plugin](#nameless-plugin)** +- **[Nicknamer](#nicknamer)** +- **[NickReloaded](#nickreloaded)** +- **[Nicky](#nicky)** + +## **O** +- **[OnePlayerSleep](#oneplayersleep)** +- **[OnTime](#ontime)** +- **[OreAnnouncer](#oreannouncer)** +- **[Outpost](#outpost)** + +## **P** +- **[Paintball Battle](#paintball-battle)** +- **[Parkour](#parkour)** +- **[Parties](#parties)** +- **[Party and Friends](#party-and-friends)** +- **[PermissionTimer](#permissiontimer)** +- **[PixelVip](#pixelvip)** +- **[Plan](#plan)** +- **[PlayTime](#playtime)** +- **[PlayerPoints](#playerpoints)** +- **[PlotSquared](#plotsquared)** +- **[PointsAPI](#pointsapi)** +- **[PowerRanks](#powerranks)** +- **[PremiumVanish](#premiumvanish)** +- **[PrisonMines](#prisonmines)** +- **[PrisonRanksX](#prisonranksx)** +- **[ProCosmetics](#procosmetics)** +- **[ProfessionalBans](#professionalbans)** +- **[ProQuest](#proquest)** +- **[ProtectionStones](#protectionstones)** +- **[PVPLevels](#pvplevels)** +- **[PVP Stats](#pvp-stats)** +- **[PvPStats Plugin](#pvpstats-plugin)** + +## **Q** +- **[Quests](#quests)** +- **[QuestCreator](#questcreator)** +- **[QuickSell](#quicksell)** + +## **R** +- **[RabbitsVSPenguins](#rabbitsvspenguins)** +- **[RageMode](#ragemode)** +- **[Rankup](#rankup)** +- **[RedProtect](#redprotect)** +- **[ReferralSystem](#referralsystem)** +- **[RestrictedDimensions](#restricteddimensions)** +- **[RogueParkour](#rogueparkour)** +- **[RoyalCommands](#royalcommands)** +- **[RPGInventory](#rpginventory)** + +## **S** +- **[SellAll](#sellall)** +- **[SignLink](#signlink)** +- **[SimpleClans](#simpleclans)** +- **[SimpleCoinsAPI](#simplecoinsapi)** +- **[SimpleKillTracker](#simplekilltracker)** +- **[SimplePrefix](#simpleprefix)** +- **[Simple Suffix](#simple-suffix)** +- **[SkillAPI](#skillapi)** +- **[Skript](#skript)** +- **[Skywars](#skywars)** +- **[Skywars X](#skywars-x)** +- **[SkywarsReloaded](#skywarsreloaded)** +- **[Spark](#spark)** +- **[SQLPerms](#sqlperms)** +- **[SQLTokens](#sqltokens)** +- **[Staff Facilities](#staff-facilities)** +- **[Statz](#statz)** +- **[StrikePractice 2](#strikepractice-2)** +- **[stTitles](#sttitles)** +- **[SubServers](#subservers)** +- **[SuperbVote](#superbvote)** +- **[SuperCredits](#supercredits)** +- **[SuperVanish](#supervanish)** + +## **T** +- **[The Time](#the-time)** +- **[ThemePark](#themepark)** +- **[Thirst](#thirst)** +- **[Timed Rewards](#timed-rewards)** +- **[Time Tokens](#time-tokens)** +- **[TNTRun_Reloaded](#tntrun_reloaded)** +- **[TokenEnchant](#tokenenchant)** +- **[TokenManager](#tokenmanager)** +- **[Tokens](#tokens)** +- **[Towny](#towny)** +- **[TownyChat](#townychat)** +- **[TransmuteIt](#transmuteIt)** +- **[Treasures](#treasures)** +- **[Trey's Double Jump](#treys-double-jump)** +- **[TrickOrTreat](#trickortreat)** + +## **U** +- **[USkyBlock](#uskyblock)** +- **[UltimateChat](#ultimatechat)** +- **[UltimateVotes](#ultimatevotes)** +- **[UnityGen](#unitygen)** + +## **V** +- **[Vault](#vault)** + - [Economy](#economy) + - [Permissions](#permissions) +- **[ViaVersion](#viaversion)** +- **[VoteParty](#voteparty)** +- **[VoteRoulette](#voteroulette)** +- **[VotingPlugin](#votingplugin)** + +## **W** +- **[WickedSkyWars](#wickedskywars)** +- **[WorldBorder](#worldborder)** +- **[WorldGuard](#worldguard)** + +## **X** +- **[XLTournaments](#xltournaments)** + +---- +## PAPI-placeholders +These placeholders are from PlaceholderAPI and don't require any additional plugin to function (unless mentioned). + +- ### **Advancements** +> /papi ecloud download Advancements + +``` +%Advancements_% +%Advancements_player_;% +%Advancements_playerList_% +%Advancements_playerList_,% +%Advancements_playerListFormat_% +``` +---- + +- ### **Animations** +> /papi ecloud download Animations + +```html +%animations_Text% +%animations_Text% +%animations_Text% +``` + +Please note: When using placeholders within the animation text, you must use the bracket variant. +Use `{player_name}` instead of `%player_name%` within the tags. + +Please visit the [dedicated wiki](https://github.com/Niall7459/KiteBoard-Documentation/wiki/Animations-and-Modifiers) for all available tags. + +---- + +- ### **Armor** +> /papi ecloud download Armor + +Gives you info about your armor + +``` +Chose one value that's inside () and replace SLOT with one of the following: helmet, chestplate, leggings, boots. + +%armor_amount_SLOT% +%armor_color_(red/green/blue/hex)_SLOT% +%armor_durability_(left/max)_SLOT% +%armor_has_SLOT% +%armor_material_SLOT% +%armor_maxamount_SLOT% +``` +---- + +- ### **ASCII** +> /papi ecloud download ascii + +Returns the [ASCII Value](http://www.asciitable.com/) based on input + +``` +%ascii_% +``` + +Ex: `%ascii_37%` returns `%` + +---- + +- ### **BungeeCord** +> /papi ecloud download Bungee + +Allows you to show, how many players are online on the entire network, or just on a specific server. + +``` +%bungee_total% +%bungee_% +``` +---- + +- ### **CheckItem** +> /papi ecloud download CheckItem + +Allows you to check the inventory of a player for a certain item. + +``` +- `%checkitem_,,<...>%` - Returns if user has the item +- `%checkitem_amount_,,<...>%` - Returns amount of items the user has +- `%checkitem_remove_,,<...>%` - Removes the items from the players inventory - Can be used with amount, it just has to be after. (Ex. `%checkitem_amount_remove_<...>%`) Please be careful as it does REMOVE ITEMS FOR GOOD +``` + +**Modifiers** +You can combine different modifiers to check for different values. +Available modifiers are: +- `namecontains:` - Checks if the item's display name contains ``* \*\* +- `namestartswith:` - Checks if the item's display name starts with ``* \*\* +- `nameequals:` - Checks if the item's display name equals ``* \*\* +- `mat:` - Checks if the item is `` (For example: `STONE`) +- `amt:` - Checks if the player has `` of items +- `data:` - Checks if the item has data `` (Example: Red wool has `14` as data (`WOOL:14`)). +This is only for 1.12 and older! +- `custommodeldata:` - Checks if the item has CustomModelData `` This is only for 1.14 and newer! +- `lorecontains:` - Checks if the item's lore contains ``* +- `matcontains:` - Checks if the item's material contains ``* +- `enchantments:;` (`=lvl` is optional) (Uses vanilla minecraft enchantment names) +- `enchanted` - Checks if the item is enchanted (with anything) +- `strict` - Requires `mat:` modifier. Strictly checks the name and lore for an item. (If a Stone named `Test` is in your inventory, and you're using `%checkitem_mat:stone,strict%`, it will return false) +- `inhand` - Check if the item is in the player's hand (Also checks off-hand) + +*Case-sensitive + +**Only one can be used + +**Placeholders are supported, but they need to be in brackets! (Ex: `%player_name%` would be `{player_name}`** + +---- + +- ### **CooldownBar** +> /papi ecloud download CooldownBar + +More info about this expansion can be found on the [GitHub-Repository](https://github.com/aBo0oDyy/CooldownBar-Expansion). + +``` +%cooldownbar_{placeholder}% +%cooldownbar_{placeholder}_p:% +%cooldownbar_{placeholder}_i:% +%cooldownbar_{placeholder}_r:% +%cooldownbar_{placeholder}_l:% +%cooldownbar_{placeholder}_c:% +%cooldownbar_{placeholder}_rdy:% +%cooldownbar_{essentials_kit_time_until_available_tools}_p:&a■_i:&e■_r:&7■_l:5_c:100_rdy:&aReadytoclaim!% +%cooldownbar_percentage_{placeholder}% +%cooldownbar_percentage_{placeholder}_c:% +%cooldownbar_percentage_{placeholder}_d:% +%cooldownbar_percentage_{essentials_kit_time_until_available_tools}_c:120_d:0% +``` +---- + +- ### **Formatter** +> /papi ecloud download Formatter + +More info about this expansion can be found on the [GitHub-Repository](https://github.com/Andre601/Formatter-Expansion). + +``` +%formatter_number_format_[_]% +%formatter_number_time_% + +%formatter_text_substring__% +%formatter_text_uppercase_% +%formatter_text_lowercase_% +``` + +Available options: +- `format:()` - The actual format, using Java's DecimalFormat system. +- `locale:()` - The locale to use. Formats can be different depending on the locale. + +---- + +- ### **Javascript** +> /papi ecloud download Javascript + +Gives you a way, to use javascript, to give a different output, depending on conditions. + +``` +%javascript_% +``` +---- + +- ### **ListPlayers** +> /papi ecloud download ListPlayers + +Lists players with a certain permission or in a certain world... 'nuf said. + +``` +%listplayers_with_perm_% +%listplayers_in_world_% +``` +---- + +- ### **LocalTime** +> /papi ecloud download LocalTime + +``` +%localtime_time% +%localtime_time_% +%localtime_timezone_% +%localtime_timezone_,% +``` + +- [Simple Date Format](http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html) +- [TimeZone ID](https://garygregory.wordpress.com/2013/06/18/what-are-the-java-timezone-ids/) + +---- + +- ### **Math** +> /papi ecloud download Math + +Lets you make simple or advanced calculations. +Placeholders are supported (You have to use `{}` instead of `%`). +Supports all calculations you can do with [EvalEx](https://github.com/uklimaschewski/EvalEx) with the exception of `%`. +You have to use `[prc]` for using the `%` symbol. +You can use `[precision:]` in the placeholder, to set, how many digits after the `.` are shown. + +``` +%math_% +``` +---- + +- ### **MVdW Placeholders** +> /papi ecloud download MVdW + +Lets you use placeholders from [MVdWPlaceholderAPI](https://www.spigotmc.org/resources/11182/). +MVdWPlaceholderAPI and one of **[Maxims plugins](https://www.spigotmc.org/resources/2691/)**, that use it, are required! +A list of his placeholders can be found [here](https://www.spigotmc.org/wiki/mvdw-placeholders/) + +``` +%mvdw_% +``` +---- + +- ### **OtherPlayer** +> /papi ecloud download OtherPlayer + +Lets you get placeholders for other players. (Not the one that triggers the action) + +``` +%otherplayer_displayname_% +%otherplayer_gamemode_% +%otherplayer_hasperm__perm_% +%otherplayer_haspotioneffect__effect_% +%otherplayer_health_% +%otherplayer_hunger_% +%otherplayer_iteminhand_% +%otherplayer_ip_% +%otherplayer_level_% +%otherplayer_locx_% +%otherplayer_locy_% +%otherplayer_locz_% +%otherplayer_oxygen_% +%otherplayer_spells_% +%otherplayer_uuid_% +%otherplayer_world_% +``` +---- + +---- +- ### **ParseNear** +> /papi ecloud download ParseNear + +Lets you parse any placeholder for the closest player. Will return blank if no player is found. + +* `%parsenear_%` - Parses placeholder for closest player +* `%parsenear__%` - Parses placeholder for closest player in a radius + +---- + +- ### **ParseOther** +> /papi ecloud download ParseOther + +Lets you parse any placeholder for another player. +You can use placeholders in place of `username`. +Make sure to include the `{}` brackets, as it won't work without them. + +``` +%parseother_{username}_{placeholder_without_percent_signs}% +``` +---- + +- ### **Pinger** +> /papi ecloud download Pinger + +Lets you ping a server through an IP or domain (with port), to check the online-status and to receive some information. +The placeholders have a "warmup" time of around one or two minutes after installing the expansion. + +**Note**: These placeholders have a separate update-delay in the config.yml of PlaceholderAPI + +Replace `testplugins.com:25565` with your own server/IP. +``` +%pinger_gameversion_testplugins.com:25565% +%pinger_version_testplugins.com:25565% +%pinger_online_testplugins.com:25565% +%pinger_isonline_testplugins.com:25565% +%pinger_max_testplugins.com:25565% +%pinger_players_testplugins.com:25565% +%pinger_motd_testplugins.com:25565% +%pinger_pingversion_testplugins.com:25565% +``` +`%pinger_online_testplugins.com:25565%` and `%pinger_isonline_testplugins.com:25565%` do the exact same thing. + +---- + +- ### **Player** +> /papi ecloud download Player + +Gives you various placeholders for the player, that triggers the action. + +``` +%player_allow_flight% +%player_bed_x% +%player_bed_y% +%player_bed_z% +%player_bed_world% +%player_biome% +%player_can_pickup_items% +%player_colored_ping% +%player_compass_world% +%player_compass_x% +%player_compass_y% +%player_compass_z% +%player_custom_name% +%player_direction% +%player_displayname% +%player_exp% +%player_exp_to_level% +%player_first_join_date% +%player_fly_speed% +%player_food_level% +%player_gamemode% +%player_has_empty_slot% +%player_empty_slots% +%player_has_permission_% +%player_health% +%player_health_rounded% +%player_health_scale% +%player_ip% +%player_online% +%player_is_op% +%player_item_in_hand% +%player_item_in_hand_name% +%player_item_in_hand_data% +%player_item_in_hand_level_% +%player_item_in_offhand% +%player_item_in_offhand_name% +%player_item_in_offhand_data% +%player_item_in_offhand_level_% +%player_last_damage% +%player_level% +%player_max_air% +%player_max_health% +%player_max_health_rounded% +%player_max_no_damage_ticks% +%player_minutes_lived% +%player_name% +%player_no_damage_ticks% +%player_ping% +%player_ping_% +%player_remaining_air% +%player_saturation% +%player_seconds_lived% +%player_sleep_ticks% +%player_ticks_lived% +%player_time% +%player_time_offset% +%player_total_exp% +%player_uuid% +%player_walk_speed% +%player_world% +%player_world_time_12% +%player_world_time_24% +%player_x% +%player_y% +%player_z% +``` + +---- + +- ### **PlayerList** +> /papi ecloud download PlayerList + +### List Players + +Returns the player list matching the specified syntax + +`%playerlist_,,,,%` - The `yes/no` is to include/exclude the player. + +**Types:** +* `all` - Matches all players +* `online` - Matches online players +* `offline` - Matches offline players + +**Output Types:** +* `list` - Returns a list of players separated by `, `. You can also change the separator with `list-`.* +* `amount` - Returns amount of players matched +* `` - Returns the player at the specified index + +**SubTypes:** +* `normal` - Matches all players - Requires no `` +* `perm` - Matches all players that match the permission defined by `` - Supports multiple separated by `+` (Ex: `perm1+perm2`) +* `world` - Matches all player in the world defined by `` - Supports multiple separated by `+` (Ex: `world1+world2`) +* `nearby` - Matches all players in a certain radius defined by `` + +**Examples:** +* `%playerlist_all,normal,yes,list%` - `Tanguygab, cj89898, funnycube, clip, Frcsty, GabyTM, ItsMeGlare` +* `%playerlist_online,perm,yes,amount,staff.admin%` - `2` +* `%playerlist_online,world,yes,2,buildingworld+spawnworld%` - `cj89898, funnycube` +* `%playerlist_online,nearby,yes,list,5%` - `Tanguygab, cj89898, clip` +* `%playerlist_online,nearby,no,list,5%` - `Tanguygab, clip` +* `%playerlist_online,nearby,no,list--,20%` - `Tanguygab-clip-Terfs` + +*You can also use `[placeholder]` for papi placeholders in addition to the javascript `{placeholder}`* + +*Note: `Offline` and `All` only support the `Normal` subtype.* +**Since `,` is used to separate the different parts of the placeholder, use `\.` instead if you want to display a `,`.* + +---- + +- ### **Plugin** +> /papi ecloud download Plugin + +Returns information about the specified plugin. + +``` +%plugin_isenabled_% +%plugin_isdisabled_% +%plugin_exists_% +``` +---- + +- ### **Progress** +> /papi ecloud download progress + +More info about this expansion can be found on the [GitHub-Repository](https://github.com/aBo0oDyy/Progress-Expansion). + +``` +%progress_bar_{placeholder}% +%progress_bar_{placeholder}_c:% +%progress_bar_{placeholder}_p:% +%progress_bar_{placeholder}_r:% +%progress_bar_{placeholder}_l:% +%progress_bar_{placeholder}_m:% +%progress_bar_{placeholder}_fullbar:% + +%progress_bar_{placeholder}_c:&a■_p:&e■_r:&7■_l:10_m:100_fullbar:&aCompleted!% +``` +---- + +- ### **RainbowColor** +> /papi ecloud download RainbowColor + +More info about the expansion can be found on the [GitHub-Repository](https://github.com/aBo0oDyy/RainbowColor-Expansion). + +``` +%RainbowColor_% +%RainbowColor_custom_,,_% + +e.g. %RainbowColor_custom_a,f,e,b_This is an example% +``` +---- + +- ### **RandomColor** +> /papi ecloud download RandomColor + +More info about the expansion can be found on the [GitHub-Repository](https://github.com/Andre601/RandomColor). + +``` +%randomcolor_all% +%randomcolor_color% +%randomcolor_format% +%randomcolor_combined% +%randomcolor_selected_% +``` +---- + +- ### **RedisBungee** +> /papi ecloud download RedisBungee + +Same like the BungeeCord-placeholders, but for RedisBungee + +``` +%redisbungee_total% +%redisbungee_% +``` +---- + +- ### **RelCon** +> /papi ecloud download RelCon + +More info about the expansion can be found on the [GitHub-Repository](https://github.com/PlaceholderAPI/RelCon-Expansion). + +``` +%rel_relcon_player___[text2]% +%rel_relcon_player__% +%rel_relcon_viewer___[text2]% +%rel_relcon_viewer__% +``` +---- + +- ### **ScoreboardObjectives** +> /papi ecloud download ScoreboardObjectives + +Get info from a scoreboard objective. + +``` +%objective_score_% +%objective_score__[otherEntry]% +``` +**Note**: `[otherEntry]` can be another player name, Offline Player name, or non-player Entry + +---- + +- ### **Server** +> /papi ecloud download Server + +Lets you get information about the server. + +``` +%server_name% +%server_online% +%server_version% +%server_max_players% +%server_unique_joins% +%server_uptime% +%server_ram_used% +%server_ram_free% +%server_ram_total% +%server_ram_max% +%server_tps% +%server_tps_1% +%server_tps_5% +%server_tps_15% +%server_tps_1_colored% +%server_tps_5_colored% +%server_tps_15_colored% +%server_online_% +%server_has_whitelist% +%server_total_chunks% +%server_total_living_entities% +%server_total_entities% +%server_time_% +%server_countdown__
+You'll have to download v1.7.0 manually:
+Download the jar file from [the eCloud](https://api.extendedclip.com/expansions/statistic/versions/statistic-170/) then place it in your `plugins/PlaceholderAPI/expansions` folder. After that reload PlaceholderAPI `/papi reload`. + +Supports all statistics in [SpigotAPI](https://helpch.at/docs/1.13.1/org/bukkit/Statistic.html). `%statistic_%` + +For specific blocks, items, entities, ... +``` +%statistic_mine_block:% +%statistic_use_item:% +%statistic_break_item:% +%statistic_craft_item:% +%statistic_kill_entity:% +%statistic_entity_killed_by:% +``` + +Other statistics +``` +%statistic_mine_block% +%statistic_use_item% +%statistic_break_item% +%statistic_craft_item% +%statistic_ticks_played% +%statistic_seconds_played% +%statistic_minutes_played% +%statistic_hours_played% +%statistic_days_played% +%statistic_time_played% +%statistic_seconds_played_remaining% +%statistic_minutes_played_remaining% +%statistic_hours_played_remaining% +%statistic_days_played_remaining% +%statistic_animals_bred% +%statistic_armor_cleaned% +%statistic_banner_cleaned% +%statistic_beacon_interacted% +%statistic_boat_one_cm% +%statistic_brewingstand_interaction% +%statistic_cake_slices_eaten% +%statistic_cauldron_filled% +%statistic_cauldron_used% +%statistic_chest_opened% +%statistic_climb_one_cm% +%statistic_crafting_table_interaction% +%statistic_crouch_one_cm% +%statistic_damage_dealt% +%statistic_damage_taken% +%statistic_deaths% +%statistic_dispenser_inspected% +%statistic_dive_one_cm% +%statistic_drop% +%statistic_dropper_inspected% +%statistic_enderchest_opened% +%statistic_fall_one_cm% +%statistic_fish_caught% +%statistic_flower_potted% +%statistic_fly_one_cm% +%statistic_furnace_interaction% +%statistic_hopper_inspected% +%statistic_horse_one_cm% +%statistic_item_enchanted% +%statistic_jump% +%statistic_junk_fished% +%statistic_leave_game% +%statistic_minecart_one_cm% +%statistic_noteblock_played% +%statistic_noteblock_tuned% +%statistic_pig_one_cm% +%statistic_player_kills% +%statistic_record_played% +%statistic_sprint_one_cm% +%statistic_swim_one_cm% +%statistic_talked_to_villager% +%statistic_time_since_death% +%statistic_ticks_since_death% +%statistic_seconds_since_death% +%statistic_minutes_since_death% +%statistic_hours_since_death% +%statistic_days_since_death% +%statistic_traded_with_villager% +%statistic_trapped_chest_triggered% +%statistic_walk_one_cm% +%statistic_sleep_in_bed% +%statistic_sneak_time% +%statistic_aviate_one_cm% +``` +--- + +- ### **[Team](https://www.spigotmc.org/resources/74959/)** +> Download from [here](https://www.spigotmc.org/resources/74959/) + +``` +%team_color% +%team_prefix% +``` +---- + +- ### **World** +> /papi ecloud download world + +For the totalBalance placeholder, you must have a service provider plugin (eg. EssentialsX) +``` +%world_#_biome% +%world_#_nearbyEntities_% +%world__name% +%world__seed% +%world__time% +%world__canPvP% +%world__animalAllowed% +%world__monsterAllowed% +%world__difficulty% +%world__players% +%world__players_% +%world__difficulty% +%world__playerExist% +%world__gamerule_% +%world__recentjoin% +%world__recentquit% +%world__totalBalance% +``` +*** +## Plugin-placeholders +These placeholders require the corresponding plugin to work. +**The developer of the plugin is responsible for the placeholders to work!** + +- ### **[AAC](https://www.spigotmc.org/resources/6442/)** +> NO DOWNLOAD COMMAND + +``` +%aac_ping% +%aac_player% +%aac_tps% +%aac_world% +%aac_vl_% +``` + +Available `` values: +- `criticals` +- `fastbow` +- `fastuse` +- `fightspeed` +- `hitbox` +- `killaura` +- `regen` +- `derp` +- `move` +- `nofall` +- `phase` +- `timer` +- `badpackets` +- `fastbreak` +- `fastplace` +- `interact` + +---- + +- ### **[AbstractMenus](https://www.spigotmc.org/resources/75107/)** +> NO DOWNLOAD COMMAND + +``` +%hanim_::% +%var_:[:]% +%var_:.[:]% +%varp_:[:]% +%vart_:% +%varpt_:% +``` + +All information about these placeholders can be found [here](https://gitlab.com/spigotplugindevs/abstractmenuscommon/-/wikis/Variables#getval). + +---- + +- ### **[AcidIsland](https://www.spigotmc.org/resources/581/)** +> /papi ecloud download AcidIsland + + +``` +%acidisland_level% +%acidisland_island_x% +%acidisland_island_y% +%acidisland_island_z% +%acidisland_island_world% +%acidisland_team_size% +%acidisland_coop_islands% +``` +---- + +- ### **[Advanced Abilities](https://www.spigotmc.org/resources/21983/)** +> NO DOWNLOAD COMMAND + +``` +%advancedabilities__level% +%advancedabilities__bar% +%advancedabilities_player_class% +%advancedabilities_mana% +%advancedabilities_max_mana% +%advancedabilities_max_abilities_limit% +%advancedabilities_selected_abilities% +``` +---- + +- ### **[AdvancedAFK](https://www.spigotmc.org/resources/60761/)** +> NO DOWNLOAD COMMAND + +``` +%aafk_prefix_tablist% +%aafk_prefix_playertag% +``` +---- + +- ### **[AdvancedCustomMenu+](https://www.spigotmc.org/resources/47945/)** +> NO DOWNLOAD COMMAND + +``` +%advancedcustommenu_total% +%advancedcustommenu_name% +%advancedcustommenu_items% +``` +---- + +- ### **[AdvancedLottery](https://www.spigotmc.org/resources/43668/)** +> NO DOWNLOAD COMMAND + +``` +%advancedlottery_time% +%advancedlottery_tickets_bought% +%advancedlottery_money% +``` +---- + +- ### **[AdvancedModReq](https://www.spigotmc.org/resources/40528/)** +> NO DOWNLOAD COMMAND + +``` +%advancedmodreq_flagged% +%advancedmodreq_flagged_closed% +%advancedmodreq_flagged_open% +%advancedmodreq_total% +%advancedmodreq_total_claimed% +%advancedmodreq_total_closed% +%advancedmodreq_total_open% +%advancedmodreq_total_player% +%advancedmodreq_total_player_closed% +%advancedmodreq_total_player_open% +%advancedmodreq_unflagged% +%advancedmodreq_unflagged_closed% +%advancedmodreq_unflagged_open% +``` +---- + +- ### **[ajParkour](https://www.spigotmc.org/resources/60909/)** +> NO DOWNLOAD COMMAND + +``` +%ajpk_current% +%ajpk_stats_top_name_% +%ajpk_stats_top_score_% +%ajpk_stats_highscore% +``` +---- + +- ### **[Animated Menu](https://www.spigotmc.org/resources/4690/)** +> NO DOWNLOAD COMMAND + +**([] = optional)** +``` +%animatedmenu_motd_[_port]% +%animatedmenu_status_[_port]__% +``` + +**Examples:** +``` +%animatedmenu_status_testplugins.com_&aOnline_&cOffline% +%animatedmenu_status_testplugins.com_25565_&aOnline_&cOffline% +``` +---- + +- ### **[AParkour](https://www.spigotmc.org/resources/30923/)** +> /papi ecloud download AParkour + +``` +%aparkour_ct% - Shows current time in seconds +%aparkour_ctf% - Shows current time formatted +%aparkour_lt_% - Shows specified parkour last time +%aparkour_ltf_% - Shows specified last time formatted +%aparkour_bt_% - Shows specified parkour best time +%aparkour_btf_% - Shows specified parkour best time formatted +``` +---- + +- ### **[ASkyBlock](https://www.spigotmc.org/resources/1220/)** +> /papi ecloud download ASkyBlock + +``` +%askyblock_level% +%askyblock_island_y% +%askyblock_island_z% +%askyblock_island_world% +%askyblock_team_size% +%askyblock_coop_islands% +%askyblock_has_island% +%askyblock_owner% +``` +---- + +- ### **[AsyncKeepAlive](https://www.spigotmc.org/resources/64676/)** +> NO DOWNLOAD COMMAND + +``` +%asynckeepalive_ping% +``` +---- + +- ### **[AutoRank](https://www.spigotmc.org/resources/3239/)** +> /papi ecloud download AutoRank + +``` +%autorank_total_time_of_player% +%autorank_total_time_of_player_formatted% +%autorank_daily_time_of_player% +%autorank_daily_time_of_player_formatted% +%autorank_weekly_time_of_player% +%autorank_weekly_time_of_player_formatted% +%autorank_monthly_time_of_player% +%autorank_monthly_time_of_player_formatted% +%autorank_local_time% +%autorank_local_time_formatted% +%autorank_global_time% +%autorank_global_time_formatted% +%autorank_completed_paths% +%autorank_active_paths% +%autorank_eligible_paths% +``` +---- + +- ### **[AutoSell](https://www.spigotmc.org/resources/2157/)** +> /papi ecloud download AutoSell + +``` +%autosell_in_autosell_mode% +%autosell_in_autoblocks_mode% +%autosell_in_automelt_mode% +%autosell_current_shop% +%autosell_total_multiplier% +%autosell_time_multiplier% +%autosell_perm_multiplier% +%autosell_perm_multiplier_name% +%autosell_time_multiplier_minsleft% +%autosell_time_multiplier_timeleft% +``` +---- + +- ### **[BankSystem](https://www.spigotmc.org/resources/61580/)** +> NO DOWNLOAD COMMAND + +``` +%banksystem_name% +%banksystem_balance% +%banksystem_pocket% +%banksystem_total% +%banksystem_currency% +``` +---- + +- ### **[BattleLevels](https://www.spigotmc.org/resources/2218/)** +> NO DOWNLOAD COMMAND + +``` +%battlelevels_level% +%battlelevels_score% +%battlelevels_bar% +%battlelevels_topstreak% +%battlelevels_killstreak% +%battlelevels_kills% +%battlelevels_deaths% +%battlelevels_kdr% +%battlelevels_globalbooster% +%battlelevelseededfornext% +%battlelevels_neededfornextremaining% +``` +---- + +- ### **[BeautyQuests](https://www.spigotmc.org/resources/39255/)** +> NO DOWNLOAD COMMAND + +``` +%beautyquests_player_inprogress_amount% +%beautyquests_player_finished_amount% +%beautyquests_total_amount% +%beautyquests_advancement_ID% +``` +---- + +- ### **[BedWars1058](https://www.spigotmc.org/resources/50942/)** +> NO DOWNLOAD COMMAND + +**Player**: +``` +%bw1058_player_level% +%bw1058_player_progress% +%bw1058_player_rerq_xp% +%bw1058_player_rerq_xp_formatted% +%bw1058_player_team% +%bw1058_player_xp% +%bw1058_player_xp_formatted% +``` + +**Stats**: +``` +%bw1058_stats_bedsdestroyed% +%bw1058_stats_deaths% +%bw1058_stats_finalkills% +%bw1058_stats_finaldeaths% +%bw1058_stats_firstplay% +%bw1058_stats_gamesplayed% +%bw1058_stats_kills% +%bw1058_stats_lastplay% +%bw1058_stats_losses% +%bw1058_stats_wins% +``` + +**Other**: +``` +%bw1058_arena_status_[arena]% +%bw1058_arena_count_[arena]% +%bw1058_current_playing% +%bw1058_current_arenas% +``` +---- + +- ### **[BentoBox](https://github.com/BentoBoxWorld/BentoBox)** +> NO DOWNLOAD COMMAND + +Check out [BentoBox placeholders wiki](https://github.com/BentoBoxWorld/BentoBox/wiki/Placeholders) for more information. + +Available gamemodes: +`acidisland`, `bskyblock`, `caveblock` and `skygrid`. + +``` +%bentobox_[gamemode]-world-friendlyname% +%bentobox_[gamemode]-island-distance% +%bentobox_[gamemode]-island-protection-range% +%bentobox_[gamemode]-island-owner% +%bentobox_[gamemode]-island-creation-date% +%bentobox_[gamemode]-island-spawnpoint% +%bentobox_[gamemode]-island-name% +``` + +**Level add-on** + +Available gamemodes: +`acidisland`, `bskyblock`, and `caveblock`. + +``` +%level_[gamemode]-island-level% +%level_[gamemode]-island-level-top-value-#% +%level_[gamemode]-island-level-top-name-#% +``` +---- + +- ### **[BlockParty](https://www.spigotmc.org/resources/7264/)** +> /papi ecloud download BlockParty + +``` +%blockparty_wins% +%blockparty_points% +%blockparty_gamesplayed% +``` +---- + +- ### **[BlockQuest](https://www.spigotmc.org/resources/32729/)** +> NO DOWNLOAD COMMAND + +``` +%blockquest_blocksfound% +%blockquest_blocksleft% +%blockquest_allblocks% +``` +---- + +- ### **[BuildBattlePro](https://www.spigotmc.org/resources/49587/)** +> /papi ecloud download BuildBattlePro + +``` +%buildbattlepro_wins% +%buildbattlepro_played% +%buildbattlepro_most_points% +%buildbattlepro_particles_placed% +%buildbattlepro_blocks_placed% +%buildbattlepro_super_votes% +%buildbattlepro_status_% +``` +---- + +- ### **[BungeePerms](https://www.spigotmc.org/resources/25/)** +> NO DOWNLOAD COMMAND + +``` +%bungeeperms_groups% +%bungeeperms_primary_group_name% +%bungeeperms_prefix% +%bungeeperms_prefix_primary_group% +%bungeeperms_suffix% +%bungeeperms_suffix_primary_group% +%bungeeperms_in_group_% +%bungeeperms_has_permission_% +``` +---- + +- ### **[CarlTheCreeper](https://www.spigotmc.org/resources/18008/)** +> NO DOWNLOAD COMMAND + +``` +%carlthecreeper_cooldown_% +%carlthecreeper_statistic_rewards_claimed% +``` +---- + +- ### **[ChatColor+](https://www.spigotmc.org/resources/1546/)** +> NO DOWNLOAD COMMAND + +``` +%chatcolorplus_chatcolor% +%chatcolorplus_namecolor% +``` +---- + +- ### **[ChatColor+ Premium](https://www.spigotmc.org/resources/54093/)** +> NO DOWNLOAD COMMAND + +``` +%chatcolorpluspremium_chat_color% +%chatcolorpluspremium_tab_color% +%chatcolorpluspremium_sign_color% +%chatcolorpluspremium_font% + +%chatcolorpluspremium_chat_color_name% +%chatcolorpluspremium_sign_color_name% +%chatcolorpluspremium_name_color_name% +%chatcolorpluspremium_tab_color_name% +%chatcolorpluspremium_name_color% +``` +---- + +- ### **[ChatReaction](https://www.spigotmc.org/resources/3748/)** +> /papi ecloud download ChatReaction + +``` +%chatreaction_wins% - Chat reaction wins (Requires MySQL) +%chatreaction_type% - Type of reaction (Reaction or Scramble) +%chatreaction_active_round% - Is a round currently active +%chatreaction_display_word% - The scrambled word +%chatreaction_reaction_word% - The actual solution word +%chatreaction_start_time% - Time when the round started +%chatreaction_latest_winner% - Last recorded winner +``` +---- + +- ### **[CheckNameHistory](https://www.spigotmc.org/resources/3768/)** +> /papi ecloud download CheckNameHistory + +``` +%checknamehistory_previous_name_<#>% +%checknamehistory_previous_name_date_<#>% +``` +---- + +- ### **[Clans](https://www.spigotmc.org/resources/22304/)** +> NO DOWNLOAD COMMAND + +``` +%clans_clan_tag% +%clans_colored_clan_tag% +``` +---- + +- ### **[Clans](https://www.spigotmc.org/resources/78415/)** +> NO DOWNLOAD COMMAND + +``` +%clans_name% +%clans_raidshield% +%clans_rank% +``` +---- + +- ### **[Clans-API for Spigot/Clan tag in chat](https://www.spigotmc.org/resources/31547/)** +> NO DOWNLOAD COMMAND + +``` +%clantagprovider_clantag_custom_design% +%clantagprovider_clantag% +``` +---- + +- ### **[ClanSystem](https://www.spigotmc.org/resources/34696/)** +> NO DOWNLOAD COMMAND + +``` +%clansystem_clan% +%clansystem_clan_level% +%clansystem_clan_leader% +%clansystem_clan_balance% +%clansystem_clan_rank% +%clansystem_clan_deaths% +%clansystem_clan_kills% +%clansystem_clan_size% +``` +---- + +- ### **[CombatLogX](https://www.spigotmc.org/resources/31689/)** +> NO DOWNLOAD COMMAND + +``` +%combatlogx_time_left% +%combatlogx_enemy_name% +%combatlogx_enemy_health% +%combatlogx_enemy_health_rounded% +%combatlogx_enemy_hearts% +%combatlogx_status% +%combatlogx_in_combat% +``` +---- + +- ### **[Compassance](https://www.spigotmc.org/resources/18327/)** +> NO DOWNLOAD COMMAND + +``` +%compassance_p_string% +%compassance_p_selectedtheme% +%compassance_p_target% +%compassance_p_target_location% +%compassance_p_target_distance% +%compassance_p_string_theme_% +``` +---- + +- ### **[Country on Join](https://www.spigotmc.org/resources/34275/)** +> NO DOWNLOAD COMMAND + +``` +%countryonjoin_player_country_code% +%countryonjoin_player_country_name% +``` +---- + +- ### **[CraftConomy](https://www.spigotmc.org/resources/2395/)** +> /papi ecloud download CraftConomy + +**([] = Optional)** + +``` +%craftconomy_[option]% +``` +**About the options**: +CraftConomy's placeholders allow the addition of extra "arguments", to return a certain value. +- `@[number]` Returns [number] times of the players balance in the specified currency. +Example: `%craftconomy_YourCurrency_@10%` returns 100 YourCurrency, if the player has 10 YourCurrency. +- `@int` CraftConomy normally returns the value as a double. This option returns it as an integer. +This can be used in plugins, that require an integer. (e.g. DeluxeMenus) +---- + +- ### **[CraftingStore.net](https://www.spigotmc.org/resources/31331/)** +> NO DOWNLOAD COMMAND + +``` +%craftingstore_donator% +%craftingstore_donator_1% +%craftingstore_donator_2% +%craftingstore_donator_3% +%craftingstore_donator_4% +%craftingstore_donator_5% + +%craftingstore_payment% +%craftingstore_payment_1% +%craftingstore_payment_2% +%craftingstore_payment_3% +%craftingstore_payment_4% +%craftingstore_payment_5% +``` +---- +- ### **[CursedVIP](https://www.spigotmc.org/resources/67068/)** +> NO DOWNLOAD COMMAND + +``` +%cursedvip_is_vip% +%cursedvip_active_vip% +%cursedvip_days_left% +%cursedvip_initial_date% +``` +---- + +- ### **[Daily Rewards](https://www.spigotmc.org/resources/16708)** +> NO DOWNLOAD COMMAND + +``` +%dailyrewards_remaining_time% +%dailyrewards_remaining_hours% +%dailyrewards_remaining_minutes% +%dailyrewards_remaining_seconds% +%dailyrewards_player_reward_available% +%dailyrewards_player_no_rewards% +%dailyrewards_player_test_qualification% +``` +---- + +- ### **[DeliveryMan](https://www.spigotmc.org/resources/14131/)** +> NO DOWNLOAD COMMAND + +``` +%deliveryman_prizes_all% +%deliveryman_prizes_from:[menu id]% +%deliveryman_has_prize:[menu id]:[prize id]% +``` +---- + +- ### **[DeluxeChat](https://www.spigotmc.org/resources/1277/)** +> /papi ecloud download DeluxeChat + +``` +%deluxechat_is_pm_toggled% +%deluxechat_pm_recipient% +%deluxechat_social_spy_enabled% +``` +---- + +- ### **[DeluxeCombat](https://www.spigotmc.org/resources/63970/)** +> NO DOWNLOAD COMMAND + +``` +%deluxecombat_ranking_points% +%deluxecombat_ranking_kills% +%deluxecombat_ranking_deaths% +%deluxecombat_ranking_combatlogs% +%deluxecombat_ranking_kd% +%deluxecombat_ranking_rank% +%deluxecombat_ranking_streak% +%deluxecombat_ranking_maxstreak% +%deluxecombat_in_combat% +%deluxecombat_combat_time% +%deluxecombat_combat_opponent% +%deluxecombat_ranking__% +%deluxecombat_ranking___% +``` + +- StatsType: `kills`, `deaths`, `combatlogs`, `points`. +- Rank: A number between 1 to the pull limit. +- Group: The _servergroup_. + +---- + +- ### **[DeluxePM](https://www.spigotmc.org/resources/52599/)** +> /papi ecloud download DeluxePM + +``` +%deluxepm_status% +``` +---- + +- ### **[DeluxeTags](https://www.spigotmc.org/resources/4390/)** +/papi ecloud download DeluxeTags + +``` +%deluxetags_tag% +%deluxetags_identifier% +%deluxetags_description% +%deluxetags_amount% +%deluxetags_tag_% +%deluxetags_description_% +%deluxetags_has_tag_% +``` +---- + +- ### **[Denizen](https://www.spigotmc.org/resources/21039/)** +> NO DOWNLOAD COMMAND + +``` +%denizen_% (EX: %denizen_% ) +``` +---- + +- ### **[DiscordSRV](https://www.spigotmc.org/resources/18494/)** +> /papi ecloud download DiscordSRV + +You can find an up-to-date list of the placeholders in [their wiki](https://github.com/DiscordSRV/DiscordSRV-PlaceholderAPI-Expansion#placeholders). + +---- + +- ### **[Disease](https://www.spigotmc.org/resources/3911/)** +> /papi ecloud download Disease + +``` +%disease_disease% +%disease_sickness% +%disease_temperature% +``` +---- + +- ### **DonateParty** +> NO DOWNLOAD COMMAND + +``` +%donateparty_goal% +%donateparty_goal_needed% +``` +---- + +- ### **[Donations Holograms](https://www.spigotmc.org/resources/1956/)** +> NO DOWNLOAD COMMAND + +``` +%donationsHolograms_percentage% +%donationsHolograms_progressBar% +%donationsHolograms_received% +%donationsHolograms_goal% +``` +---- + +- ### **[DragonSlayer](https://www.spigotmc.org/resources/36250/)** +> NO DOWNLOAD COMMAND + +``` +%dragonslayer_prefix% +%dragonslayer_timer% +%dragonslayer_nexttime% +%dragonslayer_nexttimehms% +%dragonslayer_nextmap% +%dragonslayer_mykills% +%dragonslayer_place_n% (n=1,2,3...) +%dragonslayer_place_n_name% (n=1,2,3...) +%dragonslayer_place_n_score% (n=1,2,3...) +%dragonslayer_slayer% +``` +---- + +- ### **[DungeonsXL](https://www.spigotmc.org/resources/9488/)** +> NO DOWNLOAD COMMAND + +``` +%dxl_floor_player_count% +%dxl_dungeon_name% +%dxl_game_player_count% +%dxl_global_dungeon_count% +%dxl_global_floor_count% +%dxl_global_instance_count% +%dxl_group_members% +%dxl_group_name% +%dxl_group_name_raw% +%dxl_group_player_count% +``` +---- + +- ### **[Economy Bank](https://www.spigotmc.org/resources/7674/)** +> NO DOWNLOAD COMMAND + +``` +%economybank_balance% +``` +---- + +- ### **[Enjin & DonationCraft 2.x](https://dev.bukkit.org/projects/emp)** +> /papi ecloud download Enjin + +``` +%enjin_points% +``` +---- + +- ### **[Envoys](https://www.spigotmc.org/resources/20357/)** +> /papi ecloud download Envoys + +``` +%envoys_time_until_refill% +``` +---- + +- ### **[EpicFriends](https://www.spigotmc.org/resources/11294/)** +> NO DOWNLOAD COMMAND + +``` +%epicfriends_friendcount% +%epicfriends_friendcount_online% +``` +---- + +- ### **[EpicLevels](https://songoda.com/marketplace/product/44)** +> NO DOWNLOAD COMMAND + +``` +%epiclevels_level% +%epiclevels_experience% +%epiclevels_kills% +%epiclevels_deaths% +%epiclevels_killstreak% +%epiclevels_bestkillstreak% +%epiclevels_kdr% +%epiclevels_nextlevel% +%epiclevels_neededfornextlevel% +%epiclevels_boosterenabled% +%epiclevels_booster% +%epiclevels_globalboosterenabled% +%epiclevels_globalbooster% +%epiclevels_progressbar% +%epiclevels_playerkills% +%epiclevels_mobkills% +``` +---- + +- ### **[essCore](https://www.spigotmc.org/resources/37766/)** +> NO DOWNLOAD COMMAND + +``` +%esscore_flight% +%esscore_is_nicked% +%esscore_nickname% +%esscore_is_vanished% +%esscore_is_muted% +%esscore_is_frozen% +``` +---- + +- ### **[Essentials](https://ci.ender.zone/job/EssentialsX/)** +> /papi ecloud download Essentials + +This expansion works with both Essentials and EssentialsX (Second one is recommended). + +``` +%essentials_is_teleport_enabled% +%essentials_is_pay_enabled% +%essentials_is_pay_confirm% +%essentials_nickname% +%essentials_godmode% +%essentials_jailed% +%essentials_kit_last_use_% +%essentials_has_kit_% +%essentials_kit_is_available_% +%essentials_kit_time_until_available_% +%essentials_pm_recipient% +%essentials_afk% +%essentials_afk_reason% +%essentials_vanished% +%essentials_fly% +%essentials_is_muted% +%essentials_unique% +%essentials_msg_ignore% +%essentials_homes_set% +%essentials_homes_max% +%essentials_safe_online% +%essentials_worth% +``` +---- + +- ### **[EZBlocks](https://www.spigotmc.org/resources/1499/)** +> /papi ecloud download EZBlocks + +``` +%ezblocks_broken% +``` +---- + +- ### **[EZPrestige](https://www.spigotmc.org/resources/1794/)** +> /papi ecloud download EZPrestige + +``` +%ezprestige_prestige% +%ezprestige_prestigetag% +%ezprestige_nextprestige% +%ezprestige_nextprestigetag% +``` +---- + +- ### **[EZRanksPro](https://www.spigotmc.org/resources/10731/)** +> /papi ecloud download EZRanksPro + +``` +%ezrankspro_player% +%ezrankspro_displayname% +%ezrankspro_world% +%ezrankspro_rank% +%ezrankspro_rankup% +%ezrankspro_cost% +%ezrankspro_cost_formatted% +%ezrankspro_balance% +%ezrankspro_balance_formatted% +%ezrankspro_difference% +%ezrankspro_difference_formatted% +%ezrankspro_progress% +%ezrankspro_progressexact% +%ezrankspro_progressbar% +%ezrankspro_rankprefix% +%ezrankspro_rankupprefix% +%ezrankspro_lastrank% +%ezrankspro_lastrankprefix% +%ezrankspro_rank_cost_% +%ezrankspro_rank_cost_formatted_% +%ezrankspro_rank_prefix_% +%ezrankspro_rankup_rank_prefix_% +%ezrankspro_rankup_rank_% +``` +---- + +- ### **[Factions MCore](https://www.spigotmc.org/resources/1900/)** +> /papi ecloud download Factions + +``` +%factions_faction% +%factions_power% +%factions_powermax% +%factions_factionpower% +%factions_factionpowermax% +%factions_title% +%factions_role% +%factions_claims% +%factions_onlinemembers% +%factions_allmembers% +``` +---- + +- ### **[FactionsUUID](https://www.spigotmc.org/resources/1035/)** +> NO DOWNLOAD COMMAND + +You can find an up-to-date list of the placeholders in [their wiki](https://factions.support/placeholderapi/). + +---- + +- ### **Factions relation placeholders** +> NO DOWNLOAD COMMAND + +``` +%rel_[factions/factionsuuid]_relation% +%rel_[factions/factionsuuid]_relation_color% +``` +> **NOTE:** These placeholders work with FactionsUUID and MCore all you need is downloading the expansion of the plugin you're using. if you're using these placeholders in DeluxeChat you need to enable this option "relation_placeholders_enabled: true" you can find that in the config. +---- + +- ### **[FunnyGuilds](https://github.com/FunnyGuilds/FunnyGuilds)** +> NO DOWNLOAD COMMAND + +``` +%funnyguilds_guilds% +%funnyguilds_users% +%funnyguilds_deaths% +%funnyguilds_kdr% +%funnyguilds_kills% +%funnyguilds_points-format% +%funnyguilds_points% +%funnyguilds_position% +%funnyguilds_g-allies% +%funnyguilds_g-deaths% +%funnyguilds_g-deputies% +%funnyguilds_g-deputy% +%funnyguilds_g-kdr% +%funnyguilds_g-kills% +%funnyguilds_g-lives% +%funnyguilds_g-members-all% +%funnyguilds_g-members-online% +%funnyguilds_g-name% +%funnyguilds_g-owner% +%funnyguilds_g-points-format% +%funnyguilds_g-points% +%funnyguilds_g-position% +%funnyguilds_g-region-size% +%funnyguilds_g-tag% +%funnyguilds_g-validity% +%funnyguilds_gtop-x% +%funnyguilds_ptop-x% +``` +---- + +- ### **GAListener** +> NO DOWNLOAD COMMAND + +``` +%galistener_votes% +``` +---- + +- ### **[GangsPlus](https://www.spigotmc.org/resources/2604/)** +> NO DOWNLOAD COMMAND + +``` +%gangsplus_in_gang% +%gangsplus_gang_name% +%gangsplus_gang_name_formatted% +%gangsplus_gang_rank% +%gangsplus_gang_rank_number% +%gangsplus_gang_friendly_fire% +%gangsplus_gang_online_members_list% +%gangsplus_gang_online_members_count% +%gangsplus_gang_members_list% +%gangsplus_gang_members_count% +%gangsplus_gang_leader% +%gangsplus_gang_level% +%gangsplus_gang_wins% +%gangsplus_gang_losses% +%gangsplus_gang_wlr% +%gangsplus_gang_kills% +%gangsplus_gang_deaths% +%gangsplus_gang_kdr% +``` +---- + +- ### **[GemsEconomy](https://www.spigotmc.org/resources/19655/)** +> /papi ecloud download GemsEconomy + +``` +%gemseconomy_balance_default% +%gemseconomy_balance_default_formatted% +%gemseconomy_balance_% +%gemseconomy_balance__formatted% +``` +---- + +- ### **[GriefDefender](https://www.spigotmc.org/resources/68900/)** +> NO DOWNLOAD COMMAND + +``` +%griefdefender_blocks_left% +%griefdefender_blocks_total% +%griefdefender_claim_admin% +%griefdefender_claim_basic% +%griefdefender_claim_subdivision% +%griefdefender_claim_town% +%griefdefender_claims_admin% +%griefdefender_claims_basic% +%griefdefender_claims_subdivision% +%griefdefender_claims_town% +%griefdefender_claim_name% +%griefdefender_claim_owner% +%griefdefender_claim_trust% +%griefdefender_claim_type% +%griefdefender_claim_for_sale% +%griefdefender_pvp% +``` +---- + +- ### **[GriefPrevention](https://www.spigotmc.org/resources/1884/)** +> /papi ecloud download GriefPrevention + +``` +%griefprevention_claims% +%griefprevention_claims_formatted% +%griefprevention_bonusclaims% +%griefprevention_accruedclaims% +%griefprevention_accruedclaims_formatted% +%griefprevention_remainingclaims% +%griefprevention_remainingclaims_formatted% +%griefprevention_currentclaim_ownername% +``` +---- + +- ### **[Guilds](https://www.spigotmc.org/resources/48920/)** +> NO DOWNLOAD COMMAND + +``` +%guilds_name% +%guilds_master% +%guilds_member_count% +%guilds_prefix% +%guilds_members_online% +%guilds_status% +%guilds_role% +%guilds_tier% +%guilds_balance% +%guilds_tier_name% +%guilds_role_node% +%guilds_id% +%guilds_code_amount% +%guilds_max_members% +%guilds_max_balance% +%guilds_formatted% +%guilds_challenge_wins% +%guilds_challenge_loses% +%guilds_motd% +``` +---- + +- ### **[GuiRedeemMCMMO](https://www.spigotmc.org/resources/6784/)** +> NO DOWNLOAD COMMAND + +``` +%guiredeemmcmmo_credits% +``` +---- + +- ### **[Head Database](https://www.spigotmc.org/resources/14280/)** +> NO DOWNLOAD COMMAND + +``` +%hdb_amount% +%hdb_amount_formatted% +%hdb_amount_% +%hdb_tags% +``` +---- + +- ### **[Heroes](https://www.spigotmc.org/resources/305/)** +> /papi ecloud download Heroes + +``` +%heroes_skill_level_% +%heroes_main_class_name% +%heroes_main_class_description% +%heroes_main_class_tier% +%heroes_second_class_name% +%heroes_second_class_description% +%heroes_second_class_tier% +%heroes_level% +%heroes_mana% +%heroes_mana_regen% +%heroes_max_mana% +%heroes_mastered_classes% +%heroes_mastered_classes_amount% +%heroes_party_is_no_pvp% +%heroes_party_size% +%heroes_party_leader% +``` +---- + +- ### **[HoloBlock](https://www.spigotmc.org/resources/43192/)** +> NO DOWNLOAD COMMAND + +``` +%holoblock_maxowned% +%holoblock_maxline% +%holoblock_owned:% +%holoblock_maxowned:% +%holoblock_maxline:% +%holoblock_isPlaceholder:% +%holoblock_isColor:% +%holoblock_isCustomSkin:% +%holoblock_isItemLine:% +``` +---- + +- ### **[HPWizard](https://www.spigotmc.org/resources/26821/)** +> NO DOWNLOAD COMMAND + +``` +%hpw_house% +%hpw_house_coloured% +%hpw_amount_of_spells% +%hpw_housepoints% +%hpw_{house}_housepoints% +%hpw_hogwarts_last_winner% +%hpw_hogwarts_last_winner_coloured% +%hpw_ministry_last_winner% +%hpw_ministry_last_winner_coloured% +``` +---- + +- ### **[Hugs](https://www.spigotmc.org/resources/39722/)** +> NO DOWNLOAD COMMAND + +``` +%hugs_total% +%hugs_player_total_given% +%hugs_player_total_received% +``` +---- + +- ### **[InteractionVisualizer](https://www.spigotmc.org/resources/77050/)** +> NO DOWNLOAD COMMAND + +``` +%interactionvisualizer_itemstand% +%interactionvisualizer_itemdrop% +%interactionvisualizer_hologram% +``` +---- + +- ### **[Island Border (ASkyblock / BentoBox / uSkyBlock / AcidIsland)](https://www.spigotmc.org/resources/56320/)** +> NO DOWNLOAD COMMAND + +``` +%isborder_status% +%isborder_size% +%isborder_color% +``` +---- + +- ### **[IslandRate (ASkyBlock Addon)](https://www.spigotmc.org/resources/53519/)** +> NO DOWNLOAD COMMAND + +``` +%islandrate_top_rated_player% +%islandrate_top_rated_amount% +%islandrate_total_ratings_server% +%islandrate_total_ratings_player% +``` +---- + +- ### **[IslandRate (AcidIsland Addon)](https://www.spigotmc.org/resources/54913/)** +> NO DOWNLOAD COMMAND + +``` +%acidislandrate_top_rated_player% +%acidislandrate_top_rated_amount% +%acidislandrate_total_ratings_server% +%acidislandrate_total_ratings_player% +``` +---- + +- ### **IslandWorld** +> NO DOWNLOAD COMMAND + +``` +%islandworld_points_with_party% +%islandworld_points_without_party% +%islandworld_island_members% +%islandworld_all_members% +%islandworld_can_build% +%islandworld_in_party% +``` +---- + +- ### **[Jobs Reborn](https://www.spigotmc.org/resources/4216/)** +> NO DOWNLOAD COMMAND + +``` +%jobsr_user_id% +%jobsr_user_bstandcount% +%jobsr_user_maxbstandcount% +%jobsr_user_furncount% +%jobsr_user_maxfurncount% +%jobsr_user_doneq% +%jobsr_user_seen% +%jobsr_user_totallevels% +%jobsr_user_issaved% +%jobsr_user_displayhonorific% +%jobsr_user_joinedjobcount% +%jobsr_user_boost_(jname/number)_(money/exp/points)% +%jobsr_user_isin_(jname/number)% +%jobsr_user_canjoin_(jname/number)% +%jobsr_user_jlevel_(jname/number)% +%jobsr_user_jexp_(jname/number)% +%jobsr_user_jmaxexp_(jname/number)% +%jobsr_user_jmaxlvl_(jname/number)% +%jobsr_user_points% +%jobsr_user_total_points% +%jobsr_user_archived_jobs% +%jobsr_maxjobs% +%jobsr_limit_(money/exp/points)% +%jobsr_plimit_(money/exp/points)% +%jobsr_plimit_tleft_(money/exp/points)% +%jobsr_total_workers% +%jobsr_totalplayers_(jname/number)% +%jobsr_name_(jname/number)% +%jobsr_shortname_(jname/number)% +%jobsr_chatcolor_(jname/number)% +%jobsr_description_(jname/number)% +%jobsr_maxdailyq_(jname/number)% +%jobsr_maxlvl_(jname/number)% +%jobsr_maxviplvl_(jname/number)% +%jobsr_maxslots_(jname/number)% +%jobsr_bonus_(jname/number)% +``` +---- + +- ### **[Karma](https://www.spigotmc.org/resources/71156/)** +> /papi ecloud download Karma + +``` +%karma_alignment% +%karma_aligned_name% +%karma_score% +%karma_recent_points_gained% +%karma_last_source% +``` +---- + +- ### **[KillStats](http://dev.bukkit.org/bukkit-plugins/killstats-v1-0/)** +> /papi ecloud download KillStats + +``` +%killstats_kills% +%killstats_killrank% +%killstats_deaths% +%killstats_deathrank% +%killstats_streak% +%killstats_streakrank% +%killstats_kdr% +%killstats_kdrrank% +``` +---- + +- ### **[KitPvP](https://www.spigotmc.org/resources/27107/)** +> NO DOWNLOAD COMMAND + +``` +%kitpvp_stats_kills% +%kitpvp_stats_deaths% +%kitpvp_stats_kdr% +%kitpvp_stats_level% +%kitpvp_stats_experience% +%kitpvp_player_killstreak% +%kitpvp_player_kit% +``` +---- + +- ### **[Kingdoms+](https://www.spigotmc.org/resources/11833/)** +> NO DOWNLOAD COMMAND + +``` +%kingdoms_kingdom% +%kingdoms_haskingdom% +%kingdoms_rp% +%kingdoms_land% +%kingdoms_onlinemembers% +%kingdoms_members% +%kingdoms_king% +%kingdoms_rank% +``` +---- + +- ### **[KP-PVP](https://www.spigotmc.org/resources/50969/)** +> NO DOWNLOAD COMMAND + +``` +%kp-pvp_player_kills% +%kp-pvp_player_deaths% +%kp-pvp_player_coins% +%kp-pvp_player_streak% +%kp-pvp_player_is_on_kitpvp% +%kp-pvp_players_count_total% +%kp-pvp_player_kit% +%kp-pvp_player_level% +%kp-pvp_player_xp% +``` +---- + +- ### **[LastLoginAPI](https://www.spigotmc.org/resources/66348/)** +> NO DOWNLOAD COMMAND + +``` +%lastloginapi_name% +%lastloginapi_last_login_date% +%lastloginapi_last_login_elapsed% +%lastloginapi_last_logout_date% +%lastloginapi_last_logout_elapsed% +``` +---- + +- ### **[LeaderHeads](https://www.spigotmc.org/resources/2079/)** +> NO DOWNLOAD COMMAND + +More info about these placeholders can be found [here](https://panoply.tech/leaderheads#placeholderapi-and-mvdwplaceholderapi-placeholders). + +``` +%leaderheads_name__