package net.minecraft.locale; import com.google.gson.JsonElement; import com.google.gson.JsonParser; import com.mojang.logging.LogUtils; import com.mojang.serialization.Codec; import com.mojang.serialization.JsonOps; import com.mojang.serialization.codecs.RecordCodecBuilder; import com.mojang.serialization.codecs.RecordCodecBuilder.Instance; import java.io.InputStream; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.util.List; import java.util.Map; import org.slf4j.Logger; public record DeprecatedTranslationsInfo(List removed, Map renamed) { private static final Logger LOGGER = LogUtils.getLogger(); public static final DeprecatedTranslationsInfo EMPTY = new DeprecatedTranslationsInfo(List.of(), Map.of()); public static final Codec CODEC = RecordCodecBuilder.create( p_368182_ -> p_368182_.group( Codec.STRING.listOf().fieldOf("removed").forGetter(DeprecatedTranslationsInfo::removed), Codec.unboundedMap(Codec.STRING, Codec.STRING).fieldOf("renamed").forGetter(DeprecatedTranslationsInfo::renamed) ) .apply(p_368182_, DeprecatedTranslationsInfo::new) ); public static DeprecatedTranslationsInfo loadFromJson(InputStream p_366953_) { JsonElement jsonelement = JsonParser.parseReader(new InputStreamReader(p_366953_, StandardCharsets.UTF_8)); return CODEC.parse(JsonOps.INSTANCE, jsonelement) .getOrThrow(p_370184_ -> new IllegalStateException("Failed to parse deprecated language data: " + p_370184_)); } public static DeprecatedTranslationsInfo loadFromResource(String p_369676_) { try (InputStream inputstream = Language.class.getResourceAsStream(p_369676_)) { return inputstream != null ? loadFromJson(inputstream) : EMPTY; } catch (Exception exception) { LOGGER.error("Failed to read {}", p_369676_, exception); return EMPTY; } } public static DeprecatedTranslationsInfo loadFromDefaultResource() { return loadFromResource("/assets/minecraft/lang/deprecated.json"); } public void applyToMap(Map p_370162_) { for (String s : this.removed) { p_370162_.remove(s); } this.renamed.forEach((p_363113_, p_364770_) -> { String s1 = p_370162_.remove(p_363113_); if (s1 == null) { LOGGER.warn("Missing translation key for rename: {}", p_363113_); p_370162_.remove(p_364770_); } else { p_370162_.put(p_364770_, s1); } }); } }