aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/de/hysky/skyblocker/events/SkyblockEvents.java10
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/Utils.java75
2 files changed, 40 insertions, 45 deletions
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<SkyblockEvents.SkyblockJoin> JOIN = EventFactory.createArrayBacked(SkyblockEvents.SkyblockJoin.class, callbacks -> () -> {
+ public static final Event<SkyblockJoin> JOIN = EventFactory.createArrayBacked(SkyblockJoin.class, callbacks -> () -> {
for (SkyblockEvents.SkyblockJoin callback : callbacks) {
callback.onSkyblockJoin();
}
});
- public static final Event<SkyblockEvents.SkyblockLeave> LEAVE = EventFactory.createArrayBacked(SkyblockEvents.SkyblockLeave.class, callbacks -> () -> {
- for (SkyblockEvents.SkyblockLeave callback : callbacks) {
+ public static final Event<SkyblockLeave> LEAVE = EventFactory.createArrayBacked(SkyblockLeave.class, callbacks -> () -> {
+ for (SkyblockLeave callback : callbacks) {
callback.onSkyblockLeave();
}
});
- public static final Event<SkyblockEvents.SkyblockLocationChange> LOCATION_CHANGE = EventFactory.createArrayBacked(SkyblockEvents.SkyblockLocationChange.class, callbacks -> location -> {
- for (SkyblockEvents.SkyblockLocationChange callback : callbacks) {
+ public static final Event<SkyblockLocationChange> 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..1b01a48a 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,8 @@ 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.fabric.api.client.networking.v1.ClientPlayConnectionEvents;
+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 +35,6 @@ import org.slf4j.LoggerFactory;
import java.time.Instant;
import java.util.Collections;
-import java.util.List;
import java.util.concurrent.CompletableFuture;
/**
@@ -49,7 +49,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 +130,6 @@ public class Utils {
return location == Location.MODERN_FORAGING_ISLAND;
}
- public static boolean isInjected() {
- return isInjected;
- }
-
/**
* @return the profile parsed from the player list.
*/
@@ -216,6 +211,7 @@ public class Utils {
});
ClientReceiveMessageEvents.ALLOW_GAME.register(Utils::onChatMessage);
ClientReceiveMessageEvents.GAME_CANCELED.register(Utils::onChatMessage); // Somehow this works even though onChatMessage returns a boolean
+ ClientPlayConnectionEvents.DISCONNECT.register((handler, client) -> onDisconnect());
//Register Mod API stuff
HypixelNetworking.registerToEvents(Util.make(new Object2IntOpenHashMap<>(), map -> map.put(LocationUpdateS2CPacket.ID, 1)));
@@ -229,45 +225,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<String> 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 +256,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) {
@@ -410,6 +381,17 @@ public class Utils {
}
}
+ private static void onDisconnect() {
+ if (isOnSkyblock) SkyblockEvents.LEAVE.invoker().onSkyblockLeave();
+
+ isOnSkyblock = false;
+ server = "";
+ gameType = "";
+ locationRaw = "";
+ location = Location.UNKNOWN;
+ map = "";
+ }
+
private static void onPacket(HypixelS2CPacket packet) {
switch (packet) {
case HelloS2CPacket(var environment) -> {
@@ -418,12 +400,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 if (previousServerType.equals("SKYBLOCK")) {
+ isOnSkyblock = false;
+ SkyblockEvents.LEAVE.invoker().onSkyblockLeave();
+ }
}
case ErrorS2CPacket(var id, var error) when id.equals(LocationUpdateS2CPacket.ID) -> {
@@ -451,6 +443,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 +455,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();