Skip to content

Commit

Permalink
Precalculate text field appendix lines
Browse files Browse the repository at this point in the history
  • Loading branch information
rubensworks committed Jan 24, 2024
1 parent cdda570 commit 603d1cd
Showing 1 changed file with 22 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,13 @@

import com.google.common.collect.Lists;
import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.client.Minecraft;
import net.minecraft.client.StringSplitter;
import net.minecraft.client.gui.Font;
import net.minecraft.network.chat.Style;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.fml.DistExecutor;
import org.apache.commons.lang3.StringUtils;
import org.cyclops.cyclopscore.helper.Helpers;
import org.cyclops.cyclopscore.helper.RenderHelpers;
Expand Down Expand Up @@ -33,7 +36,12 @@ public TextFieldAppendix(IInfoBook infoBook, String text, double scale) {
super(infoBook);
this.text = text;
this.scale = scale;
this.height = this.text.split("\n").length * 9; // Set temp value
this.height = this.text.split("\n").length * 9;

DistExecutor.callWhenOn(Dist.CLIENT, () -> () -> {
calculateLines();
return null;
});
}

@Override
Expand All @@ -51,21 +59,22 @@ protected int getHeight() {
return height;
}

protected void calculateLines() {
Font font = Minecraft.getInstance().font;
StringSplitter stringSplitter = font.getSplitter();
this.lines = Lists.newArrayList();
stringSplitter.splitLines(this.text, this.getWidth(), Style.EMPTY, true, (style, startPos, endPos) -> {
String stringPart = this.text.substring(startPos, endPos);
String line = StringUtils.stripEnd(stringPart, " \n");
lines.add(line);
this.maxWidth = (int) Math.max(this.maxWidth, font.width(line) * this.scale);
});
this.height = (int) (this.scale * lines.size() * font.lineHeight);
}

@Override
@OnlyIn(Dist.CLIENT)
protected void drawElement(ScreenInfoBook gui, PoseStack matrixStack, int x, int y, int width, int height, int page, int mx, int my) {
if (this.lines == null) {
StringSplitter stringSplitter = gui.getFont().getSplitter();
this.lines = Lists.newArrayList();
stringSplitter.splitLines(this.text, this.getWidth(), Style.EMPTY, true, (style, startPos, endPos) -> {
String stringPart = this.text.substring(startPos, endPos);
String line = StringUtils.stripEnd(stringPart, " \n");
lines.add(line);
this.maxWidth = (int) Math.max(this.maxWidth, gui.getFont().width(line) * this.scale);
});
this.height = (int) (this.scale * lines.size() * gui.getFont().lineHeight);
}

int lineId = 0;
for (String line : lines) {
RenderHelpers.drawScaledString(
Expand Down

0 comments on commit 603d1cd

Please sign in to comment.