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

import org.bukkit.plugin.Plugin;

import java.util.List;

public interface MetadataStore<T>
{
	/**
	 * Adds a metadata value to an object.
	 *
	 * @param subject          The object receiving the metadata.
	 * @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(T subject, String metadataKey, MetadataValue newMetadataValue);

	/**
	 * Returns all metadata values attached to an object. If multiple plugins
	 * have attached metadata, each will value will be included.
	 *
	 * @param subject     the object being interrogated.
	 * @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(T subject, String metadataKey);

	/**
	 * Tests to see if a metadata attribute has been set on an object.
	 *
	 * @param subject     the object upon which the has-metadata test is
	 *                    performed.
	 * @param metadataKey the unique metadata key being queried.
	 * @return the existence of the metadataKey within subject.
	 */
	public boolean hasMetadata(T subject, String metadataKey);

	/**
	 * Removes a metadata item owned by a plugin from a subject.
	 *
	 * @param subject      the object to remove the metadata from.
	 * @param metadataKey  the unique metadata key identifying the metadata to
	 *                     remove.
	 * @param owningPlugin the plugin attempting to remove a metadata item.
	 * @throws IllegalArgumentException If plugin is null
	 */
	public void removeMetadata(T subject, String metadataKey, Plugin owningPlugin);

	/**
	 * Invalidates all metadata in the metadata store that originates from the
	 * given plugin. Doing this will force each invalidated metadata item to
	 * be recalculated the next time it is accessed.
	 *
	 * @param owningPlugin the plugin requesting the invalidation.
	 * @throws IllegalArgumentException If plugin is null
	 */
	public void invalidateAll(Plugin owningPlugin);
}