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); + +}