aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/hysky/skyblocker/utils/render
diff options
context:
space:
mode:
authorAaron <51387595+AzureAaron@users.noreply.github.com>2024-05-04 19:14:06 -0400
committerGitHub <noreply@github.com>2024-05-04 19:14:06 -0400
commit4a4234d7c9d4f038d4fa418fb15ef24ce3fcc501 (patch)
tree6e87c6b67aabeb82dbe075d68c16b5492ff92c9b /src/main/java/de/hysky/skyblocker/utils/render
parented0489539902d77595625aaa3bca4e328e1f7e88 (diff)
parentf7b13895a4605e1d22e2c00e7b62c7365902d1aa (diff)
downloadSkyblocker-4a4234d7c9d4f038d4fa418fb15ef24ce3fcc501.tar.gz
Skyblocker-4a4234d7c9d4f038d4fa418fb15ef24ce3fcc501.tar.bz2
Skyblocker-4a4234d7c9d4f038d4fa418fb15ef24ce3fcc501.zip
Merge pull request #669 from SkyblockerMod/1.20.5
1.20.5 & 1.20.6
Diffstat (limited to 'src/main/java/de/hysky/skyblocker/utils/render')
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/render/FrustumUtils.java4
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/render/MatrixHelper.java30
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/render/RenderHelper.java29
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/render/gui/AbstractCustomHypixelGUI.java2
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/render/gui/ContainerSolver.java9
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/render/gui/ContainerSolverManager.java23
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/render/title/TitleContainer.java6
7 files changed, 72 insertions, 31 deletions
diff --git a/src/main/java/de/hysky/skyblocker/utils/render/FrustumUtils.java b/src/main/java/de/hysky/skyblocker/utils/render/FrustumUtils.java
index 3fe79e43..d82b4497 100644
--- a/src/main/java/de/hysky/skyblocker/utils/render/FrustumUtils.java
+++ b/src/main/java/de/hysky/skyblocker/utils/render/FrustumUtils.java
@@ -1,7 +1,7 @@
package de.hysky.skyblocker.utils.render;
-import de.hysky.skyblocker.mixin.accessor.FrustumInvoker;
-import de.hysky.skyblocker.mixin.accessor.WorldRendererAccessor;
+import de.hysky.skyblocker.mixins.accessors.FrustumInvoker;
+import de.hysky.skyblocker.mixins.accessors.WorldRendererAccessor;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.render.Frustum;
import net.minecraft.util.math.Box;
diff --git a/src/main/java/de/hysky/skyblocker/utils/render/MatrixHelper.java b/src/main/java/de/hysky/skyblocker/utils/render/MatrixHelper.java
new file mode 100644
index 00000000..220dbf86
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/utils/render/MatrixHelper.java
@@ -0,0 +1,30 @@
+package de.hysky.skyblocker.utils.render;
+
+import org.joml.Matrix4f;
+
+import net.minecraft.client.util.math.MatrixStack;
+
+/**
+ * Matrix helper methods
+ */
+public interface MatrixHelper {
+
+ /**
+ * Copies the {@code matrix} into a new {@link Matrix4f}. This is necessary otherwise
+ * any transformations applied will affect other uses of the same matrix.
+ */
+ static Matrix4f copyOf(Matrix4f matrix) {
+ return new Matrix4f(matrix);
+ }
+
+ /**
+ * Creates a blank {@link MatrixStack} and sets it's position matrix to the supplied
+ * {@code positionMatrix}.
+ */
+ static MatrixStack toStack(Matrix4f positionMatrix) {
+ MatrixStack matrices = new MatrixStack();
+ matrices.peek().getPositionMatrix().set(positionMatrix);
+
+ return matrices;
+ }
+}
diff --git a/src/main/java/de/hysky/skyblocker/utils/render/RenderHelper.java b/src/main/java/de/hysky/skyblocker/utils/render/RenderHelper.java
index da179d0e..a6772fb2 100644
--- a/src/main/java/de/hysky/skyblocker/utils/render/RenderHelper.java
+++ b/src/main/java/de/hysky/skyblocker/utils/render/RenderHelper.java
@@ -3,8 +3,8 @@ package de.hysky.skyblocker.utils.render;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.logging.LogUtils;
import de.hysky.skyblocker.SkyblockerMod;
-import de.hysky.skyblocker.mixin.accessor.BeaconBlockEntityRendererInvoker;
-import de.hysky.skyblocker.mixin.accessor.DrawContextInvoker;
+import de.hysky.skyblocker.mixins.accessors.BeaconBlockEntityRendererInvoker;
+import de.hysky.skyblocker.mixins.accessors.DrawContextInvoker;
import de.hysky.skyblocker.utils.render.culling.OcclusionCulling;
import de.hysky.skyblocker.utils.render.title.Title;
import de.hysky.skyblocker.utils.render.title.TitleContainer;
@@ -26,6 +26,7 @@ import net.minecraft.util.Identifier;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Box;
import net.minecraft.util.math.Vec3d;
+
import org.joml.Matrix3f;
import org.joml.Matrix4f;
import org.joml.Vector3f;
@@ -243,15 +244,13 @@ public class RenderHelper {
}
public static void renderQuad(WorldRenderContext context, Vec3d[] points, float[] colorComponents, float alpha, boolean throughWalls) {
+ Matrix4f positionMatrix = new Matrix4f();
Vec3d camera = context.camera().getPos();
- MatrixStack matrices = context.matrixStack();
- matrices.push();
- matrices.translate(-camera.x, -camera.y, -camera.z);
+ positionMatrix.translate((float) -camera.x, (float) -camera.y, (float) -camera.z);
Tessellator tessellator = RenderSystem.renderThreadTesselator();
BufferBuilder buffer = tessellator.getBuffer();
- Matrix4f positionMatrix = matrices.peek().getPositionMatrix();
RenderSystem.setShader(GameRenderer::getPositionColorProgram);
RenderSystem.setShaderColor(1f, 1f, 1f, 1f);
@@ -268,8 +267,6 @@ public class RenderHelper {
RenderSystem.enableCull();
RenderSystem.depthFunc(GL11.GL_LEQUAL);
-
- matrices.pop();
}
public static void renderText(WorldRenderContext context, Text text, Vec3d pos, boolean throughWalls) {
@@ -290,19 +287,18 @@ public class RenderHelper {
* @param throughWalls whether the text should be able to be seen through walls or not.
*/
public static void renderText(WorldRenderContext context, OrderedText text, Vec3d pos, float scale, float yOffset, boolean throughWalls) {
- MatrixStack matrices = context.matrixStack();
- Vec3d camera = context.camera().getPos();
+ Matrix4f positionMatrix = new Matrix4f();
+ Camera camera = context.camera();
+ Vec3d cameraPos = camera.getPos();
TextRenderer textRenderer = client.textRenderer;
scale *= 0.025f;
- matrices.push();
- matrices.translate(pos.getX() - camera.getX(), pos.getY() - camera.getY(), pos.getZ() - camera.getZ());
- matrices.peek().getPositionMatrix().mul(RenderSystem.getModelViewMatrix());
- matrices.multiply(context.camera().getRotation());
- matrices.scale(-scale, -scale, scale);
+ positionMatrix
+ .translate((float) (pos.getX() - cameraPos.getX()), (float) (pos.getY() - cameraPos.getY()), (float) (pos.getZ() - cameraPos.getZ()))
+ .rotate(camera.getRotation())
+ .scale(-scale, -scale, scale);
- Matrix4f positionMatrix = matrices.peek().getPositionMatrix();
float xOffset = -textRenderer.getWidth(text) / 2f;
Tessellator tessellator = RenderSystem.renderThreadTesselator();
@@ -315,7 +311,6 @@ public class RenderHelper {
consumers.draw();
RenderSystem.depthFunc(GL11.GL_LEQUAL);
- matrices.pop();
}
/**
diff --git a/src/main/java/de/hysky/skyblocker/utils/render/gui/AbstractCustomHypixelGUI.java b/src/main/java/de/hysky/skyblocker/utils/render/gui/AbstractCustomHypixelGUI.java
index 4f648b8c..ef2e6bf9 100644
--- a/src/main/java/de/hysky/skyblocker/utils/render/gui/AbstractCustomHypixelGUI.java
+++ b/src/main/java/de/hysky/skyblocker/utils/render/gui/AbstractCustomHypixelGUI.java
@@ -1,6 +1,6 @@
package de.hysky.skyblocker.utils.render.gui;
-import de.hysky.skyblocker.mixin.accessor.HandledScreenAccessor;
+import de.hysky.skyblocker.mixins.accessors.HandledScreenAccessor;
import de.hysky.skyblocker.skyblock.auction.AuctionHouseScreenHandler;
import net.minecraft.client.gui.screen.ingame.HandledScreen;
import net.minecraft.entity.player.PlayerInventory;
diff --git a/src/main/java/de/hysky/skyblocker/utils/render/gui/ContainerSolver.java b/src/main/java/de/hysky/skyblocker/utils/render/gui/ContainerSolver.java
index 80a1ba9d..e2e057b3 100644
--- a/src/main/java/de/hysky/skyblocker/utils/render/gui/ContainerSolver.java
+++ b/src/main/java/de/hysky/skyblocker/utils/render/gui/ContainerSolver.java
@@ -1,11 +1,11 @@
package de.hysky.skyblocker.utils.render.gui;
import de.hysky.skyblocker.SkyblockerMod;
+import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import net.minecraft.client.gui.screen.ingame.GenericContainerScreen;
import net.minecraft.item.ItemStack;
import java.util.List;
-import java.util.Map;
import java.util.regex.Pattern;
/**
@@ -34,9 +34,12 @@ public abstract class ContainerSolver {
SkyblockerMod.getInstance().containerSolverManager.markDirty();
}
- protected abstract List<ColorHighlight> getColors(String[] groups, Map<Integer, ItemStack> slots);
+ protected void onClickSlot(int slot, ItemStack stack, int screenId, String[] groups) {
+ }
+
+ protected abstract List<ColorHighlight> getColors(String[] groups, Int2ObjectMap<ItemStack> slots);
- protected void trimEdges(Map<Integer, ItemStack> slots, int rows) {
+ protected void trimEdges(Int2ObjectMap<ItemStack> slots, int rows) {
for (int i = 0; i < rows; i++) {
slots.remove(9 * i);
slots.remove(9 * i + 8);
diff --git a/src/main/java/de/hysky/skyblocker/utils/render/gui/ContainerSolverManager.java b/src/main/java/de/hysky/skyblocker/utils/render/gui/ContainerSolverManager.java
index e5b2dddb..b37c57a4 100644
--- a/src/main/java/de/hysky/skyblocker/utils/render/gui/ContainerSolverManager.java
+++ b/src/main/java/de/hysky/skyblocker/utils/render/gui/ContainerSolverManager.java
@@ -1,7 +1,8 @@
package de.hysky.skyblocker.utils.render.gui;
import com.mojang.blaze3d.systems.RenderSystem;
-import de.hysky.skyblocker.mixin.accessor.HandledScreenAccessor;
+
+import de.hysky.skyblocker.mixins.accessors.HandledScreenAccessor;
import de.hysky.skyblocker.skyblock.accessories.newyearcakes.NewYearCakeBagHelper;
import de.hysky.skyblocker.skyblock.accessories.newyearcakes.NewYearCakesHelper;
import de.hysky.skyblocker.skyblock.dungeon.CroesusHelper;
@@ -13,6 +14,8 @@ import de.hysky.skyblocker.skyblock.experiment.ChronomatronSolver;
import de.hysky.skyblocker.skyblock.experiment.SuperpairsSolver;
import de.hysky.skyblocker.skyblock.experiment.UltrasequencerSolver;
import de.hysky.skyblocker.utils.Utils;
+import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
+import it.unimi.dsi.fastutil.ints.Int2ObjectRBTreeMap;
import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.ingame.GenericContainerScreen;
@@ -22,8 +25,6 @@ import net.minecraft.screen.slot.Slot;
import org.jetbrains.annotations.NotNull;
import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -36,6 +37,10 @@ public class ContainerSolverManager {
private ContainerSolver currentSolver = null;
private String[] groups;
private List<ColorHighlight> highlights;
+ /**
+ * Useful for keeping track of a solver's state in a Screen instance, such as if Hypixel closes & reopens a screen after every click (as they do with terminals).
+ */
+ private int screenId = 0;
public ContainerSolverManager() {
solvers = new ContainerSolver[]{
@@ -82,6 +87,7 @@ public class ContainerSolverManager {
matcher.usePattern(solver.getName());
matcher.reset();
if (matcher.matches()) {
+ ++screenId;
currentSolver = solver;
groups = new String[matcher.groupCount()];
for (int i = 0; i < groups.length; i++) {
@@ -89,6 +95,7 @@ public class ContainerSolverManager {
}
currentSolver.start(screen);
markDirty();
+
return;
}
}
@@ -107,6 +114,12 @@ public class ContainerSolverManager {
highlights = null;
}
+ public void onSlotClick(int slot, ItemStack stack) {
+ if (currentSolver != null) {
+ currentSolver.onClickSlot(slot, stack, screenId, groups);
+ }
+ }
+
public void onDraw(DrawContext context, List<Slot> slots) {
if (currentSolver == null)
return;
@@ -122,8 +135,8 @@ public class ContainerSolverManager {
RenderSystem.colorMask(true, true, true, true);
}
- private Map<Integer, ItemStack> slotMap(List<Slot> slots) {
- Map<Integer, ItemStack> slotMap = new TreeMap<>();
+ private Int2ObjectMap<ItemStack> slotMap(List<Slot> slots) {
+ Int2ObjectMap<ItemStack> slotMap = new Int2ObjectRBTreeMap<>();
for (int i = 0; i < slots.size(); i++) {
slotMap.put(i, slots.get(i).getStack());
}
diff --git a/src/main/java/de/hysky/skyblocker/utils/render/title/TitleContainer.java b/src/main/java/de/hysky/skyblocker/utils/render/title/TitleContainer.java
index 487e3d8b..a115bb2b 100644
--- a/src/main/java/de/hysky/skyblocker/utils/render/title/TitleContainer.java
+++ b/src/main/java/de/hysky/skyblocker/utils/render/title/TitleContainer.java
@@ -2,10 +2,10 @@ package de.hysky.skyblocker.utils.render.title;
import de.hysky.skyblocker.config.SkyblockerConfig;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
+import de.hysky.skyblocker.events.HudRenderEvents;
import de.hysky.skyblocker.utils.scheduler.Scheduler;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback;
-import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
@@ -26,7 +26,7 @@ public class TitleContainer {
private static final Set<Title> titles = new LinkedHashSet<>();
public static void init() {
- HudRenderCallback.EVENT.register(TitleContainer::render);
+ HudRenderEvents.BEFORE_CHAT.register(TitleContainer::render);
ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register(ClientCommandManager.literal("skyblocker")
.then(ClientCommandManager.literal("hud")
.then(ClientCommandManager.literal("titleContainer")
@@ -148,7 +148,7 @@ public class TitleContainer {
//Translate the matrix to the texts position and scale
context.getMatrices().push();
- context.getMatrices().translate(title.x, title.y, 200);
+ context.getMatrices().translate(title.x, title.y, 0);
context.getMatrices().scale(scale, scale, scale);
//Draw text