aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/net
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/net')
-rw-r--r--src/main/java/net/hypixel/modapi/forge/ForgeModAPI.java78
1 files changed, 78 insertions, 0 deletions
diff --git a/src/main/java/net/hypixel/modapi/forge/ForgeModAPI.java b/src/main/java/net/hypixel/modapi/forge/ForgeModAPI.java
new file mode 100644
index 0000000..de29195
--- /dev/null
+++ b/src/main/java/net/hypixel/modapi/forge/ForgeModAPI.java
@@ -0,0 +1,78 @@
+package net.hypixel.modapi.forge;
+
+import io.netty.buffer.Unpooled;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+import net.hypixel.modapi.HypixelModAPI;
+import net.hypixel.modapi.packet.HypixelPacket;
+import net.hypixel.modapi.serializer.PacketSerializer;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.network.NetHandlerPlayClient;
+import net.minecraft.network.Packet;
+import net.minecraft.network.PacketBuffer;
+import net.minecraft.network.play.client.C17PacketCustomPayload;
+import net.minecraft.network.play.server.S3FPacketCustomPayload;
+import net.minecraftforge.common.MinecraftForge;
+import net.minecraftforge.fml.common.Mod;
+import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
+import net.minecraftforge.fml.common.network.FMLNetworkEvent;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+@Mod(modid = ForgeModAPI.MODID, version = ForgeModAPI.VERSION, clientSideOnly = true, name = "Hypixel Mod API")
+public class ForgeModAPI {
+ public static final String MODID = "hypixel_mod_api";
+ public static final String VERSION = "0.4.0";
+ private static final Logger LOGGER = Logger.getLogger("HypixelModAPI");
+
+ @Mod.EventHandler
+ public void init(FMLPostInitializationEvent event) {
+ MinecraftForge.EVENT_BUS.register(this);
+ HypixelModAPI.getInstance().setPacketSender(ForgeModAPI::sendPacket);
+ }
+
+ @SubscribeEvent
+ public void onServerConnect(FMLNetworkEvent.ClientConnectedToServerEvent event) {
+ event.manager.channel().pipeline().addBefore("packet_handler", "hypixel_mod_api_packet_handler", HypixelPacketHandler.INSTANCE);
+ }
+
+ private static boolean sendPacket(HypixelPacket packet) {
+ NetHandlerPlayClient netHandler = Minecraft.getMinecraft().getNetHandler();
+ if (netHandler == null) {
+ return false;
+ }
+
+ PacketBuffer buf = new PacketBuffer(Unpooled.buffer());
+ PacketSerializer serializer = new PacketSerializer(buf);
+ packet.write(serializer);
+ netHandler.addToSendQueue(new C17PacketCustomPayload(packet.getIdentifier(), buf));
+ return true;
+ }
+
+ private static class HypixelPacketHandler extends SimpleChannelInboundHandler<Packet<?>> {
+ private static final HypixelPacketHandler INSTANCE = new HypixelPacketHandler();
+
+ @Override
+ protected void channelRead0(ChannelHandlerContext ctx, Packet<?> msg) {
+ ctx.fireChannelRead(msg);
+
+ if (!(msg instanceof S3FPacketCustomPayload)) {
+ return;
+ }
+
+ S3FPacketCustomPayload packet = (S3FPacketCustomPayload) msg;
+ String identifier = packet.getChannelName();
+ if (!HypixelModAPI.getInstance().getRegistry().isRegistered(identifier)) {
+ return;
+ }
+
+ try {
+ HypixelModAPI.getInstance().handle(identifier, new PacketSerializer(packet.getBufferData()));
+ } catch (Exception e) {
+ LOGGER.log(Level.WARNING, "Failed to handle packet " + identifier, e);
+ }
+ }
+ }
+}