From 3912262286de5941f6b79b8c19a51838bce4295b Mon Sep 17 00:00:00 2001 From: Connor Linfoot Date: Fri, 2 Aug 2024 14:55:26 +0100 Subject: [PATCH 1/3] Implement HypixelModImplementation for use in downstream mods --- .../net/hypixel/modapi/HypixelModAPI.java | 22 +++++++++---------- .../modapi/HypixelModImplementation.java | 13 +++++++++++ 2 files changed, 23 insertions(+), 12 deletions(-) create mode 100644 src/main/java/net/hypixel/modapi/HypixelModImplementation.java diff --git a/src/main/java/net/hypixel/modapi/HypixelModAPI.java b/src/main/java/net/hypixel/modapi/HypixelModAPI.java index 8337fba..6b655f7 100644 --- a/src/main/java/net/hypixel/modapi/HypixelModAPI.java +++ b/src/main/java/net/hypixel/modapi/HypixelModAPI.java @@ -16,11 +16,11 @@ import net.hypixel.modapi.packet.impl.serverbound.ServerboundRegisterPacket; import net.hypixel.modapi.serializer.PacketSerializer; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.Nullable; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CopyOnWriteArrayList; -import java.util.function.Predicate; public class HypixelModAPI { private static final HypixelModAPI INSTANCE = new HypixelModAPI(); @@ -33,7 +33,8 @@ public static HypixelModAPI getInstance() { private final Map>> handlers = new ConcurrentHashMap<>(); private final Set subscribedEvents = ConcurrentHashMap.newKeySet(); private Set lastSubscribedEvents = Collections.emptySet(); - private Predicate packetSender = null; + @Nullable + private HypixelModImplementation modImplementation; private HypixelModAPI() { registerHypixelPackets(); @@ -77,8 +78,8 @@ private void registerDefaultHandler() { } private void sendRegisterPacket(boolean alwaysSendIfNotEmpty) { - if (packetSender == null) { - // Allow registering events before the mod has fully initialized + if (modImplementation == null || !modImplementation.isConnectedToHypixel()) { + // Allow registering events when not connected to Hypixel return; } @@ -144,11 +145,8 @@ public void handleError(String identifier, ErrorReason reason) { } @ApiStatus.Internal - public void setPacketSender(Predicate packetSender) { - if (this.packetSender != null) { - throw new IllegalArgumentException("Packet sender already set"); - } - this.packetSender = packetSender; + public void setModImplementation(HypixelModImplementation modImplementation) { + this.modImplementation = modImplementation; } /** @@ -184,11 +182,11 @@ public void subscribeToEventPacket(Class packet) { * @return whether the packet was sent successfully */ public boolean sendPacket(HypixelPacket packet) { - if (packetSender == null) { - throw new IllegalStateException("Packet sender not set"); + if (modImplementation == null) { + throw new IllegalStateException("Mod implementation not set"); } - return packetSender.test(packet); + return modImplementation.sendPacket(packet); } private static class RegisteredHandlerImpl implements RegisteredHandler { diff --git a/src/main/java/net/hypixel/modapi/HypixelModImplementation.java b/src/main/java/net/hypixel/modapi/HypixelModImplementation.java new file mode 100644 index 0000000..c63f7e9 --- /dev/null +++ b/src/main/java/net/hypixel/modapi/HypixelModImplementation.java @@ -0,0 +1,13 @@ +package net.hypixel.modapi; + +import net.hypixel.modapi.packet.HypixelPacket; +import org.jetbrains.annotations.ApiStatus; + +@ApiStatus.Internal +public interface HypixelModImplementation { + + boolean sendPacket(HypixelPacket packet); + + boolean isConnectedToHypixel(); + +} From 7b4c3b91b35672cf3a3ce1cc32404995eefb0166 Mon Sep 17 00:00:00 2001 From: Connor Linfoot Date: Tue, 1 Apr 2025 13:58:23 +0100 Subject: [PATCH 2/3] Rename interface to HypixelModAPIImplementation --- src/main/java/net/hypixel/modapi/HypixelModAPI.java | 4 ++-- ...odImplementation.java => HypixelModAPIImplementation.java} | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) rename src/main/java/net/hypixel/modapi/{HypixelModImplementation.java => HypixelModAPIImplementation.java} (82%) diff --git a/src/main/java/net/hypixel/modapi/HypixelModAPI.java b/src/main/java/net/hypixel/modapi/HypixelModAPI.java index 6b655f7..1d6779c 100644 --- a/src/main/java/net/hypixel/modapi/HypixelModAPI.java +++ b/src/main/java/net/hypixel/modapi/HypixelModAPI.java @@ -34,7 +34,7 @@ public static HypixelModAPI getInstance() { private final Set subscribedEvents = ConcurrentHashMap.newKeySet(); private Set lastSubscribedEvents = Collections.emptySet(); @Nullable - private HypixelModImplementation modImplementation; + private HypixelModAPIImplementation modImplementation; private HypixelModAPI() { registerHypixelPackets(); @@ -145,7 +145,7 @@ public void handleError(String identifier, ErrorReason reason) { } @ApiStatus.Internal - public void setModImplementation(HypixelModImplementation modImplementation) { + public void setModImplementation(HypixelModAPIImplementation modImplementation) { this.modImplementation = modImplementation; } diff --git a/src/main/java/net/hypixel/modapi/HypixelModImplementation.java b/src/main/java/net/hypixel/modapi/HypixelModAPIImplementation.java similarity index 82% rename from src/main/java/net/hypixel/modapi/HypixelModImplementation.java rename to src/main/java/net/hypixel/modapi/HypixelModAPIImplementation.java index c63f7e9..5e9acfa 100644 --- a/src/main/java/net/hypixel/modapi/HypixelModImplementation.java +++ b/src/main/java/net/hypixel/modapi/HypixelModAPIImplementation.java @@ -4,7 +4,7 @@ import org.jetbrains.annotations.ApiStatus; @ApiStatus.Internal -public interface HypixelModImplementation { +public interface HypixelModAPIImplementation { boolean sendPacket(HypixelPacket packet); From 0a7844e394a74ec99a9118f0b68a6a967a9bc6ec Mon Sep 17 00:00:00 2001 From: Connor Linfoot Date: Tue, 1 Apr 2025 14:37:39 +0100 Subject: [PATCH 3/3] Add onInit for interface --- src/main/java/net/hypixel/modapi/HypixelModAPI.java | 11 ++++++++++- .../hypixel/modapi/HypixelModAPIImplementation.java | 2 ++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/hypixel/modapi/HypixelModAPI.java b/src/main/java/net/hypixel/modapi/HypixelModAPI.java index 1d6779c..c2a542c 100644 --- a/src/main/java/net/hypixel/modapi/HypixelModAPI.java +++ b/src/main/java/net/hypixel/modapi/HypixelModAPI.java @@ -39,7 +39,6 @@ public static HypixelModAPI getInstance() { private HypixelModAPI() { registerHypixelPackets(); registerEventPackets(); - registerDefaultHandler(); } private void registerHypixelPackets() { @@ -146,7 +145,17 @@ public void handleError(String identifier, ErrorReason reason) { @ApiStatus.Internal public void setModImplementation(HypixelModAPIImplementation modImplementation) { + if (this.modImplementation != null) { + throw new IllegalStateException("Mod implementation already set"); + } + + if (modImplementation == null) { + throw new NullPointerException("modImplementation cannot be null"); + } + this.modImplementation = modImplementation; + this.modImplementation.onInit(); + registerDefaultHandler(); } /** diff --git a/src/main/java/net/hypixel/modapi/HypixelModAPIImplementation.java b/src/main/java/net/hypixel/modapi/HypixelModAPIImplementation.java index 5e9acfa..cf9ce33 100644 --- a/src/main/java/net/hypixel/modapi/HypixelModAPIImplementation.java +++ b/src/main/java/net/hypixel/modapi/HypixelModAPIImplementation.java @@ -6,6 +6,8 @@ @ApiStatus.Internal public interface HypixelModAPIImplementation { + void onInit(); + boolean sendPacket(HypixelPacket packet); boolean isConnectedToHypixel();