import org.spongepowered.api.data.DataHolder; //导入方法依赖的package包/类
public static AbstractTagObject getValue(DataHolder dataHolder, Key key, Action error) {
Class clazz = key.getElementToken().getRawType();
if (!dataHolder.supports(key)) {
if (FlagMap.class.isAssignableFrom(clazz)) {
return new MapTag();
}
error.run("This data holder does not support the key '" + key.getId() + "'!");
return new NullTag();
}
if (Boolean.class.isAssignableFrom(clazz)) {
return new BooleanTag(dataHolder.getOrElse((Key>) key, false));
}
else if (CatalogType.class.isAssignableFrom(clazz)) {
return new TextTag(dataHolder.getValue((Key>) key).orElseThrow(() -> new ErrorInducedException("Value not present!")).get().getId());
}
else if (Double.class.isAssignableFrom(clazz)) {
return new NumberTag(dataHolder.getOrElse((Key>) key, 0.0));
}
else if (Enum.class.isAssignableFrom(clazz)) {
return new TextTag(dataHolder.getValue((Key>) key).orElseThrow(() -> new ErrorInducedException("Empty enum value!")).get().name());
}
else if (Integer.class.isAssignableFrom(clazz)) {
return new IntegerTag(dataHolder.getOrElse((Key>) key, 0));
}
else if (Vector3d.class.isAssignableFrom(clazz)) {
return new LocationTag(dataHolder.getOrElse((Key>) key, new Vector3d(0, 0, 0)));
}
else if (Text.class.isAssignableFrom(clazz)) {
return new FormattedTextTag(dataHolder.getOrElse((Key>) key, Text.EMPTY));
}
else if (FlagMap.class.isAssignableFrom(clazz)) {
return new MapTag(dataHolder.getOrElse((Key>) key, new FlagMap(new MapTag())).flags.getInternal());
}
else {
error.run("The value type '" + clazz.getName() + "' is not supported yet!");
return new NullTag();
}
}