From 64bcfe0507ee9862189ff7fe7faf812f5b17c257 Mon Sep 17 00:00:00 2001
From: thepigcat <benpospo@gmail.com>
Date: Tue, 16 Jul 2024 23:32:31 +0200
Subject: [PATCH] setup networking

---
 build.gradle                                  |  2 +-
 gradle.properties                             |  2 ++
 .../events/AngelRingEvents.java               |  1 -
 .../networking/KeyPressedPayload.java         | 24 +++++++++++++++++++
 .../networking/NetworkingEvents.java          | 16 +++++++++++++
 .../networking/PayloadActions.java            | 20 ++++++++++++++++
 .../registry/KeyBindRegistry.java             |  4 ++++
 7 files changed, 67 insertions(+), 2 deletions(-)
 create mode 100644 src/main/java/com/leclowndu93150/modular_angelring/networking/KeyPressedPayload.java
 create mode 100644 src/main/java/com/leclowndu93150/modular_angelring/networking/NetworkingEvents.java
 create mode 100644 src/main/java/com/leclowndu93150/modular_angelring/networking/PayloadActions.java

diff --git a/build.gradle b/build.gradle
index e08b07c..a21d943 100644
--- a/build.gradle
+++ b/build.gradle
@@ -91,7 +91,7 @@ configurations {
 dependencies {
     implementation "net.neoforged:neoforge:${neo_version}"
     implementation "curse.maven:curios-1037991:5441959"
-    runtimeOnly("mezz.jei:jei-1.21-neoforge:19.0.0.7")
+    runtimeOnly("mezz.jei:jei-1.21-neoforge:${jei_version}")
 }
 
 
diff --git a/gradle.properties b/gradle.properties
index 9f93eaa..5b6106b 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -23,6 +23,8 @@ neo_version_range=[21.0.10-beta,)
 
 loader_version_range=[2,)
 
+jei_version = 19.4.0.28
+
 mod_id=modular_angelring
 
 mod_name=Modular Angel Ring
diff --git a/src/main/java/com/leclowndu93150/modular_angelring/events/AngelRingEvents.java b/src/main/java/com/leclowndu93150/modular_angelring/events/AngelRingEvents.java
index c8d5cfe..b48faca 100644
--- a/src/main/java/com/leclowndu93150/modular_angelring/events/AngelRingEvents.java
+++ b/src/main/java/com/leclowndu93150/modular_angelring/events/AngelRingEvents.java
@@ -66,7 +66,6 @@ public static void stopDrift(PlayerTickEvent.Pre event) {
         }
     }
 
-
     @SubscribeEvent(priority = EventPriority.LOW)
     public static void newFlightSpeed(PlayerInteractEvent.RightClickItem event) {
         final float MAX_FLY_SPEED = 0.15F;
diff --git a/src/main/java/com/leclowndu93150/modular_angelring/networking/KeyPressedPayload.java b/src/main/java/com/leclowndu93150/modular_angelring/networking/KeyPressedPayload.java
new file mode 100644
index 0000000..6f3df14
--- /dev/null
+++ b/src/main/java/com/leclowndu93150/modular_angelring/networking/KeyPressedPayload.java
@@ -0,0 +1,24 @@
+package com.leclowndu93150.modular_angelring.networking;
+
+import com.leclowndu93150.modular_angelring.AngelRingMain;
+import com.leclowndu93150.modular_angelring.render.AngelRingRenderer;
+import net.minecraft.network.RegistryFriendlyByteBuf;
+import net.minecraft.network.codec.ByteBufCodecs;
+import net.minecraft.network.codec.StreamCodec;
+import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
+import net.minecraft.resources.ResourceLocation;
+import org.jetbrains.annotations.NotNull;
+
+public record KeyPressedPayload(int key) implements CustomPacketPayload {
+    public static final Type<KeyPressedPayload> TYPE = new Type<>(ResourceLocation.fromNamespaceAndPath(AngelRingMain.MODID, "keypressed_payload"));
+    public static final StreamCodec<RegistryFriendlyByteBuf, KeyPressedPayload> STREAM_CODEC = StreamCodec.composite(
+            ByteBufCodecs.INT,
+            KeyPressedPayload::key,
+            KeyPressedPayload::new
+    );
+
+    @Override
+    public @NotNull Type<? extends CustomPacketPayload> type() {
+        return TYPE;
+    }
+}
diff --git a/src/main/java/com/leclowndu93150/modular_angelring/networking/NetworkingEvents.java b/src/main/java/com/leclowndu93150/modular_angelring/networking/NetworkingEvents.java
new file mode 100644
index 0000000..69e1663
--- /dev/null
+++ b/src/main/java/com/leclowndu93150/modular_angelring/networking/NetworkingEvents.java
@@ -0,0 +1,16 @@
+package com.leclowndu93150.modular_angelring.networking;
+
+import com.leclowndu93150.modular_angelring.AngelRingMain;
+import net.neoforged.bus.api.SubscribeEvent;
+import net.neoforged.fml.common.EventBusSubscriber;
+import net.neoforged.neoforge.network.event.RegisterPayloadHandlersEvent;
+import net.neoforged.neoforge.network.registration.PayloadRegistrar;
+
+@EventBusSubscriber(modid = AngelRingMain.MODID, bus = EventBusSubscriber.Bus.MOD)
+public final class NetworkingEvents {
+    @SubscribeEvent
+    public static void registerPayloads(RegisterPayloadHandlersEvent event) {
+        PayloadRegistrar registrar = event.registrar(AngelRingMain.MODID);
+        registrar.playToServer(KeyPressedPayload.TYPE, KeyPressedPayload.STREAM_CODEC, PayloadActions::keyPressedAction);
+    }
+}
diff --git a/src/main/java/com/leclowndu93150/modular_angelring/networking/PayloadActions.java b/src/main/java/com/leclowndu93150/modular_angelring/networking/PayloadActions.java
new file mode 100644
index 0000000..4e6e8b1
--- /dev/null
+++ b/src/main/java/com/leclowndu93150/modular_angelring/networking/PayloadActions.java
@@ -0,0 +1,20 @@
+package com.leclowndu93150.modular_angelring.networking;
+
+import com.leclowndu93150.modular_angelring.AngelRingMain;
+import com.leclowndu93150.modular_angelring.registry.KeyBindRegistry;
+import net.minecraft.world.entity.player.Player;
+import net.minecraft.world.level.Level;
+import net.neoforged.neoforge.network.handling.IPayloadContext;
+
+public final class PayloadActions {
+    public static void keyPressedAction(KeyPressedPayload payload, IPayloadContext ctx) {
+        // SERVER-SIDE
+        Player player = ctx.player();
+        Level level = player.level();
+        int key = payload.key();
+        if (key == KeyBindRegistry.INERTIA_MODULE.get().getKey().getValue()) {
+            // do stuff if inertia module key was pressed
+            System.out.println("Inertia pressed");
+        }
+    }
+}
diff --git a/src/main/java/com/leclowndu93150/modular_angelring/registry/KeyBindRegistry.java b/src/main/java/com/leclowndu93150/modular_angelring/registry/KeyBindRegistry.java
index 88912b3..cf72792 100644
--- a/src/main/java/com/leclowndu93150/modular_angelring/registry/KeyBindRegistry.java
+++ b/src/main/java/com/leclowndu93150/modular_angelring/registry/KeyBindRegistry.java
@@ -2,6 +2,7 @@
 
 import com.leclowndu93150.modular_angelring.common.AngelRingItem;
 import com.leclowndu93150.modular_angelring.common.AngelRingModules;
+import com.leclowndu93150.modular_angelring.networking.KeyPressedPayload;
 import com.mojang.blaze3d.platform.InputConstants;
 import net.minecraft.ChatFormatting;
 import net.minecraft.client.KeyMapping;
@@ -18,6 +19,7 @@
 import net.neoforged.neoforge.client.event.RegisterKeyMappingsEvent;
 import net.neoforged.neoforge.common.NeoForge;
 import net.neoforged.neoforge.common.util.Lazy;
+import net.neoforged.neoforge.network.PacketDistributor;
 import org.lwjgl.glfw.GLFW;
 import top.theillusivec4.curios.api.CuriosApi;
 import top.theillusivec4.curios.api.SlotResult;
@@ -54,6 +56,8 @@ public static void onKey(InputEvent.Key event) {
             ItemStack angelRingStack = slotResult.get().stack();
             Level level = player.level();
             if (INERTIA_MODULE.get().consumeClick() && AngelRingModules.getInertiaModifier(angelRingStack)) {
+                // Send payload to server
+                PacketDistributor.sendToServer(new KeyPressedPayload(INERTIA_MODULE.get().getKey().getValue()));
                 inertiaEnabled = !inertiaEnabled;
                 if (inertiaEnabled) {
                     player.displayClientMessage(Component.literal("Inertia Module: Enabled").withStyle(ChatFormatting.GREEN), true);