TextRenderingUtils.java
com.mojang.realmsclient.util.TextRenderingUtils
信息
- 全限定名:com.mojang.realmsclient.util.TextRenderingUtils
- 类型:public class
- 包:com.mojang.realmsclient.util
- 源码路径:src/main/java/com/mojang/realmsclient/util/TextRenderingUtils.java
- 起始行号:L13
- 职责:
TODO
字段/常量
- 无
内部类/嵌套类型
-
com.mojang.realmsclient.util.TextRenderingUtils.Line- 类型:
class - 修饰符:
public static - 源码定位:
L78 - 说明:
TODO
- 类型:
-
com.mojang.realmsclient.util.TextRenderingUtils.LineSegment- 类型:
class - 修饰符:
public static - 源码定位:
L113 - 说明:
TODO
- 类型:
构造器
private TextRenderingUtils() @ L14
- 构造器名:TextRenderingUtils
- 源码定位:L14
- 修饰符:private
参数:
- 无
说明:
TODO
方法
下面的方法块按源码顺序生成。
protected static List<String> lineBreak(String text) @ L17
- 方法名:lineBreak
- 源码定位:L17
- 返回类型:List
- 修饰符:protected static
参数:
- text: String
说明:
TODO
public static List<TextRenderingUtils.Line> decompose(String text, TextRenderingUtils.LineSegment... links) @ L22
- 方法名:decompose
- 源码定位:L22
- 返回类型:List<TextRenderingUtils.Line>
- 修饰符:public static
参数:
- text: String
- links: TextRenderingUtils.LineSegment…
说明:
TODO
private static List<TextRenderingUtils.Line> decompose(String text, List<TextRenderingUtils.LineSegment> links) @ L26
- 方法名:decompose
- 源码定位:L26
- 返回类型:List<TextRenderingUtils.Line>
- 修饰符:private static
参数:
- text: String
- links: List<TextRenderingUtils.LineSegment>
说明:
TODO
private static List<TextRenderingUtils.Line> insertLinks(List<String> lines, List<TextRenderingUtils.LineSegment> links) @ L31
- 方法名:insertLinks
- 源码定位:L31
- 返回类型:List<TextRenderingUtils.Line>
- 修饰符:private static
参数:
- lines: List
- links: List<TextRenderingUtils.LineSegment>
说明:
TODO
public static List<String> split(String line, String delimiter) @ L52
- 方法名:split
- 源码定位:L52
- 返回类型:List
- 修饰符:public static
参数:
- line: String
- delimiter: String
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class TextRenderingUtils {
private TextRenderingUtils() {
}
@VisibleForTesting
protected static List<String> lineBreak(String text) {
return Arrays.asList(text.split("\\n"));
}
public static List<TextRenderingUtils.Line> decompose(String text, TextRenderingUtils.LineSegment... links) {
return decompose(text, Arrays.asList(links));
}
private static List<TextRenderingUtils.Line> decompose(String text, List<TextRenderingUtils.LineSegment> links) {
List<String> brokenLines = lineBreak(text);
return insertLinks(brokenLines, links);
}
private static List<TextRenderingUtils.Line> insertLinks(List<String> lines, List<TextRenderingUtils.LineSegment> links) {
int linkCount = 0;
List<TextRenderingUtils.Line> processedLines = Lists.newArrayList();
for (String line : lines) {
List<TextRenderingUtils.LineSegment> segments = Lists.newArrayList();
for (String part : split(line, "%link")) {
if ("%link".equals(part)) {
segments.add(links.get(linkCount++));
} else {
segments.add(TextRenderingUtils.LineSegment.text(part));
}
}
processedLines.add(new TextRenderingUtils.Line(segments));
}
return processedLines;
}
public static List<String> split(String line, String delimiter) {
if (delimiter.isEmpty()) {
throw new IllegalArgumentException("Delimiter cannot be the empty string");
} else {
List<String> parts = Lists.newArrayList();
int searchStart = 0;
int matchIndex;
while ((matchIndex = line.indexOf(delimiter, searchStart)) != -1) {
if (matchIndex > searchStart) {
parts.add(line.substring(searchStart, matchIndex));
}
parts.add(delimiter);
searchStart = matchIndex + delimiter.length();
}
if (searchStart < line.length()) {
parts.add(line.substring(searchStart));
}
return parts;
}
}
@OnlyIn(Dist.CLIENT)
public static class Line {
public final List<TextRenderingUtils.LineSegment> segments;
Line(TextRenderingUtils.LineSegment... segments) {
this(Arrays.asList(segments));
}
Line(List<TextRenderingUtils.LineSegment> segments) {
this.segments = segments;
}
@Override
public String toString() {
return "Line{segments=" + this.segments + "}";
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
} else if (o != null && this.getClass() == o.getClass()) {
TextRenderingUtils.Line line = (TextRenderingUtils.Line)o;
return Objects.equals(this.segments, line.segments);
} else {
return false;
}
}
@Override
public int hashCode() {
return Objects.hash(this.segments);
}
}
@OnlyIn(Dist.CLIENT)
public static class LineSegment {
private final String fullText;
private final @Nullable String linkTitle;
private final @Nullable String linkUrl;
private LineSegment(String fullText) {
this.fullText = fullText;
this.linkTitle = null;
this.linkUrl = null;
}
private LineSegment(String fullText, @Nullable String linkTitle, @Nullable String linkUrl) {
this.fullText = fullText;
this.linkTitle = linkTitle;
this.linkUrl = linkUrl;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
} else if (o != null && this.getClass() == o.getClass()) {
TextRenderingUtils.LineSegment segment = (TextRenderingUtils.LineSegment)o;
return Objects.equals(this.fullText, segment.fullText)
&& Objects.equals(this.linkTitle, segment.linkTitle)
&& Objects.equals(this.linkUrl, segment.linkUrl);
} else {
return false;
}
}
@Override
public int hashCode() {
return Objects.hash(this.fullText, this.linkTitle, this.linkUrl);
}
@Override
public String toString() {
return "Segment{fullText='" + this.fullText + "', linkTitle='" + this.linkTitle + "', linkUrl='" + this.linkUrl + "'}";
}
public String renderedText() {
return this.isLink() ? this.linkTitle : this.fullText;
}
public boolean isLink() {
return this.linkTitle != null;
}
public String getLinkUrl() {
if (!this.isLink()) {
throw new IllegalStateException("Not a link: " + this);
} else {
return this.linkUrl;
}
}
public static TextRenderingUtils.LineSegment link(String linkTitle, String linkUrl) {
return new TextRenderingUtils.LineSegment(null, linkTitle, linkUrl);
}
@VisibleForTesting
protected static TextRenderingUtils.LineSegment text(String fullText) {
return new TextRenderingUtils.LineSegment(fullText);
}
}
}引用的其他类
- 无