aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/me/xmrvizzy/skyblocker/utils/RenderUtilsLiving.java
diff options
context:
space:
mode:
authorLifeIsAParadox <LifeIsAParadox@users.noreply.github.com>2021-09-14 08:47:32 +0200
committerLifeIsAParadox <LifeIsAParadox@users.noreply.github.com>2021-09-14 08:47:32 +0200
commit7d2446cdc4bac31cb29709068b2f874da87d4ea9 (patch)
tree13117dbf6a53e1ca8a474d4fce85c21b09c698f1 /src/main/java/me/xmrvizzy/skyblocker/utils/RenderUtilsLiving.java
parentb23331eb654e2e26d17d13616c05ffe3af822290 (diff)
downloadSkyblocker-7d2446cdc4bac31cb29709068b2f874da87d4ea9.tar.gz
Skyblocker-7d2446cdc4bac31cb29709068b2f874da87d4ea9.tar.bz2
Skyblocker-7d2446cdc4bac31cb29709068b2f874da87d4ea9.zip
Bugfixing and Blaze solver
Diffstat (limited to 'src/main/java/me/xmrvizzy/skyblocker/utils/RenderUtilsLiving.java')
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/utils/RenderUtilsLiving.java181
1 files changed, 92 insertions, 89 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/RenderUtilsLiving.java b/src/main/java/me/xmrvizzy/skyblocker/utils/RenderUtilsLiving.java
index 6fca52a0..f6fb1bc1 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/utils/RenderUtilsLiving.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/utils/RenderUtilsLiving.java
@@ -19,124 +19,127 @@ package me.xmrvizzy.skyblocker.utils;
*/
+import java.lang.reflect.Field;
+
+import org.apache.commons.lang3.reflect.FieldUtils;
+
+import com.mojang.blaze3d.systems.RenderSystem;
+
import net.minecraft.client.MinecraftClient;
-import net.minecraft.client.render.BufferBuilder;
+import net.minecraft.client.render.Camera;
+import net.minecraft.client.render.DiffuseLighting;
+import net.minecraft.client.render.OverlayTexture;
import net.minecraft.client.render.Tessellator;
-import net.minecraft.client.render.VertexFormat;
-import net.minecraft.client.render.VertexFormats;
-import net.minecraft.client.render.model.json.ModelTransformation.Mode;
-import net.minecraft.client.resource.language.I18n;
+import net.minecraft.client.render.VertexConsumerProvider;
+import net.minecraft.client.render.model.json.ModelTransformation;
import net.minecraft.client.util.math.MatrixStack;
-import net.minecraft.enchantment.Enchantment;
-import net.minecraft.enchantment.EnchantmentHelper;
-import net.minecraft.enchantment.Enchantments;
-import net.minecraft.item.BlockItem;
import net.minecraft.item.ItemStack;
-import net.minecraft.util.math.MathHelper;
-import org.lwjgl.opengl.GL11;
-import org.lwjgl.opengl.GL14;
-
-import java.awt.*;
-import java.util.Map.Entry;
+import net.minecraft.text.Text;
+import net.minecraft.util.math.Vec3f;
public class RenderUtilsLiving {
- private static MinecraftClient mc = MinecraftClient.getInstance();
- public static void drawText(String str, double x, double y, double z, double scale)
- {
- drawText(str, x, y, z, scale, 0.0F, 0.0F, 0.0F);
+ private static final MinecraftClient mc = MinecraftClient.getInstance();
+ private static Field shaderLightField;
+
+ /** Draws text in the world. **/
+ public static void drawText(Text text, double x, double y, double z, double scale, boolean shadow) {
+ drawText(text, x, y, z, 0, 0, scale, shadow);
}
- public static void drawText(String str, double x, double y, double z, double scale, float red, float green, float blue) {
- glSetup(x, y, z);
- GL11.glScaled(-0.025 * scale, -0.025 * scale, 0.025 * scale);
+ /** Draws text in the world. **/
+ public static void drawText(Text text, double x, double y, double z, double offX, double offY, double scale, boolean fill) {
+ MatrixStack matrices = matrixFrom(x, y, z);
+
+ Camera camera = mc.gameRenderer.getCamera();
+ matrices.multiply(Vec3f.POSITIVE_Y.getDegreesQuaternion(-camera.getYaw()));
+ matrices.multiply(Vec3f.POSITIVE_X.getDegreesQuaternion(camera.getPitch()));
- int i = mc.textRenderer.getWidth(str) / 2;
- GL11.glDisable(GL11.GL_TEXTURE_2D);
- Tessellator tessellator = Tessellator.getInstance();
- BufferBuilder bufferbuilder = tessellator.getBuffer();
+ RenderSystem.enableBlend();
+ RenderSystem.defaultBlendFunc();
- VertexFormat.DrawMode drawMode = VertexFormat.DrawMode.QUADS;
- bufferbuilder.begin(drawMode, VertexFormats.POSITION_COLOR);
+ matrices.translate(offX, offY, 0);
+ matrices.scale(-0.025f * (float) scale, -0.025f * (float) scale, 1);
-// bufferbuilder.begin(7, VertexFormats.POSITION_COLOR);
- float f = mc.options.getTextBackgroundOpacity(0.25F);
- bufferbuilder.vertex(-i - 1, -1, 0.0D).color(red, green, blue, f).next();
- bufferbuilder.vertex(-i - 1, 8, 0.0D).color(red, green, blue, f).next();
- bufferbuilder.vertex(i + 1, 8, 0.0D).color(red, green, blue, f).next();
- bufferbuilder.vertex(i + 1, -1, 0.0D).color(red, green, blue, f).next();
- tessellator.draw();
- GL11.glEnable(GL11.GL_TEXTURE_2D);
+ int halfWidth = mc.textRenderer.getWidth(text) / 2;
- mc.textRenderer.draw(new MatrixStack(), str, -i, 0, 553648127);
- mc.textRenderer.draw(new MatrixStack(), str, -i, 0, -1);
+ VertexConsumerProvider.Immediate immediate = VertexConsumerProvider.immediate(Tessellator.getInstance().getBuffer());
- glCleanup();
+ if (fill) {
+ int opacity = (int) (MinecraftClient.getInstance().options.getTextBackgroundOpacity(0.25F) * 255.0F) << 24;
+ mc.textRenderer.draw(text, -halfWidth, 0f, 553648127, false, matrices.peek().getModel(), immediate, true, opacity, 0xf000f0);
+ immediate.draw();
+ } else {
+ matrices.push();
+ matrices.translate(1, 1, 0);
+ mc.textRenderer.draw(text.copy(), -halfWidth, 0f, 0x202020, false, matrices.peek().getModel(), immediate, true, 0, 0xf000f0);
+ immediate.draw();
+ matrices.pop();
+ }
+
+ mc.textRenderer.draw(text, -halfWidth, 0f, -1, false, matrices.peek().getModel(), immediate, true, 0, 0xf000f0);
+ immediate.draw();
+
+ RenderSystem.disableBlend();
}
- public static void drawItem(double x, double y, double z, double offX, double offY, double scale, ItemStack item) {
- glSetup(x, y, z);
+ /** Draws a 2D gui items somewhere in the world. **/
+ public static void drawGuiItem(double x, double y, double z, double offX, double offY, double scale, ItemStack item) {
+ if (item.isEmpty()) {
+ return;
+ }
- GL11.glScaled(0.4 * scale, 0.4 * scale, 0);
+ MatrixStack matrices = matrixFrom(x, y, z);
- GL11.glTranslated(offX, offY, 0);
- if (item.getItem() instanceof BlockItem) GL11.glRotatef(180F, 1F, 180F, 10F);
- mc.getItemRenderer().renderItem(new ItemStack(item.getItem()), Mode.GUI, 0, 0, new MatrixStack(), mc.getBufferBuilders().getEntityVertexConsumers(),42);
- if (item.getItem() instanceof BlockItem) GL11.glRotatef(-180F, -1F, -180F, -10F);
- GL11.glDisable(GL11.GL_LIGHTING);
+ Camera camera = mc.gameRenderer.getCamera();
+ matrices.multiply(Vec3f.POSITIVE_Y.getDegreesQuaternion(-camera.getYaw()));
+ matrices.multiply(Vec3f.POSITIVE_X.getDegreesQuaternion(camera.getPitch()));
- GL11.glScalef(-0.05F, -0.05F, 0);
+ matrices.translate(offX, offY, 0);
+ matrices.scale((float) scale, (float) scale, 0.001f);
- if (item.getCount() > 0) {
- int w = mc.textRenderer.getWidth("x" + item.getCount()) / 2;
- mc.textRenderer.drawWithShadow(new MatrixStack(), "x" + item.getCount(), 7 - w, 5, 0xffffff);
- }
+ matrices.multiply(Vec3f.POSITIVE_Y.getDegreesQuaternion(180f));
- GL11.glScalef(0.85F, 0.85F, 0.85F);
+ //mc.getBufferBuilders().getEntityVertexConsumers().draw();
- int c = 0;
- for (Entry<Enchantment, Integer> m : EnchantmentHelper.get(item).entrySet()) {
- int w1 = mc.textRenderer.getWidth(I18n.translate(m.getKey().getName(2).asString()).substring(0, 2) + m.getValue()) / 2;
- mc.textRenderer.drawWithShadow(new MatrixStack(),
- I18n.translate(m.getKey().getName(2).asString()).substring(0, 2) + m.getValue(), -4 - w1, c * 10 - 1,
- m.getKey() == Enchantments.VANISHING_CURSE || m.getKey() == Enchantments.BINDING_CURSE
- ? 0xff5050 : 0xffb0e0);
- c--;
- }
+ RenderSystem.enableBlend();
+ RenderSystem.defaultBlendFunc();
- GL11.glScalef(0.6F, 0.6F, 0.6F);
- String dur = item.getMaxDamage() - item.getDamage() + "";
- int color = 0x000000;
- try {
- color = MathHelper.hsvToRgb(((float) (item.getMaxDamage() - item.getDamage()) / item.getMaxDamage()) / 3.0F, 1.0F, 1.0F);
- } catch (Exception e) {
- }
- if (item.isDamageable()) mc.textRenderer.drawWithShadow(new MatrixStack(), dur, -8 - dur.length() * 3, 15,
- new Color(color >> 16 & 255, color >> 8 & 255, color & 255).getRGB());
+ Vec3f[] currentLight = getCurrentLight();
+ DiffuseLighting.disableGuiDepthLighting();
+
+ mc.getBufferBuilders().getEntityVertexConsumers().draw();
+
+ mc.getItemRenderer().renderItem(item, ModelTransformation.Mode.GUI, 0xF000F0,
+ OverlayTexture.DEFAULT_UV, matrices, mc.getBufferBuilders().getEntityVertexConsumers(), 0);
+
+ mc.getBufferBuilders().getEntityVertexConsumers().draw();
- glCleanup();
+ RenderSystem.setShaderLights(currentLight[0], currentLight[1]);
+ RenderSystem.disableBlend();
}
- public static void glSetup(double x, double y, double z) {
- GL11.glPushMatrix();
- RenderUtils.offsetRender();
- GL11.glTranslated(x, y, z);
- GL11.glNormal3f(0.0F, 1.0F, 0.0F);
- GL11.glRotatef(-mc.player.getYaw(), 0.0F, 1.0F, 0.0F);
- GL11.glRotatef(mc.player.getPitch(), 1.0F, 0.0F, 0.0F);
- //GL11.glDisable(GL11.GL_LIGHTING);
- GL11.glDisable(GL11.GL_DEPTH_TEST);
+ public static MatrixStack matrixFrom(double x, double y, double z) {
+ MatrixStack matrices = new MatrixStack();
- GL11.glEnable(GL11.GL_BLEND);
- GL14.glBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ZERO);
+ Camera camera = mc.gameRenderer.getCamera();
+ matrices.multiply(Vec3f.POSITIVE_X.getDegreesQuaternion(camera.getPitch()));
+ matrices.multiply(Vec3f.POSITIVE_Y.getDegreesQuaternion(camera.getYaw() + 180.0F));
+ matrices.translate(x - camera.getPos().x, y - camera.getPos().y, z - camera.getPos().z);
+
+ return matrices;
}
- public static void glCleanup() {
- //GL11.glEnable(GL11.GL_LIGHTING);
- GL11.glDisable(GL11.GL_BLEND);
- GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
- GL11.glEnable(GL11.GL_DEPTH_TEST);
- GL11.glPopMatrix();
+ public static Vec3f[] getCurrentLight() {
+ if (shaderLightField == null) {
+ shaderLightField = FieldUtils.getField(RenderSystem.class, "shaderLightDirections", true);
+ }
+
+ try {
+ return (Vec3f[]) shaderLightField.get(null);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
}
} \ No newline at end of file