102 lines
2.7 KiB
Java
102 lines
2.7 KiB
Java
package net.minecraft.network.chat;
|
|
|
|
import com.google.common.collect.ImmutableList;
|
|
import java.util.List;
|
|
import java.util.Optional;
|
|
import net.minecraft.util.Unit;
|
|
|
|
public interface FormattedText {
|
|
Optional<Unit> STOP_ITERATION = Optional.of(Unit.INSTANCE);
|
|
FormattedText EMPTY = new FormattedText() {
|
|
@Override
|
|
public <T> Optional<T> visit(FormattedText.ContentConsumer<T> acceptor) {
|
|
return Optional.empty();
|
|
}
|
|
|
|
@Override
|
|
public <T> Optional<T> visit(FormattedText.StyledContentConsumer<T> acceptor, Style style) {
|
|
return Optional.empty();
|
|
}
|
|
};
|
|
|
|
<T> Optional<T> visit(FormattedText.ContentConsumer<T> acceptor);
|
|
|
|
<T> Optional<T> visit(FormattedText.StyledContentConsumer<T> acceptor, Style style);
|
|
|
|
static FormattedText of(String text) {
|
|
return new FormattedText() {
|
|
@Override
|
|
public <T> Optional<T> visit(FormattedText.ContentConsumer<T> acceptor) {
|
|
return acceptor.accept(text);
|
|
}
|
|
|
|
@Override
|
|
public <T> Optional<T> visit(FormattedText.StyledContentConsumer<T> acceptor, Style style) {
|
|
return acceptor.accept(style, text);
|
|
}
|
|
};
|
|
}
|
|
|
|
static FormattedText of(String text, Style style) {
|
|
return new FormattedText() {
|
|
@Override
|
|
public <T> Optional<T> visit(FormattedText.ContentConsumer<T> acceptor) {
|
|
return acceptor.accept(text);
|
|
}
|
|
|
|
@Override
|
|
public <T> Optional<T> visit(FormattedText.StyledContentConsumer<T> acceptor, Style style) {
|
|
return acceptor.accept(style.applyTo(style), text);
|
|
}
|
|
};
|
|
}
|
|
|
|
static FormattedText composite(FormattedText... elements) {
|
|
return composite(ImmutableList.copyOf(elements));
|
|
}
|
|
|
|
static FormattedText composite(List<? extends FormattedText> elements) {
|
|
return new FormattedText() {
|
|
@Override
|
|
public <T> Optional<T> visit(FormattedText.ContentConsumer<T> acceptor) {
|
|
for (FormattedText formattedText : elements) {
|
|
Optional<T> optional = formattedText.visit(acceptor);
|
|
if (optional.isPresent()) {
|
|
return optional;
|
|
}
|
|
}
|
|
|
|
return Optional.empty();
|
|
}
|
|
|
|
@Override
|
|
public <T> Optional<T> visit(FormattedText.StyledContentConsumer<T> acceptor, Style style) {
|
|
for (FormattedText formattedText : elements) {
|
|
Optional<T> optional = formattedText.visit(acceptor, style);
|
|
if (optional.isPresent()) {
|
|
return optional;
|
|
}
|
|
}
|
|
|
|
return Optional.empty();
|
|
}
|
|
};
|
|
}
|
|
|
|
default String getString() {
|
|
StringBuilder stringBuilder = new StringBuilder();
|
|
this.visit(string -> {
|
|
stringBuilder.append(string);
|
|
return Optional.empty();
|
|
});
|
|
return stringBuilder.toString();
|
|
}
|
|
|
|
public interface ContentConsumer<T> {
|
|
Optional<T> accept(String string);
|
|
}
|
|
|
|
public interface StyledContentConsumer<T> {
|
|
Optional<T> accept(Style style, String string);
|
|
}
|
|
}
|