From d29675e52af4dbd7c9746fddda292d98ae2f0116 Mon Sep 17 00:00:00 2001 From: Connor Linfoot Date: Sun, 28 Jul 2024 16:00:48 +0100 Subject: [PATCH 1/6] Implements support for handling errors as well as debug functionality See https://github.com/HypixelDev/ModAPI/pull/39 --- gradle.properties | 4 +- .../hypixel/modapi/fabric/FabricModAPI.java | 43 +++++++++++++++++++ .../event/HypixelModAPIErrorCallback.java | 20 +++++++++ 3 files changed, 65 insertions(+), 2 deletions(-) create mode 100644 src/main/java/net/hypixel/modapi/fabric/event/HypixelModAPIErrorCallback.java diff --git a/gradle.properties b/gradle.properties index aba151a..a6b3248 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,10 +8,10 @@ org.gradle.jvmargs=-Xmx1G loader_version=0.15.10 # Mod Properties - mod_version = 1.0+build.1 + mod_version = 1.0+build.dev maven_group = net.hypixel archives_base_name = HypixelModAPI - mod_api_version = 1.0 + mod_api_version = dev-SNAPSHOT # Dependencies # check this on https://modmuss50.me/fabric.html diff --git a/src/main/java/net/hypixel/modapi/fabric/FabricModAPI.java b/src/main/java/net/hypixel/modapi/fabric/FabricModAPI.java index 9d4fb89..9a3873c 100644 --- a/src/main/java/net/hypixel/modapi/fabric/FabricModAPI.java +++ b/src/main/java/net/hypixel/modapi/fabric/FabricModAPI.java @@ -5,10 +5,15 @@ import net.fabricmc.fabric.api.client.networking.v1.ClientConfigurationNetworking; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry; +import net.fabricmc.loader.api.FabricLoader; import net.hypixel.modapi.HypixelModAPI; +import net.hypixel.modapi.error.ErrorReason; import net.hypixel.modapi.fabric.event.HypixelModAPICallback; +import net.hypixel.modapi.fabric.event.HypixelModAPIErrorCallback; import net.hypixel.modapi.fabric.payload.ClientboundHypixelPayload; import net.hypixel.modapi.fabric.payload.ServerboundHypixelPayload; +import net.hypixel.modapi.handler.ClientboundPacketHandler; +import net.hypixel.modapi.packet.impl.clientbound.event.ClientboundLocationPacket; import net.minecraft.client.MinecraftClient; import net.minecraft.network.PacketByteBuf; import net.minecraft.network.codec.PacketCodec; @@ -17,11 +22,17 @@ public class FabricModAPI implements ClientModInitializer { private static final Logger LOGGER = LogUtils.getLogger(); + private static final boolean DEBUG_MODE = FabricLoader.getInstance().isDevelopmentEnvironment() || Boolean.getBoolean("net.hypixel.modapi.debug"); @Override public void onInitializeClient() { reloadRegistrations(); registerPacketSender(); + + if (DEBUG_MODE) { + LOGGER.info("Debug mode is enabled!"); + registerDebug(); + } } /** @@ -93,6 +104,18 @@ private static void registerClientbound(String identifier) { private static void handleIncomingPayload(String identifier, ClientboundHypixelPayload payload) { if (!payload.isSuccess()) { LOGGER.warn("Received an error response for packet {}: {}", identifier, payload.getErrorReason()); + try { + HypixelModAPI.getInstance().handleError(identifier, payload.getErrorReason()); + } catch (Exception e) { + LOGGER.error("An error occurred while handling error response for packet {}", identifier, e); + } + + try { + System.out.println("INVOKING ON ERROR"); + HypixelModAPIErrorCallback.EVENT.invoker().onError(identifier, payload.getErrorReason()); + } catch (Exception e) { + LOGGER.error("An error occurred while handling error response for packet {}", identifier, e); + } return; } @@ -119,4 +142,24 @@ private static void registerServerbound(String identifier) { // Ignored as this is fired when we reload the registrations and the packet is already registered } } + + private static void registerDebug() { + // Register events + HypixelModAPI.getInstance().subscribeToEventPacket(ClientboundLocationPacket.class); + + HypixelModAPI.getInstance().registerHandler(ClientboundLocationPacket.class, new ClientboundPacketHandler<>() { + @Override + public void handle(ClientboundLocationPacket packet) { + LOGGER.info("Received location packet {}", packet); + } + + @Override + public void onError(ErrorReason reason) { + LOGGER.error("Received error response in location handler {}", reason); + } + }); + + HypixelModAPICallback.EVENT.register(packet -> LOGGER.info("Received packet {}", packet)); + HypixelModAPIErrorCallback.EVENT.register((identifier, error) -> LOGGER.error("Received error response for packet {}: {}", identifier, error)); + } } diff --git a/src/main/java/net/hypixel/modapi/fabric/event/HypixelModAPIErrorCallback.java b/src/main/java/net/hypixel/modapi/fabric/event/HypixelModAPIErrorCallback.java new file mode 100644 index 0000000..aabeb61 --- /dev/null +++ b/src/main/java/net/hypixel/modapi/fabric/event/HypixelModAPIErrorCallback.java @@ -0,0 +1,20 @@ +package net.hypixel.modapi.fabric.event; + +import net.fabricmc.fabric.api.event.Event; +import net.fabricmc.fabric.api.event.EventFactory; +import net.hypixel.modapi.error.ErrorReason; + +/** + * Callback for when a Hypixel Mod API packet is received. + */ +public interface HypixelModAPIErrorCallback { + + Event EVENT = EventFactory.createArrayBacked(HypixelModAPIErrorCallback.class, callbacks -> (identifier, reason) -> { + for (HypixelModAPIErrorCallback callback : callbacks) { + callback.onError(identifier, reason); + } + }); + + void onError(String identifier, ErrorReason reason); + +} From 88baf2e270417d55f7f3d065c0b3579cd9046449 Mon Sep 17 00:00:00 2001 From: Connor Linfoot Date: Sun, 28 Jul 2024 16:09:04 +0100 Subject: [PATCH 2/6] Remove sout --- src/main/java/net/hypixel/modapi/fabric/FabricModAPI.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/net/hypixel/modapi/fabric/FabricModAPI.java b/src/main/java/net/hypixel/modapi/fabric/FabricModAPI.java index 9a3873c..56dd56c 100644 --- a/src/main/java/net/hypixel/modapi/fabric/FabricModAPI.java +++ b/src/main/java/net/hypixel/modapi/fabric/FabricModAPI.java @@ -111,7 +111,6 @@ private static void handleIncomingPayload(String identifier, ClientboundHypixelP } try { - System.out.println("INVOKING ON ERROR"); HypixelModAPIErrorCallback.EVENT.invoker().onError(identifier, payload.getErrorReason()); } catch (Exception e) { LOGGER.error("An error occurred while handling error response for packet {}", identifier, e); From ed73b1150de2e0589f59fe5ddaadd77926332bc0 Mon Sep 17 00:00:00 2001 From: Connor Linfoot Date: Sun, 28 Jul 2024 16:09:50 +0100 Subject: [PATCH 3/6] error --- .../hypixel/modapi/fabric/event/HypixelModAPIErrorCallback.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/hypixel/modapi/fabric/event/HypixelModAPIErrorCallback.java b/src/main/java/net/hypixel/modapi/fabric/event/HypixelModAPIErrorCallback.java index aabeb61..8c0fd4d 100644 --- a/src/main/java/net/hypixel/modapi/fabric/event/HypixelModAPIErrorCallback.java +++ b/src/main/java/net/hypixel/modapi/fabric/event/HypixelModAPIErrorCallback.java @@ -5,7 +5,7 @@ import net.hypixel.modapi.error.ErrorReason; /** - * Callback for when a Hypixel Mod API packet is received. + * Callback for when a Hypixel Mod API error reason is received. */ public interface HypixelModAPIErrorCallback { From c59f250175c80970deabd36a3b1e57daceb3a46c Mon Sep 17 00:00:00 2001 From: Connor Linfoot Date: Wed, 31 Jul 2024 11:26:58 +0100 Subject: [PATCH 4/6] Update error handling with upstream changes --- .../net/hypixel/modapi/fabric/FabricModAPI.java | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/src/main/java/net/hypixel/modapi/fabric/FabricModAPI.java b/src/main/java/net/hypixel/modapi/fabric/FabricModAPI.java index 56dd56c..78e68e9 100644 --- a/src/main/java/net/hypixel/modapi/fabric/FabricModAPI.java +++ b/src/main/java/net/hypixel/modapi/fabric/FabricModAPI.java @@ -7,12 +7,10 @@ import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry; import net.fabricmc.loader.api.FabricLoader; import net.hypixel.modapi.HypixelModAPI; -import net.hypixel.modapi.error.ErrorReason; import net.hypixel.modapi.fabric.event.HypixelModAPICallback; import net.hypixel.modapi.fabric.event.HypixelModAPIErrorCallback; import net.hypixel.modapi.fabric.payload.ClientboundHypixelPayload; import net.hypixel.modapi.fabric.payload.ServerboundHypixelPayload; -import net.hypixel.modapi.handler.ClientboundPacketHandler; import net.hypixel.modapi.packet.impl.clientbound.event.ClientboundLocationPacket; import net.minecraft.client.MinecraftClient; import net.minecraft.network.PacketByteBuf; @@ -146,17 +144,8 @@ private static void registerDebug() { // Register events HypixelModAPI.getInstance().subscribeToEventPacket(ClientboundLocationPacket.class); - HypixelModAPI.getInstance().registerHandler(ClientboundLocationPacket.class, new ClientboundPacketHandler<>() { - @Override - public void handle(ClientboundLocationPacket packet) { - LOGGER.info("Received location packet {}", packet); - } - - @Override - public void onError(ErrorReason reason) { - LOGGER.error("Received error response in location handler {}", reason); - } - }); + HypixelModAPI.getInstance().registerHandler(ClientboundLocationPacket.class, packet -> LOGGER.info("Received location packet {}", packet)) + .onError(error -> LOGGER.error("Received error response for location packet: {}", error)); HypixelModAPICallback.EVENT.register(packet -> LOGGER.info("Received packet {}", packet)); HypixelModAPIErrorCallback.EVENT.register((identifier, error) -> LOGGER.error("Received error response for packet {}: {}", identifier, error)); From 9ba0500ccd476568b481a6f9d456d0e32cb25f41 Mon Sep 17 00:00:00 2001 From: Connor Linfoot Date: Wed, 31 Jul 2024 11:42:13 +0100 Subject: [PATCH 5/6] Update with new createHandler method --- src/main/java/net/hypixel/modapi/fabric/FabricModAPI.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/hypixel/modapi/fabric/FabricModAPI.java b/src/main/java/net/hypixel/modapi/fabric/FabricModAPI.java index 78e68e9..0ecb49a 100644 --- a/src/main/java/net/hypixel/modapi/fabric/FabricModAPI.java +++ b/src/main/java/net/hypixel/modapi/fabric/FabricModAPI.java @@ -144,7 +144,7 @@ private static void registerDebug() { // Register events HypixelModAPI.getInstance().subscribeToEventPacket(ClientboundLocationPacket.class); - HypixelModAPI.getInstance().registerHandler(ClientboundLocationPacket.class, packet -> LOGGER.info("Received location packet {}", packet)) + HypixelModAPI.getInstance().createHandler(ClientboundLocationPacket.class, packet -> LOGGER.info("Received location packet {}", packet)) .onError(error -> LOGGER.error("Received error response for location packet: {}", error)); HypixelModAPICallback.EVENT.register(packet -> LOGGER.info("Received packet {}", packet)); From 9b87d60d4a636ef1afd51034e0cbe21cab13107c Mon Sep 17 00:00:00 2001 From: Connor Linfoot Date: Wed, 31 Jul 2024 11:46:47 +0100 Subject: [PATCH 6/6] Update to 1.0.1 of the mod api --- gradle.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index a6b3248..9c5531a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,10 +8,10 @@ org.gradle.jvmargs=-Xmx1G loader_version=0.15.10 # Mod Properties - mod_version = 1.0+build.dev + mod_version = 1.0.1+build.1 maven_group = net.hypixel archives_base_name = HypixelModAPI - mod_api_version = dev-SNAPSHOT + mod_api_version = 1.0.1 # Dependencies # check this on https://modmuss50.me/fabric.html