Search in sources :

Example 1 with TranslatableText

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);
}
Also used : TranslatableText(org.spongepowered.api.text.TranslatableText) DataView(org.spongepowered.api.data.DataView) CatalogType(org.spongepowered.api.CatalogType) Set(java.util.Set) HashSet(java.util.HashSet) LanternTexts(org.lanternpowered.server.text.LanternTexts) TranslatableText(org.spongepowered.api.text.TranslatableText) Text(org.spongepowered.api.text.Text) List(java.util.List) ArrayList(java.util.ArrayList)

Example 2 with TranslatableText

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();
}
Also used : TranslatableText(org.spongepowered.api.text.TranslatableText) MinecraftTranslation(org.lanternpowered.server.text.translation.MinecraftTranslation) Translation(org.spongepowered.api.text.translation.Translation) JsonObject(com.google.gson.JsonObject) JsonObject(com.google.gson.JsonObject) Text(org.spongepowered.api.text.Text) TranslatableText(org.spongepowered.api.text.TranslatableText)

Example 3 with TranslatableText

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;
}
Also used : Locale(java.util.Locale) TextRepresentable(org.spongepowered.api.text.TextRepresentable) MinecraftTranslation(org.lanternpowered.server.text.translation.MinecraftTranslation) Translation(org.spongepowered.api.text.translation.Translation) JsonPrimitive(com.google.gson.JsonPrimitive) JsonObject(com.google.gson.JsonObject) Text(org.spongepowered.api.text.Text) TranslatableText(org.spongepowered.api.text.TranslatableText) JsonArray(com.google.gson.JsonArray) MinecraftTranslation(org.lanternpowered.server.text.translation.MinecraftTranslation) JsonObject(com.google.gson.JsonObject)

Example 4 with TranslatableText

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;
}
Also used : TranslatableText(org.spongepowered.api.text.TranslatableText) TextRepresentable(org.spongepowered.api.text.TextRepresentable) SelectorText(org.spongepowered.api.text.SelectorText) Translation(org.spongepowered.api.text.translation.Translation) Optional(java.util.Optional) ScoreText(org.spongepowered.api.text.ScoreText) LiteralText(org.spongepowered.api.text.LiteralText) ScoreText(org.spongepowered.api.text.ScoreText) SelectorText(org.spongepowered.api.text.SelectorText) Text(org.spongepowered.api.text.Text) TranslatableText(org.spongepowered.api.text.TranslatableText) TextStyle(org.spongepowered.api.text.format.TextStyle) TextFormat(org.spongepowered.api.text.format.TextFormat) TextStyle(org.spongepowered.api.text.format.TextStyle) TextColor(org.spongepowered.api.text.format.TextColor) LiteralText(org.spongepowered.api.text.LiteralText)

Aggregations

Text (org.spongepowered.api.text.Text)4 TranslatableText (org.spongepowered.api.text.TranslatableText)4 Translation (org.spongepowered.api.text.translation.Translation)3 JsonObject (com.google.gson.JsonObject)2 MinecraftTranslation (org.lanternpowered.server.text.translation.MinecraftTranslation)2 TextRepresentable (org.spongepowered.api.text.TextRepresentable)2 JsonArray (com.google.gson.JsonArray)1 JsonPrimitive (com.google.gson.JsonPrimitive)1 ArrayList (java.util.ArrayList)1 HashSet (java.util.HashSet)1 List (java.util.List)1 Locale (java.util.Locale)1 Optional (java.util.Optional)1 Set (java.util.Set)1 LanternTexts (org.lanternpowered.server.text.LanternTexts)1 CatalogType (org.spongepowered.api.CatalogType)1 DataView (org.spongepowered.api.data.DataView)1 LiteralText (org.spongepowered.api.text.LiteralText)1 ScoreText (org.spongepowered.api.text.ScoreText)1 SelectorText (org.spongepowered.api.text.SelectorText)1