Newer
Older
ultramine_bukkit / src / main / java / org / bukkit / metadata / Metadatable.java
@vlad20012 vlad20012 on 24 Feb 2017 1 KB initial
package org.bukkit.metadata;

import org.bukkit.plugin.Plugin;

import java.util.List;

/**
 * This interface is implemented by all objects that can provide metadata
 * about themselves.
 */
public interface Metadatable
{
	/**
	 * Sets a metadata value in the implementing object's metadata store.
	 *
	 * @param metadataKey      A unique key to identify this metadata.
	 * @param newMetadataValue The metadata value to apply.
	 * @throws IllegalArgumentException If value is null, or the owning plugin
	 *                                  is null
	 */
	public void setMetadata(String metadataKey, MetadataValue newMetadataValue);

	/**
	 * Returns a list of previously set metadata values from the implementing
	 * object's metadata store.
	 *
	 * @param metadataKey the unique metadata key being sought.
	 * @return A list of values, one for each plugin that has set the
	 * requested value.
	 */
	public List<MetadataValue> getMetadata(String metadataKey);

	/**
	 * Tests to see whether the implementing object contains the given
	 * metadata value in its metadata store.
	 *
	 * @param metadataKey the unique metadata key being queried.
	 * @return the existence of the metadataKey within subject.
	 */
	public boolean hasMetadata(String metadataKey);

	/**
	 * Removes the given metadata value from the implementing object's
	 * metadata store.
	 *
	 * @param metadataKey  the unique metadata key identifying the metadata to
	 *                     remove.
	 * @param owningPlugin This plugin's metadata value will be removed. All
	 *                     other values will be left untouched.
	 * @throws IllegalArgumentException If plugin is null
	 */
	public void removeMetadata(String metadataKey, Plugin owningPlugin);
}