aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/me/xmrvizzy/skyblocker/skyblock/TeleportOverlay.java
diff options
context:
space:
mode:
authorKevinthegreat <92656833+kevinthegreat1@users.noreply.github.com>2023-07-29 13:43:32 +0800
committerKevinthegreat <92656833+kevinthegreat1@users.noreply.github.com>2023-07-29 13:43:32 +0800
commit4f5ce131b5048bf62d44950fb1018ebcc4be980b (patch)
tree8df69250c51b3a8623f9aabfda1cc73c01ee3366 /src/main/java/me/xmrvizzy/skyblocker/skyblock/TeleportOverlay.java
parenteee776d2702dd619aaec2180fb878b94a856369c (diff)
downloadSkyblocker-4f5ce131b5048bf62d44950fb1018ebcc4be980b.tar.gz
Skyblocker-4f5ce131b5048bf62d44950fb1018ebcc4be980b.tar.bz2
Skyblocker-4f5ce131b5048bf62d44950fb1018ebcc4be980b.zip
Refactor TeleportOverlay
Diffstat (limited to 'src/main/java/me/xmrvizzy/skyblocker/skyblock/TeleportOverlay.java')
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/TeleportOverlay.java144
1 files changed, 79 insertions, 65 deletions
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();
+ }
+ }
}