001 package org.bukkit.metadata; 002 003 import org.bukkit.plugin.Plugin; 004 005 import java.util.List; 006 007 /** 008 * This interface is implemented by all objects that can provide metadata 009 * about themselves. 010 */ 011 public interface Metadatable { 012 /** 013 * Sets a metadata value in the implementing object's metadata store. 014 * 015 * @param metadataKey A unique key to identify this metadata. 016 * @param newMetadataValue The metadata value to apply. 017 * @throws IllegalArgumentException If value is null, or the owning plugin 018 * is null 019 */ 020 public void setMetadata(String metadataKey, MetadataValue newMetadataValue); 021 022 /** 023 * Returns a list of previously set metadata values from the implementing 024 * object's metadata store. 025 * 026 * @param metadataKey the unique metadata key being sought. 027 * @return A list of values, one for each plugin that has set the 028 * requested value. 029 */ 030 public List<MetadataValue> getMetadata(String metadataKey); 031 032 /** 033 * Tests to see whether the implementing object contains the given 034 * metadata value in its metadata store. 035 * 036 * @param metadataKey the unique metadata key being queried. 037 * @return the existence of the metadataKey within subject. 038 */ 039 public boolean hasMetadata(String metadataKey); 040 041 /** 042 * Removes the given metadata value from the implementing object's 043 * metadata store. 044 * 045 * @param metadataKey the unique metadata key identifying the metadata to 046 * remove. 047 * @param owningPlugin This plugin's metadata value will be removed. All 048 * other values will be left untouched. 049 * @throws IllegalArgumentException If plugin is null 050 */ 051 public void removeMetadata(String metadataKey, Plugin owningPlugin); 052 }