org.bukkit.plugin
Class PluginDescriptionFile

java.lang.Object
  extended by org.bukkit.plugin.PluginDescriptionFile

public final class PluginDescriptionFile
extends Object

This type is the runtime-container for the information in the plugin.yml. All plugins must have a respective plugin.yml. For plugins written in java using the standard plugin loader, this file must be in the root of the jar file.

When Bukkit loads a plugin, it needs to know some basic information about it. It reads this information from a YAML file, 'plugin.yml'. This file consists of a set of attributes, each defined on a new line and with no indentation.

Every (almost* every) method corresponds with a specific entry in the plugin.yml. These are the required entries for every plugin.yml:

Failing to include any of these items will throw an exception and cause the server to ignore your plugin.

This is a list of the possible yaml keys, with specific details included in the respective method documentations:

Node Method Summary
name getName() The unique name of plugin
version getVersion() A plugin revision identifier
main getMain() The plugin's initial class file
author
authors
getAuthors() The plugin contributors
description getDescription() Human readable plugin summary
website getWebsite() The URL to the plugin's site
prefix getPrefix() The token to prefix plugin log entries
database isDatabaseEnabled() Indicator to enable database support
load getLoad() The phase of server-startup this plugin will load during
depend getDepend() Other required plugins
softdepend getSoftDepend() Other plugins that add functionality
loadbefore getLoadBefore() The inverse softdepend
commands getCommands() The commands the plugin will register
permissions getPermissions() The permissions the plugin will register
default-permission getPermissionDefault() The default default permission state for defined permissions the plugin will register

A plugin.yml example:

name: Inferno
version: 1.4.1
description: This plugin is so 31337. You can set yourself on fire.
# We could place every author in the authors list, but chose not to for illustrative purposes
# Also, having an author distinguishes that person as the project lead, and ensures their
# name is displayed first
author: CaptainInflamo
authors: [Cogito, verrier, EvilSeph]
website: http://www.curse.com/server-mods/minecraft/myplugin

main: com.captaininflamo.bukkit.inferno.Inferno
database: false
depend: [NewFire, FlameWire]

commands:
  flagrate:
    description: Set yourself on fire.
    aliases: [combust_me, combustMe]
    permission: inferno.flagrate
    usage: Syntax error! Simply type /<command> to ignite yourself.
  burningdeaths:
    description: List how many times you have died by fire.
    aliases: [burning_deaths, burningDeaths]
    permission: inferno.burningdeaths
    usage: |
      /<command> [player]
      Example: /<command> - see how many times you have burned to death
      Example: /<command> CaptainIce - see how many times CaptainIce has burned to death

permissions:
  inferno.*:
    description: Gives access to all Inferno commands
    children:
      inferno.flagrate: true
      inferno.burningdeaths: true
      inferno.burningdeaths.others: true
  inferno.flagrate:
    description: Allows you to ignite yourself
    default: true
  inferno.burningdeaths:
    description: Allows you to see how many times you have burned to death
    default: true
  inferno.burningdeaths.others:
    description: Allows you to see how many times others have burned to death
    default: op
    children:
      inferno.burningdeaths: true


Constructor Summary
PluginDescriptionFile(InputStream stream)
           
PluginDescriptionFile(Reader reader)
          Loads a PluginDescriptionFile from the specified reader
PluginDescriptionFile(String pluginName, String pluginVersion, String mainClass)
          Creates a new PluginDescriptionFile with the given detailed
 
Method Summary
 List<String> getAuthors()
          Gives the list of authors for the plugin.
 String getClassLoaderOf()
           
 Map<String,Map<String,Object>> getCommands()
          Gives the map of command-name to command-properties.
 List<String> getDepend()
          Gives a list of other plugins that the plugin requires.
 String getDescription()
          Gives a human-friendly description of the functionality the plugin provides.
 String getFullName()
          Returns the name of a plugin, including the version.
 PluginLoadOrder getLoad()
          Gives the phase of server startup that the plugin should be loaded.
 List<String> getLoadBefore()
          Gets the list of plugins that should consider this plugin a soft-dependency.
 String getMain()
          Gives the fully qualified name of the main class for a plugin.
 String getName()
          Gives the name of the plugin.
 PermissionDefault getPermissionDefault()
          Gives the default default state of permissions registered for the plugin.
 List<Permission> getPermissions()
          Gives the list of permissions the plugin will register at runtime, immediately proceding enabling.
 String getPrefix()
          Gives the token to prefix plugin-specific logging messages with.
 List<String> getSoftDepend()
          Gives a list of other plugins that the plugin requires for full functionality.
 String getVersion()
          Gives the version of the plugin.
 String getWebsite()
          Gives the plugin's or plugin's author's website.
 boolean isDatabaseEnabled()
          Gives if the plugin uses a database.
 void save(Writer writer)
          Saves this PluginDescriptionFile to the given writer
 void setDatabaseEnabled(boolean database)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

PluginDescriptionFile

public PluginDescriptionFile(InputStream stream)
                      throws InvalidDescriptionException
Throws:
InvalidDescriptionException

PluginDescriptionFile

public PluginDescriptionFile(Reader reader)
                      throws InvalidDescriptionException
Loads a PluginDescriptionFile from the specified reader

Parameters:
reader - The reader
Throws:
InvalidDescriptionException - If the PluginDescriptionFile is invalid

PluginDescriptionFile

public PluginDescriptionFile(String pluginName,
                             String pluginVersion,
                             String mainClass)
Creates a new PluginDescriptionFile with the given detailed

Parameters:
pluginName - Name of this plugin
pluginVersion - Version of this plugin
mainClass - Full location of the main class of this plugin
Method Detail

getName

public String getName()
Gives the name of the plugin. This name is a unique identifier for plugins.

In the plugin.yml, this entry is named name.

Example:

name: MyPlugin

Returns:
the name of the plugin

getVersion

public String getVersion()
Gives the version of the plugin.

In the plugin.yml, this entry is named version.

Example:

version: 1.4.1

Returns:
the version of the plugin

getMain

public String getMain()
Gives the fully qualified name of the main class for a plugin. The format should follow the ClassLoader.loadClass(String) syntax to successfully be resolved at runtime. For most plugins, this is the class that extends JavaPlugin.

In the plugin.yml, this entry is named main.

Example:

main: org.bukkit.plugin.MyPlugin

Returns:
the fully qualified main class for the plugin

getDescription

public String getDescription()
Gives a human-friendly description of the functionality the plugin provides.

In the plugin.yml, this entry is named description.

Example:

description: This plugin is so 31337. You can set yourself on fire.

Returns:
description of this plugin, or null if not specified

getLoad

public PluginLoadOrder getLoad()
Gives the phase of server startup that the plugin should be loaded.

In the plugin.yml, this entry is named load.

Example:

load: STARTUP

Returns:
the phase when the plugin should be loaded

getAuthors

public List<String> getAuthors()
Gives the list of authors for the plugin.

In the plugin.yml, this has two entries, author and authors.

Single author example:

author: CaptainInflamo
Multiple author example:
authors: [Cogito, verrier, EvilSeph]
When both are specified, author will be the first entry in the list, so this example:
author: Grum
authors:
- feildmaster
- amaranth
Is equivilant to this example:
authors: [Grum, feildmaster, aramanth]

Returns:
an immutable list of the plugin's authors

getWebsite

public String getWebsite()
Gives the plugin's or plugin's author's website.

In the plugin.yml, this entry is named website.

Example:

website: http://www.curse.com/server-mods/minecraft/myplugin

Returns:
description of this plugin, or null if not specified

isDatabaseEnabled

public boolean isDatabaseEnabled()
Gives if the plugin uses a database.

In the plugin.yml, this entry is named database.

Example:

database: false

Returns:
if this plugin requires a database
See Also:
Plugin.getDatabase()

getDepend

public List<String> getDepend()
Gives a list of other plugins that the plugin requires.

In the plugin.yml, this entry is named depend.

Example:

depend:
- OnePlugin
- AnotherPlugin

Returns:
immutable list of the plugin's dependencies

getSoftDepend

public List<String> getSoftDepend()
Gives a list of other plugins that the plugin requires for full functionality. The PluginManager will make best effort to treat all entries here as if they were a dependency, but will never fail because of one of these entries.

In the plugin.yml, this entry is named softdepend.

Example:

softdepend: [OnePlugin, AnotherPlugin]

Returns:
immutable list of the plugin's preferred dependencies

getLoadBefore

public List<String> getLoadBefore()
Gets the list of plugins that should consider this plugin a soft-dependency.

In the plugin.yml, this entry is named loadbefore.

Example:

loadbefore:
- OnePlugin
- AnotherPlugin

Returns:
immutable list of plugins that should consider this plugin a soft-dependency

getPrefix

public String getPrefix()
Gives the token to prefix plugin-specific logging messages with.

In the plugin.yml, this entry is named prefix.

Example:

prefix: ex-why-zee

Returns:
the prefixed logging token, or null if not specified

getCommands

public Map<String,Map<String,Object>> getCommands()
Gives the map of command-name to command-properties. Each entry in this map corresponds to a single command and the respective values are the properties of the command. Each property, with the exception of aliases, can be defined at runtime using methods in PluginCommand and are defined here only as a convenience.
Node Method Type Description Example
description Command.setDescription(String) String A user-friendly description for a command. It is useful for documentation purposes as well as in-game help.
description: Set yourself on fire
aliases Command.setAliases(List) String or List of strings Alternative command names, with special usefulness for commands that are already registered. Aliases are not effective when defined at runtime, so the plugin description file is the only way to have them properly defined. Single alias format:
aliases: combust_me
or multiple alias format:
aliases: [combust_me, combustMe]
permission Command.setPermission(String) String The name of the Permission required to use the command. A user without the permission will receive the specified message (see below), or a standard one if no specific message is defined. Without the permission node, no CommandExecutor or TabCompleter will be called.
permission: inferno.flagrate
permission-message Command.setPermissionMessage(String) String
  • Displayed to a player that attempts to use a command, but does not have the required permission. See above.
  • <permission> is a macro that is replaced with the permission node required to use the command.
  • Using empty quotes is a valid way to indicate nothing should be displayed to a player.
permission-message: You do not have /<permission>
usage Command.setUsage(String) String This message is displayed to a player when the PluginCommand.setExecutor(CommandExecutor) returns false. <command> is a macro that is replaced the command issued.
usage: Syntax error! Perhaps you meant /<command> PlayerName?
It is worth noting that to use a colon in a yaml, like `usage: Usage: /god [player]', you need to surround the message with double-quote:
usage: "Usage: /god [player]"
The commands are structured as a hiearchy of nested mappings. The primary (top-level, no intendentation) node is `commands', while each individual command name is indented, indicating it maps to some value (in our case, the properties of the table above).

Here is an example bringing together the piecemeal examples above, as well as few more definitions:

commands:
  flagrate:
    description: Set yourself on fire.
    aliases: [combust_me, combustMe]
    permission: inferno.flagrate
    permission-message: You do not have /<permission>
    usage: Syntax error! Perhaps you meant /<command> PlayerName?
  burningdeaths:
    description: List how many times you have died by fire.
    aliases:
    - burning_deaths
    - burningDeaths
    permission: inferno.burningdeaths
    usage: |
      /<command> [player]
      Example: /<command> - see how many times you have burned to death
      Example: /<command> CaptainIce - see how many times CaptainIce has burned to death
  # The next command has no description, aliases, etc. defined, but is still valid
  # Having an empty declaration is useful for defining the description, permission, and messages from a configuration dynamically
  apocalypse:

Returns:
the commands this plugin will register

getPermissions

public List<Permission> getPermissions()
Gives the list of permissions the plugin will register at runtime, immediately proceding enabling. The format for defining permissions is a map from permission name to properties. To represent a map without any specific property, empty curly-braces ( {} ) may be used (as a null value is not accepted, unlike the commands above).

A list of optional properties for permissions:

Node Description Example
description Plaintext (user-friendly) description of what the permission is for.
description: Allows you to set yourself on fire
default The default state for the permission, as defined by Permission.getDefault(). If not defined, it will be set to the value of getPermissionDefault().

For reference:

default: true
children Allows other permissions to be set as a relation to the parent permission. When a parent permissions is assigned, child permissions are respectively assigned as well.
  • When a parent permission is assigned negatively, child permissions are assigned based on an inversion of their association.
  • When a parent permission is assigned positively, child permissions are assigned based on their association.

Child permissions may be defined in a number of ways:

  • Children may be defined as a list of names. Using a list will treat all children associated positively to their parent.
  • Children may be defined as a map. Each permission name maps to either a boolean (representing the association), or a nested permission definition (just as another permission). Using a nested definition treats the child as a positive association.
  • A nested permission definition must be a map of these same properties. To define a valid nested permission without defining any specific property, empty curly-braces ( {} ) must be used.
  • A nested permission may carry it's own nested permissions as children, as they may also have nested permissions, and so forth. There is no direct limit to how deep the permission tree is defined.
As a list:
children: [inferno.flagrate, inferno.burningdeaths]
Or as a mapping:
children:
  inferno.flagrate: true
  inferno.burningdeaths: true
An additional example showing basic nested values can be seen here.
The permissions are structured as a hiearchy of nested mappings. The primary (top-level, no intendentation) node is `permissions', while each individual permission name is indented, indicating it maps to some value (in our case, the properties of the table above).

Here is an example using some of the properties:

permissions:
  inferno.*:
    description: Gives access to all Inferno commands
    children:
      inferno.flagrate: true
      inferno.burningdeaths: true
  inferno.flagate:
    description: Allows you to ignite yourself
    default: true
  inferno.burningdeaths:
    description: Allows you to see how many times you have burned to death
    default: true
Another example, with nested definitions, can be found here.


getPermissionDefault

public PermissionDefault getPermissionDefault()
Gives the default default state of permissions registered for the plugin.

In the plugin.yml, this entry is named default-permission.

Example:

default-permission: NOT_OP

Returns:
the default value for the plugin's permissions

getFullName

public String getFullName()
Returns the name of a plugin, including the version. This method is provided for convenience; it uses the getName() and getVersion() entries.

Returns:
a descriptive name of the plugin and respective version

getClassLoaderOf

public String getClassLoaderOf()

setDatabaseEnabled

public void setDatabaseEnabled(boolean database)

save

public void save(Writer writer)
Saves this PluginDescriptionFile to the given writer

Parameters:
writer - Writer to output this file to


Copyright © 2013. All Rights Reserved.