aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/me/xmrvizzy/skyblocker/utils/render/RenderHelper.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/me/xmrvizzy/skyblocker/utils/render/RenderHelper.java')
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/utils/render/RenderHelper.java39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/render/RenderHelper.java b/src/main/java/me/xmrvizzy/skyblocker/utils/render/RenderHelper.java
index 9dd8fa22..4b9d5aa4 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/utils/render/RenderHelper.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/utils/render/RenderHelper.java
@@ -10,10 +10,13 @@ import me.xmrvizzy.skyblocker.utils.render.title.Title;
import me.xmrvizzy.skyblocker.utils.render.title.TitleContainer;
import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext;
import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.font.TextRenderer;
+import net.minecraft.client.font.TextRenderer.TextLayerType;
import net.minecraft.client.render.*;
import net.minecraft.client.render.VertexFormat.DrawMode;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.sound.SoundEvents;
+import net.minecraft.text.OrderedText;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Box;
import net.minecraft.util.math.Vec3d;
@@ -27,6 +30,7 @@ import java.awt.*;
public class RenderHelper {
private static final Vec3d ONE = new Vec3d(1, 1, 1);
private static final int MAX_OVERWORLD_BUILD_HEIGHT = 319;
+ private static final MinecraftClient CLIENT = MinecraftClient.getInstance();
public static void renderFilledThroughWallsWithBeaconBeam(WorldRenderContext context, BlockPos pos, float[] colorComponents, float alpha) {
renderFilledThroughWalls(context, pos, colorComponents, alpha);
@@ -158,6 +162,41 @@ public class RenderHelper {
RenderSystem.defaultBlendFunc();
RenderSystem.enableCull();
RenderSystem.disableDepthTest();
+ }
+
+ /**
+ * Renders text in the world space.
+ *
+ * @param seeThrough Whether the text should be able to be seen through walls or not.
+ */
+ public static void renderText(WorldRenderContext context, Vec3d pos, OrderedText text, float scale, boolean seeThrough) {
+ Vec3d camera = context.camera().getPos();
+ MatrixStack matrices = context.matrixStack();
+ TextRenderer textRenderer = CLIENT.textRenderer;
+
+ Vec3d transformedPosition = pos.subtract(camera);
+ scale = 0.025f * scale;
+
+ matrices.push();
+ matrices.translate(transformedPosition.x, transformedPosition.y, transformedPosition.z);
+ matrices.peek().getPositionMatrix().mul(RenderSystem.getModelViewMatrix());
+ matrices.multiply(context.camera().getRotation());
+ matrices.scale(-scale, -scale, scale);
+
+ Matrix4f positionMatrix = matrices.peek().getPositionMatrix();
+ float h = -textRenderer.getWidth(text) / 2f;
+
+ Tessellator tessellator = RenderSystem.renderThreadTesselator();
+ BufferBuilder buffer = tessellator.getBuffer();
+ VertexConsumerProvider.Immediate consumers = VertexConsumerProvider.immediate(buffer);
+
+ RenderSystem.depthFunc(seeThrough ? GL11.GL_ALWAYS : GL11.GL_LEQUAL);
+
+ textRenderer.draw(text, h, 0, 0xFFFFFFFF, false, positionMatrix, consumers, TextLayerType.SEE_THROUGH, 0, LightmapTextureManager.MAX_LIGHT_COORDINATE);
+ consumers.draw();
+
+ RenderSystem.depthFunc(GL11.GL_LEQUAL);
+ matrices.pop();
}
/**