aboutsummaryrefslogtreecommitdiff
path: root/src/main
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
parentb23331eb654e2e26d17d13616c05ffe3af822290 (diff)
downloadSkyblocker-7d2446cdc4bac31cb29709068b2f874da87d4ea9.tar.gz
Skyblocker-7d2446cdc4bac31cb29709068b2f874da87d4ea9.tar.bz2
Skyblocker-7d2446cdc4bac31cb29709068b2f874da87d4ea9.zip
Bugfixing and Blaze solver
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java8
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/mixin/AccessorWorldRenderer.java15
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/mixin/ItemRendererMixin.java2
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonBlaze.java50
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMap.java5
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java27
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/utils/Boxes.java47
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/utils/FrustumUtils.java17
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/utils/RenderUtils.java235
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/utils/RenderUtilsLiving.java181
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java6
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/utils/Vertexer.java156
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/utils/color/LineColor.java66
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/utils/color/QuadColor.java115
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/utils/color/RenderColor.java27
-rw-r--r--src/main/resources/fabric.mod.json16
-rw-r--r--src/main/resources/skyblocker.mixins.json3
17 files changed, 625 insertions, 351 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java
index f81135de..6a9048d2 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java
@@ -1,19 +1,11 @@
package me.xmrvizzy.skyblocker;
-import java.util.Map;
-
-import com.google.gson.JsonObject;
-
-import org.apache.commons.lang3.ObjectUtils.Null;
-
import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
import me.xmrvizzy.skyblocker.skyblock.HotbarSlotLock;
import me.xmrvizzy.skyblocker.skyblock.dungeon.DungeonBlaze;
import me.xmrvizzy.skyblocker.utils.Utils;
import net.fabricmc.api.ClientModInitializer;
-import net.fabricmc.fabric.api.client.item.v1.ItemTooltipCallback;
import net.minecraft.client.MinecraftClient;
-import me.xmrvizzy.skyblocker.skyblock.item.PriceInfoTooltip;
public class SkyblockerMod implements ClientModInitializer {
public static final String NAMESPACE = "skyblocker";
private static int TICKS = 0;
diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/AccessorWorldRenderer.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/AccessorWorldRenderer.java
new file mode 100644
index 00000000..02990ea9
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/AccessorWorldRenderer.java
@@ -0,0 +1,15 @@
+package me.xmrvizzy.skyblocker.mixin;
+
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.gen.Accessor;
+
+import net.minecraft.client.render.Frustum;
+import net.minecraft.client.render.WorldRenderer;
+
+@Mixin(WorldRenderer.class)
+public interface AccessorWorldRenderer {
+
+ @Accessor
+ Frustum getFrustum();
+
+} \ No newline at end of file
diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/ItemRendererMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/ItemRendererMixin.java
index 90f82da6..002497ce 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/mixin/ItemRendererMixin.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/ItemRendererMixin.java
@@ -4,14 +4,12 @@ import com.mojang.blaze3d.systems.RenderSystem;
import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
import me.xmrvizzy.skyblocker.utils.ItemUtils;
import me.xmrvizzy.skyblocker.utils.Utils;
-import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.render.BufferBuilder;
import net.minecraft.client.render.Tessellator;
import net.minecraft.client.render.item.ItemRenderer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NbtCompound;
-import net.minecraft.text.LiteralText;
import net.minecraft.util.math.MathHelper;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Mixin;
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonBlaze.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonBlaze.java
index fd20c3a4..621c5cc4 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonBlaze.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonBlaze.java
@@ -1,51 +1,16 @@
package me.xmrvizzy.skyblocker.skyblock.dungeon;
-import java.util.List;
-
-import com.mojang.blaze3d.systems.RenderCall;
-
-import org.lwjgl.opengl.GL11;
-
+import me.xmrvizzy.skyblocker.utils.color.QuadColor;
import me.xmrvizzy.skyblocker.utils.RenderUtils;
-import me.xmrvizzy.skyblocker.utils.RenderUtilsLiving;
-import net.fabricmc.fabric.api.client.rendereregistry.v1.BlockEntityRendererRegistry;
-import net.fabricmc.fabric.api.client.rendereregistry.v1.EntityRendererRegistry;
-import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback;
import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext;
import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents;
-import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents.AfterEntities;
-import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents.BeforeEntities;
-import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents.DebugRender;
-import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents.Start;
-import net.fabricmc.fabric.api.renderer.v1.RendererAccess;
-import net.fabricmc.fabric.impl.client.indigo.renderer.render.BlockRenderContext;
-import net.fabricmc.fabric.impl.client.rendering.WorldRenderContextImpl;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer;
-import net.minecraft.client.gui.Drawable;
-import net.minecraft.client.gui.DrawableHelper;
-import net.minecraft.client.gui.hud.InGameHud;
-import net.minecraft.client.render.BufferBuilder;
-import net.minecraft.client.render.GameRenderer;
-import net.minecraft.client.render.Tessellator;
-import net.minecraft.client.render.VertexFormats;
-import net.minecraft.client.render.WorldRenderer;
-import net.minecraft.client.render.block.BlockModelRenderer;
-import net.minecraft.client.render.block.BlockRenderManager;
-import net.minecraft.client.render.block.entity.BlockEntityRenderDispatcher;
-import net.minecraft.client.render.block.entity.BlockEntityRenderer;
import net.minecraft.client.render.debug.DebugRenderer;
-import net.minecraft.client.render.debug.DebugRenderer.Renderer;
-import net.minecraft.client.render.entity.EntityRenderDispatcher;
-import net.minecraft.client.util.math.MatrixStack;
-import net.minecraft.util.math.Vec3f;
import net.minecraft.entity.Entity;
-import net.minecraft.entity.mob.BlazeEntity;
import net.minecraft.text.LiteralText;
import net.minecraft.util.Formatting;
-import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Box;
-import net.minecraft.util.math.Vec3d;
public class DungeonBlaze {
static Entity highestBlaze = null;
@@ -98,23 +63,26 @@ public class DungeonBlaze {
}
}
public static void blazeRenderer(WorldRenderContext wrc) {
+ QuadColor outlineColorRed = QuadColor.single( 0.0F, 1.0F, 0.0F, 1f);
+ QuadColor outlineColorGreen = QuadColor.single(1.0F, 0.0F, 0.0F, 1f);
try {
TextRenderer tr = MinecraftClient.getInstance().textRenderer;
DebugRenderer wc = MinecraftClient.getInstance().debugRenderer;
if(highestBlaze != null){
- /* Outline */
+ /* Outline */
Box blaze = highestBlaze.getBoundingBox().expand(1);
- RenderUtils.drawOutlineBox(blaze, 0.0F, 1.0F, 0.0F, 1f);
+ RenderUtils.drawBoxOutline(blaze,outlineColorRed,2.5f);
}
if(lowestBlaze != null){
- /* Outline */
+ /* Outline */
Box blaze = lowestBlaze.getBoundingBox().expand(1);
- RenderUtils.drawOutlineBox(blaze, 1.0F, 0.0F, 0.0F, 1f);
+ RenderUtils.drawBoxOutline(blaze,outlineColorGreen,2.5f);
}
}catch(Exception e) {
- System.out.println("BlazeRenderer: " + e.getStackTrace());
+ //System.out.println("BlazeRenderer: " + e.getStackTrace());
+ System.out.println("BlazeRenderer: " + e);
}
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMap.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMap.java
index c6da694b..3531094a 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMap.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMap.java
@@ -18,9 +18,12 @@ public class DungeonMap {
NbtCompound tag = item.getNbt();
if (tag != null && tag.contains("map")) {
+ String tag2 = tag.asString();
+ tag2 = tag2.substring(tag2.indexOf(":") + 1, tag2.indexOf("}"));
+ int tagid = Integer.parseInt(tag2);
VertexConsumerProvider.Immediate vertices = client.getBufferBuilders().getEffectVertexConsumers();
MapRenderer map = client.gameRenderer.getMapRenderer();
- MapState state = FilledMapItem.getOrCreateMapState(item, client.world);
+ MapState state = FilledMapItem.getMapState(tagid, client.world);
if (state == null) return;
matrices.push();
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java
index 59ff2e45..36b83670 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java
@@ -1,6 +1,17 @@
package me.xmrvizzy.skyblocker.skyblock.item;
+import com.google.gson.Gson;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.item.TooltipContext;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NbtCompound;
+import net.minecraft.text.LiteralText;
+import net.minecraft.text.Text;
+import net.minecraft.util.Formatting;
+
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
@@ -9,24 +20,8 @@ import java.math.RoundingMode;
import java.net.URL;
import java.text.DecimalFormat;
import java.util.List;
-import java.util.Map;
import java.util.zip.GZIPInputStream;
-import net.minecraft.client.MinecraftClient;
-import net.minecraft.client.item.TooltipContext;
-import net.minecraft.item.ItemStack;
-import net.minecraft.nbt.NbtCompound;
-import net.minecraft.text.LiteralText;
-import net.minecraft.text.Text;
-import net.minecraft.util.Formatting;
-
-import com.google.gson.Gson;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-
-
-import me.xmrvizzy.skyblocker.SkyblockerMod;
-
public class PriceInfoTooltip {
private JsonObject auctionPricesJson = null;
private JsonObject bazaarPricesJson = null;
diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Boxes.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Boxes.java
new file mode 100644
index 00000000..445bcbe5
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Boxes.java
@@ -0,0 +1,47 @@
+package me.xmrvizzy.skyblocker.utils;
+
+
+import net.minecraft.util.math.Box;
+import net.minecraft.util.math.Direction.Axis;
+import net.minecraft.util.math.Vec3d;
+
+public class Boxes {
+
+ /** Returns the vector of the min pos of this box. **/
+ public static Vec3d getMinVec(Box box) {
+ return new Vec3d(box.minX, box.minY, box.minZ);
+ }
+
+ /** Returns the vector of the max pos of this box. **/
+ public static Vec3d getMaxVec(Box box) {
+ return new Vec3d(box.maxX, box.maxY, box.maxZ);
+ }
+
+ /** Offsets this box so that minX, minY and minZ are all zero. **/
+ public static Box moveToZero(Box box) {
+ return box.offset(getMinVec(box).negate());
+ }
+
+ /** Returns the distance between to oppisite corners of the box. **/
+ public static double getCornerLength(Box box) {
+ return getMinVec(box).distanceTo(getMaxVec(box));
+ }
+
+ /** Returns the length of an axis in the box. **/
+ public static double getAxisLength(Box box, Axis axis) {
+ return box.getMax(axis) - box.getMin(axis);
+ }
+
+ /** Returns a box with each axis multiplied by the amount specified. **/
+ public static Box multiply(Box box, double amount) {
+ return multiply(box, amount, amount, amount);
+ }
+
+ /** Returns a box with each axis multiplied by the amount specified. **/
+ public static Box multiply(Box box, double x, double y, double z) {
+ return box.expand(
+ getAxisLength(box, Axis.X) * (x - 1) / 2d,
+ getAxisLength(box, Axis.Y) * (y - 1) / 2d,
+ getAxisLength(box, Axis.Z) * (z - 1) / 2d);
+ }
+}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/FrustumUtils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/FrustumUtils.java
new file mode 100644
index 00000000..6973aa1e
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/utils/FrustumUtils.java
@@ -0,0 +1,17 @@
+package me.xmrvizzy.skyblocker.utils;
+
+import me.xmrvizzy.skyblocker.mixin.AccessorWorldRenderer;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.render.Frustum;
+import net.minecraft.util.math.Box;
+
+public class FrustumUtils {
+
+ public static Frustum getFrustum() {
+ return ((AccessorWorldRenderer) MinecraftClient.getInstance().worldRenderer).getFrustum();
+ }
+
+ public static boolean isBoxVisible(Box box) {
+ return getFrustum().isVisible(box);
+ }
+} \ No newline at end of file
diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/RenderUtils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/RenderUtils.java
index 472c41d6..05044ba0 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/utils/RenderUtils.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/utils/RenderUtils.java
@@ -1,224 +1,89 @@
package me.xmrvizzy.skyblocker.utils;
-import com.mojang.blaze3d.platform.GlStateManager;
+import com.mojang.blaze3d.systems.RenderSystem;
+import me.xmrvizzy.skyblocker.utils.color.QuadColor;
import net.minecraft.client.MinecraftClient;
-import net.minecraft.client.render.*;
-import net.minecraft.client.render.block.entity.BlockEntityRenderDispatcher;
+import net.minecraft.client.render.BufferBuilder;
+import net.minecraft.client.render.Camera;
+import net.minecraft.client.render.GameRenderer;
+import net.minecraft.client.render.Tessellator;
+import net.minecraft.client.render.VertexFormat;
+import net.minecraft.client.render.VertexFormats;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.Entity;
-import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Box;
+import net.minecraft.util.math.Direction;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.Vec3d;
-import org.lwjgl.opengl.GL11;
-import org.lwjgl.opengl.GL14;
+import net.minecraft.util.math.Vec3f;
public class RenderUtils {
- public static void drawFilledBox(BlockPos blockPos, float r, float g, float b, float a) {
- drawFilledBox(new Box(blockPos), r, g, b, a);
- }
-
- public static void drawFilledBox(Box box, float r, float g, float b, float a) {
- gl11Setup();
-
- // Fill
- Tessellator tessellator = Tessellator.getInstance();
- BufferBuilder buffer = tessellator.getBuffer();
- VertexFormat.DrawMode drawMode = VertexFormat.DrawMode.QUADS;
- buffer.begin(drawMode, VertexFormats.POSITION_COLOR);
-// buffer.begin(5, VertexFormats.POSITION_COLOR);
- WorldRenderer.drawBox(buffer,
- box.minX, box.minY, box.minZ,
- box.maxX, box.maxY, box.maxZ, r, g, b, a / 2f);
- tessellator.draw();
+ // -------------------- Outline Boxes --------------------
- // Outline
- buffer.begin(drawMode, VertexFormats.POSITION_COLOR);
-
-// buffer.begin(3, VertexFormats.POSITION_COLOR);
- buffer.vertex(box.minX, box.minY, box.minZ).color(r, g, b, a).next();
- buffer.vertex(box.minX, box.minY, box.maxZ).color(r, g, b, a).next();
- buffer.vertex(box.maxX, box.minY, box.maxZ).color(r, g, b, a).next();
- buffer.vertex(box.maxX, box.minY, box.minZ).color(r, g, b, a).next();
- buffer.vertex(box.minX, box.minY, box.minZ).color(r, g, b, a).next();
- buffer.vertex(box.minX, box.maxY, box.minZ).color(r, g, b, a).next();
- buffer.vertex(box.maxX, box.maxY, box.minZ).color(r, g, b, a).next();
- buffer.vertex(box.maxX, box.maxY, box.maxZ).color(r, g, b, a).next();
- buffer.vertex(box.minX, box.maxY, box.maxZ).color(r, g, b, a).next();
- buffer.vertex(box.minX, box.maxY, box.minZ).color(r, g, b, a).next();
- buffer.vertex(box.minX, box.minY, box.maxZ).color(r, g, b, 0f).next();
- buffer.vertex(box.minX, box.maxY, box.maxZ).color(r, g, b, a).next();
- buffer.vertex(box.maxX, box.minY, box.maxZ).color(r, g, b, 0f).next();
- buffer.vertex(box.maxX, box.maxY, box.maxZ).color(r, g, b, a).next();
- buffer.vertex(box.maxX, box.minY, box.minZ).color(r, g, b, 0f).next();
- buffer.vertex(box.maxX, box.maxY, box.minZ).color(r, g, b, a).next();
- tessellator.draw();
-
- gl11Cleanup();
- }
-
- public static void drawOutlineBox(BlockPos blockPos, float r, float g, float b, float a) {
- drawOutlineBox(new Box(blockPos), r, g, b, a);
- }
-
- public static void fillGradient(MatrixStack matrix, int x1, int y1, int x2, int y2, int color1, int color2) {
- float float_1 = (color1 >> 24 & 255) / 255.0F;
- float float_2 = (color1 >> 16 & 255) / 255.0F;
- float float_3 = (color1 >> 8 & 255) / 255.0F;
- float float_4 = (color1 & 255) / 255.0F;
- float float_5 = (color2 >> 24 & 255) / 255.0F;
- float float_6 = (color2 >> 16 & 255) / 255.0F;
- float float_7 = (color2 >> 8 & 255) / 255.0F;
- float float_8 = (color2 & 255) / 255.0F;
- Tessellator tessellator_1 = Tessellator.getInstance();
- BufferBuilder bufferBuilder_1 = tessellator_1.getBuffer();
-
- VertexFormat.DrawMode drawMode = VertexFormat.DrawMode.QUADS;
- bufferBuilder_1.begin(drawMode, VertexFormats.POSITION_COLOR);
-
-// bufferBuilder_1.begin(7, VertexFormats.POSITION_COLOR);
- bufferBuilder_1.vertex(x1, y1, 0).color(float_2, float_3, float_4, float_1).next();
- bufferBuilder_1.vertex(x1, y2, 0).color(float_2, float_3, float_4, float_1).next();
- bufferBuilder_1.vertex(x2, y2, 0).color(float_6, float_7, float_8, float_5).next();
- bufferBuilder_1.vertex(x2, y1, 0).color(float_6, float_7, float_8, float_5).next();
- tessellator_1.draw();
- }
+ public static void drawBoxOutline(Box box, QuadColor color, float lineWidth, Direction... excludeDirs) {
+ if (!FrustumUtils.isBoxVisible(box)) {
+ return;
+ }
+ setup();
- public static void drawOutlineBox(Box box, float r, float g, float b, float a) {
- gl11Setup();
+ MatrixStack matrices = matrixFrom(box.minX, box.minY, box.minZ);
Tessellator tessellator = Tessellator.getInstance();
BufferBuilder buffer = tessellator.getBuffer();
// Outline
- VertexFormat.DrawMode drawMode = VertexFormat.DrawMode.QUADS;
- buffer.begin(drawMode, VertexFormats.POSITION_COLOR);
-
-// buffer.begin(3, VertexFormats.POSITION_COLOR);
- buffer.vertex(box.minX, box.minY, box.minZ).color(r, g, b, a).next();
- buffer.vertex(box.minX, box.minY, box.maxZ).color(r, g, b, a).next();
- buffer.vertex(box.maxX, box.minY, box.maxZ).color(r, g, b, a).next();
- buffer.vertex(box.maxX, box.minY, box.minZ).color(r, g, b, a).next();
- buffer.vertex(box.minX, box.minY, box.minZ).color(r, g, b, a).next();
- buffer.vertex(box.minX, box.maxY, box.minZ).color(r, g, b, a).next();
- buffer.vertex(box.maxX, box.maxY, box.minZ).color(r, g, b, a).next();
- buffer.vertex(box.maxX, box.maxY, box.maxZ).color(r, g, b, a).next();
- buffer.vertex(box.minX, box.maxY, box.maxZ).color(r, g, b, a).next();
- buffer.vertex(box.minX, box.maxY, box.minZ).color(r, g, b, a).next();
- buffer.vertex(box.minX, box.minY, box.maxZ).color(r, g, b, 0f).next();
- buffer.vertex(box.minX, box.maxY, box.maxZ).color(r, g, b, a).next();
- buffer.vertex(box.maxX, box.minY, box.maxZ).color(r, g, b, 0f).next();
- buffer.vertex(box.maxX, box.maxY, box.maxZ).color(r, g, b, a).next();
- buffer.vertex(box.maxX, box.minY, box.minZ).color(r, g, b, 0f).next();
- buffer.vertex(box.maxX, box.maxY, box.minZ).color(r, g, b, a).next();
- tessellator.draw();
-
- gl11Cleanup();
- }
-
- public static void drawLine(double x1, double y1, double z1, double x2, double y2, double z2, float r, float g, float b, float t) {
- gl11Setup();
- GL11.glLineWidth(t);
+ RenderSystem.disableCull();
+ RenderSystem.setShader(GameRenderer::getRenderTypeLinesShader);
+ RenderSystem.lineWidth(lineWidth);
- Tessellator tessellator = Tessellator.getInstance();
- BufferBuilder buffer = tessellator.getBuffer();
-
- VertexFormat.DrawMode drawMode = VertexFormat.DrawMode.QUADS;
- buffer.begin(drawMode, VertexFormats.POSITION_COLOR);
-
-// buffer.begin(3, VertexFormats.POSITION_COLOR);
- buffer.vertex(x1, y1, z1).color(r, g, b, 0.0F).next();
- buffer.vertex(x1, y1, z1).color(r, g, b, 1.0F).next();
- buffer.vertex(x2, y2, z2).color(r, g, b, 1.0F).next();
+ buffer.begin(VertexFormat.DrawMode.LINES, VertexFormats.LINES);
+ Vertexer.vertexBoxLines(matrices, buffer, Boxes.moveToZero(box), color, excludeDirs);
tessellator.draw();
- gl11Cleanup();
+ RenderSystem.enableCull();
+ cleanup();
}
- public static void drawRect(float x, float y, float w, float h, int color, float alpha) {
- float red = (float) (color >> 16 & 255) / 255.0F;
- float green = (float) (color >> 8 & 255) / 255.0F;
- float blue = (float) (color & 255) / 255.0F;
- final Tessellator tessellator = Tessellator.getInstance();
- final BufferBuilder bufferbuilder = tessellator.getBuffer();
- GlStateManager._enableBlend();
- GlStateManager._disableTexture();
- GlStateManager._blendFuncSeparate(770, 771, 1, 0);
-
- VertexFormat.DrawMode drawMode = VertexFormat.DrawMode.QUADS;
- bufferbuilder.begin(drawMode, VertexFormats.POSITION_COLOR);
-
-// bufferbuilder.begin(7, VertexFormats.POSITION_COLOR);
- bufferbuilder.vertex(x, h, 0.0D).color(red, green, blue, alpha).next();
- bufferbuilder.vertex(w, h, 0.0D).color(red, green, blue, alpha).next();
- bufferbuilder.vertex(w, y, 0.0D).color(red, green, blue, alpha).next();
- bufferbuilder.vertex(x, y, 0.0D).color(red, green, blue, alpha).next();
- tessellator.draw();
- GlStateManager._enableTexture();
- GlStateManager._disableBlend();
- }
+ // -------------------- Utils --------------------
+
+ public static MatrixStack matrixFrom(double x, double y, double z) {
+ MatrixStack matrices = new MatrixStack();
- public static void offsetRender() {
- //debg
Camera camera = MinecraftClient.getInstance().gameRenderer.getCamera();
- Vec3d camPos = camera.getPos();
- GL11.glRotated(MathHelper.wrapDegrees(camera.getPitch()), 1, 0, 0);
- GL11.glRotated(MathHelper.wrapDegrees(camera.getYaw() + 180.0), 0, 1, 0);
- GL11.glTranslated(-camPos.x, -camPos.y, -camPos.z);
- }
+ matrices.multiply(Vec3f.POSITIVE_X.getDegreesQuaternion(camera.getPitch()));
+ matrices.multiply(Vec3f.POSITIVE_Y.getDegreesQuaternion(camera.getYaw() + 180.0F));
- public static void gl11Setup() {
- GL11.glPushMatrix();
- GL11.glEnable(GL11.GL_BLEND);
- GL14.glBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ZERO);
- GL11.glLineWidth(2.5F);
- GL11.glDisable(GL11.GL_TEXTURE_2D);
- GL11.glEnable(GL11.GL_LINE_SMOOTH);
- offsetRender();
- }
+ matrices.translate(x - camera.getPos().x, y - camera.getPos().y, z - camera.getPos().z);
- public static void gl11Cleanup() {
- GL11.glDisable(GL11.GL_LINE_SMOOTH);
- GL11.glEnable(GL11.GL_TEXTURE_2D);
- GL11.glDisable(GL11.GL_BLEND);
- GL11.glPopMatrix();
+ return matrices;
}
+ public static Vec3d getInterpolationOffset(Entity e) {
+ if (MinecraftClient.getInstance().isPaused()) {
+ return Vec3d.ZERO;
+ }
- public static void DrawPolygon(double x, double y, int radius, int sides, int color) {
- GL11.glEnable(GL11.GL_BLEND);
- GL11.glDisable(GL11.GL_TEXTURE_2D);
- GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
-
- final Tessellator tessellator = Tessellator.getInstance();
- final BufferBuilder bufferbuilder = tessellator.getBuffer();
-
- VertexFormat.DrawMode drawMode = VertexFormat.DrawMode.TRIANGLE_FAN;
- bufferbuilder.begin(drawMode, VertexFormats.POSITION_COLOR);
-
-// bufferbuilder.begin(GL11.GL_TRIANGLE_FAN, VertexFormats.POSITION);
-
- float alpha = (float) (color >> 24 & 255) / 255.0F;
- float red = (float) (color >> 16 & 255) / 255.0F;
- float green = (float) (color >> 8 & 255) / 255.0F;
- float blue = (float) (color & 255) / 255.0F;
-
- bufferbuilder.vertex(x, y, 0).next();
- final double TWICE_PI = Math.PI * 2;
+ double tickDelta = (double) MinecraftClient.getInstance().getTickDelta();
+ return new Vec3d(
+ e.getX() - MathHelper.lerp(tickDelta, e.lastRenderX, e.getX()),
+ e.getY() - MathHelper.lerp(tickDelta, e.lastRenderY, e.getY()),
+ e.getZ() - MathHelper.lerp(tickDelta, e.lastRenderZ, e.getZ()));
+ }
- for (int i = 0; i <= sides; i++) {
- double angle = (TWICE_PI * i / sides) + Math.toRadians(180);
- bufferbuilder.vertex(x + Math.sin(angle) * radius, y + Math.cos(angle) * radius, 0).next();
- }
- tessellator.draw();
+ public static void setup() {
+ RenderSystem.enableBlend();
+ RenderSystem.defaultBlendFunc();
+ RenderSystem.disableTexture();
+ }
- GL11.glEnable(GL11.GL_TEXTURE_2D);
- GL11.glDisable(GL11.GL_BLEND);
+ public static void cleanup() {
+ RenderSystem.disableBlend();
+ RenderSystem.enableTexture();
}
} \ No newline at end of file
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));