From 6c4295e383d9a8cd1ee6d6065bc1ea1cc774b423 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Fri, 19 Jul 2024 04:50:14 -0400 Subject: Move to Mod API for isOnSkyblock detection --- .../de/hysky/skyblocker/events/SkyblockEvents.java | 10 ++-- src/main/java/de/hysky/skyblocker/utils/Utils.java | 62 ++++++++-------------- 2 files changed, 27 insertions(+), 45 deletions(-) (limited to 'src/main/java/de/hysky/skyblocker') diff --git a/src/main/java/de/hysky/skyblocker/events/SkyblockEvents.java b/src/main/java/de/hysky/skyblocker/events/SkyblockEvents.java index 93426143..51cc13e3 100644 --- a/src/main/java/de/hysky/skyblocker/events/SkyblockEvents.java +++ b/src/main/java/de/hysky/skyblocker/events/SkyblockEvents.java @@ -8,20 +8,20 @@ import net.fabricmc.fabric.api.event.EventFactory; @Environment(EnvType.CLIENT) public final class SkyblockEvents { - public static final Event JOIN = EventFactory.createArrayBacked(SkyblockEvents.SkyblockJoin.class, callbacks -> () -> { + public static final Event JOIN = EventFactory.createArrayBacked(SkyblockJoin.class, callbacks -> () -> { for (SkyblockEvents.SkyblockJoin callback : callbacks) { callback.onSkyblockJoin(); } }); - public static final Event LEAVE = EventFactory.createArrayBacked(SkyblockEvents.SkyblockLeave.class, callbacks -> () -> { - for (SkyblockEvents.SkyblockLeave callback : callbacks) { + public static final Event LEAVE = EventFactory.createArrayBacked(SkyblockLeave.class, callbacks -> () -> { + for (SkyblockLeave callback : callbacks) { callback.onSkyblockLeave(); } }); - public static final Event LOCATION_CHANGE = EventFactory.createArrayBacked(SkyblockEvents.SkyblockLocationChange.class, callbacks -> location -> { - for (SkyblockEvents.SkyblockLocationChange callback : callbacks) { + public static final Event LOCATION_CHANGE = EventFactory.createArrayBacked(SkyblockLocationChange.class, callbacks -> location -> { + for (SkyblockLocationChange callback : callbacks) { callback.onSkyblockLocationChange(location); } }); diff --git a/src/main/java/de/hysky/skyblocker/utils/Utils.java b/src/main/java/de/hysky/skyblocker/utils/Utils.java index 4de32710..08cb5180 100644 --- a/src/main/java/de/hysky/skyblocker/utils/Utils.java +++ b/src/main/java/de/hysky/skyblocker/utils/Utils.java @@ -3,7 +3,6 @@ package de.hysky.skyblocker.utils; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.mojang.util.UndashedUuid; -import de.hysky.skyblocker.debug.Debug; import de.hysky.skyblocker.events.SkyblockEvents; import de.hysky.skyblocker.mixins.accessors.MessageHandlerAccessor; import de.hysky.skyblocker.skyblock.item.MuseumItemCache; @@ -18,6 +17,7 @@ import net.azureaaron.hmapi.network.packet.s2c.HelloS2CPacket; import net.azureaaron.hmapi.network.packet.s2c.HypixelS2CPacket; import net.azureaaron.hmapi.network.packet.v1.s2c.LocationUpdateS2CPacket; import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents; +import net.fabricmc.loader.api.FabricLoader; import net.minecraft.client.MinecraftClient; import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.client.network.PlayerListEntry; @@ -34,7 +34,6 @@ import org.slf4j.LoggerFactory; import java.time.Instant; import java.util.Collections; -import java.util.List; import java.util.concurrent.CompletableFuture; /** @@ -49,7 +48,6 @@ public class Utils { public static final String PROFILE_ID_PREFIX = "Profile ID: "; private static boolean isOnHypixel = false; private static boolean isOnSkyblock = false; - private static boolean isInjected = false; /** * Current Skyblock location (from the Mod API) */ @@ -131,10 +129,6 @@ public class Utils { return location == Location.MODERN_FORAGING_ISLAND; } - public static boolean isInjected() { - return isInjected; - } - /** * @return the profile parsed from the player list. */ @@ -229,45 +223,27 @@ public class Utils { public static void update() { MinecraftClient client = MinecraftClient.getInstance(); updateScoreboard(client); - updatePlayerPresenceFromScoreboard(client); + updatePlayerPresence(client); updateFromPlayerList(client); } /** - * Updates {@link #isOnSkyblock}, {@link #isInDungeons}, and {@link #isInjected} from the scoreboard. + * Updates {@link #isOnSkyblock} if in a development environment and {@link #isOnHypixel} in all environments. */ - public static void updatePlayerPresenceFromScoreboard(MinecraftClient client) { - List sidebar = STRING_SCOREBOARD; - - if (client.world == null || client.isInSingleplayer() || sidebar.isEmpty()) { - if (Debug.debugEnabled()) { - sidebar = Collections.emptyList(); - } else { - isOnSkyblock = false; - return; + private static void updatePlayerPresence(MinecraftClient client) { + FabricLoader fabricLoader = FabricLoader.getInstance(); + if (client.world == null || client.isInSingleplayer()) { + if (fabricLoader.isDevelopmentEnvironment()) { // Pretend we're always in skyblock when in dev + isOnSkyblock = true; } } - if (sidebar.isEmpty() && !Debug.debugEnabled()) return; - - if (Debug.debugEnabled() || isConnectedToHypixel(client)) { + if (fabricLoader.isDevelopmentEnvironment() || isConnectedToHypixel(client)) { if (!isOnHypixel) { isOnHypixel = true; } - if (Debug.debugEnabled() || sidebar.getFirst().contains("SKYBLOCK") || sidebar.getFirst().contains("SKIBLOCK")) { - if (!isOnSkyblock) { - if (!isInjected) { - isInjected = true; - } - isOnSkyblock = true; //TODO in the future we can probably replace these skyblock checks entirely with the Mod API - SkyblockEvents.JOIN.invoker().onSkyblockJoin(); - } - } else { - onLeaveSkyblock(); - } } else if (isOnHypixel) { isOnHypixel = false; - onLeaveSkyblock(); } } @@ -278,13 +254,6 @@ public class Utils { return (!serverAddress.isEmpty() && serverAddress.equalsIgnoreCase(ALTERNATE_HYPIXEL_ADDRESS)) || serverAddress.contains("hypixel.net") || serverAddress.contains("hypixel.io") || serverBrand.contains("Hypixel BungeeCord"); } - private static void onLeaveSkyblock() { - if (isOnSkyblock) { - isOnSkyblock = false; - SkyblockEvents.LEAVE.invoker().onSkyblockLeave(); - } - } - public static String getIslandArea() { try { for (String sidebarLine : STRING_SCOREBOARD) { @@ -418,12 +387,22 @@ public class Utils { case LocationUpdateS2CPacket(var serverName, var serverType, var _lobbyName, var mode, var map) -> { Utils.server = serverName; + String previousServerType = Utils.gameType; Utils.gameType = serverType.orElse(""); Utils.locationRaw = mode.orElse(""); Utils.location = Location.from(locationRaw); Utils.map = map.orElse(""); SkyblockEvents.LOCATION_CHANGE.invoker().onSkyblockLocationChange(location); + + if (Utils.gameType.equals("SKYBLOCK")) { + isOnSkyblock = true; + + if (!previousServerType.equals("SKYBLOCK")) SkyblockEvents.JOIN.invoker().onSkyblockJoin(); + } else { + isOnSkyblock = false; + SkyblockEvents.LEAVE.invoker().onSkyblockLeave(); + } } case ErrorS2CPacket(var id, var error) when id.equals(LocationUpdateS2CPacket.ID) -> { @@ -451,6 +430,8 @@ public class Utils { * and {@link #location} * * @param message json message from chat + * + * @deprecated Retained just in case the mod api doesn't work or gets disabled. */ @Deprecated private static void parseLocRaw(String message) { @@ -461,6 +442,7 @@ public class Utils { } if (locRaw.has("gameType")) { gameType = locRaw.get("gameType").getAsString(); + isOnSkyblock = gameType.equals("SKYBLOCK"); } if (locRaw.has("mode")) { locationRaw = locRaw.get("mode").getAsString(); -- cgit