下面列出了怎么用org.bukkit.metadata.Metadatable的API类实例代码及写法,或者点击链接到github查看源代码。
@Override
@Nullable
protected T[] get(Event e) {
List<Object> values = new ArrayList<>();
for (String value : this.values.getArray(e)) {
for (Metadatable holder : holders.getArray(e)) {
List<MetadataValue> metadata = holder.getMetadata(value);
if (!metadata.isEmpty())
values.add(metadata.get(metadata.size() - 1).value()); // adds the most recent metadata value
}
}
try {
return Converters.convertStrictly(values.toArray(), superType);
} catch (ClassCastException e1) {
return (T[]) Array.newInstance(superType, 0);
}
}
@Override
@SuppressWarnings("unchecked")
public boolean init(Expression<?>[] exprs, int matchedPattern, Kleenean isDelayed, SkriptParser.ParseResult parseResult) {
holders = (Expression<Metadatable>) exprs[0];
values = (Expression<String>) exprs[1];
setNegated(matchedPattern == 1);
return true;
}
@Override
public void change(Event e, @Nullable Object[] delta, Changer.ChangeMode mode) {
for (String value : values.getArray(e)) {
for (Metadatable holder : holders.getArray(e)) {
switch (mode) {
case SET:
holder.setMetadata(value, new FixedMetadataValue(Skript.getInstance(), delta[0]));
break;
case DELETE:
holder.removeMetadata(value, Skript.getInstance());
}
}
}
}
/**
* Gets metadata
*
* @param obj object
* @param key key
* @return metadata value
*/
public static MetadataValue getMetadata(Metadatable obj, String key) {
for(MetadataValue value : obj.getMetadata(key)) {
if(value.getOwningPlugin().getDescription().getName().equals(plugin.getDescription().getName())) {
return value;
}
}
return null;
}
public static boolean is(Metadatable entity) {
return entity.hasMetadata(METADATA_KEY);
}
public static @Nullable Grenade get(Metadatable entity) {
return entity.hasMetadata(METADATA_KEY)
? (Grenade) entity.getMetadata(METADATA_KEY).get(0).value()
: null;
}
public void set(Plugin plugin, Metadatable entity) {
entity.setMetadata(METADATA_KEY, new FixedMetadataValue(plugin, this));
}
public static boolean is(Metadatable entity) {
return entity.hasMetadata(METADATA_KEY);
}
public static @Nullable Grenade get(Metadatable entity) {
return entity.hasMetadata(METADATA_KEY) ? (Grenade) entity.getMetadata(METADATA_KEY).get(0).value() : null;
}
public void set(Plugin plugin, Metadatable entity) {
entity.setMetadata(METADATA_KEY, new FixedMetadataValue(plugin, this));
}
@Override
public boolean init(Expression<?>[] exprs, int matchedPattern, Kleenean isDelayed, SkriptParser.ParseResult parseResult) {
holders = (Expression<Metadatable>) exprs[matchedPattern ^ 1];
values = (Expression<String>) exprs[matchedPattern];
return true;
}
/**
* Sets metadata
*
* @param obj object
* @param key key
* @param value value
*/
public static void setMetadata(Metadatable obj, String key, Object value) {
obj.setMetadata(key, new FixedMetadataValue(plugin, value));
}
/**
* Removes metadata
*
* @param obj object
* @param key key
*/
public static void removeMetadata(Metadatable obj, String key) {
obj.removeMetadata(key, plugin);
}