package net.minecraft.client.gui.components; import com.google.common.collect.Lists; import java.util.List; import java.util.Optional; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.ChatFormatting; import net.minecraft.client.ComponentCollector; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; import net.minecraft.locale.Language; import net.minecraft.network.chat.FormattedText; import net.minecraft.network.chat.Style; import net.minecraft.util.FormattedCharSequence; @Environment(EnvType.CLIENT) public class ComponentRenderUtils { private static final FormattedCharSequence INDENT = FormattedCharSequence.codepoint(32, Style.EMPTY); private static String stripColor(String text) { return Minecraft.getInstance().options.chatColors().get() ? text : ChatFormatting.stripFormatting(text); } public static List wrapComponents(FormattedText component, int maxWidth, Font font) { ComponentCollector componentCollector = new ComponentCollector(); component.visit((style, string) -> { componentCollector.append(FormattedText.of(stripColor(string), style)); return Optional.empty(); }, Style.EMPTY); List list = Lists.newArrayList(); font.getSplitter().splitLines(componentCollector.getResultOrEmpty(), maxWidth, Style.EMPTY, (formattedText, boolean_) -> { FormattedCharSequence formattedCharSequence = Language.getInstance().getVisualOrder(formattedText); list.add(boolean_ ? FormattedCharSequence.composite(INDENT, formattedCharSequence) : formattedCharSequence); }); return (List)(list.isEmpty() ? Lists.newArrayList(FormattedCharSequence.EMPTY) : list); } }