diff options
author | Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> | 2023-08-02 12:43:47 +0800 |
---|---|---|
committer | Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> | 2023-08-02 12:43:47 +0800 |
commit | ebe9becc201351503b332ba50b2a1972b4de89fe (patch) | |
tree | 4301d4e1d4412db9dfba45e6c62ffca0f9fc6752 /src/main/java | |
parent | 09944126f865ad54137df83301d0e2a39b910214 (diff) | |
download | Skyblocker-ebe9becc201351503b332ba50b2a1972b4de89fe.tar.gz Skyblocker-ebe9becc201351503b332ba50b2a1972b4de89fe.tar.bz2 Skyblocker-ebe9becc201351503b332ba50b2a1972b4de89fe.zip |
Fix TeleportOverlay raycasting
Diffstat (limited to 'src/main/java')
-rw-r--r-- | src/main/java/me/xmrvizzy/skyblocker/skyblock/TeleportOverlay.java | 11 |
1 files changed, 9 insertions, 2 deletions
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); |