diff --git a/src/main/java/net/hypixel/modapi/HypixelModAPI.java b/src/main/java/net/hypixel/modapi/HypixelModAPI.java index 8337fba..c2a542c 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,12 +33,12 @@ 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 HypixelModAPIImplementation modImplementation; private HypixelModAPI() { registerHypixelPackets(); registerEventPackets(); - registerDefaultHandler(); } private void registerHypixelPackets() { @@ -77,8 +77,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 +144,18 @@ 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"); + 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.packetSender = packetSender; + + this.modImplementation = modImplementation; + this.modImplementation.onInit(); + registerDefaultHandler(); } /** @@ -184,11 +191,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/HypixelModAPIImplementation.java b/src/main/java/net/hypixel/modapi/HypixelModAPIImplementation.java new file mode 100644 index 0000000..cf9ce33 --- /dev/null +++ b/src/main/java/net/hypixel/modapi/HypixelModAPIImplementation.java @@ -0,0 +1,15 @@ +package net.hypixel.modapi; + +import net.hypixel.modapi.packet.HypixelPacket; +import org.jetbrains.annotations.ApiStatus; + +@ApiStatus.Internal +public interface HypixelModAPIImplementation { + + void onInit(); + + boolean sendPacket(HypixelPacket packet); + + boolean isConnectedToHypixel(); + +}