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 BlockEntitySignDoubleSidedEditableTextFix extends NamedEntityFix { public static final String FILTERED_CORRECT = "_filtered_correct"; private static final String DEFAULT_COLOR = "black"; public BlockEntitySignDoubleSidedEditableTextFix(Schema p_277789_, String p_278061_, String p_277403_) { super(p_277789_, false, p_278061_, References.BLOCK_ENTITY, p_277403_); } private static Dynamic fixTag(Dynamic p_278110_) { return p_278110_.set("front_text", fixFrontTextTag(p_278110_)).set("back_text", createDefaultText(p_278110_)).set("is_waxed", p_278110_.createBoolean(false)); } private static Dynamic fixFrontTextTag(Dynamic p_300654_) { Dynamic dynamic = ComponentDataFixUtils.createEmptyComponent(p_300654_.getOps()); List> list = getLines(p_300654_, "Text").map(p_297945_ -> p_297945_.orElse(dynamic)).toList(); Dynamic dynamic1 = p_300654_.emptyMap() .set("messages", p_300654_.createList(list.stream())) .set("color", p_300654_.get("Color").result().orElse(p_300654_.createString("black"))) .set("has_glowing_text", p_300654_.get("GlowingText").result().orElse(p_300654_.createBoolean(false))) .set("_filtered_correct", p_300654_.createBoolean(true)); List>> list1 = getLines(p_300654_, "FilteredText").toList(); if (list1.stream().anyMatch(Optional::isPresent)) { dynamic1 = dynamic1.set("filtered_messages", p_300654_.createList(Streams.mapWithIndex(list1.stream(), (p_299542_, p_300269_) -> { Dynamic dynamic2 = list.get((int)p_300269_); return p_299542_.orElse(dynamic2); }))); } return dynamic1; } private static Stream>> getLines(Dynamic p_298173_, String p_299789_) { return Stream.of( p_298173_.get(p_299789_ + "1").result(), p_298173_.get(p_299789_ + "2").result(), p_298173_.get(p_299789_ + "3").result(), p_298173_.get(p_299789_ + "4").result() ); } private static Dynamic createDefaultText(Dynamic p_299439_) { return p_299439_.emptyMap() .set("messages", createEmptyLines(p_299439_)) .set("color", p_299439_.createString("black")) .set("has_glowing_text", p_299439_.createBoolean(false)); } private static Dynamic createEmptyLines(Dynamic p_299579_) { Dynamic dynamic = ComponentDataFixUtils.createEmptyComponent(p_299579_.getOps()); return p_299579_.createList(Stream.of(dynamic, dynamic, dynamic, dynamic)); } @Override protected Typed fix(Typed p_277962_) { return p_277962_.update(DSL.remainderFinder(), BlockEntitySignDoubleSidedEditableTextFix::fixTag); } }