MetadataValue とは
MetadataValue とは Block など多くのクラスが持つ、文字通りメタデータそのものです。
プラグインのインスタンスを利用してデータの保存空間を作成し、鍵となる文字列を用いてデータを識別します。
サーバーを止めると、ブロックに保存された MetadataValue は消去されます!
操作
Metadatable を実装したクラスで
hasMetadata
getMetadata
removeMetadata
-
setMetadata
の各種メソッドを用いて操作します。
has はそのプラグインの名前空間に指定された鍵に対応する MetadataValue が存在するか否かを返します。
get は与えられた文字列に対応するキーを持つメタデータを詰めたリストを返します。対応するデータが1つもない場合は空のリストが返ります。
remove は鍵となる文字列とプラグインのインスタンスから、対象のメタデータを削除します。
set は鍵と、それに紐づく MetadataValue を渡してセットします。メタデータには FixedMetadataValue と LazyMetadataValue が存在しますが、現在ではほとんどの場合で前者を利用します。
作成・データ取り出し
MetadataValue は Metadatable を実装したクラスが持つメタデータそのものです。
コンストラクタにはプラグインのインスタンスとメタデータを必要とします。メタデータの型は Object で良いため、入れることが出来るデータに制限はありません。
また、 MetadataValue からデータを取り出す際はデータを以下の型に変換するメソッドが用意されています。
- boolean (
asBoolean
) - byte (
asByte
) - double (
asDouble
) - float (
asFloat
) - int (
asInt
) - long (
asLong
) - short (
asShort
) - String (
asString
)
それ以外にも、value
メソッドによって保存したオブジェクトをそのまま取り出すことも出来ます。
例
// SET
// instance はプラグインのインスタンス
// block はブロックのインスタンス
String stringData = "Hello, world!";
MetadataValue metaValue = new FixedMetadataValue(instance, stringData);
block.setMetadata("this is key", metaValue);
// GET
List<MetadataValue> values = block.getMetadata("this is key");
おわりに
MetadataValue か Metadatable のドキュメントに「ブロックに保存されたメタデータは、サーバーを止めると消えます」と書かれていないのはどうかと思います。(1敗)