Spaces:
Build error
Build error
File size: 5,813 Bytes
d46f4a3 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 |
package net.minecraft.client.gui.components;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Nullable;
import net.minecraft.client.gui.Font;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.locale.Language;
import net.minecraft.network.chat.Component;
import net.minecraft.util.FormattedCharSequence;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
@OnlyIn(Dist.CLIENT)
public interface MultiLineLabel {
MultiLineLabel EMPTY = new MultiLineLabel() {
@Override
public void renderCentered(GuiGraphics p_283384_, int p_94395_, int p_94396_) {
}
@Override
public void renderCentered(GuiGraphics p_283208_, int p_210825_, int p_210826_, int p_210827_, int p_210828_) {
}
@Override
public void renderLeftAligned(GuiGraphics p_283077_, int p_94379_, int p_94380_, int p_282157_, int p_282742_) {
}
@Override
public int renderLeftAlignedNoShadow(GuiGraphics p_283645_, int p_94389_, int p_94390_, int p_94391_, int p_94392_) {
return p_94390_;
}
@Override
public int getLineCount() {
return 0;
}
@Override
public int getWidth() {
return 0;
}
};
static MultiLineLabel create(Font p_94351_, Component... p_94352_) {
return create(p_94351_, Integer.MAX_VALUE, Integer.MAX_VALUE, p_94352_);
}
static MultiLineLabel create(Font p_94342_, int p_94344_, Component... p_345312_) {
return create(p_94342_, p_94344_, Integer.MAX_VALUE, p_345312_);
}
static MultiLineLabel create(Font p_94346_, Component p_344884_, int p_94348_) {
return create(p_94346_, p_94348_, Integer.MAX_VALUE, p_344884_);
}
static MultiLineLabel create(final Font p_169037_, final int p_342954_, final int p_342610_, final Component... p_345091_) {
return p_345091_.length == 0 ? EMPTY : new MultiLineLabel() {
@Nullable
private List<MultiLineLabel.TextAndWidth> cachedTextAndWidth;
@Nullable
private Language splitWithLanguage;
@Override
public void renderCentered(GuiGraphics p_283492_, int p_283184_, int p_282078_) {
this.renderCentered(p_283492_, p_283184_, p_282078_, 9, -1);
}
@Override
public void renderCentered(GuiGraphics p_281603_, int p_281267_, int p_281819_, int p_281545_, int p_282780_) {
int i = p_281819_;
for (MultiLineLabel.TextAndWidth multilinelabel$textandwidth : this.getSplitMessage()) {
p_281603_.drawCenteredString(p_169037_, multilinelabel$textandwidth.text, p_281267_, i, p_282780_);
i += p_281545_;
}
}
@Override
public void renderLeftAligned(GuiGraphics p_282318_, int p_283665_, int p_283416_, int p_281919_, int p_281686_) {
int i = p_283416_;
for (MultiLineLabel.TextAndWidth multilinelabel$textandwidth : this.getSplitMessage()) {
p_282318_.drawString(p_169037_, multilinelabel$textandwidth.text, p_283665_, i, p_281686_);
i += p_281919_;
}
}
@Override
public int renderLeftAlignedNoShadow(GuiGraphics p_281782_, int p_282841_, int p_283554_, int p_282768_, int p_283499_) {
int i = p_283554_;
for (MultiLineLabel.TextAndWidth multilinelabel$textandwidth : this.getSplitMessage()) {
p_281782_.drawString(p_169037_, multilinelabel$textandwidth.text, p_282841_, i, p_283499_, false);
i += p_282768_;
}
return i;
}
private List<MultiLineLabel.TextAndWidth> getSplitMessage() {
Language language = Language.getInstance();
if (this.cachedTextAndWidth != null && language == this.splitWithLanguage) {
return this.cachedTextAndWidth;
} else {
this.splitWithLanguage = language;
List<FormattedCharSequence> list = new ArrayList<>();
for (Component component : p_345091_) {
list.addAll(p_169037_.split(component, p_342954_));
}
this.cachedTextAndWidth = new ArrayList<>();
for (FormattedCharSequence formattedcharsequence : list.subList(0, Math.min(list.size(), p_342610_))) {
this.cachedTextAndWidth.add(new MultiLineLabel.TextAndWidth(formattedcharsequence, p_169037_.width(formattedcharsequence)));
}
return this.cachedTextAndWidth;
}
}
@Override
public int getLineCount() {
return this.getSplitMessage().size();
}
@Override
public int getWidth() {
return Math.min(p_342954_, this.getSplitMessage().stream().mapToInt(MultiLineLabel.TextAndWidth::width).max().orElse(0));
}
};
}
void renderCentered(GuiGraphics p_281749_, int p_94334_, int p_94335_);
void renderCentered(GuiGraphics p_281785_, int p_94337_, int p_94338_, int p_94339_, int p_94340_);
void renderLeftAligned(GuiGraphics p_282655_, int p_94365_, int p_94366_, int p_94367_, int p_94368_);
int renderLeftAlignedNoShadow(GuiGraphics p_281982_, int p_94354_, int p_94355_, int p_94356_, int p_94357_);
int getLineCount();
int getWidth();
@OnlyIn(Dist.CLIENT)
public static record TextAndWidth(FormattedCharSequence text, int width) {
}
} |