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

83 lines
2.8 KiB
Java

package net.minecraft.util;
import com.google.common.collect.ImmutableList;
import it.unimi.dsi.fastutil.ints.Int2IntFunction;
import java.util.List;
import net.minecraft.network.chat.Style;
@FunctionalInterface
public interface FormattedCharSequence {
FormattedCharSequence EMPTY = formattedCharSink -> true;
boolean accept(FormattedCharSink formattedCharSink);
static FormattedCharSequence codepoint(int codePoint, Style style) {
return formattedCharSink -> formattedCharSink.accept(0, style, codePoint);
}
static FormattedCharSequence forward(String text, Style style) {
return text.isEmpty() ? EMPTY : formattedCharSink -> StringDecomposer.iterate(text, style, formattedCharSink);
}
static FormattedCharSequence forward(String text, Style style, Int2IntFunction codePointMapper) {
return text.isEmpty() ? EMPTY : formattedCharSink -> StringDecomposer.iterate(text, style, decorateOutput(formattedCharSink, codePointMapper));
}
static FormattedCharSequence backward(String text, Style style) {
return text.isEmpty() ? EMPTY : formattedCharSink -> StringDecomposer.iterateBackwards(text, style, formattedCharSink);
}
static FormattedCharSequence backward(String text, Style style, Int2IntFunction codePointMapper) {
return text.isEmpty() ? EMPTY : formattedCharSink -> StringDecomposer.iterateBackwards(text, style, decorateOutput(formattedCharSink, codePointMapper));
}
static FormattedCharSink decorateOutput(FormattedCharSink sink, Int2IntFunction codePointMapper) {
return (i, style, j) -> sink.accept(i, style, codePointMapper.apply(j));
}
static FormattedCharSequence composite() {
return EMPTY;
}
static FormattedCharSequence composite(FormattedCharSequence sequence) {
return sequence;
}
static FormattedCharSequence composite(FormattedCharSequence first, FormattedCharSequence second) {
return fromPair(first, second);
}
static FormattedCharSequence composite(FormattedCharSequence... parts) {
return fromList(ImmutableList.copyOf(parts));
}
static FormattedCharSequence composite(List<FormattedCharSequence> parts) {
int i = parts.size();
switch (i) {
case 0:
return EMPTY;
case 1:
return (FormattedCharSequence)parts.get(0);
case 2:
return fromPair((FormattedCharSequence)parts.get(0), (FormattedCharSequence)parts.get(1));
default:
return fromList(ImmutableList.copyOf(parts));
}
}
static FormattedCharSequence fromPair(FormattedCharSequence first, FormattedCharSequence second) {
return formattedCharSink -> first.accept(formattedCharSink) && second.accept(formattedCharSink);
}
static FormattedCharSequence fromList(List<FormattedCharSequence> parts) {
return formattedCharSink -> {
for (FormattedCharSequence formattedCharSequence : parts) {
if (!formattedCharSequence.accept(formattedCharSink)) {
return false;
}
}
return true;
};
}
}