package net.minecraft.util.datafix.fixes; import com.google.common.collect.Streams; import com.mojang.datafixers.DSL; import com.mojang.datafixers.Typed; import com.mojang.datafixers.schemas.Schema; import com.mojang.serialization.Dynamic; import java.util.List; import java.util.Optional; import java.util.stream.Stream; import net.minecraft.util.datafix.ComponentDataFixUtils; public class DropInvalidSignDataFix extends NamedEntityFix { private static final String[] FIELDS_TO_DROP = new String[]{ "Text1", "Text2", "Text3", "Text4", "FilteredText1", "FilteredText2", "FilteredText3", "FilteredText4", "Color", "GlowingText" }; public DropInvalidSignDataFix(Schema outputSchema, String name, String entityName) { super(outputSchema, false, name, References.BLOCK_ENTITY, entityName); } private static Dynamic fix(Dynamic dynamic) { dynamic = dynamic.update("front_text", DropInvalidSignDataFix::fixText); dynamic = dynamic.update("back_text", DropInvalidSignDataFix::fixText); for (String string : FIELDS_TO_DROP) { dynamic = dynamic.remove(string); } return dynamic; } private static Dynamic fixText(Dynamic textDynamic) { boolean bl = textDynamic.get("_filtered_correct").asBoolean(false); if (bl) { return textDynamic.remove("_filtered_correct"); } else { Optional>> optional = textDynamic.get("filtered_messages").asStreamOpt().result(); if (optional.isEmpty()) { return textDynamic; } else { Dynamic dynamic = ComponentDataFixUtils.createEmptyComponent(textDynamic.getOps()); List> list = ((Stream)textDynamic.get("messages").asStreamOpt().result().orElse(Stream.of())).toList(); List> list2 = Streams.>mapWithIndex((Stream)optional.get(), (dynamic2, l) -> { Dynamic dynamic3 = l < list.size() ? (Dynamic)list.get((int)l) : dynamic; return dynamic2.equals(dynamic) ? dynamic3 : dynamic2; }).toList(); return list2.stream().allMatch(dynamic2 -> dynamic2.equals(dynamic)) ? textDynamic.remove("filtered_messages") : textDynamic.set("filtered_messages", textDynamic.createList(list2.stream())); } } } @Override protected Typed fix(Typed typed) { return typed.update(DSL.remainderFinder(), DropInvalidSignDataFix::fix); } }