use of org.spongepowered.api.text.TranslatableText in project LanternServer by LanternPowered.
the class ItemStackStore method serializeValues.
@Override
public void serializeValues(LanternItemStack object, SimpleValueContainer valueContainer, DataView dataView) {
final ItemTypeObjectSerializer serializer = this.itemTypeSerializers.get(object.getType());
if (serializer != null) {
serializer.serializeValues(object, valueContainer, dataView);
}
DataView displayView = null;
final Optional<Text> optDisplayName = valueContainer.remove(Keys.DISPLAY_NAME);
if (optDisplayName.isPresent()) {
displayView = getOrCreateView(dataView, DISPLAY);
final Text displayName = optDisplayName.get();
if (displayName instanceof TranslatableText) {
final TranslatableText name1 = (TranslatableText) displayName;
// We can only do this for translatable text without any formatting
if (name1.getArguments().isEmpty() && name1.getChildren().isEmpty() && name1.getStyle().isEmpty() && name1.getColor() == TextColors.NONE) {
displayView.set(LOCALIZED_NAME, name1.getTranslation().getId());
} else {
displayView.set(NAME, LanternTexts.toLegacy(displayName));
}
} else {
displayView.set(NAME, LanternTexts.toLegacy(displayName));
}
}
final Optional<List<Text>> optLore = valueContainer.remove(Keys.ITEM_LORE);
if (optLore.isPresent() && !optLore.get().isEmpty()) {
if (displayView == null) {
displayView = getOrCreateView(dataView, DISPLAY);
}
displayView.set(LORE, optLore.get().stream().map(LanternTexts::toLegacy).collect(Collectors.toList()));
}
if (valueContainer.remove(Keys.UNBREAKABLE).orElse(false)) {
dataView.set(UNBREAKABLE, (byte) 1);
}
final Optional<Set<BlockType>> optBlockTypes = valueContainer.remove(Keys.BREAKABLE_BLOCK_TYPES);
if (optBlockTypes.isPresent() && !optBlockTypes.get().isEmpty()) {
dataView.set(CAN_DESTROY, optBlockTypes.get().stream().map(CatalogType::getId).collect(Collectors.toSet()));
}
valueContainer.remove(Keys.ITEM_ENCHANTMENTS).ifPresent(list -> serializeEnchantments(dataView, ENCHANTMENTS, list));
valueContainer.remove(Keys.STORED_ENCHANTMENTS).ifPresent(list -> serializeEnchantments(dataView, STORED_ENCHANTMENTS, list));
super.serializeValues(object, valueContainer, dataView);
}
use of org.spongepowered.api.text.TranslatableText in project LanternServer by LanternPowered.
the class JsonTextTranslatableSerializer method deserialize.
@Override
public TranslatableText deserialize(JsonElement element, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
final JsonObject obj = element.getAsJsonObject();
final String name = obj.get(TRANSLATABLE).getAsString();
final Translation translation = this.translationManager.get(name);
final Object[] arguments;
if ((element = obj.get(TRANSLATABLE_ARGS)) != null) {
final Text[] with = context.deserialize(element, Text[].class);
arguments = new Object[with.length];
System.arraycopy(with, 0, arguments, 0, with.length);
} else {
arguments = new Object[0];
}
final TranslatableText.Builder builder = Text.builder(translation, arguments);
deserialize(obj, builder, context);
return builder.build();
}
use of org.spongepowered.api.text.TranslatableText in project LanternServer by LanternPowered.
the class JsonTextTranslatableSerializer method serialize.
@SuppressWarnings("deprecation")
@Override
public JsonElement serialize(TranslatableText src, Type typeOfSrc, JsonSerializationContext context) {
final Translation translation = src.getTranslation();
if (this.networkingFormat && !(translation instanceof MinecraftTranslation)) {
final ImmutableList<Object> arguments = src.getArguments();
final Object[] rawArguments = arguments.toArray(new Object[arguments.size()]);
final Locale locale = currentLocale.get();
for (int i = 0; i < rawArguments.length; i++) {
Object object = rawArguments[i];
if (object instanceof TextRepresentable) {
if (!(object instanceof Text)) {
object = ((TextRepresentable) object).toText();
}
rawArguments[i] = ((LanternTextSerializer) TextSerializers.LEGACY_FORMATTING_CODE).serialize((Text) object, locale);
} else {
rawArguments[i] = object.toString();
}
}
final String content = src.getTranslation().get(locale, rawArguments);
return JsonTextLiteralSerializer.serializeLiteralText(src, content, context, this.removeComplexity);
}
final JsonObject obj = new JsonObject();
obj.addProperty(TRANSLATABLE, src.getTranslation().getId());
final ImmutableList<Object> arguments = src.getArguments();
if (!arguments.isEmpty()) {
final JsonArray argumentsArray = new JsonArray();
for (Object object : arguments) {
// so we need to convert the objects if possible
if (object instanceof TextRepresentable) {
if (!(object instanceof Text)) {
object = ((TextRepresentable) object).toText();
}
argumentsArray.add(context.serialize(object, Text.class));
} else {
argumentsArray.add(new JsonPrimitive(object.toString()));
}
}
obj.add(TRANSLATABLE_ARGS, argumentsArray);
}
serialize(obj, src, context);
return obj;
}
use of org.spongepowered.api.text.TranslatableText in project LanternServer by LanternPowered.
the class LegacyTexts method toLegacy.
private static StringBuilder toLegacy(StringBuilder builder, Locale locale, Text text, char legacyChar, Style base, Style applied) {
if (legacyChar != 0) {
final TextFormat format = text.getFormat();
final TextColor color = format.getColor();
final TextStyle style = format.getStyle();
// Create a new style object
final Style newStyle = base.copyTo(new Style());
base = newStyle;
if (color != TextColors.NONE) {
newStyle.color = color == TextColors.RESET ? null : color;
}
style.isBold().ifPresent(value -> newStyle.bold = value);
style.isItalic().ifPresent(value -> newStyle.italic = value);
style.isObfuscated().ifPresent(value -> newStyle.obfuscated = value);
style.hasUnderline().ifPresent(value -> newStyle.underlined = value);
style.hasStrikethrough().ifPresent(value -> newStyle.strikethrough = value);
if ((applied.color != null && newStyle.color == null) || (applied.bold && !newStyle.bold) || (applied.italic && !newStyle.italic) || (applied.obfuscated && !newStyle.obfuscated) || (applied.underlined && !newStyle.underlined) || (applied.strikethrough && !newStyle.strikethrough)) {
builder.append(legacyChar).append(TextConstants.RESET);
if (newStyle.color != null) {
builder.append(legacyChar).append(((FormattingCodeHolder) newStyle.color).getCode());
}
if (newStyle.bold) {
builder.append(legacyChar).append(TextConstants.BOLD);
}
if (newStyle.italic) {
builder.append(legacyChar).append(TextConstants.ITALIC);
}
if (newStyle.obfuscated) {
builder.append(legacyChar).append(TextConstants.OBFUSCATED);
}
if (newStyle.underlined) {
builder.append(legacyChar).append(TextConstants.UNDERLINE);
}
if (newStyle.strikethrough) {
builder.append(legacyChar).append(TextConstants.STRIKETHROUGH);
}
} else {
if (applied.color != newStyle.color) {
builder.append(legacyChar).append(((FormattingCodeHolder) newStyle.color).getCode());
}
if (applied.bold != newStyle.bold) {
builder.append(legacyChar).append(TextConstants.BOLD);
}
if (applied.italic != newStyle.italic) {
builder.append(legacyChar).append(TextConstants.ITALIC);
}
if (applied.obfuscated != newStyle.obfuscated) {
builder.append(legacyChar).append(TextConstants.OBFUSCATED);
}
if (applied.underlined != newStyle.underlined) {
builder.append(legacyChar).append(TextConstants.UNDERLINE);
}
if (applied.strikethrough != newStyle.strikethrough) {
builder.append(legacyChar).append(TextConstants.STRIKETHROUGH);
}
}
newStyle.copyTo(applied);
}
if (text instanceof LiteralText) {
builder.append(((LiteralText) text).getContent());
} else if (text instanceof SelectorText) {
builder.append(((SelectorText) text).getSelector().toPlain());
} else if (text instanceof TranslatableText) {
final TranslatableText text0 = (TranslatableText) text;
final Translation translation = text0.getTranslation();
final ImmutableList<Object> args = text0.getArguments();
final Object[] args0 = new Object[args.size()];
for (int i = 0; i < args0.length; i++) {
Object object = args.get(i);
if (object instanceof Text || object instanceof Text.Builder || object instanceof TextRepresentable) {
if (object instanceof Text) {
// Ignore
} else if (object instanceof Text.Builder) {
object = ((Text.Builder) object).build();
} else {
object = ((TextRepresentable) object).toText();
}
args0[i] = toLegacy(new StringBuilder(), locale, (Text) object, legacyChar, base, applied).toString();
} else {
args0[i] = object;
}
}
builder.append(translation.get(locale, args0));
} else if (text instanceof ScoreText) {
final ScoreText text0 = (ScoreText) text;
final Optional<String> override = text0.getOverride();
if (override.isPresent()) {
builder.append(override.get());
} else {
builder.append(text0.getScore().getScore());
}
}
for (Text child : text.getChildren()) {
toLegacy(builder, locale, child, legacyChar, base, applied);
}
return builder;
}
Aggregations