From f05ef4128f4b0bcb9d0bf1a691ce17037f1bc765 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Sun, 16 Jul 2023 04:04:42 -0400 Subject: Rendering Improvements, Fixes + Occlusion Culling --- .../me/xmrvizzy/skyblocker/utils/RenderHelper.java | 45 ++++++++++++++------ .../me/xmrvizzy/skyblocker/utils/RenderUtils.java | 2 +- .../skyblocker/utils/culling/OcclusionCulling.java | 48 ++++++++++++++++++++++ .../skyblocker/utils/culling/WorldProvider.java | 29 +++++++++++++ .../skyblocker/utils/culling/package-info.java | 4 ++ 5 files changed, 115 insertions(+), 13 deletions(-) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/utils/culling/OcclusionCulling.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/utils/culling/WorldProvider.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/utils/culling/package-info.java (limited to 'src/main/java/me/xmrvizzy/skyblocker/utils') diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java b/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java index 6fa93735..a1221549 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java @@ -2,22 +2,29 @@ package me.xmrvizzy.skyblocker.utils; import me.x150.renderer.render.Renderer3d; import me.xmrvizzy.skyblocker.mixin.accessor.BeaconBlockEntityRendererInvoker; +import me.xmrvizzy.skyblocker.utils.culling.OcclusionCulling; import me.xmrvizzy.skyblocker.utils.title.Title; import me.xmrvizzy.skyblocker.utils.title.TitleContainer; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.render.block.entity.BeaconBlockEntityRenderer; +import net.minecraft.client.render.BufferBuilder; +import net.minecraft.client.render.Camera; +import net.minecraft.client.render.Tessellator; +import net.minecraft.client.render.VertexConsumerProvider; +import net.minecraft.client.util.math.MatrixStack; import net.minecraft.sound.SoundEvent; import net.minecraft.text.Text; import net.minecraft.util.Formatting; import net.minecraft.util.Identifier; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; - import java.awt.*; +import com.mojang.blaze3d.systems.RenderSystem; + public class RenderHelper { private static final Vec3d ONE = new Vec3d(1, 1, 1); + private static final int MAX_OVERWORLD_BUILD_HEIGHT = 319; public static void renderFilledThroughWallsWithBeaconBeam(WorldRenderContext context, BlockPos pos, float[] colorComponents, float alpha) { renderFilledThroughWalls(context, pos, colorComponents, alpha); @@ -25,26 +32,40 @@ public class RenderHelper { } public static void renderFilledThroughWalls(WorldRenderContext context, BlockPos pos, float[] colorComponents, float alpha) { - Renderer3d.renderThroughWalls(); - renderFilled(context, pos, colorComponents, alpha); - Renderer3d.stopRenderThroughWalls(); + if (FrustumUtils.isVisible(pos.getX(), pos.getY(), pos.getZ(), pos.getX() + 1, pos.getY() + 1, pos.getZ() + 1)) { + Renderer3d.renderThroughWalls(); + renderFilled(context, pos, colorComponents, alpha); + Renderer3d.stopRenderThroughWalls(); + } } public static void renderFilledIfVisible(WorldRenderContext context, BlockPos pos, float[] colorComponents, float alpha) { - if (FrustumUtils.isVisible(pos.getX(), pos.getY(), pos.getZ(), pos.getX() + 1, pos.getY() + 1, pos.getZ() + 1)) { + if (OcclusionCulling.isVisible(pos.getX(), pos.getY(), pos.getZ(), pos.getX() + 1, pos.getY() + 1, pos.getZ() + 1)) { renderFilled(context, pos, colorComponents, alpha); } } - public static void renderFilled(WorldRenderContext context, BlockPos pos, float[] colorComponents, float alpha) { + private static void renderFilled(WorldRenderContext context, BlockPos pos, float[] colorComponents, float alpha) { Renderer3d.renderFilled(context.matrixStack(), new Color(colorComponents[0], colorComponents[1], colorComponents[2], alpha), Vec3d.of(pos), ONE); } - public static void renderBeaconBeam(WorldRenderContext context, BlockPos pos, float[] colorComponents) { - context.matrixStack().push(); - context.matrixStack().translate(pos.getX() - context.camera().getPos().x, pos.getY() - context.camera().getPos().y, pos.getZ() - context.camera().getPos().z); - BeaconBlockEntityRendererInvoker.renderBeam(context.matrixStack(), context.consumers(), context.tickDelta(), context.world().getTime(), 0, BeaconBlockEntityRenderer.MAX_BEAM_HEIGHT, colorComponents); - context.matrixStack().pop(); + private static void renderBeaconBeam(WorldRenderContext context, BlockPos pos, float[] colorComponents) { + if (FrustumUtils.isVisible(pos.getX(), pos.getY(), pos.getZ(), pos.getX() + 1, MAX_OVERWORLD_BUILD_HEIGHT, pos.getZ() + 1)) { + MatrixStack matrices = context.matrixStack(); + Vec3d camera = context.camera().getPos(); + + matrices.push(); + matrices.translate(pos.getX() - camera.x, pos.getY() - camera.y, pos.getZ() - camera.z); + + Tessellator tessellator = RenderSystem.renderThreadTesselator(); + BufferBuilder buffer = tessellator.getBuffer(); + VertexConsumerProvider.Immediate consumer = VertexConsumerProvider.immediate(buffer); + + BeaconBlockEntityRendererInvoker.renderBeam(matrices, consumer, context.tickDelta(), context.world().getTime(), 0, MAX_OVERWORLD_BUILD_HEIGHT, colorComponents); + + consumer.draw(); + matrices.pop(); + } } public static void displayTitleAndPlaySound(int stayTicks, int fadeOutTicks, String titleKey, Formatting formatting) { diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/RenderUtils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/RenderUtils.java index 73ad468f..61f79ae1 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/RenderUtils.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/RenderUtils.java @@ -82,7 +82,7 @@ public class RenderUtils { e.getZ() - MathHelper.lerp(tickDelta, e.lastRenderZ, e.getZ())); } - public static Boolean pointExistsInArea(int x, int y, int x1, int y1, int x2, int y2) { + public static boolean pointExistsInArea(int x, int y, int x1, int y1, int x2, int y2) { return x >= x1 && x <= x2 && y >= y1 && y <= y2; } diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/culling/OcclusionCulling.java b/src/main/java/me/xmrvizzy/skyblocker/utils/culling/OcclusionCulling.java new file mode 100644 index 00000000..e9a25fc3 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/culling/OcclusionCulling.java @@ -0,0 +1,48 @@ +package me.xmrvizzy.skyblocker.utils.culling; + +import com.logisticscraft.occlusionculling.OcclusionCullingInstance; +import com.logisticscraft.occlusionculling.cache.ArrayOcclusionCache; +import com.logisticscraft.occlusionculling.util.Vec3d; + +import me.xmrvizzy.skyblocker.utils.FrustumUtils; +import net.minecraft.client.MinecraftClient; + +public class OcclusionCulling { + private static final int TRACING_DISTANCE = 128; + private static final MinecraftClient CLIENT = MinecraftClient.getInstance(); + private static OcclusionCullingInstance instance = null; + + // Reused objects to reduce allocation overhead + private static Vec3d cameraPos = new Vec3d(0, 0, 0); + private static Vec3d min = new Vec3d(0, 0, 0); + private static Vec3d max = new Vec3d(0, 0, 0); + + /** + * Initializes the occlusion culling instance + */ + public static void init() { + instance = new OcclusionCullingInstance(TRACING_DISTANCE, new WorldProvider(), new ArrayOcclusionCache(TRACING_DISTANCE), 2); + } + + private static void updateCameraPos() { + var camera = CLIENT.gameRenderer.getCamera().getPos(); + cameraPos.set(camera.x, camera.y, camera.z); + } + + /** + * This first checks checks if the bounding box is within the camera's FOV, if + * it is then it checks for whether it's occluded or not. + * + * @return A boolean representing whether the bounding box is fully visible or + * not. + */ + public static boolean isVisible(double x1, double y1, double z1, double x2, double y2, double z2) { + if (!FrustumUtils.isVisible(x1, y1, z1, x2, y2, z2)) return false; + + updateCameraPos(); + min.set(x1, y1, z1); + max.set(x2, y2, z2); + + return instance.isAABBVisible(min, max, cameraPos); + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/culling/WorldProvider.java b/src/main/java/me/xmrvizzy/skyblocker/utils/culling/WorldProvider.java new file mode 100644 index 00000000..47d92c1f --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/culling/WorldProvider.java @@ -0,0 +1,29 @@ +package me.xmrvizzy.skyblocker.utils.culling; + +import com.logisticscraft.occlusionculling.DataProvider; + +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.util.math.BlockPos; + +public class WorldProvider implements DataProvider { + private final static MinecraftClient CLIENT = MinecraftClient.getInstance(); + private ClientWorld world = null; + + @Override + public boolean prepareChunk(int chunkX, int chunkZ) { + this.world = CLIENT.world; + return this.world != null; + } + + @Override + public boolean isOpaqueFullCube(int x, int y, int z) { + BlockPos pos = new BlockPos(x, y, z); + return this.world.getBlockState(pos).isOpaqueFullCube(this.world, pos); + } + + @Override + public void cleanup() { + this.world = null; + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/culling/package-info.java b/src/main/java/me/xmrvizzy/skyblocker/utils/culling/package-info.java new file mode 100644 index 00000000..c25e7f7a --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/culling/package-info.java @@ -0,0 +1,4 @@ +/** + * Package dedicated to occlusion culling utilities + */ +package me.xmrvizzy.skyblocker.utils.culling; \ No newline at end of file -- cgit From 57328808e6cd8c2140f5a71b4c2605ac71e1b553 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Thu, 29 Jun 2023 11:15:58 +0800 Subject: Add Shortcuts --- .../java/me/xmrvizzy/skyblocker/SkyblockerMod.java | 2 + .../skyblocker/config/SkyblockerConfig.java | 13 ++ .../skyblocker/mixin/accessor/FrustumInvoker.java | 7 +- .../skyblocker/skyblock/shortcut/Shortcuts.java | 166 +++++++++++++++++++++ .../me/xmrvizzy/skyblocker/utils/FrustumUtils.java | 2 +- .../java/me/xmrvizzy/skyblocker/utils/Utils.java | 37 +++-- .../resources/assets/skyblocker/lang/en_us.json | 9 +- 7 files changed, 221 insertions(+), 15 deletions(-) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/Shortcuts.java (limited to 'src/main/java/me/xmrvizzy/skyblocker/utils') diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java index 3692db1b..0263f20c 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java +++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java @@ -16,6 +16,7 @@ import me.xmrvizzy.skyblocker.skyblock.item.WikiLookup; import me.xmrvizzy.skyblocker.skyblock.itemlist.ItemRegistry; import me.xmrvizzy.skyblocker.skyblock.quicknav.QuickNav; import me.xmrvizzy.skyblocker.skyblock.rift.TheRift; +import me.xmrvizzy.skyblocker.skyblock.shortcut.Shortcuts; import me.xmrvizzy.skyblocker.skyblock.tabhud.TabHud; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.utils.*; @@ -76,6 +77,7 @@ public class SkyblockerMod implements ClientModInitializer { QuickNav.init(); DwarvenHud.init(); ChatMessageListener.init(); + Shortcuts.init(); DiscordRPCManager.init(); LividColor.init(); FishingHelper.init(); diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java index 04cfaea3..8c7d2f71 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java @@ -161,6 +161,10 @@ public class SkyblockerConfig implements ConfigData { @ConfigEntry.Gui.CollapsibleObject() public FairySouls fairySouls = new FairySouls(); + @ConfigEntry.Category("shortcuts") + @ConfigEntry.Gui.CollapsibleObject() + public Shortcuts shortcuts = new Shortcuts(); + @ConfigEntry.Category("itemList") @ConfigEntry.Gui.CollapsibleObject() public ItemList itemList = new ItemList(); @@ -264,6 +268,15 @@ public class SkyblockerConfig implements ConfigData { public boolean enableFairySoulsHelper = false; } + public static class Shortcuts { + @ConfigEntry.Gui.Tooltip() + public boolean enableShortcuts = true; + @ConfigEntry.Gui.Tooltip() + public boolean enableCommandShortcuts = true; + @ConfigEntry.Gui.Tooltip() + public boolean enableCommandArgShortcuts = true; + } + public static class Hitbox { public boolean oldFarmlandHitbox = true; public boolean oldLeverHitbox = false; diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/FrustumInvoker.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/FrustumInvoker.java index 108a7344..3cde115e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/FrustumInvoker.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/FrustumInvoker.java @@ -1,15 +1,14 @@ package me.xmrvizzy.skyblocker.mixin.accessor; -import me.xmrvizzy.skyblocker.utils.FrustumUtils; import net.minecraft.client.render.Frustum; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Invoker; /** - * Use {@link FrustumUtils#isVisible(double, double, double, double, double, double) FrustumUtils#isVisible} which is shorter. For the purpose of avoiding object allocations! + * Use {@link me.xmrvizzy.skyblocker.utils.FrustumUtils#isVisible(double, double, double, double, double, double) FrustumUtils#isVisible} which is shorter. For the purpose of avoiding object allocations! */ @Mixin(Frustum.class) public interface FrustumInvoker { - @Invoker("isVisible") - boolean isVisible(double minX, double minY, double minZ, double maxX, double maxY, double maxZ); + @Invoker + boolean invokeIsVisible(double minX, double minY, double minZ, double maxX, double maxY, double maxZ); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/Shortcuts.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/Shortcuts.java new file mode 100644 index 00000000..dcd98e79 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/Shortcuts.java @@ -0,0 +1,166 @@ +package me.xmrvizzy.skyblocker.skyblock.shortcut; + +import com.mojang.brigadier.Command; +import me.xmrvizzy.skyblocker.SkyblockerMod; +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.utils.Utils; +import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; +import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; +import net.fabricmc.fabric.api.client.message.v1.ClientSendMessageEvents; +import net.minecraft.text.Text; + +import java.util.HashMap; +import java.util.Map; + +import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.literal; + +public class Shortcuts { + public static final Map commands = new HashMap<>(); + public static final Map commandArgs = new HashMap<>(); + + public static void init() { + commands.put("/s", "/skyblock"); + commands.put("/sk", "/skyblock"); + commands.put("/sky", "/skyblock"); + commands.put("/i", "/is"); + commands.put("/h", "/hub"); + commands.put("/hu", "/hub"); + + commands.put("/d", "/warp dungeon_hub"); + commands.put("/dn", "/warp dungeon_hub"); + commands.put("/dun", "/warp dungeon_hub"); + commands.put("/dungeon", "/warp dungeon_hub"); + + commands.put("/bl", "/warp nether"); + commands.put("/blazing", "/warp nether"); + commands.put("/fortress", "/warp nether"); + commands.put("/crimson", "/warp nether"); + commands.put("/isles", "/warp nether"); + commands.put("/ci", "/warp nether"); + commands.put("/crimson isles", "/warp nether"); + commands.put("/n", "/warp nether"); + commands.put("/nether", "/warp nether"); + + commands.put("/deep", "/warp deep"); + commands.put("/cavern", "/warp deep"); + commands.put("/caverns", "/warp deep"); + + commands.put("/dw", "/warp mines"); + commands.put("/dwarven", "/warp mines"); + commands.put("/mi", "/warp mines"); + commands.put("/mines", "/warp mines"); + + commands.put("/fo", "/warp forge"); + commands.put("/for", "/warp forge"); + commands.put("/forge", "/warp forge"); + + commands.put("/cry", "/warp crystals"); + commands.put("/crystal", "/warp crystals"); + commands.put("/ho", "/warp crystals"); + commands.put("/hollows", "/warp crystals"); + commands.put("/ch", "/warp crystals"); + commands.put("/crystal hollows", "/warp crystals"); + + commands.put("/ga", "/warp garden"); + commands.put("/garden", "/warp garden"); + commands.put("/go", "/warp gold"); + commands.put("/gold", "/warp gold"); + + commands.put("/des", "/warp desert"); + commands.put("/desert", "/warp desert"); + commands.put("/mu", "/warp desert"); + commands.put("/mushroom", "/warp desert"); + + commands.put("/sp", "/warp spider"); + commands.put("/spider", "/warp spider"); + commands.put("/spiders", "/warp spider"); + + commands.put("/ba", "/warp barn"); + commands.put("/barn", "/warp barn"); + + commands.put("/e", "/warp end"); + commands.put("/end", "/warp end"); + + commands.put("/park", "/warp park"); + + commands.put("/castle", "/warp castle"); + commands.put("/museum", "/warp museum"); + commands.put("/da", "/warp da"); + commands.put("/dark", "/warp da"); + commands.put("/crypt", "/warp crypt"); + commands.put("/crypts", "/warp crypt"); + commands.put("/nest", "/warp nest"); + commands.put("/magma", "/warp magma"); + commands.put("/void", "/warp void"); + commands.put("/drag", "/warp drag"); + commands.put("/dragon", "/warp drag"); + commands.put("/jungle", "/warp jungle"); + commands.put("/howl", "/warp howl"); + + commands.put("/ca", "/chat all"); + commands.put("/cp", "/chat party"); + commands.put("/cg", "/chat guild"); + commands.put("/co", "/chat officer"); + commands.put("/cc", "/chat coop"); + + commandArgs.put("/m", "/msg"); + + commandArgs.put("/pa", "/p accept"); + commands.put("/pv", "/p leave"); + commands.put("/pd", "/p disband"); + commands.put("/rp", "/reparty"); + commands.put("/pr", "/reparty"); + + commandArgs.put("/v", "/visit"); + commands.put("/vp", "/visit portalhub"); + commands.put("/visit p", "/visit portalhub"); + + ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> { + for (String key : commands.keySet()) { + if (key.startsWith("/")) { + dispatcher.register(literal(key.substring(1))); + } + } + for (String key : commandArgs.keySet()) { + if (key.startsWith("/")) { + dispatcher.register(literal(key.substring(1))); + } + } + dispatcher.register(literal(SkyblockerMod.NAMESPACE).then(literal("help").executes(context -> { + FabricClientCommandSource source = context.getSource(); + String status = SkyblockerConfig.get().general.shortcuts.enableShortcuts && SkyblockerConfig.get().general.shortcuts.enableCommandShortcuts ? "§a§l (Enabled)" : "§c§l (Disabled)"; + source.sendFeedback(Text.of("§e§lSkyblocker §fCommand Shortcuts" + status)); + for (Map.Entry command : commands.entrySet()) { + source.sendFeedback(Text.of("§7" + command.getKey() + " §f→ §7" + command.getValue())); + } + status = SkyblockerConfig.get().general.shortcuts.enableShortcuts && SkyblockerConfig.get().general.shortcuts.enableCommandArgShortcuts ? "§a§l (Enabled)" : "§c§l (Disabled)"; + source.sendFeedback(Text.of("§e§lSkyblocker §fCommand Argument Shortcuts" + status)); + for (Map.Entry commandArg : commandArgs.entrySet()) { + source.sendFeedback(Text.of("§7" + commandArg.getKey() + " §f→ §7" + commandArg.getValue())); + } + source.sendFeedback(Text.of("§e§lSkyblocker §fCommands")); + for (String command : dispatcher.getSmartUsage(dispatcher.getRoot().getChild(SkyblockerMod.NAMESPACE), source).values()) { + source.sendFeedback(Text.of("§7/" + SkyblockerMod.NAMESPACE + " " + command)); + } + return Command.SINGLE_SUCCESS; + }))); + }); + ClientSendMessageEvents.MODIFY_COMMAND.register(command -> { + if (Utils.isOnHypixel() && SkyblockerConfig.get().general.shortcuts.enableShortcuts) { + command = '/' + command; + if (SkyblockerConfig.get().general.shortcuts.enableCommandShortcuts) { + command = commands.getOrDefault(command, command); + } + if (SkyblockerConfig.get().general.shortcuts.enableCommandArgShortcuts) { + String[] messageArgs = command.split(" "); + for (int i = 0; i < messageArgs.length; i++) { + messageArgs[i] = commandArgs.getOrDefault(messageArgs[i], messageArgs[i]); + } + command = String.join(" ", messageArgs); + } + return command.substring(1); + } + return command; + }); + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/FrustumUtils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/FrustumUtils.java index 9ea90c16..565bd7a8 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/FrustumUtils.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/FrustumUtils.java @@ -17,6 +17,6 @@ public class FrustumUtils { } public static boolean isVisible(double minX, double minY, double minZ, double maxX, double maxY, double maxZ) { - return ((FrustumInvoker) getFrustum()).isVisible(minX, minY, minZ, maxX, maxY, maxZ); + return ((FrustumInvoker) getFrustum()).invokeIsVisible(minX, minY, minZ, maxX, maxY, maxZ); } } \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java index 35dfd368..71e3b44f 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java @@ -29,6 +29,7 @@ import java.util.List; */ public class Utils { private static final String PROFILE_PREFIX = "Profile: "; + private static boolean isOnHypixel = false; private static boolean isOnSkyblock = false; private static boolean isInDungeons = false; private static boolean isInjected = false; @@ -45,6 +46,10 @@ public class Utils { private static boolean sentLocRaw = false; private static long lastLocRaw = 0; + public static boolean isOnHypixel() { + return isOnHypixel; + } + public static boolean isOnSkyblock() { return isOnSkyblock; } @@ -126,21 +131,35 @@ public class Utils { String string = sidebar.toString(); if (sidebar.isEmpty()) return; - if (sidebar.get(0).contains("SKYBLOCK") || sidebar.get(0).contains("SKIBLOCK")) { - if (!isOnSkyblock) { - if (!isInjected) { - isInjected = true; - ItemTooltipCallback.EVENT.register(PriceInfoTooltip::onInjectTooltip); + if (sidebar.get(sidebar.size() - 1).equals("www.hypixel.net")) { + if (!isOnHypixel) { + isOnHypixel = true; + } + if (sidebar.get(0).contains("SKYBLOCK") || sidebar.get(0).contains("SKIBLOCK")) { + if (!isOnSkyblock) { + if (!isInjected) { + isInjected = true; + ItemTooltipCallback.EVENT.register(PriceInfoTooltip::onInjectTooltip); + } + isOnSkyblock = true; + SkyblockEvents.JOIN.invoker().onSkyblockJoin(); } - isOnSkyblock = true; - SkyblockEvents.JOIN.invoker().onSkyblockJoin(); + } else { + leaveSkyblock(); } - } else if (isOnSkyblock) { + isInDungeons = isOnSkyblock && string.contains("The Catacombs"); + } else if (isOnHypixel) { + isOnHypixel = false; + leaveSkyblock(); + } + } + + private static void leaveSkyblock() { + if (isOnSkyblock) { isOnSkyblock = false; isInDungeons = false; SkyblockEvents.LEAVE.invoker().onSkyblockLeave(); } - isInDungeons = isOnSkyblock && string.contains("The Catacombs"); } public static String getLocation() { diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index 0cf9933c..247fb3cd 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -29,6 +29,13 @@ "text.autoconfig.skyblocker.option.general.fishing.enableFishingHelper": "Enable Fishing Helper", "text.autoconfig.skyblocker.option.general.fairySouls": "Fairy Souls Helper", "text.autoconfig.skyblocker.option.general.fairySouls.enableFairySoulsHelper": "Enable Fairy Souls Helper", + "text.autoconfig.skyblocker.option.general.shortcuts": "Shortcuts", + "text.autoconfig.skyblocker.option.general.shortcuts.enableShortcuts": "Enable Shortcuts", + "text.autoconfig.skyblocker.option.general.shortcuts.enableShortcuts.@Tooltip": "Only works on Hypixel. Edit shortcuts with \"/skyblocker shortcuts\". At least one of the following options must be enabled for this to take effect.", + "text.autoconfig.skyblocker.option.general.shortcuts.enableCommandShortcuts": "Enable Command Shortcuts", + "text.autoconfig.skyblocker.option.general.shortcuts.enableCommandShortcuts.@Tooltip": "Shortcuts for commands consisting of only one word. Edit shortcuts with \"/skyblocker shortcuts\". Shortcuts must be enabled for this to take effect.", + "text.autoconfig.skyblocker.option.general.shortcuts.enableCommandArgShortcuts": "Enable Command Argument Shortcuts", + "text.autoconfig.skyblocker.option.general.shortcuts.enableCommandArgShortcuts.@Tooltip": "Shortcuts that replace an argument/word of a command with multiple arguments/words. Edit shortcuts with \"/skyblocker shortcuts\". Shortcuts must be enabled for this to take effect.", "text.autoconfig.skyblocker.option.general.quicknav": "Quicknav", "text.autoconfig.skyblocker.option.general.quicknav.enableQuicknav": "Enable Quicknav", "text.autoconfig.skyblocker.option.general.backpackPreviewWithoutShift": "View backpack preview without holding Shift", @@ -214,7 +221,7 @@ "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enableBackground": "Enable Background", "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.x": "X", "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.y": "Y", - + "text.autoconfig.skyblocker.option.locations.rift": "The Rift", "text.autoconfig.skyblocker.option.locations.rift.mirrorverseWaypoints": "Enable Mirrorverse Waypoints", "text.autoconfig.skyblocker.option.locations.rift.mcGrubberStacks": "McGrubber Stacks", -- cgit From c2e3c7fe5eeea767d2ce517a7ef9e4c67a7968e5 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Mon, 10 Jul 2023 16:36:00 +0800 Subject: Refactor queueOpenScreen --- .../skyblocker/config/SkyblockerConfig.java | 10 ++-- .../skyblocker/skyblock/dungeon/DungeonMap.java | 40 ++++++---------- .../skyblock/dungeon/DungeonMapConfigScreen.java | 28 +++++------ .../skyblocker/skyblock/dwarven/DwarvenHud.java | 56 +++++++++++----------- .../skyblock/dwarven/DwarvenHudConfigScreen.java | 6 +-- .../skyblocker/skyblock/shortcut/Shortcuts.java | 5 +- .../me/xmrvizzy/skyblocker/utils/Scheduler.java | 15 ++---- .../skyblocker/utils/title/TitleContainer.java | 7 +-- .../utils/title/TitleContainerConfigScreen.java | 4 +- 9 files changed, 70 insertions(+), 101 deletions(-) (limited to 'src/main/java/me/xmrvizzy/skyblocker/utils') diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java index 8c7d2f71..c4eeb090 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java @@ -1,6 +1,5 @@ package me.xmrvizzy.skyblocker.config; -import com.mojang.brigadier.Command; import com.mojang.brigadier.builder.LiteralArgumentBuilder; import me.shedaniel.autoconfig.AutoConfig; import me.shedaniel.autoconfig.ConfigData; @@ -518,7 +517,7 @@ public class SkyblockerConfig implements ConfigData { */ public static void init() { AutoConfig.register(SkyblockerConfig.class, GsonConfigSerializer::new); - ClientCommandRegistrationCallback.EVENT.register(((dispatcher, registryAccess) -> dispatcher.register(literal("skyblocker").then(optionsLiteral("config")).then(optionsLiteral("options"))))); + ClientCommandRegistrationCallback.EVENT.register(((dispatcher, registryAccess) -> dispatcher.register(literal(SkyblockerMod.NAMESPACE).then(optionsLiteral("config")).then(optionsLiteral("options"))))); } /** @@ -528,11 +527,8 @@ public class SkyblockerConfig implements ConfigData { * @return the command builder */ private static LiteralArgumentBuilder optionsLiteral(String name) { - return literal(name).executes(context -> { - // Don't immediately open the next screen as it will be closed by ChatScreen right after this command is executed - SkyblockerMod.getInstance().scheduler.queueOpenScreen(AutoConfig.getConfigScreen(SkyblockerConfig.class, null)); - return Command.SINGLE_SUCCESS; - }); + // Don't immediately open the next screen as it will be closed by ChatScreen right after this command is executed + return literal(name).executes(context -> SkyblockerMod.getInstance().scheduler.queueOpenScreen(AutoConfig.getConfigScreen(SkyblockerConfig.class, null))); } public static SkyblockerConfig get() { 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 2a97d0ee..29a6e687 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMap.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMap.java @@ -1,9 +1,6 @@ package me.xmrvizzy.skyblocker.skyblock.dungeon; -import org.apache.commons.lang3.StringUtils; - -import com.mojang.brigadier.Command; - +import me.xmrvizzy.skyblocker.SkyblockerMod; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; @@ -16,11 +13,11 @@ import net.minecraft.item.FilledMapItem; import net.minecraft.item.ItemStack; import net.minecraft.item.map.MapState; import net.minecraft.nbt.NbtCompound; -import net.minecraft.text.Text; import net.minecraft.util.Identifier; +import org.apache.commons.lang3.StringUtils; public class DungeonMap { - private static final Identifier MAP_BACKGROUND = new Identifier("textures/map/map_background.png"); + private static final Identifier MAP_BACKGROUND = new Identifier("textures/map/map_background.png"); public static void render(MatrixStack matrices) { MinecraftClient client = MinecraftClient.getInstance(); @@ -36,36 +33,29 @@ public class DungeonMap { MapRenderer map = client.gameRenderer.getMapRenderer(); MapState state = FilledMapItem.getMapState(mapid, client.world); float scaling = SkyblockerConfig.get().locations.dungeons.mapScaling; - int x = SkyblockerConfig.get().locations.dungeons.mapX; - int y = SkyblockerConfig.get().locations.dungeons.mapY; + int x = SkyblockerConfig.get().locations.dungeons.mapX; + int y = SkyblockerConfig.get().locations.dungeons.mapY; if (state == null) return; matrices.push(); matrices.translate(x, y, 0); matrices.scale(scaling, scaling, 0f); - map.draw( matrices, vertices, mapid, state, false, 15728880); + map.draw(matrices, vertices, mapid, state, false, 15728880); vertices.draw(); matrices.pop(); } } - + public static void renderHUDMap(DrawContext context, int x, int y) { - float scaling = SkyblockerConfig.get().locations.dungeons.mapScaling; - int size = (int) (128 * scaling); - context.drawTexture(MAP_BACKGROUND, x, y, 0, 0, size, size, size, size); + float scaling = SkyblockerConfig.get().locations.dungeons.mapScaling; + int size = (int) (128 * scaling); + context.drawTexture(MAP_BACKGROUND, x, y, 0, 0, size, size, size, size); } - + public static void init() { - ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> { - dispatcher.register(ClientCommandManager.literal("skyblocker") - .then(ClientCommandManager.literal("hud") - .then(ClientCommandManager.literal("dungeonmap") - .executes(context -> { - MinecraftClient client = context.getSource().getClient(); - client.send(() -> client.setScreen(new DungeonMapConfigScreen(Text.literal("Dungeon Map Config")))); - - return Command.SINGLE_SUCCESS; - })))); - }); + ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register(ClientCommandManager.literal("skyblocker") + .then(ClientCommandManager.literal("hud") + .then(ClientCommandManager.literal("dungeonmap") + .executes(context -> SkyblockerMod.getInstance().scheduler.queueOpenScreen(DungeonMapConfigScreen::new)))))); } } \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMapConfigScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMapConfigScreen.java index ffd7a8b6..ef782c3b 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMapConfigScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMapConfigScreen.java @@ -10,43 +10,43 @@ import net.minecraft.client.gui.screen.Screen; import net.minecraft.text.Text; public class DungeonMapConfigScreen extends Screen { - + private int hudX = SkyblockerConfig.get().locations.dungeons.mapX; private int hudY = SkyblockerConfig.get().locations.dungeons.mapY; - - protected DungeonMapConfigScreen(Text title) { - super(title); + + protected DungeonMapConfigScreen() { + super(Text.literal("Dungeon Map Config")); } - + @Override public void render(DrawContext context, int mouseX, int mouseY, float delta) { super.render(context, mouseX, mouseY, delta); renderBackground(context); DungeonMap.renderHUDMap(context, hudX, hudY); - context.drawCenteredTextWithShadow(textRenderer, "Right Click To Reset Position", width / 2, height / 2, Color.GRAY.getRGB()); + context.drawCenteredTextWithShadow(textRenderer, "Right Click To Reset Position", width >> 1, height >> 1, Color.GRAY.getRGB()); } - + @Override public boolean mouseDragged(double mouseX, double mouseY, int button, double deltaX, double deltaY) { float scaling = SkyblockerConfig.get().locations.dungeons.mapScaling; int size = (int) (128 * scaling); - if(RenderUtils.pointExistsInArea((int) mouseX, (int) mouseY, hudX, hudY, hudX + size, hudY + size) && button == 0) { - hudX = (int) Math.max(Math.min(mouseX - (size / 2), this.width - size), 0); - hudY = (int) Math.max(Math.min(mouseY - (size / 2), this.height - size), 0); + if (RenderUtils.pointExistsInArea((int) mouseX, (int) mouseY, hudX, hudY, hudX + size, hudY + size) && button == 0) { + hudX = (int) Math.max(Math.min(mouseX - (size >> 1), this.width - size), 0); + hudY = (int) Math.max(Math.min(mouseY - (size >> 1), this.height - size), 0); } return super.mouseDragged(mouseX, mouseY, button, deltaX, deltaY); } - + @Override public boolean mouseClicked(double mouseX, double mouseY, int button) { - if(button == 1) { + if (button == 1) { hudX = 2; hudY = 2; } - + return super.mouseClicked(mouseX, mouseY, button); } - + @Override public void close() { SkyblockerConfig.get().locations.dungeons.mapX = hudX; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHud.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHud.java index 122f6c6c..7316577e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHud.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHud.java @@ -1,5 +1,6 @@ package me.xmrvizzy.skyblocker.skyblock.dwarven; +import me.xmrvizzy.skyblocker.SkyblockerMod; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.CommsWidget; import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; @@ -7,7 +8,6 @@ import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallba import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -26,34 +26,32 @@ public class DwarvenHud { public static final List COMMISSIONS = Stream.of( - "(?:Titanium|Mithril|Hard Stone) Miner", - "(?:Ice Walker|Goblin|Goblin Raid|Automaton|Sludge|Team Treasurite Member|Yog|Boss Corleone|Thyst) Slayer", - "(?:Lava Springs|Cliffside Veins|Rampart's Quarry|Upper Mines|Royal Mines) Mithril", - "(?:Lava Springs|Cliffside Veins|Rampart's Quarry|Upper Mines|Royal Mines) Titanium", - "Goblin Raid", - "(?:Powder Ghast|Star Sentry) Puncher", - "(? Pattern.compile("^.*(" + s + "): (\\d+\\.?\\d*%|DONE)")) .collect(Collectors.toList()); + public static void init() { ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register(ClientCommandManager.literal("skyblocker") .then(ClientCommandManager.literal("hud") .then(ClientCommandManager.literal("dwarven") - .executes(context -> { - client.send(() -> client.setScreen(new DwarvenHudConfigScreen(Text.of("Dwarven HUD Config")))); - return 1; - }))))); + .executes(context -> SkyblockerMod.getInstance().scheduler.queueOpenScreen(DwarvenHudConfigScreen::new)))))); HudRenderCallback.EVENT.register((context, tickDelta) -> { if (!SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.enabled - || client.options.playerListKey.isPressed() - || client.player == null - || commissionList.isEmpty()) { + || client.options.playerListKey.isPressed() + || client.player == null + || commissionList.isEmpty()) { return; } render(context, SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.x, SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.y, commissionList); @@ -62,7 +60,7 @@ public class DwarvenHud { public static void render(DrawContext context, int hudX, int hudY, List commissions) { - switch(SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.style) { + switch (SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.style) { case SIMPLE -> renderSimple(context, hudX, hudY, commissions); case FANCY -> renderFancy(context, hudX, hudY, commissions); case CLASSIC -> renderClassic(context, hudX, hudY, commissions); @@ -77,12 +75,12 @@ public class DwarvenHud { int y = 0; for (Commission commission : commissions) { context - .drawTextWithShadow(client.textRenderer, - Text.literal(commission.commission + ": ") - .styled(style -> style.withColor(Formatting.AQUA)) - .append(Text.literal(commission.progression) - .styled(style -> style.withColor(Formatting.GREEN))), - hudX + 5, hudY + y + 5, 0xFFFFFFFF); + .drawTextWithShadow(client.textRenderer, + Text.literal(commission.commission + ": ") + .styled(style -> style.withColor(Formatting.AQUA)) + .append(Text.literal(commission.progression) + .styled(style -> style.withColor(Formatting.GREEN))), + hudX + 5, hudY + y + 5, 0xFFFFFFFF); y += 20; } } @@ -119,6 +117,6 @@ public class DwarvenHud { } // steamroller tactics to get visibility from outside classes (CommsWidget) - public static record Commission(String commission, String progression){} - + public record Commission(String commission, String progression) { + } } \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHudConfigScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHudConfigScreen.java index f91ed921..10e62d88 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHudConfigScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHudConfigScreen.java @@ -5,7 +5,6 @@ import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.utils.RenderUtils; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.Text; import java.awt.*; @@ -15,8 +14,9 @@ public class DwarvenHudConfigScreen extends Screen { private int hudX = SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.x; private int hudY = SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.y; - protected DwarvenHudConfigScreen(Text title) { - super(title); + + protected DwarvenHudConfigScreen() { + super(Text.of("Dwarven HUD Config")); } @Override diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/Shortcuts.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/Shortcuts.java index 03701a3f..bef56cbd 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/Shortcuts.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/Shortcuts.java @@ -177,11 +177,8 @@ public class Shortcuts { source.sendFeedback(Text.of("§7/" + SkyblockerMod.NAMESPACE + " " + command)); } return Command.SINGLE_SUCCESS; - })).then(literal("shortcuts").executes(context -> { // Queue the screen or else the screen will be immediately closed after executing this command - SkyblockerMod.getInstance().scheduler.queueOpenScreen(ShortcutsConfigScreen::new); - return Command.SINGLE_SUCCESS; - }))); + })).then(literal("shortcuts").executes(context -> SkyblockerMod.getInstance().scheduler.queueOpenScreen(ShortcutsConfigScreen::new)))); } private static String modifyCommand(String command) { diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java index 7b19e284..fbe79ade 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Scheduler.java @@ -1,5 +1,6 @@ package me.xmrvizzy.skyblocker.utils; +import com.mojang.brigadier.Command; import me.xmrvizzy.skyblocker.SkyblockerMod; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.screen.Screen; @@ -58,17 +59,9 @@ public class Scheduler { * * @param screenSupplier the supplier of the screen to open */ - public void queueOpenScreen(Supplier screenSupplier) { - queueOpenScreen(screenSupplier.get()); - } - - /** - * Schedules a screen to open in the next tick. Used in commands to avoid screen immediately closing after the command is executed. - * - * @param screen the supplier of the screen to open - */ - public void queueOpenScreen(Screen screen) { - MinecraftClient.getInstance().send(() -> MinecraftClient.getInstance().setScreen(screen)); + public int queueOpenScreen(Supplier screenSupplier) { + MinecraftClient.getInstance().send(() -> MinecraftClient.getInstance().setScreen(screenSupplier.get())); + return Command.SINGLE_SUCCESS; } public void tick() { diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java index a4e445ee..7b92fff6 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainer.java @@ -1,6 +1,5 @@ package me.xmrvizzy.skyblocker.utils.title; -import com.mojang.brigadier.Command; import me.xmrvizzy.skyblocker.SkyblockerMod; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; @@ -9,7 +8,6 @@ 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; -import net.minecraft.text.Text; import net.minecraft.util.math.MathHelper; import java.util.LinkedHashSet; @@ -31,10 +29,7 @@ public class TitleContainer { ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register(ClientCommandManager.literal("skyblocker") .then(ClientCommandManager.literal("hud") .then(ClientCommandManager.literal("titleContainer") - .executes(context -> { - SkyblockerMod.getInstance().scheduler.queueOpenScreen(new TitleContainerConfigScreen(Text.of("Title Container HUD Config"))); - return Command.SINGLE_SUCCESS; - }))))); + .executes(context -> SkyblockerMod.getInstance().scheduler.queueOpenScreen(TitleContainerConfigScreen::new)))))); } /** diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java index e729ea15..c0c4d63c 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/title/TitleContainerConfigScreen.java @@ -21,8 +21,8 @@ public class TitleContainerConfigScreen extends Screen { private float hudX = SkyblockerConfig.get().general.titleContainer.x; private float hudY = SkyblockerConfig.get().general.titleContainer.y; - protected TitleContainerConfigScreen(Text title) { - super(title); + protected TitleContainerConfigScreen() { + super(Text.of("Title Container HUD Config")); } @Override -- cgit From bca948cc7a9630ebe380590f0f036e1d5ef2ee99 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Tue, 25 Jul 2023 15:11:10 +0800 Subject: Refactor mixins --- .../skyblocker/gui/ContainerSolverManager.java | 2 +- .../skyblocker/mixin/AccessorWorldRenderer.java | 13 ------- .../skyblocker/mixin/ClientPlayerEntityMixin.java | 7 ++-- .../skyblocker/mixin/DrawContextMixin.java | 44 +++++++++++----------- .../skyblocker/mixin/FarmlandBlockMixin.java | 20 ++++++---- .../skyblocker/mixin/HandledScreenAccessor.java | 17 --------- .../skyblocker/mixin/HandledScreenMixin.java | 8 ++-- .../xmrvizzy/skyblocker/mixin/InGameHudMixin.java | 6 +-- .../skyblocker/mixin/InventoryScreenMixin.java | 17 ++------- .../xmrvizzy/skyblocker/mixin/LeverBlockMixin.java | 3 +- .../skyblocker/mixin/PlayerListHudAccessor.java | 18 --------- .../skyblocker/mixin/PlayerListHudMixin.java | 26 +++++-------- .../skyblocker/mixin/RecipeBookWidgetAccessor.java | 14 ------- .../mixin/accessor/HandledScreenAccessor.java | 17 +++++++++ .../mixin/accessor/PlayerListHudAccessor.java | 17 +++++++++ .../mixin/accessor/RecipeBookWidgetAccessor.java | 14 +++++++ .../mixin/accessor/WorldRendererAccessor.java | 13 +++++++ .../skyblocker/skyblock/dungeon/OldLever.java | 18 +++------ .../skyblock/itemlist/ItemListWidget.java | 32 ++++++++-------- .../skyblock/quicknav/QuickNavButton.java | 6 +-- .../skyblock/rift/HealingMelonIndicator.java | 4 +- .../skyblock/tabhud/util/PlayerListMgr.java | 3 +- .../me/xmrvizzy/skyblocker/utils/FrustumUtils.java | 4 +- src/main/resources/skyblocker.mixins.json | 10 ++--- 24 files changed, 150 insertions(+), 183 deletions(-) delete mode 100644 src/main/java/me/xmrvizzy/skyblocker/mixin/AccessorWorldRenderer.java delete mode 100644 src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenAccessor.java delete mode 100644 src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudAccessor.java delete mode 100644 src/main/java/me/xmrvizzy/skyblocker/mixin/RecipeBookWidgetAccessor.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/HandledScreenAccessor.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/PlayerListHudAccessor.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/RecipeBookWidgetAccessor.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/WorldRendererAccessor.java (limited to 'src/main/java/me/xmrvizzy/skyblocker/utils') diff --git a/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java b/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java index 0c27704d..7d187caa 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java +++ b/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java @@ -1,7 +1,7 @@ package me.xmrvizzy.skyblocker.gui; import com.mojang.blaze3d.systems.RenderSystem; -import me.xmrvizzy.skyblocker.mixin.HandledScreenAccessor; +import me.xmrvizzy.skyblocker.mixin.accessor.HandledScreenAccessor; import me.xmrvizzy.skyblocker.skyblock.dungeon.CroesusHelper; import me.xmrvizzy.skyblocker.skyblock.dungeon.terminal.ColorTerminal; import me.xmrvizzy.skyblocker.skyblock.dungeon.terminal.OrderTerminal; diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/AccessorWorldRenderer.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/AccessorWorldRenderer.java deleted file mode 100644 index e9067851..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/AccessorWorldRenderer.java +++ /dev/null @@ -1,13 +0,0 @@ -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/ClientPlayerEntityMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayerEntityMixin.java index e48e725e..ea35ebbe 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayerEntityMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/ClientPlayerEntityMixin.java @@ -4,7 +4,6 @@ import com.mojang.authlib.GameProfile; import me.xmrvizzy.skyblocker.skyblock.HotbarSlotLock; import me.xmrvizzy.skyblocker.skyblock.rift.HealingMelonIndicator; import me.xmrvizzy.skyblocker.utils.Utils; -import net.minecraft.client.MinecraftClient; import net.minecraft.client.network.AbstractClientPlayerEntity; import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.client.world.ClientWorld; @@ -25,8 +24,8 @@ public abstract class ClientPlayerEntityMixin extends AbstractClientPlayerEntity if (Utils.isOnSkyblock()) HotbarSlotLock.handleDropSelectedItem(this.getInventory().selectedSlot, cir); } - @Inject(method = "updateHealth", at = @At("HEAD")) - public void skyblocker$updateHealth(float health, CallbackInfo info) { - HealingMelonIndicator.updateHealth(MinecraftClient.getInstance()); + @Inject(method = "updateHealth", at = @At("RETURN")) + public void skyblocker$updateHealth(CallbackInfo info) { + HealingMelonIndicator.updateHealth(); } } \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java index a8a490b8..e12f645a 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java @@ -1,18 +1,6 @@ package me.xmrvizzy.skyblocker.mixin; -import java.awt.Color; -import java.util.regex.Pattern; - -import org.jetbrains.annotations.Nullable; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - import com.mojang.blaze3d.systems.RenderSystem; - import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.utils.ItemUtils; import me.xmrvizzy.skyblocker.utils.Utils; @@ -23,18 +11,28 @@ import net.minecraft.client.util.math.MatrixStack; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; import net.minecraft.util.math.ColorHelper; +import org.jetbrains.annotations.Nullable; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import java.awt.*; +import java.util.regex.Pattern; @Mixin(DrawContext.class) public abstract class DrawContextMixin { - @Shadow @Final private MatrixStack matrices; - - @Shadow - public void fill(RenderLayer layer, int x1, int x2, int y1, int y2, int color) { - } - + @Shadow + @Final + private MatrixStack matrices; + + @Shadow + public abstract void fill(RenderLayer layer, int x1, int x2, int y1, int y2, int color); + @Inject(method = "drawItemInSlot(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/item/ItemStack;IILjava/lang/String;)V", at = @At("HEAD")) public void skyblocker$renderItemBar(TextRenderer textRenderer, ItemStack stack, int x, int y, @Nullable String countOverride, CallbackInfo ci) { - if (Utils.isOnSkyblock() && SkyblockerConfig.get().locations.dwarvenMines.enableDrillFuel) { if (!stack.isEmpty()) { NbtCompound tag = stack.getNbt(); @@ -42,7 +40,7 @@ public abstract class DrawContextMixin { if (tag.getCompound("ExtraAttributes").contains("drill_fuel")) { float current = 3000.0F; float max = 3000.0F; - + for (String line : ItemUtils.getTooltipStrings(stack)) { if (line.contains("Fuel: ")) { String clear = Pattern.compile("[^0-9 /]").matcher(line).replaceAll("").trim(); @@ -52,17 +50,17 @@ public abstract class DrawContextMixin { break; } } - + matrices.push(); matrices.translate(0f, 0f, 200f); RenderSystem.disableDepthTest(); - + float hue = Math.max(0.0F, 1.0F - (max - current) / max); int width = Math.round(current / max * 13.0F); Color color = Color.getHSBColor(hue / 3.0F, 1.0F, 1.0F); this.fill(RenderLayer.getGuiOverlay(), x + 2, y + 13, x + 15, y + 15, 0xFF000000); this.fill(RenderLayer.getGuiOverlay(), x + 2, y + 13, x + 2 + width, y + 14, ColorHelper.Argb.getArgb(color.getAlpha(), color.getRed(), color.getGreen(), color.getBlue())); - + matrices.pop(); RenderSystem.enableDepthTest(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/FarmlandBlockMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/FarmlandBlockMixin.java index 761f8a68..d36773b2 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/FarmlandBlockMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/FarmlandBlockMixin.java @@ -1,34 +1,38 @@ package me.xmrvizzy.skyblocker.mixin; +import com.llamalad7.mixinextras.injector.ModifyReturnValue; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.utils.Utils; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.FarmlandBlock; -import net.minecraft.block.ShapeContext; import net.minecraft.util.math.BlockPos; import net.minecraft.util.shape.VoxelShape; +import net.minecraft.util.shape.VoxelShapes; import net.minecraft.world.BlockView; +import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(FarmlandBlock.class) public abstract class FarmlandBlockMixin extends Block { + @Shadow + @Final + protected static VoxelShape SHAPE; + protected FarmlandBlockMixin(Settings settings) { super(settings); } - @Inject(method = "getOutlineShape", at = @At("HEAD"), cancellable = true) - public void skyblocker$onGetOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { - if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.hitbox.oldFarmlandHitbox) - cir.setReturnValue(Block.createCuboidShape(0.0, 0.0, 0.0, 16.0, 16.0, 16.0)); + @ModifyReturnValue(method = "getOutlineShape", at = @At("RETURN")) + private VoxelShape skyblocker$replaceOutlineShape(VoxelShape original) { + return SkyblockerConfig.get().general.hitbox.oldFarmlandHitbox && Utils.isOnSkyblock() ? VoxelShapes.fullCube() : original; } @SuppressWarnings("deprecation") @Override public VoxelShape getCullingShape(BlockState state, BlockView world, BlockPos pos) { - return Block.createCuboidShape(0.0, 0.0, 0.0, 16.0, 15.0, 16.0); + return SHAPE; } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenAccessor.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenAccessor.java deleted file mode 100644 index ea497b75..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenAccessor.java +++ /dev/null @@ -1,17 +0,0 @@ -package me.xmrvizzy.skyblocker.mixin; - -import net.minecraft.client.gui.screen.ingame.HandledScreen; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -@Mixin(HandledScreen.class) -public interface HandledScreenAccessor { - @Accessor - int getX(); - @Accessor - int getY(); - @Accessor - int getBackgroundWidth(); - @Accessor - int getBackgroundHeight(); -} diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java index 13272323..8a57f752 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java @@ -34,14 +34,14 @@ import java.util.Map; @Mixin(HandledScreen.class) public abstract class HandledScreenMixin extends Screen { - protected HandledScreenMixin(Text title) { - super(title); - } - @Shadow @Nullable protected Slot focusedSlot; + protected HandledScreenMixin(Text title) { + super(title); + } + @Inject(at = @At("HEAD"), method = "keyPressed") public void skyblocker$keyPressed(int keyCode, int scanCode, int modifiers, CallbackInfoReturnable cir) { if (this.client != null && this.focusedSlot != null && keyCode != 256 && !this.client.options.inventoryKey.matchesKey(keyCode, scanCode) && WikiLookup.wikiLookup.matchesKey(keyCode, scanCode)) { diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java index 3e2db3e0..e1a14e4c 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java @@ -27,7 +27,6 @@ public abstract class InGameHudMixin { @Unique private static final Identifier SLOT_LOCK = new Identifier(SkyblockerMod.NAMESPACE, "textures/gui/slot_lock.png"); @Unique - private final StatusBarTracker statusBarTracker = SkyblockerMod.getInstance().statusBarTracker; @Unique private final FancyStatusBars statusBars = new FancyStatusBars(); @@ -38,8 +37,7 @@ public abstract class InGameHudMixin { private int scaledWidth; @Shadow - public void setOverlayMessage(Text message, boolean tinted) { - } + public abstract void setOverlayMessage(Text message, boolean tinted); @Inject(method = "setOverlayMessage(Lnet/minecraft/text/Text;Z)V", at = @At("HEAD"), cancellable = true) private void skyblocker$onSetOverlayMessage(Text message, boolean tinted, CallbackInfo ci) { @@ -76,8 +74,6 @@ public abstract class InGameHudMixin { if (Utils.isInDungeons() && SkyblockerConfig.get().locations.dungeons.enableMap) DungeonMap.render(context.getMatrices()); - - //RenderSystem.setShaderTexture(0, ICONS); } @Inject(method = "renderMountHealth", at = @At("HEAD"), cancellable = true) diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/InventoryScreenMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/InventoryScreenMixin.java index 64a1a4fe..729124fd 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/InventoryScreenMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/InventoryScreenMixin.java @@ -1,5 +1,6 @@ package me.xmrvizzy.skyblocker.mixin; +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.skyblock.itemlist.ItemListWidget; import me.xmrvizzy.skyblocker.utils.Utils; @@ -7,21 +8,11 @@ import net.minecraft.client.gui.screen.ingame.InventoryScreen; import net.minecraft.client.gui.screen.recipebook.RecipeBookWidget; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; @Mixin(InventoryScreen.class) public abstract class InventoryScreenMixin { - @Redirect( - method = "", - at = @At( - value = "NEW", - target = "net/minecraft/client/gui/screen/recipebook/RecipeBookWidget" - ) - ) - RecipeBookWidget skyblocker$constructor() { - if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.itemList.enableItemList) - return new ItemListWidget(); - else - return new RecipeBookWidget(); + @ModifyExpressionValue(method = "", at = @At(value = "NEW", target = "net/minecraft/client/gui/screen/recipebook/RecipeBookWidget")) + private RecipeBookWidget skyblocker$replaceRecipeBook(RecipeBookWidget original) { + return SkyblockerConfig.get().general.itemList.enableItemList && Utils.isOnSkyblock() ? new ItemListWidget() : original; } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/LeverBlockMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/LeverBlockMixin.java index 505de202..96a53878 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/LeverBlockMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/LeverBlockMixin.java @@ -24,8 +24,7 @@ public abstract class LeverBlockMixin extends WallMountedBlock { public void skyblocker$onGetOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { if (Utils.isOnSkyblock()) { VoxelShape shape = OldLever.getShape(state.get(FACE), state.get(FACING)); - if (shape != null) - cir.setReturnValue(shape); + if (shape != null) cir.setReturnValue(shape); } } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudAccessor.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudAccessor.java deleted file mode 100644 index db329775..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudAccessor.java +++ /dev/null @@ -1,18 +0,0 @@ -package me.xmrvizzy.skyblocker.mixin; - -import java.util.Comparator; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -import net.minecraft.client.gui.hud.PlayerListHud; -import net.minecraft.client.network.PlayerListEntry; - -@Mixin(PlayerListHud.class) -public interface PlayerListHudAccessor { - - @Accessor("ENTRY_ORDERING") - public static Comparator getOrdering() { - throw new AssertionError(); - } -} diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java index ef65190f..0d900167 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java @@ -1,11 +1,5 @@ package me.xmrvizzy.skyblocker.mixin; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.skyblock.tabhud.TabHud; import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; @@ -19,38 +13,36 @@ import net.minecraft.client.network.ClientPlayNetworkHandler; import net.minecraft.scoreboard.Scoreboard; import net.minecraft.scoreboard.ScoreboardObjective; import net.minecraft.text.Text; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Environment(EnvType.CLIENT) @Mixin(PlayerListHud.class) public class PlayerListHudMixin { - @Shadow private Text footer; @Inject(at = @At("HEAD"), method = "render(Lnet/minecraft/client/gui/DrawContext;ILnet/minecraft/scoreboard/Scoreboard;Lnet/minecraft/scoreboard/ScoreboardObjective;)V", cancellable = true) - public void skyblocker$renderTabHud(DrawContext context, int scaledW, Scoreboard sb, ScoreboardObjective sbo, - CallbackInfo info) { - - if (!Utils.isOnSkyblock() - || !SkyblockerConfig.get().general.tabHud.tabHudEnabled - || TabHud.defaultTgl.isPressed()) { + public void skyblocker$renderTabHud(DrawContext context, int w, Scoreboard sb, ScoreboardObjective sbo, CallbackInfo info) { + if (!Utils.isOnSkyblock() || !SkyblockerConfig.get().general.tabHud.tabHudEnabled || TabHud.defaultTgl.isPressed()) { return; } - MinecraftClient client = MinecraftClient.getInstance(); - ClientPlayNetworkHandler nwH = client.getNetworkHandler(); + ClientPlayNetworkHandler nwH = MinecraftClient.getInstance().getNetworkHandler(); if (nwH == null) { return; } - int w = scaledW; int h = MinecraftClient.getInstance().getWindow().getScaledHeight(); try { Screen screen = Screen.getCorrect(w, h, footer); screen.render(context); info.cancel(); } catch (Exception e) { - TabHud.LOGGER.error("Drawing default hud. Reason: Screen exception {}", e); + TabHud.LOGGER.error("[Skyblocker] Encountered unknown exception while drawing default hud", e); } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/RecipeBookWidgetAccessor.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/RecipeBookWidgetAccessor.java deleted file mode 100644 index 808b2950..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/RecipeBookWidgetAccessor.java +++ /dev/null @@ -1,14 +0,0 @@ -package me.xmrvizzy.skyblocker.mixin; - -import net.minecraft.client.gui.screen.recipebook.RecipeBookWidget; -import net.minecraft.client.gui.widget.TextFieldWidget; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -@Mixin(RecipeBookWidget.class) -public interface RecipeBookWidgetAccessor { - @Accessor - String getSearchText(); - @Accessor - TextFieldWidget getSearchField(); -} diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/HandledScreenAccessor.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/HandledScreenAccessor.java new file mode 100644 index 00000000..ad35dae6 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/HandledScreenAccessor.java @@ -0,0 +1,17 @@ +package me.xmrvizzy.skyblocker.mixin.accessor; + +import net.minecraft.client.gui.screen.ingame.HandledScreen; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(HandledScreen.class) +public interface HandledScreenAccessor { + @Accessor + int getX(); + @Accessor + int getY(); + @Accessor + int getBackgroundWidth(); + @Accessor + int getBackgroundHeight(); +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/PlayerListHudAccessor.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/PlayerListHudAccessor.java new file mode 100644 index 00000000..7e335d73 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/PlayerListHudAccessor.java @@ -0,0 +1,17 @@ +package me.xmrvizzy.skyblocker.mixin.accessor; + +import net.minecraft.client.gui.hud.PlayerListHud; +import net.minecraft.client.network.PlayerListEntry; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import java.util.Comparator; + +@Mixin(PlayerListHud.class) +public interface PlayerListHudAccessor { + + @Accessor("ENTRY_ORDERING") + static Comparator getOrdering() { + throw new AssertionError(); + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/RecipeBookWidgetAccessor.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/RecipeBookWidgetAccessor.java new file mode 100644 index 00000000..0f20d4e4 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/RecipeBookWidgetAccessor.java @@ -0,0 +1,14 @@ +package me.xmrvizzy.skyblocker.mixin.accessor; + +import net.minecraft.client.gui.screen.recipebook.RecipeBookWidget; +import net.minecraft.client.gui.widget.TextFieldWidget; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(RecipeBookWidget.class) +public interface RecipeBookWidgetAccessor { + @Accessor + String getSearchText(); + @Accessor + TextFieldWidget getSearchField(); +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/WorldRendererAccessor.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/WorldRendererAccessor.java new file mode 100644 index 00000000..831a3385 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/WorldRendererAccessor.java @@ -0,0 +1,13 @@ +package me.xmrvizzy.skyblocker.mixin.accessor; + +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 WorldRendererAccessor { + @Accessor + Frustum getFrustum(); +} \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/OldLever.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/OldLever.java index 37320c92..13789fe1 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/OldLever.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/OldLever.java @@ -7,11 +7,11 @@ import net.minecraft.util.math.Direction; import net.minecraft.util.shape.VoxelShape; public class OldLever { - protected static final VoxelShape FLOOR_SHAPE; - protected static final VoxelShape NORTH_SHAPE; - protected static final VoxelShape SOUTH_SHAPE; - protected static final VoxelShape EAST_SHAPE; - protected static final VoxelShape WEST_SHAPE; + protected static final VoxelShape FLOOR_SHAPE = Block.createCuboidShape(4.0D, 0.0D, 4.0D, 12.0D, 10.0D, 12.0D); + protected static final VoxelShape NORTH_SHAPE = Block.createCuboidShape(5.0D, 3.0D, 10.0D, 11.0D, 13.0D, 16.0D); + protected static final VoxelShape SOUTH_SHAPE = Block.createCuboidShape(5.0D, 3.0D, 0.0D, 11.0D, 13.0D, 6.0D); + protected static final VoxelShape EAST_SHAPE = Block.createCuboidShape(0.0D, 3.0D, 5.0D, 6.0D, 13.0D, 11.0D); + protected static final VoxelShape WEST_SHAPE = Block.createCuboidShape(10.0D, 3.0D, 5.0D, 16.0D, 13.0D, 11.0D); public static VoxelShape getShape(WallMountLocation wallMountLocation, Direction direction) { if (!SkyblockerConfig.get().general.hitbox.oldLeverHitbox) @@ -37,12 +37,4 @@ public class OldLever { } return null; } - - static { - FLOOR_SHAPE = Block.createCuboidShape(4, 0, 4, 12, 10, 12); - NORTH_SHAPE = Block.createCuboidShape(5.0D, 3.0D, 10.0D, 11.0D, 13.0D, 16.0D); - SOUTH_SHAPE = Block.createCuboidShape(5.0D, 3.0D, 0.0D, 11.0D, 13.0D, 6.0D); - WEST_SHAPE = Block.createCuboidShape(10.0D, 3.0D, 5.0D, 16.0D, 13.0D, 11.0D); - EAST_SHAPE = Block.createCuboidShape(0.0D, 3.0D, 5.0D, 6.0D, 13.0D, 11.0D); - } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java index 3a1f91d3..04dc6820 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java @@ -1,7 +1,7 @@ package me.xmrvizzy.skyblocker.skyblock.itemlist; import com.mojang.blaze3d.systems.RenderSystem; -import me.xmrvizzy.skyblocker.mixin.RecipeBookWidgetAccessor; +import me.xmrvizzy.skyblocker.mixin.accessor.RecipeBookWidgetAccessor; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.MinecraftClient; @@ -15,7 +15,7 @@ import net.minecraft.screen.AbstractRecipeScreenHandler; import net.minecraft.text.Text; import net.minecraft.util.Formatting; -@Environment(value= EnvType.CLIENT) +@Environment(value = EnvType.CLIENT) public class ItemListWidget extends RecipeBookWidget implements Drawable, Selectable { private int parentWidth; private int parentHeight; @@ -23,10 +23,12 @@ public class ItemListWidget extends RecipeBookWidget implements Drawable, Select private TextFieldWidget searchField; private SearchResultsWidget results; - public ItemListWidget() { super(); } + public ItemListWidget() { + super(); + } public void updateSearchResult() { - this.results.updateSearchResult(((RecipeBookWidgetAccessor)this).getSearchText()); + this.results.updateSearchResult(((RecipeBookWidgetAccessor) this).getSearchText()); } @Override @@ -35,7 +37,7 @@ public class ItemListWidget extends RecipeBookWidget implements Drawable, Select this.parentWidth = parentWidth; this.parentHeight = parentHeight; this.leftOffset = narrow ? 0 : 86; - this.searchField = ((RecipeBookWidgetAccessor)this).getSearchField(); + this.searchField = ((RecipeBookWidgetAccessor) this).getSearchField(); int x = (this.parentWidth - 147) / 2 - this.leftOffset; int y = (this.parentHeight - 166) / 2; if (ItemRegistry.filesImported) { @@ -48,14 +50,14 @@ public class ItemListWidget extends RecipeBookWidget implements Drawable, Select public void render(DrawContext context, int mouseX, int mouseY, float delta) { if (this.isOpen()) { MatrixStack matrices = context.getMatrices(); - matrices.push(); + matrices.push(); matrices.translate(0.0D, 0.0D, 100.0D); RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - this.searchField = ((RecipeBookWidgetAccessor)this).getSearchField(); + this.searchField = ((RecipeBookWidgetAccessor) this).getSearchField(); int i = (this.parentWidth - 147) / 2 - this.leftOffset; int j = (this.parentHeight - 166) / 2; context.drawTexture(TEXTURE, i, j, 1, 1, 147, 166); - this.searchField = ((RecipeBookWidgetAccessor)this).getSearchField(); + this.searchField = ((RecipeBookWidgetAccessor) this).getSearchField(); if (!ItemRegistry.filesImported && !this.searchField.isFocused() && this.searchField.getText().isEmpty()) { Text hintText = (Text.literal("Loading...")).formatted(Formatting.ITALIC).formatted(Formatting.GRAY); @@ -66,7 +68,7 @@ public class ItemListWidget extends RecipeBookWidget implements Drawable, Select } else { this.searchField.render(context, mouseX, mouseY, delta); } - if (ItemRegistry.filesImported){ + if (ItemRegistry.filesImported) { if (results == null) { int x = (this.parentWidth - 147) / 2 - this.leftOffset; int y = (this.parentHeight - 166) / 2; @@ -88,15 +90,15 @@ public class ItemListWidget extends RecipeBookWidget implements Drawable, Select @Override public boolean mouseClicked(double mouseX, double mouseY, int button) { - if (this.isOpen() && !this.client.player.isSpectator() && ItemRegistry.filesImported && results != null) { - if (this.searchField != null && this.searchField.mouseClicked(mouseX, mouseY, button)) { + if (this.isOpen() && this.client.player != null && !this.client.player.isSpectator() && ItemRegistry.filesImported && this.searchField != null && results != null) { + if (this.searchField.mouseClicked(mouseX, mouseY, button)) { this.results.closeRecipeView(); this.searchField.setFocused(true); return true; - } else - this.searchField.setFocused(false); + } else { + this.searchField.setFocused(false); return this.results.mouseClicked(mouseX, mouseY, button); - } else - return false; + } + } else return false; } } \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java index c02463a3..d9e97976 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java @@ -3,7 +3,7 @@ package me.xmrvizzy.skyblocker.skyblock.quicknav; import com.mojang.blaze3d.systems.RenderSystem; import me.xmrvizzy.skyblocker.SkyblockerMod; -import me.xmrvizzy.skyblocker.mixin.HandledScreenAccessor; +import me.xmrvizzy.skyblocker.mixin.accessor.HandledScreenAccessor; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.MinecraftClient; @@ -19,7 +19,6 @@ import net.minecraft.util.Identifier; @Environment(value=EnvType.CLIENT) public class QuickNavButton extends ClickableWidget { - private static final MinecraftClient CLIENT = MinecraftClient.getInstance(); private static final Identifier BUTTON_TEXTURE = new Identifier("textures/gui/container/creative_inventory/tabs.png"); private final int index; @@ -42,12 +41,9 @@ public class QuickNavButton extends ClickableWidget { if (screen instanceof HandledScreen handledScreen) { int x = ((HandledScreenAccessor)handledScreen).getX(); int y = ((HandledScreenAccessor)handledScreen).getY(); - int w = ((HandledScreenAccessor)handledScreen).getBackgroundWidth(); int h = ((HandledScreenAccessor)handledScreen).getBackgroundHeight(); if (h > 166) --h; // why is this even a thing - // this.x = x + this.index % 6 * 28 + 4; this.setX(x + this.index % 6 * 26 + 4); - // this.y = this.index < 6 ? y - 28 : y + h - 4; this.setY(this.index < 6 ? y - 26 : y + h - 4); this.u = 26; this.v = (index < 6 ? 0 : 64) + (toggled ? 32 : 0); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/HealingMelonIndicator.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/HealingMelonIndicator.java index fed34796..aa730c31 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/HealingMelonIndicator.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/HealingMelonIndicator.java @@ -12,12 +12,12 @@ import net.minecraft.util.Formatting; public class HealingMelonIndicator { private static final Title title = new Title("skyblocker.rift.healNow", Formatting.DARK_RED); - public static void updateHealth(MinecraftClient client) { + public static void updateHealth() { if (!SkyblockerConfig.get().slayer.vampireSlayer.enableHealingMelonIndicator || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !Utils.getLocation().contains("Stillgore Château")) { TitleContainer.removeTitle(title); return; } - ClientPlayerEntity player = client.player; + ClientPlayerEntity player = MinecraftClient.getInstance().player; if (player != null && player.getHealth() <= SkyblockerConfig.get().slayer.vampireSlayer.healingMelonHealthThreshold * 2F) { RenderHelper.displayInTitleContainerAndPlaySound(title); } else { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java index ee4319dc..d0ce6b72 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java @@ -4,11 +4,10 @@ import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; -import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import me.xmrvizzy.skyblocker.mixin.PlayerListHudAccessor; +import me.xmrvizzy.skyblocker.mixin.accessor.PlayerListHudAccessor; import me.xmrvizzy.skyblocker.utils.Utils; import net.minecraft.client.MinecraftClient; diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/FrustumUtils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/FrustumUtils.java index 565bd7a8..fd8ffdbd 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/FrustumUtils.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/FrustumUtils.java @@ -1,6 +1,6 @@ package me.xmrvizzy.skyblocker.utils; -import me.xmrvizzy.skyblocker.mixin.AccessorWorldRenderer; +import me.xmrvizzy.skyblocker.mixin.accessor.WorldRendererAccessor; import me.xmrvizzy.skyblocker.mixin.accessor.FrustumInvoker; import net.minecraft.client.MinecraftClient; import net.minecraft.client.render.Frustum; @@ -9,7 +9,7 @@ import net.minecraft.util.math.Box; public class FrustumUtils { public static Frustum getFrustum() { - return ((AccessorWorldRenderer) MinecraftClient.getInstance().worldRenderer).getFrustum(); + return ((WorldRendererAccessor) MinecraftClient.getInstance().worldRenderer).getFrustum(); } public static boolean isBoxVisible(Box box) { diff --git a/src/main/resources/skyblocker.mixins.json b/src/main/resources/skyblocker.mixins.json index 656f9d32..360a966a 100644 --- a/src/main/resources/skyblocker.mixins.json +++ b/src/main/resources/skyblocker.mixins.json @@ -3,25 +3,25 @@ "package": "me.xmrvizzy.skyblocker.mixin", "compatibilityLevel": "JAVA_17", "client": [ - "AccessorWorldRenderer", "ClientPlayerEntityMixin", "ClientPlayNetworkHandlerMixin", "DrawContextMixin", "FarmlandBlockMixin", "GenericContainerScreenHandlerMixin", - "HandledScreenAccessor", "HandledScreenMixin", "InGameHudMixin", "InventoryScreenMixin", "LeverBlockMixin", "MinecraftClientMixin", - "PlayerListHudAccessor", "PlayerListHudMixin", "PlayerSkinProviderMixin", - "RecipeBookWidgetAccessor", "ScoreboardMixin", "accessor.BeaconBlockEntityRendererInvoker", - "accessor.FrustumInvoker" + "accessor.FrustumInvoker", + "accessor.HandledScreenAccessor", + "accessor.PlayerListHudAccessor", + "accessor.RecipeBookWidgetAccessor", + "accessor.WorldRendererAccessor" ], "injectors": { "defaultRequire": 1 -- cgit