From eee776d2702dd619aaec2180fb878b94a856369c Mon Sep 17 00:00:00 2001 From: Julienraptor01 Date: Sat, 29 Jul 2023 04:06:35 +0200 Subject: Yay --- .../java/me/xmrvizzy/skyblocker/SkyblockerMod.java | 2 +- .../skyblocker/config/SkyblockerConfig.java | 14 +++- .../skyblocker/skyblock/EtherwarpOverlay.java | 54 ------------- .../skyblocker/skyblock/TeleportOverlay.java | 91 ++++++++++++++++++++++ 4 files changed, 105 insertions(+), 56 deletions(-) delete mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/TeleportOverlay.java (limited to 'src/main/java/me') diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java index 50c60840..bd414acb 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java +++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java @@ -87,7 +87,7 @@ public class SkyblockerMod implements ClientModInitializer { TheRift.init(); TitleContainer.init(); OcclusionCulling.init(); - EtherwarpOverlay.init(); + TeleportOverlay.init(); containerSolverManager.init(); scheduler.scheduleCyclic(Utils::update, 20); scheduler.scheduleCyclic(DiscordRPCManager::updateDataAndPresence, 100); diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java index 6874f2ce..2cc7dd36 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java @@ -136,7 +136,6 @@ public class SkyblockerConfig implements ConfigData { public boolean acceptReparty = true; public boolean backpackPreviewWithoutShift = false; public boolean hideEmptyTooltips = true; - public boolean etherwarpOverlay = true; @ConfigEntry.Category("tabHud") @ConfigEntry.Gui.CollapsibleObject() @@ -182,6 +181,10 @@ public class SkyblockerConfig implements ConfigData { @ConfigEntry.Gui.CollapsibleObject() public TitleContainer titleContainer = new TitleContainer(); + @ConfigEntry.Category("Teleport Overlay") + @ConfigEntry.Gui.CollapsibleObject() + public TeleportOverlay teleportOverlay = new TeleportOverlay(); + @ConfigEntry.Gui.Excluded public List lockedSlots = new ArrayList<>(); } @@ -293,6 +296,15 @@ public class SkyblockerConfig implements ConfigData { public Alignment alignment = Alignment.MIDDLE; } + public static class TeleportOverlay { + public boolean enableTeleportOverlays = true; + public boolean enableWeirdTransmission = true; + public boolean enableInstantTransmission = true; + public boolean enableEtherTransmission = true; + public boolean enableSinrecallTransmission = true; + public boolean enableWitherImpact = true; + } + public enum Direction { HORIZONTAL, VERTICAL; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java deleted file mode 100644 index 005b3d64..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/EtherwarpOverlay.java +++ /dev/null @@ -1,54 +0,0 @@ -package me.xmrvizzy.skyblocker.skyblock; - -import com.mojang.blaze3d.systems.RenderSystem; - -import me.xmrvizzy.skyblocker.config.SkyblockerConfig; -import me.xmrvizzy.skyblocker.skyblock.item.PriceInfoTooltip; -import me.xmrvizzy.skyblocker.utils.RenderHelper; -import me.xmrvizzy.skyblocker.utils.Utils; -import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; -import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; -import net.minecraft.client.MinecraftClient; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NbtCompound; -import net.minecraft.util.hit.BlockHitResult; -import net.minecraft.util.hit.HitResult; -import net.minecraft.util.math.BlockPos; - -public class EtherwarpOverlay { - private static final MinecraftClient CLIENT = MinecraftClient.getInstance(); - private static final float[] COLOR_COMPONENTS = { 118f / 255f, 21f / 255f, 148f / 255f }; - - public static void init() { - WorldRenderEvents.AFTER_TRANSLUCENT.register(EtherwarpOverlay::renderEtherwarpOverlay); - } - - private static void renderEtherwarpOverlay(WorldRenderContext wrc) { - if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.etherwarpOverlay) { - ItemStack heldItem = CLIENT.player.getMainHandStack(); - String itemId = PriceInfoTooltip.getInternalNameFromNBT(heldItem); - NbtCompound nbt = heldItem.getNbt(); - - if (itemId != null && (((itemId.equals("ASPECT_OF_THE_VOID") || itemId.equals("ASPECT_OF_THE_END")) && nbt.getCompound("ExtraAttributes").getInt("ethermerge") == 1 && CLIENT.options.sneakKey.isPressed()) || itemId.equals("ETHERWARP_CONDUIT"))) { - int range = (nbt.getCompound("ExtraAttributes").contains("tuned_transmission")) ? 57 + nbt.getCompound("ExtraAttributes").getInt("tuned_transmission") : 57; - HitResult result = CLIENT.player.raycast(range, wrc.tickDelta(), false); - - if (result instanceof BlockHitResult blockHit) { - BlockPos pos = blockHit.getBlockPos(); - BlockState state = CLIENT.world.getBlockState(pos); - if (state.getBlock() != Blocks.AIR && CLIENT.world.getBlockState(pos.up()).getBlock() == Blocks.AIR && CLIENT.world.getBlockState(pos.up(2)).getBlock() == Blocks.AIR) { - RenderSystem.polygonOffset(-1f, -10f); - RenderSystem.enablePolygonOffset(); - - RenderHelper.renderFilledIfVisible(wrc, pos, COLOR_COMPONENTS, 0.5f); - - RenderSystem.polygonOffset(0f, 0f); - RenderSystem.disablePolygonOffset(); - } - } - } - } - } -} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/TeleportOverlay.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/TeleportOverlay.java new file mode 100644 index 00000000..6551ac9d --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/TeleportOverlay.java @@ -0,0 +1,91 @@ +package me.xmrvizzy.skyblocker.skyblock; + +import com.mojang.blaze3d.systems.RenderSystem; + +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.skyblock.item.PriceInfoTooltip; +import me.xmrvizzy.skyblocker.utils.RenderHelper; +import me.xmrvizzy.skyblocker.utils.Utils; +import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; +import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.client.MinecraftClient; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NbtCompound; +import net.minecraft.util.hit.BlockHitResult; +import net.minecraft.util.hit.HitResult; +import net.minecraft.util.math.BlockPos; + +public class TeleportOverlay { + private static final MinecraftClient CLIENT = MinecraftClient.getInstance(); + private static final float[] COLOR_COMPONENTS = { 118f / 255f, 21f / 255f, 148f / 255f }; + + public static void init() { + WorldRenderEvents.AFTER_TRANSLUCENT.register(TeleportOverlay::define); + } + + private static void define(WorldRenderContext wrc) { + if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.teleportOverlay.enableTeleportOverlays) { + ItemStack heldItem = CLIENT.player.getMainHandStack(); + String itemId = PriceInfoTooltip.getInternalNameFromNBT(heldItem); + NbtCompound nbt = heldItem.getNbt(); + + if (itemId != null) { + switch (itemId) { + case "ASPECT_OF_THE_LEECH_1" -> { + if (SkyblockerConfig.get().general.teleportOverlay.enableWeirdTransmission) { + render(wrc, 3); + } + } + case "ASPECT_OF_THE_LEECH_2" -> { + if (SkyblockerConfig.get().general.teleportOverlay.enableWeirdTransmission) { + render(wrc, 4); + } + } + case "ASPECT_OF_THE_END", "ASPECT_OF_THE_VOID" -> { + if (SkyblockerConfig.get().general.teleportOverlay.enableEtherTransmission && nbt.getCompound("ExtraAttributes").getInt("ethermerge") == 1 && CLIENT.options.sneakKey.isPressed()) { + render(wrc, (nbt.getCompound("ExtraAttributes").contains("tuned_transmission")) ? 57 + nbt.getCompound("ExtraAttributes").getInt("tuned_transmission") : 57); + } + else if (SkyblockerConfig.get().general.teleportOverlay.enableInstantTransmission) { + render(wrc, (nbt.getCompound("ExtraAttributes").contains("tuned_transmission")) ? 8 + nbt.getCompound("ExtraAttributes").getInt("tuned_transmission") : 8); + } + } + case "ETHERWARP_CONDUIT" -> { + if (SkyblockerConfig.get().general.teleportOverlay.enableEtherTransmission) { + render(wrc, (nbt.getCompound("ExtraAttributes").contains("tuned_transmission")) ? 57 + nbt.getCompound("ExtraAttributes").getInt("tuned_transmission") : 57); + } + } + case "SINSEEKER_SCYTHE" -> { + if (SkyblockerConfig.get().general.teleportOverlay.enableSinrecallTransmission) { + render(wrc, (nbt.getCompound("ExtraAttributes").contains("tuned_transmission")) ? 4 + nbt.getCompound("ExtraAttributes").getInt("tuned_transmission") : 4); + } + } + case "NECRON_BLADE", "ASTRAEA", "HYPERION", "SCYLLA", "VALKYRIE" -> { + if (SkyblockerConfig.get().general.teleportOverlay.enableWitherImpact) { + render(wrc, 10); + } + } + } + } + } + } + + private static void render(WorldRenderContext wrc, double range) { + HitResult result = CLIENT.player.raycast(range, wrc.tickDelta(), false); + + if (result instanceof BlockHitResult blockHit) { + BlockPos pos = blockHit.getBlockPos(); + BlockState state = CLIENT.world.getBlockState(pos); + if (state.getBlock() != Blocks.AIR && CLIENT.world.getBlockState(pos.up()).getBlock() == Blocks.AIR && CLIENT.world.getBlockState(pos.up(2)).getBlock() == Blocks.AIR) { + RenderSystem.polygonOffset(-1f, -10f); + RenderSystem.enablePolygonOffset(); + + RenderHelper.renderFilledIfVisible(wrc, pos, COLOR_COMPONENTS, 0.5f); + + RenderSystem.polygonOffset(0f, 0f); + RenderSystem.disablePolygonOffset(); + } + } + } +} -- cgit From 4f5ce131b5048bf62d44950fb1018ebcc4be980b Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Sat, 29 Jul 2023 13:43:32 +0800 Subject: Refactor TeleportOverlay --- .../skyblocker/skyblock/TeleportOverlay.java | 144 +++++++++++---------- 1 file changed, 79 insertions(+), 65 deletions(-) (limited to 'src/main/java/me') diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/TeleportOverlay.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/TeleportOverlay.java index 6551ac9d..781a914e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/TeleportOverlay.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/TeleportOverlay.java @@ -1,7 +1,6 @@ package me.xmrvizzy.skyblocker.skyblock; import com.mojang.blaze3d.systems.RenderSystem; - import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.skyblock.item.PriceInfoTooltip; import me.xmrvizzy.skyblocker.utils.RenderHelper; @@ -9,7 +8,6 @@ import me.xmrvizzy.skyblocker.utils.Utils; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; import net.minecraft.client.MinecraftClient; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; @@ -18,74 +16,90 @@ import net.minecraft.util.hit.HitResult; import net.minecraft.util.math.BlockPos; public class TeleportOverlay { - private static final MinecraftClient CLIENT = MinecraftClient.getInstance(); - private static final float[] COLOR_COMPONENTS = { 118f / 255f, 21f / 255f, 148f / 255f }; + private static final float[] COLOR_COMPONENTS = {118f / 255f, 21f / 255f, 148f / 255f}; + private static final MinecraftClient client = MinecraftClient.getInstance(); + + public static void init() { + WorldRenderEvents.AFTER_TRANSLUCENT.register(TeleportOverlay::render); + } - public static void init() { - WorldRenderEvents.AFTER_TRANSLUCENT.register(TeleportOverlay::define); - } + private static void render(WorldRenderContext wrc) { + if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.teleportOverlay.enableTeleportOverlays && client.player != null) { + ItemStack heldItem = client.player.getMainHandStack(); + String itemId = PriceInfoTooltip.getInternalNameFromNBT(heldItem); + NbtCompound nbt = heldItem.getNbt(); - private static void define(WorldRenderContext wrc) { - if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.teleportOverlay.enableTeleportOverlays) { - ItemStack heldItem = CLIENT.player.getMainHandStack(); - String itemId = PriceInfoTooltip.getInternalNameFromNBT(heldItem); - NbtCompound nbt = heldItem.getNbt(); + if (itemId != null) { + switch (itemId) { + case "ASPECT_OF_THE_LEECH_1" -> { + if (SkyblockerConfig.get().general.teleportOverlay.enableWeirdTransmission) { + render(wrc, 3); + } + } + case "ASPECT_OF_THE_LEECH_2" -> { + if (SkyblockerConfig.get().general.teleportOverlay.enableWeirdTransmission) { + render(wrc, 4); + } + } + case "ASPECT_OF_THE_END", "ASPECT_OF_THE_VOID" -> { + if (SkyblockerConfig.get().general.teleportOverlay.enableEtherTransmission && client.options.sneakKey.isPressed() && nbt != null && nbt.getCompound("ExtraAttributes").getInt("ethermerge") == 1) { + render(wrc, nbt, 57); + } else if (SkyblockerConfig.get().general.teleportOverlay.enableInstantTransmission) { + render(wrc, nbt, 8); + } + } + case "ETHERWARP_CONDUIT" -> { + if (SkyblockerConfig.get().general.teleportOverlay.enableEtherTransmission) { + render(wrc, nbt, 57); + } + } + case "SINSEEKER_SCYTHE" -> { + if (SkyblockerConfig.get().general.teleportOverlay.enableSinrecallTransmission) { + render(wrc, nbt, 4); + } + } + case "NECRON_BLADE", "ASTRAEA", "HYPERION", "SCYLLA", "VALKYRIE" -> { + if (SkyblockerConfig.get().general.teleportOverlay.enableWitherImpact) { + render(wrc, 10); + } + } + } + } + } + } - if (itemId != null) { - switch (itemId) { - case "ASPECT_OF_THE_LEECH_1" -> { - if (SkyblockerConfig.get().general.teleportOverlay.enableWeirdTransmission) { - render(wrc, 3); - } - } - case "ASPECT_OF_THE_LEECH_2" -> { - if (SkyblockerConfig.get().general.teleportOverlay.enableWeirdTransmission) { - render(wrc, 4); - } - } - case "ASPECT_OF_THE_END", "ASPECT_OF_THE_VOID" -> { - if (SkyblockerConfig.get().general.teleportOverlay.enableEtherTransmission && nbt.getCompound("ExtraAttributes").getInt("ethermerge") == 1 && CLIENT.options.sneakKey.isPressed()) { - render(wrc, (nbt.getCompound("ExtraAttributes").contains("tuned_transmission")) ? 57 + nbt.getCompound("ExtraAttributes").getInt("tuned_transmission") : 57); - } - else if (SkyblockerConfig.get().general.teleportOverlay.enableInstantTransmission) { - render(wrc, (nbt.getCompound("ExtraAttributes").contains("tuned_transmission")) ? 8 + nbt.getCompound("ExtraAttributes").getInt("tuned_transmission") : 8); - } - } - case "ETHERWARP_CONDUIT" -> { - if (SkyblockerConfig.get().general.teleportOverlay.enableEtherTransmission) { - render(wrc, (nbt.getCompound("ExtraAttributes").contains("tuned_transmission")) ? 57 + nbt.getCompound("ExtraAttributes").getInt("tuned_transmission") : 57); - } - } - case "SINSEEKER_SCYTHE" -> { - if (SkyblockerConfig.get().general.teleportOverlay.enableSinrecallTransmission) { - render(wrc, (nbt.getCompound("ExtraAttributes").contains("tuned_transmission")) ? 4 + nbt.getCompound("ExtraAttributes").getInt("tuned_transmission") : 4); - } - } - case "NECRON_BLADE", "ASTRAEA", "HYPERION", "SCYLLA", "VALKYRIE" -> { - if (SkyblockerConfig.get().general.teleportOverlay.enableWitherImpact) { - render(wrc, 10); - } - } - } - } - } - } + /** + * Renders the teleport overlay with a given base range and the tuned transmission stat. + */ + private static void render(WorldRenderContext wrc, NbtCompound nbt, int baseRange) { + render(wrc, nbt != null && nbt.getCompound("ExtraAttributes").contains("tuned_transmission") ? baseRange + nbt.getCompound("ExtraAttributes").getInt("tuned_transmission") : baseRange); + } - private static void render(WorldRenderContext wrc, double range) { - HitResult result = CLIENT.player.raycast(range, wrc.tickDelta(), false); + /** + * Renders the teleport overlay with a given range. Uses {@link MinecraftClient#crosshairTarget} if it is a block and within range. Otherwise, raycasts from the player with the given range. + */ + private static void render(WorldRenderContext wrc, int range) { + if (client.crosshairTarget != null && client.crosshairTarget.getType() == HitResult.Type.BLOCK && client.crosshairTarget instanceof BlockHitResult blockHitResult && client.crosshairTarget.squaredDistanceTo(client.player) < range * range) { + render(wrc, blockHitResult); + } else { + HitResult result = client.player.raycast(range, wrc.tickDelta(), false); + if (result.getType() == HitResult.Type.BLOCK && result instanceof BlockHitResult blockHitResult) { + render(wrc, blockHitResult); + } + } + } - if (result instanceof BlockHitResult blockHit) { - BlockPos pos = blockHit.getBlockPos(); - BlockState state = CLIENT.world.getBlockState(pos); - if (state.getBlock() != Blocks.AIR && CLIENT.world.getBlockState(pos.up()).getBlock() == Blocks.AIR && CLIENT.world.getBlockState(pos.up(2)).getBlock() == Blocks.AIR) { - RenderSystem.polygonOffset(-1f, -10f); - RenderSystem.enablePolygonOffset(); + private static void render(WorldRenderContext wrc, BlockHitResult blockHitResult) { + BlockPos pos = blockHitResult.getBlockPos(); + BlockState state = client.world.getBlockState(pos); + if (!state.isAir() && client.world.getBlockState(pos.up()).isAir() && client.world.getBlockState(pos.up(2)).isAir()) { + RenderSystem.polygonOffset(-1f, -10f); + RenderSystem.enablePolygonOffset(); - RenderHelper.renderFilledIfVisible(wrc, pos, COLOR_COMPONENTS, 0.5f); + RenderHelper.renderFilledIfVisible(wrc, pos, COLOR_COMPONENTS, 0.5f); - RenderSystem.polygonOffset(0f, 0f); - RenderSystem.disablePolygonOffset(); - } - } - } + RenderSystem.polygonOffset(0f, 0f); + RenderSystem.disablePolygonOffset(); + } + } } -- cgit From ebe9becc201351503b332ba50b2a1972b4de89fe Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Wed, 2 Aug 2023 12:43:47 +0800 Subject: Fix TeleportOverlay raycasting --- .../java/me/xmrvizzy/skyblocker/skyblock/TeleportOverlay.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'src/main/java/me') diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/TeleportOverlay.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/TeleportOverlay.java index 781a914e..e7c76160 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/TeleportOverlay.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/TeleportOverlay.java @@ -24,7 +24,7 @@ public class TeleportOverlay { } private static void render(WorldRenderContext wrc) { - if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.teleportOverlay.enableTeleportOverlays && client.player != null) { + if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.teleportOverlay.enableTeleportOverlays && client.player != null && client.world != null) { ItemStack heldItem = client.player.getMainHandStack(); String itemId = PriceInfoTooltip.getInternalNameFromNBT(heldItem); NbtCompound nbt = heldItem.getNbt(); @@ -77,11 +77,13 @@ public class TeleportOverlay { /** * Renders the teleport overlay with a given range. Uses {@link MinecraftClient#crosshairTarget} if it is a block and within range. Otherwise, raycasts from the player with the given range. + * @implNote {@link MinecraftClient#player} and {@link MinecraftClient#world} must not be null when calling this method. */ private static void render(WorldRenderContext wrc, int range) { if (client.crosshairTarget != null && client.crosshairTarget.getType() == HitResult.Type.BLOCK && client.crosshairTarget instanceof BlockHitResult blockHitResult && client.crosshairTarget.squaredDistanceTo(client.player) < range * range) { render(wrc, blockHitResult); - } else { + } else if (client.interactionManager != null && range > client.interactionManager.getReachDistance()) { + @SuppressWarnings("DataFlowIssue") HitResult result = client.player.raycast(range, wrc.tickDelta(), false); if (result.getType() == HitResult.Type.BLOCK && result instanceof BlockHitResult blockHitResult) { render(wrc, blockHitResult); @@ -89,8 +91,13 @@ public class TeleportOverlay { } } + /** + * Renders the teleport overlay at the given {@link BlockHitResult}. + * @implNote {@link MinecraftClient#world} must not be null when calling this method. + */ private static void render(WorldRenderContext wrc, BlockHitResult blockHitResult) { BlockPos pos = blockHitResult.getBlockPos(); + @SuppressWarnings("DataFlowIssue") BlockState state = client.world.getBlockState(pos); if (!state.isAir() && client.world.getBlockState(pos.up()).isAir() && client.world.getBlockState(pos.up(2)).isAir()) { RenderSystem.polygonOffset(-1f, -10f); -- cgit