minecraft-src/net/minecraft/util/datafix/fixes/DropInvalidSignDataFix.java
2025-07-04 01:41:11 +03:00

59 lines
2.3 KiB
Java

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 <T> Dynamic<T> fix(Dynamic<T> 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 <T> Dynamic<T> fixText(Dynamic<T> textDynamic) {
boolean bl = textDynamic.get("_filtered_correct").asBoolean(false);
if (bl) {
return textDynamic.remove("_filtered_correct");
} else {
Optional<Stream<Dynamic<T>>> optional = textDynamic.get("filtered_messages").asStreamOpt().result();
if (optional.isEmpty()) {
return textDynamic;
} else {
Dynamic<T> dynamic = ComponentDataFixUtils.createEmptyComponent(textDynamic.getOps());
List<Dynamic<T>> list = ((Stream)textDynamic.get("messages").asStreamOpt().result().orElse(Stream.of())).toList();
List<Dynamic<T>> list2 = Streams.<Dynamic, Dynamic<T>>mapWithIndex((Stream<Dynamic>)optional.get(), (dynamic2, l) -> {
Dynamic<T> 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);
}
}