Guest User

CustomTextRenderer

a guest
Jan 19th, 2025
21
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.07 KB | Source Code | 0 0
  1. package at.tobiazsh.myworld.traffic_addition.components.Rendering;
  2.  
  3. import net.fabricmc.api.EnvType;
  4. import net.fabricmc.api.Environment;
  5. import net.minecraft.client.font.BakedGlyph;
  6. import net.minecraft.client.font.FontStorage;
  7. import net.minecraft.client.font.TextRenderer;
  8. import net.minecraft.client.render.RenderLayer;
  9. import net.minecraft.client.render.RenderPhase;
  10. import net.minecraft.client.render.VertexConsumer;
  11. import net.minecraft.client.render.VertexConsumerProvider;
  12. import net.minecraft.text.Style;
  13. import net.minecraft.text.TextVisitFactory;
  14. import net.minecraft.util.Identifier;
  15. import org.joml.Matrix4f;
  16.  
  17. import java.util.function.Function;
  18.  
  19. @Environment(EnvType.CLIENT)
  20. public class CustomTextRenderer extends TextRenderer {
  21.  
  22.     public CustomTextRenderer(Function<Identifier, FontStorage> fontStorageAccessor, boolean validateAdvance) {
  23.         super(fontStorageAccessor, validateAdvance);
  24.     }
  25.  
  26.     public CustomTextRenderer(TextRenderer renderer) {
  27.         super(renderer.fontStorageAccessor, renderer.validateAdvance);
  28.     }
  29.  
  30.     public FontStorage fontStorageGetter() {
  31.         return this.getFontStorage(Style.DEFAULT_FONT_ID);
  32.     }
  33.  
  34.     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) {
  35.         if (this.isRightToLeft()) {
  36.             text = this.mirror(text);
  37.         }
  38.  
  39.         return this.drawInternal(text, x, y, zOffset, color, shadow, matrix, vertexConsumers, layerType, backgroundColor, light, true);
  40.     }
  41.  
  42.     public int drawInternal(
  43.             String text,
  44.             float x,
  45.             float y,
  46.             float zOffset,
  47.             int color,
  48.             boolean shadow,
  49.             Matrix4f matrix,
  50.             VertexConsumerProvider vertexConsumers,
  51.             CustomRenderLayer.TextLayering.LayeringType layerType,
  52.             int backgroundColor,
  53.             int light,
  54.             boolean mirror
  55.     ) {
  56.         color = tweakTransparency(color);
  57.         x = this.drawLayer(text, x, y, zOffset, color, shadow, matrix, vertexConsumers, layerType, backgroundColor, light, mirror);
  58.         System.out.println("Drawing text: " + text);
  59.         System.out.println("BackgroundColor: " + backgroundColor);
  60.         System.out.println("Light: " + light);
  61.         System.out.println("Matrix: " + matrix);
  62.         return (int)x + (shadow ? 1 : 0);
  63.     }
  64.  
  65.     public float drawLayer(
  66.             String text,
  67.             float x,
  68.             float y,
  69.             float zOffset,
  70.             int color,
  71.             boolean shadow,
  72.             Matrix4f matrix,
  73.             VertexConsumerProvider vertexConsumerProvider,
  74.             CustomRenderLayer.TextLayering.LayeringType layerType,
  75.             int backgroundColor,
  76.             int light,
  77.             boolean swapZIndex
  78.     ) {
  79.         CustomTextRenderer.Drawer drawer = new CustomTextRenderer.Drawer(this, vertexConsumerProvider, x, y, zOffset, color, backgroundColor, shadow, matrix, layerType, light, swapZIndex);
  80.         TextVisitFactory.visitFormatted(text, Style.EMPTY, drawer);
  81.         return drawer.drawLayer(x);
  82.     }
  83.  
  84.     public class Drawer extends TextRenderer.Drawer {
  85.         private final TextRenderer textRenderer;
  86.         private final CustomRenderLayer.TextLayering.LayeringType layerType;
  87.         private final float zOffset;
  88.         private final RenderLayer renderLayer;
  89.         private final Identifier id;
  90.  
  91.         public Drawer(
  92.                 final TextRenderer textRenderer,
  93.                 final VertexConsumerProvider vertexConsumers,
  94.                 final float x,
  95.                 final float y,
  96.                 final float zOffset,
  97.                 final int color,
  98.                 final boolean shadow,
  99.                 final Matrix4f matrix,
  100.                 final CustomRenderLayer.TextLayering.LayeringType layerType,
  101.                 final int light
  102.         ) {
  103.             super(vertexConsumers, x, y, color, shadow, matrix, null, light);
  104.             this.textRenderer = textRenderer;
  105.             this.layerType = layerType;
  106.             this.zOffset = zOffset;
  107.  
  108.             this.id = textRenderer.getFontStorage(Style.DEFAULT_FONT_ID).getId();
  109.  
  110.             CustomRenderLayer.TextLayering layering = new CustomRenderLayer.TextLayering(zOffset);
  111.             this.renderLayer = layering.build(this.layerType, id, this.zOffset);
  112.         }
  113.  
  114.         public Drawer(
  115.                 final TextRenderer textRenderer,
  116.                 final VertexConsumerProvider vertexConsumers,
  117.                 final float x,
  118.                 final float y,
  119.                 final float zOffset,
  120.                 final int color,
  121.                 final int backgroundColor,
  122.                 final boolean shadow,
  123.                 final Matrix4f matrix,
  124.                 final CustomRenderLayer.TextLayering.LayeringType layerType,
  125.                 final int light,
  126.                 final boolean swapZIndex
  127.         ) {
  128.             super(vertexConsumers, x, y, color, backgroundColor, shadow, matrix, null, light, swapZIndex);
  129.             this.textRenderer = textRenderer;
  130.             this.layerType = layerType;
  131.             this.zOffset = zOffset;
  132.  
  133.             this.id = textRenderer.getFontStorage(Style.DEFAULT_FONT_ID).getId();
  134.  
  135.             CustomRenderLayer.TextLayering layering = new CustomRenderLayer.TextLayering(zOffset);
  136.             this.renderLayer = CustomRenderLayer.TextLayering.getTextRenderLayer(id.withSuffixedPath("/0"));
  137.         }
  138.  
  139.         @Override
  140.         public void drawGlyphs() {
  141.             for (BakedGlyph.DrawnGlyph drawnGlyph : this.glyphs) {
  142.                 BakedGlyph bakedGlyph = drawnGlyph.glyph();
  143.                 VertexConsumer vertexConsumer = this.vertexConsumers.getBuffer(this.renderLayer);
  144.                 bakedGlyph.draw(drawnGlyph, this.matrix, vertexConsumer, this.light);
  145.             }
  146.         }
  147.  
  148.         @Override
  149.         public float drawLayer(float x) {
  150.             if (this.backgroundColor != 0) {
  151.                 BakedGlyph bakedGlyph = this.textRenderer.getFontStorage(Style.DEFAULT_FONT_ID).getRectangleBakedGlyph();
  152.                 BakedGlyph.Rectangle rectangle = new BakedGlyph.Rectangle(x - 1.0F, this.y + 9.0F, this.x, this.y - 1.0F, this.getBackgroundZIndex(), this.backgroundColor);
  153.                 VertexConsumer vertexConsumer = this.vertexConsumers.getBuffer(this.renderLayer);
  154.                 bakedGlyph.drawRectangle(rectangle, this.matrix, vertexConsumer, this.light);
  155.             }
  156.  
  157.             this.drawGlyphs();
  158.  
  159.             if (this.rectangles != null) {
  160.                 BakedGlyph bakedGlyph = this.textRenderer.getFontStorage(Style.DEFAULT_FONT_ID).getRectangleBakedGlyph();
  161.                 VertexConsumer vertexConsumer = this.vertexConsumers.getBuffer(this.renderLayer);
  162.  
  163.                 for (BakedGlyph.Rectangle rectangle : this.rectangles) {
  164.                     bakedGlyph.drawRectangle(rectangle, this.matrix, vertexConsumer, this.light);
  165.                 }
  166.             }
  167.  
  168.             return this.x;
  169.         }
  170.     }
  171. }
  172.  
Advertisement
Add Comment
Please, Sign In to add comment