Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package at.tobiazsh.myworld.traffic_addition.components.Rendering;
- import net.fabricmc.api.EnvType;
- import net.fabricmc.api.Environment;
- import net.minecraft.client.font.BakedGlyph;
- import net.minecraft.client.font.FontStorage;
- import net.minecraft.client.font.TextRenderer;
- import net.minecraft.client.render.RenderLayer;
- import net.minecraft.client.render.RenderPhase;
- import net.minecraft.client.render.VertexConsumer;
- import net.minecraft.client.render.VertexConsumerProvider;
- import net.minecraft.text.Style;
- import net.minecraft.text.TextVisitFactory;
- import net.minecraft.util.Identifier;
- import org.joml.Matrix4f;
- import java.util.function.Function;
- @Environment(EnvType.CLIENT)
- public class CustomTextRenderer extends TextRenderer {
- public CustomTextRenderer(Function<Identifier, FontStorage> fontStorageAccessor, boolean validateAdvance) {
- super(fontStorageAccessor, validateAdvance);
- }
- public CustomTextRenderer(TextRenderer renderer) {
- super(renderer.fontStorageAccessor, renderer.validateAdvance);
- }
- public FontStorage fontStorageGetter() {
- return this.getFontStorage(Style.DEFAULT_FONT_ID);
- }
- public int draw(String text, float x, float y, float zOffset, int color, boolean shadow, Matrix4f matrix, VertexConsumerProvider vertexConsumers, CustomRenderLayer.TextLayering.LayeringType layerType, int backgroundColor, int light) {
- if (this.isRightToLeft()) {
- text = this.mirror(text);
- }
- return this.drawInternal(text, x, y, zOffset, color, shadow, matrix, vertexConsumers, layerType, backgroundColor, light, true);
- }
- public int drawInternal(
- String text,
- float x,
- float y,
- float zOffset,
- int color,
- boolean shadow,
- Matrix4f matrix,
- VertexConsumerProvider vertexConsumers,
- CustomRenderLayer.TextLayering.LayeringType layerType,
- int backgroundColor,
- int light,
- boolean mirror
- ) {
- color = tweakTransparency(color);
- x = this.drawLayer(text, x, y, zOffset, color, shadow, matrix, vertexConsumers, layerType, backgroundColor, light, mirror);
- System.out.println("Drawing text: " + text);
- System.out.println("BackgroundColor: " + backgroundColor);
- System.out.println("Light: " + light);
- System.out.println("Matrix: " + matrix);
- return (int)x + (shadow ? 1 : 0);
- }
- public float drawLayer(
- String text,
- float x,
- float y,
- float zOffset,
- int color,
- boolean shadow,
- Matrix4f matrix,
- VertexConsumerProvider vertexConsumerProvider,
- CustomRenderLayer.TextLayering.LayeringType layerType,
- int backgroundColor,
- int light,
- boolean swapZIndex
- ) {
- CustomTextRenderer.Drawer drawer = new CustomTextRenderer.Drawer(this, vertexConsumerProvider, x, y, zOffset, color, backgroundColor, shadow, matrix, layerType, light, swapZIndex);
- TextVisitFactory.visitFormatted(text, Style.EMPTY, drawer);
- return drawer.drawLayer(x);
- }
- public class Drawer extends TextRenderer.Drawer {
- private final TextRenderer textRenderer;
- private final CustomRenderLayer.TextLayering.LayeringType layerType;
- private final float zOffset;
- private final RenderLayer renderLayer;
- private final Identifier id;
- public Drawer(
- final TextRenderer textRenderer,
- final VertexConsumerProvider vertexConsumers,
- final float x,
- final float y,
- final float zOffset,
- final int color,
- final boolean shadow,
- final Matrix4f matrix,
- final CustomRenderLayer.TextLayering.LayeringType layerType,
- final int light
- ) {
- super(vertexConsumers, x, y, color, shadow, matrix, null, light);
- this.textRenderer = textRenderer;
- this.layerType = layerType;
- this.zOffset = zOffset;
- this.id = textRenderer.getFontStorage(Style.DEFAULT_FONT_ID).getId();
- CustomRenderLayer.TextLayering layering = new CustomRenderLayer.TextLayering(zOffset);
- this.renderLayer = layering.build(this.layerType, id, this.zOffset);
- }
- public Drawer(
- final TextRenderer textRenderer,
- final VertexConsumerProvider vertexConsumers,
- final float x,
- final float y,
- final float zOffset,
- final int color,
- final int backgroundColor,
- final boolean shadow,
- final Matrix4f matrix,
- final CustomRenderLayer.TextLayering.LayeringType layerType,
- final int light,
- final boolean swapZIndex
- ) {
- super(vertexConsumers, x, y, color, backgroundColor, shadow, matrix, null, light, swapZIndex);
- this.textRenderer = textRenderer;
- this.layerType = layerType;
- this.zOffset = zOffset;
- this.id = textRenderer.getFontStorage(Style.DEFAULT_FONT_ID).getId();
- CustomRenderLayer.TextLayering layering = new CustomRenderLayer.TextLayering(zOffset);
- this.renderLayer = CustomRenderLayer.TextLayering.getTextRenderLayer(id.withSuffixedPath("/0"));
- }
- @Override
- public void drawGlyphs() {
- for (BakedGlyph.DrawnGlyph drawnGlyph : this.glyphs) {
- BakedGlyph bakedGlyph = drawnGlyph.glyph();
- VertexConsumer vertexConsumer = this.vertexConsumers.getBuffer(this.renderLayer);
- bakedGlyph.draw(drawnGlyph, this.matrix, vertexConsumer, this.light);
- }
- }
- @Override
- public float drawLayer(float x) {
- if (this.backgroundColor != 0) {
- BakedGlyph bakedGlyph = this.textRenderer.getFontStorage(Style.DEFAULT_FONT_ID).getRectangleBakedGlyph();
- BakedGlyph.Rectangle rectangle = new BakedGlyph.Rectangle(x - 1.0F, this.y + 9.0F, this.x, this.y - 1.0F, this.getBackgroundZIndex(), this.backgroundColor);
- VertexConsumer vertexConsumer = this.vertexConsumers.getBuffer(this.renderLayer);
- bakedGlyph.drawRectangle(rectangle, this.matrix, vertexConsumer, this.light);
- }
- this.drawGlyphs();
- if (this.rectangles != null) {
- BakedGlyph bakedGlyph = this.textRenderer.getFontStorage(Style.DEFAULT_FONT_ID).getRectangleBakedGlyph();
- VertexConsumer vertexConsumer = this.vertexConsumers.getBuffer(this.renderLayer);
- for (BakedGlyph.Rectangle rectangle : this.rectangles) {
- bakedGlyph.drawRectangle(rectangle, this.matrix, vertexConsumer, this.light);
- }
- }
- return this.x;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment