diff options
author | Aaron <51387595+AzureAaron@users.noreply.github.com> | 2024-05-04 19:14:06 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-04 19:14:06 -0400 |
commit | 4a4234d7c9d4f038d4fa418fb15ef24ce3fcc501 (patch) | |
tree | 6e87c6b67aabeb82dbe075d68c16b5492ff92c9b /src/main/java/de/hysky/skyblocker/utils/render | |
parent | ed0489539902d77595625aaa3bca4e328e1f7e88 (diff) | |
parent | f7b13895a4605e1d22e2c00e7b62c7365902d1aa (diff) | |
download | Skyblocker-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')
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 |