From a0d3066c490b19c124ed7a364bb5d48be5d66a6a Mon Sep 17 00:00:00 2001 From: Cody <149296239+notdevcody@users.noreply.github.com> Date: Fri, 1 Nov 2024 23:31:10 +0100 Subject: [PATCH 01/10] refactor: add network-api submodule --- .gitmodules | 3 +++ build.gradle | 11 +++++++---- common/build.gradle | 2 ++ settings.gradle.kts | 1 + 4 files changed, 13 insertions(+), 4 deletions(-) create mode 100644 .gitmodules diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..2c17564 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "network-api"] + path = network-api + url = https://github.com/kurrycat2004/MPKNetworkAPI diff --git a/build.gradle b/build.gradle index 8ed29c7..974a9ca 100644 --- a/build.gradle +++ b/build.gradle @@ -59,7 +59,7 @@ configure( ]) } - if (project.name != "common") { + if (project.name != "common" && project.name != "network-api") { //destinationDirectory = rootProject.buildDir doFirst { archiveClassifier = project.name @@ -67,8 +67,11 @@ configure( } duplicatesStrategy = DuplicatesStrategy.EXCLUDE - from { - configurations.library.collect { it.isDirectory() ? it : zipTree(it) } + with copySpec { + from { + configurations.library.collect { it.isDirectory() ? it : zipTree(it) } + } + exclude 'META-INF/*.SF', 'META-INF/*.DSA', 'META-INF/*.RSA' } from { "../LICENSE" @@ -95,7 +98,7 @@ configure( options.encoding = 'UTF-8' } - if (project.name != "common") { + if (project.name != "common" && project.name != "network-api") { project.afterEvaluate { tasks.withType(JavaExec).configureEach { javaLauncher.set(javaToolchains.launcherFor(java.toolchain)) diff --git a/common/build.gradle b/common/build.gradle index ea3c4ee..d9de428 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -7,6 +7,8 @@ archivesBaseName = $commonBaseName dependencies { compileOnly 'org.apache.logging.log4j:log4j-api:2.0-beta9' compileOnly 'org.apache.logging.log4j:log4j-core:2.0-beta9' + + library project(':network-api:common') } compileJava.doLast { diff --git a/settings.gradle.kts b/settings.gradle.kts index 5ee7609..2038c84 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -22,6 +22,7 @@ plugins { } include("common") +include("network-api:common") if (System.getenv("JITPACK") == null) { include("forge-1.8.9") From a4c8de6c902a6567f95c4107080658a1ebce748c Mon Sep 17 00:00:00 2001 From: Cody <149296239+notdevcody@users.noreply.github.com> Date: Fri, 1 Nov 2024 23:46:33 +0100 Subject: [PATCH 02/10] feat(common): networking + module unloading --- .../java/io/github/kurrycat/mpkmod/Main.java | 5 +++ .../kurrycat/mpkmod/compatibility/API.java | 17 +++++++-- .../compatibility/MCClasses/Minecraft.java | 3 ++ .../github/kurrycat/mpkmod/events/Event.java | 4 +- .../kurrycat/mpkmod/events/EventAPI.java | 13 ++++++- .../mpkmod/events/OnModuleMessageEvent.java | 17 +++++++++ .../mpkmod/events/OnPluginMessageEvent.java | 16 ++++++++ .../kurrycat/mpkmod/modules/MPKModule.java | 8 ++++ .../mpkmod/modules/ModuleManager.java | 10 +++++ .../impl/MPKPacketListenerClientImpl.java | 38 +++++++++++++++++++ .../github/kurrycat/mpkmod/util/Colors.java | 2 +- 11 files changed, 126 insertions(+), 7 deletions(-) create mode 100644 common/src/main/java/io/github/kurrycat/mpkmod/events/OnModuleMessageEvent.java create mode 100644 common/src/main/java/io/github/kurrycat/mpkmod/events/OnPluginMessageEvent.java create mode 100644 common/src/main/java/io/github/kurrycat/mpkmod/network/impl/MPKPacketListenerClientImpl.java diff --git a/common/src/main/java/io/github/kurrycat/mpkmod/Main.java b/common/src/main/java/io/github/kurrycat/mpkmod/Main.java index a793690..cf275ab 100644 --- a/common/src/main/java/io/github/kurrycat/mpkmod/Main.java +++ b/common/src/main/java/io/github/kurrycat/mpkmod/Main.java @@ -208,4 +208,9 @@ public void loaded() { ) );*/ } + + @Override + public void unloaded() { + throw new UnsupportedOperationException(); + } } diff --git a/common/src/main/java/io/github/kurrycat/mpkmod/compatibility/API.java b/common/src/main/java/io/github/kurrycat/mpkmod/compatibility/API.java index 78aa72b..8d01cc2 100644 --- a/common/src/main/java/io/github/kurrycat/mpkmod/compatibility/API.java +++ b/common/src/main/java/io/github/kurrycat/mpkmod/compatibility/API.java @@ -11,20 +11,22 @@ import io.github.kurrycat.mpkmod.modules.MPKModuleImpl; import io.github.kurrycat.mpkmod.modules.ModuleFinder; import io.github.kurrycat.mpkmod.modules.ModuleManager; +import io.github.kurrycat.mpkmod.network.impl.MPKPacketListenerClientImpl; import io.github.kurrycat.mpkmod.save.Serializer; import io.github.kurrycat.mpkmod.util.ClassUtil; import io.github.kurrycat.mpkmod.util.JSONConfig; import io.github.kurrycat.mpkmod.util.Mouse; import io.github.kurrycat.mpkmod.util.Procedure; +import io.github.kurrycat.mpknetapi.common.network.packet.MPKPacket; +import io.github.kurrycat.mpknetapi.common.network.packet.impl.clientbound.MPKPacketListenerClient; +import io.github.kurrycat.mpknetapi.common.network.packet.impl.serverbound.MPKPacketRegister; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Marker; import org.apache.logging.log4j.MarkerManager; import java.time.Instant; -import java.util.HashMap; -import java.util.Map; -import java.util.Optional; +import java.util.*; public class API { public static final String MODID = "mpkmod"; @@ -33,6 +35,7 @@ public class API { public static final Marker DISCORD_RPC_MARKER = MarkerManager.getMarker("DISCORD_RPC"); public static final Marker COMPATIBILITY_MARKER = MarkerManager.getMarker("COMPATIBILITY"); public static final Marker CONFIG_MARKER = MarkerManager.getMarker("CONFIG"); + public static final MPKPacketListenerClient PACKET_LISTENER_CLIENT = new MPKPacketListenerClientImpl(); public static final String NAME = "MPK Mod"; public static final String VERSION = "2.0"; @@ -154,6 +157,9 @@ public static void onLoadComplete() { } public static void onServerConnect(boolean isLocal) { + List modules = new ArrayList<>(); + ModuleManager.moduleMap.forEach((id, module) -> modules.add(id)); + Minecraft.Interface.get().ifPresent(i -> i.sendPacket(new MPKPacketRegister(API.VERSION, modules))); Minecraft.updateWorldState(Event.EventType.SERVER_CONNECT, isLocal); if (Main.discordRpcInitialized) DiscordRPC.updateWorldAndPlayState(); } @@ -180,5 +186,10 @@ public static void onKeybind(String id) { EventAPI.postEvent(new OnKeybindEvent(id)); } + + public static void onPluginMessage(MPKPacket packet) { + packet.process(PACKET_LISTENER_CLIENT); + EventAPI.postEvent(new OnPluginMessageEvent(packet)); + } } } diff --git a/common/src/main/java/io/github/kurrycat/mpkmod/compatibility/MCClasses/Minecraft.java b/common/src/main/java/io/github/kurrycat/mpkmod/compatibility/MCClasses/Minecraft.java index b7a21ac..eefbc34 100644 --- a/common/src/main/java/io/github/kurrycat/mpkmod/compatibility/MCClasses/Minecraft.java +++ b/common/src/main/java/io/github/kurrycat/mpkmod/compatibility/MCClasses/Minecraft.java @@ -5,6 +5,7 @@ import io.github.kurrycat.mpkmod.gui.MPKGuiScreen; import io.github.kurrycat.mpkmod.gui.infovars.InfoString; import io.github.kurrycat.mpkmod.ticks.TickInput; +import io.github.kurrycat.mpknetapi.common.network.packet.MPKPacket; import java.text.SimpleDateFormat; import java.util.Calendar; @@ -140,5 +141,7 @@ static Optional get() { boolean setInputs(Float yaw, boolean relYaw, Float pitch, boolean relPitch, int pressedInputs, int releasedInputs, int L, int R); boolean isF3Enabled(); + + void sendPacket(MPKPacket packet); } } diff --git a/common/src/main/java/io/github/kurrycat/mpkmod/events/Event.java b/common/src/main/java/io/github/kurrycat/mpkmod/events/Event.java index 732ef02..5ef5a0e 100644 --- a/common/src/main/java/io/github/kurrycat/mpkmod/events/Event.java +++ b/common/src/main/java/io/github/kurrycat/mpkmod/events/Event.java @@ -20,7 +20,9 @@ public enum EventType { SERVER_DISCONNECT(OnServerDisconnect.class), KEY_INPUT(OnKeyInputEvent.class), MOUSE_INPUT(OnMouseInputEvent.class), - KEYBIND(OnKeybindEvent.class); + KEYBIND(OnKeybindEvent.class), + PLUGIN_MESSAGE(OnPluginMessageEvent.class), + MODULE_MESSAGE(OnModuleMessageEvent.class); public final Class eventClass; diff --git a/common/src/main/java/io/github/kurrycat/mpkmod/events/EventAPI.java b/common/src/main/java/io/github/kurrycat/mpkmod/events/EventAPI.java index f31784f..dbd6e01 100644 --- a/common/src/main/java/io/github/kurrycat/mpkmod/events/EventAPI.java +++ b/common/src/main/java/io/github/kurrycat/mpkmod/events/EventAPI.java @@ -56,8 +56,9 @@ public static void addListener(EventListener listener) { public static void loading(String moduleID) { currentModuleID = moduleID; listeners.forEach((type, map) -> { - if(map.containsKey(currentModuleID)) - map.get(currentModuleID).clear(); + if (map.containsKey(currentModuleID)) { + map.get(currentModuleID).clear(); + } }); } @@ -65,6 +66,14 @@ public static void finishLoading() { currentModuleID = null; } + public static void unload(String moduleID) { + listeners.forEach((type, map) -> { + if (map.containsKey(moduleID)) { + map.get(moduleID).clear(); + } + }); + } + public static void postEvent(Event event) { if (Player.getLatest() != null) listeners.postEvent(event); diff --git a/common/src/main/java/io/github/kurrycat/mpkmod/events/OnModuleMessageEvent.java b/common/src/main/java/io/github/kurrycat/mpkmod/events/OnModuleMessageEvent.java new file mode 100644 index 0000000..ff7db27 --- /dev/null +++ b/common/src/main/java/io/github/kurrycat/mpkmod/events/OnModuleMessageEvent.java @@ -0,0 +1,17 @@ +package io.github.kurrycat.mpkmod.events; + +import io.github.kurrycat.mpknetapi.common.network.packet.MPKPacket; +import io.github.kurrycat.mpknetapi.common.network.packet.impl.shared.MPKPacketModuleMessage; + +public class OnModuleMessageEvent extends Event { + private final MPKPacketModuleMessage packet; + + public OnModuleMessageEvent(MPKPacketModuleMessage packet) { + super(EventType.PLUGIN_MESSAGE); + this.packet = packet; + } + + public MPKPacket getPacket() { + return packet; + } +} \ No newline at end of file diff --git a/common/src/main/java/io/github/kurrycat/mpkmod/events/OnPluginMessageEvent.java b/common/src/main/java/io/github/kurrycat/mpkmod/events/OnPluginMessageEvent.java new file mode 100644 index 0000000..f0c293b --- /dev/null +++ b/common/src/main/java/io/github/kurrycat/mpkmod/events/OnPluginMessageEvent.java @@ -0,0 +1,16 @@ +package io.github.kurrycat.mpkmod.events; + +import io.github.kurrycat.mpknetapi.common.network.packet.MPKPacket; + +public class OnPluginMessageEvent extends Event { + private final MPKPacket packet; + + public OnPluginMessageEvent(MPKPacket packet) { + super(EventType.PLUGIN_MESSAGE); + this.packet = packet; + } + + public MPKPacket getPacket() { + return packet; + } +} \ No newline at end of file diff --git a/common/src/main/java/io/github/kurrycat/mpkmod/modules/MPKModule.java b/common/src/main/java/io/github/kurrycat/mpkmod/modules/MPKModule.java index cae3ef1..c466127 100644 --- a/common/src/main/java/io/github/kurrycat/mpkmod/modules/MPKModule.java +++ b/common/src/main/java/io/github/kurrycat/mpkmod/modules/MPKModule.java @@ -14,4 +14,12 @@ public interface MPKModule { * Reloading will call this again.
*/ void loaded(); + + /** + * Gets called in {@link io.github.kurrycat.mpkmod.modules.ModuleManager#unloadModule(MPKModuleImpl) ModuleManager.unregisterModule}.
+ * This is done when the player joins a server which doesn't allow this module.
+ * The module does not need to unregister any {@link io.github.kurrycat.mpkmod.events.EventAPI EventAPI} hooks it's made. + */ + default void unloaded() { + } } diff --git a/common/src/main/java/io/github/kurrycat/mpkmod/modules/ModuleManager.java b/common/src/main/java/io/github/kurrycat/mpkmod/modules/ModuleManager.java index 08ed0b6..a0bfb23 100644 --- a/common/src/main/java/io/github/kurrycat/mpkmod/modules/ModuleManager.java +++ b/common/src/main/java/io/github/kurrycat/mpkmod/modules/ModuleManager.java @@ -1,5 +1,6 @@ package io.github.kurrycat.mpkmod.modules; +import io.github.kurrycat.mpkmod.Main; import io.github.kurrycat.mpkmod.compatibility.API; import io.github.kurrycat.mpkmod.events.EventAPI; @@ -51,6 +52,15 @@ public static void registerModule(MPKModuleImpl module, boolean init) { } } + public static void unloadModule(MPKModuleImpl module) { + if (module.getModule() instanceof Main) return; + + module.getModule().unloaded(); + EventAPI.unload(module.getName()); + module.closeLoader(); + moduleMap.remove(module.getName()); + } + public static void initAllModules() { loadModules(true); } diff --git a/common/src/main/java/io/github/kurrycat/mpkmod/network/impl/MPKPacketListenerClientImpl.java b/common/src/main/java/io/github/kurrycat/mpkmod/network/impl/MPKPacketListenerClientImpl.java new file mode 100644 index 0000000..66807b4 --- /dev/null +++ b/common/src/main/java/io/github/kurrycat/mpkmod/network/impl/MPKPacketListenerClientImpl.java @@ -0,0 +1,38 @@ +package io.github.kurrycat.mpkmod.network.impl; + +import io.github.kurrycat.mpkmod.compatibility.MCClasses.Minecraft; +import io.github.kurrycat.mpkmod.events.EventAPI; +import io.github.kurrycat.mpkmod.events.OnModuleMessageEvent; +import io.github.kurrycat.mpkmod.modules.ModuleManager; +import io.github.kurrycat.mpknetapi.common.network.packet.impl.clientbound.*; +import io.github.kurrycat.mpknetapi.common.network.packet.impl.serverbound.MPKPacketModuleUpdate; +import io.github.kurrycat.mpknetapi.common.network.packet.impl.shared.MPKPacketModuleMessage; + +import java.util.ArrayList; +import java.util.List; + +public class MPKPacketListenerClientImpl implements MPKPacketListenerClient { + @Override + public void handleDisableModules(MPKPacketDisableModules packet) { + List blacklist = packet.getModulesToDisable(); + ModuleManager.moduleMap.forEach(((id, module) -> { + if (blacklist.contains(id)) { + ModuleManager.unloadModule(module); + } + })); + + sendModuleUpdate(); + } + + @Override + public void handleModuleMessage(MPKPacketModuleMessage packet) { + EventAPI.postEvent(new OnModuleMessageEvent(packet)); + } + + private void sendModuleUpdate() { + List modules = new ArrayList<>(); + ModuleManager.moduleMap.forEach((id, module) -> modules.add(id)); + + Minecraft.Interface.get().ifPresent(i -> i.sendPacket(new MPKPacketModuleUpdate(modules))); + } +} \ No newline at end of file diff --git a/common/src/main/java/io/github/kurrycat/mpkmod/util/Colors.java b/common/src/main/java/io/github/kurrycat/mpkmod/util/Colors.java index f39352c..7cbc962 100644 --- a/common/src/main/java/io/github/kurrycat/mpkmod/util/Colors.java +++ b/common/src/main/java/io/github/kurrycat/mpkmod/util/Colors.java @@ -30,7 +30,7 @@ public enum Colors { UNDERLINE("underline", "n", null), ITALIC("italic", "o", null); - public static final String PREFIX = "\u00a7"; + public static final String PREFIX = "ยง"; private final String name; private final String code; From ce3ff42b2c772004bf01439a40f507128fbe7b0a Mon Sep 17 00:00:00 2001 From: Cody <149296239+notdevcody@users.noreply.github.com> Date: Fri, 1 Nov 2024 23:52:52 +0100 Subject: [PATCH 03/10] feat(forge-1.8.9): implement networking --- .../forge_1_8/EventListener.java | 4 +- .../forge_1_8/FunctionCompatibility.java | 5 +++ .../compatibility/forge_1_8/MPKMod.java | 8 ++++ .../forge_1_8/network/MPKForgeNetworking.java | 43 +++++++++++++++++++ 4 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 forge-1.8.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/forge_1_8/network/MPKForgeNetworking.java diff --git a/forge-1.8.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/forge_1_8/EventListener.java b/forge-1.8.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/forge_1_8/EventListener.java index 97753d5..070443f 100644 --- a/forge-1.8.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/forge_1_8/EventListener.java +++ b/forge-1.8.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/forge_1_8/EventListener.java @@ -10,7 +10,6 @@ import io.github.kurrycat.mpkmod.util.Vector3D; import net.minecraft.client.Minecraft; import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.client.gui.GuiOverlayDebug; import net.minecraft.client.settings.GameSettings; import net.minecraft.util.AxisAlignedBB; import net.minecraftforge.client.event.MouseEvent; @@ -25,8 +24,7 @@ import net.minecraftforge.fml.relauncher.SideOnly; import org.lwjgl.input.Keyboard; -import java.util.ArrayList; - +@SuppressWarnings("unused") public class EventListener { private static final ButtonMSList timeQueue = new ButtonMSList(); diff --git a/forge-1.8.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/forge_1_8/FunctionCompatibility.java b/forge-1.8.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/forge_1_8/FunctionCompatibility.java index e338fbd..996d8cb 100644 --- a/forge-1.8.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/forge_1_8/FunctionCompatibility.java +++ b/forge-1.8.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/forge_1_8/FunctionCompatibility.java @@ -5,6 +5,7 @@ import io.github.kurrycat.mpkmod.util.Debug; import io.github.kurrycat.mpkmod.util.Vector2D; import io.github.kurrycat.mpkmod.util.Vector3D; +import io.github.kurrycat.mpknetapi.common.network.packet.MPKPacket; import net.minecraft.block.Block; import net.minecraft.block.properties.IProperty; import net.minecraft.block.state.IBlockState; @@ -347,6 +348,10 @@ public boolean isF3Enabled() { return Minecraft.getMinecraft().gameSettings.showDebugInfo; } + public void sendPacket(MPKPacket packet) { + MPKMod.FORGE_NETWORKING.sendPacket(packet); + } + public boolean setInputs(Float yaw, boolean relYaw, Float pitch, boolean relPitch, int pressedInputs, int releasedInputs, int L, int R) { if (!io.github.kurrycat.mpkmod.compatibility.MCClasses.Minecraft.isSingleplayer()) return false; EntityPlayerSP player = Minecraft.getMinecraft().thePlayer; diff --git a/forge-1.8.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/forge_1_8/MPKMod.java b/forge-1.8.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/forge_1_8/MPKMod.java index cb9aeb9..93ea65e 100644 --- a/forge-1.8.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/forge_1_8/MPKMod.java +++ b/forge-1.8.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/forge_1_8/MPKMod.java @@ -1,6 +1,7 @@ package io.github.kurrycat.mpkmod.compatibility.forge_1_8; import io.github.kurrycat.mpkmod.compatibility.API; +import io.github.kurrycat.mpkmod.compatibility.forge_1_8.network.MPKForgeNetworking; import net.minecraft.client.Minecraft; import net.minecraft.client.settings.GameSettings; import net.minecraft.client.settings.KeyBinding; @@ -11,6 +12,7 @@ import net.minecraftforge.fml.common.Mod.EventHandler; import net.minecraftforge.fml.common.event.FMLInitializationEvent; import net.minecraftforge.fml.common.event.FMLLoadCompleteEvent; +import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import org.lwjgl.LWJGLUtil; import org.lwjgl.input.Keyboard; import org.lwjgl.input.Mouse; @@ -31,6 +33,12 @@ public class MPKMod { //public static final String GUI_FACTORY = "io.github.kurrycat.mpkmod.config.GuiFactory"; public static Map keyBindingMap = new HashMap<>(); + public static final MPKForgeNetworking FORGE_NETWORKING = new MPKForgeNetworking(); + + @EventHandler + public void preInit(FMLPreInitializationEvent event) { + FORGE_NETWORKING.init(); + } @EventHandler public void init(FMLInitializationEvent event) { diff --git a/forge-1.8.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/forge_1_8/network/MPKForgeNetworking.java b/forge-1.8.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/forge_1_8/network/MPKForgeNetworking.java new file mode 100644 index 0000000..b562071 --- /dev/null +++ b/forge-1.8.9/src/main/java/io/github/kurrycat/mpkmod/compatibility/forge_1_8/network/MPKForgeNetworking.java @@ -0,0 +1,43 @@ +package io.github.kurrycat.mpkmod.compatibility.forge_1_8.network; + +import io.github.kurrycat.mpkmod.compatibility.API; +import io.github.kurrycat.mpknetapi.common.MPKNetworking; +import io.github.kurrycat.mpknetapi.common.network.packet.MPKPacket; +import io.github.kurrycat.mpknetapi.common.network.packet.impl.serverbound.MPKPacketRegister; +import io.netty.buffer.Unpooled; +import net.minecraft.network.PacketBuffer; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.network.FMLEventChannel; +import net.minecraftforge.fml.common.network.FMLNetworkEvent; +import net.minecraftforge.fml.common.network.NetworkRegistry; +import net.minecraftforge.fml.common.network.internal.FMLProxyPacket; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; + +public class MPKForgeNetworking { + private FMLEventChannel channel; + + public void init() { + this.channel = NetworkRegistry.INSTANCE.newEventDrivenChannel(MPKNetworking.MESSENGER_CHANNEL); + this.channel.register(this); + } + + public void sendPacket(MPKPacket packet) { + Executors.newSingleThreadScheduledExecutor().schedule( + () -> this.channel.sendToServer(new FMLProxyPacket(new PacketBuffer(Unpooled.copiedBuffer(packet.getData())), MPKNetworking.MESSENGER_CHANNEL)), + packet instanceof MPKPacketRegister ? 500 : 0, TimeUnit.MILLISECONDS + ); + } + + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onServerPacket(FMLNetworkEvent.ClientCustomPacketEvent event) { + MPKPacket packet = MPKPacket.handle(API.PACKET_LISTENER_CLIENT, event.packet.payload().array(), null); + if (packet != null) { + API.Events.onPluginMessage(packet); + } + } +} \ No newline at end of file From c8a664b3015452e0234f2339b8ab1b3e7bbd8d52 Mon Sep 17 00:00:00 2001 From: Cody <149296239+notdevcody@users.noreply.github.com> Date: Fri, 1 Nov 2024 23:58:38 +0100 Subject: [PATCH 04/10] feat(fabric-1.19.4): implement networking --- .../fabric_1_19_4/EventHandler.java | 2 -- .../fabric_1_19_4/FunctionCompatibility.java | 8 ++++++++ .../compatibility/fabric_1_19_4/MPKMod.java | 17 ++++++++++++----- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/fabric-1.19.4/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_19_4/EventHandler.java b/fabric-1.19.4/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_19_4/EventHandler.java index 3560941..e338569 100644 --- a/fabric-1.19.4/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_19_4/EventHandler.java +++ b/fabric-1.19.4/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_19_4/EventHandler.java @@ -1,10 +1,8 @@ package io.github.kurrycat.mpkmod.compatibility.fabric_1_19_4; - import io.github.kurrycat.mpkmod.compatibility.API; import io.github.kurrycat.mpkmod.compatibility.MCClasses.Player; import io.github.kurrycat.mpkmod.compatibility.fabric_1_19_4.mixin.KeyBindingAccessor; -import io.github.kurrycat.mpkmod.compatibility.fabric_1_19_4.MPKGuiScreen; import io.github.kurrycat.mpkmod.ticks.ButtonMS; import io.github.kurrycat.mpkmod.ticks.ButtonMSList; import io.github.kurrycat.mpkmod.util.BoundingBox3D; diff --git a/fabric-1.19.4/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_19_4/FunctionCompatibility.java b/fabric-1.19.4/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_19_4/FunctionCompatibility.java index 9341e43..f034f4b 100644 --- a/fabric-1.19.4/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_19_4/FunctionCompatibility.java +++ b/fabric-1.19.4/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_19_4/FunctionCompatibility.java @@ -8,6 +8,9 @@ import io.github.kurrycat.mpkmod.util.Debug; import io.github.kurrycat.mpkmod.util.Vector2D; import io.github.kurrycat.mpkmod.util.Vector3D; +import io.github.kurrycat.mpknetapi.common.network.packet.MPKPacket; +import io.netty.buffer.Unpooled; +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.minecraft.block.BlockState; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.screen.Screen; @@ -19,6 +22,7 @@ import net.minecraft.client.sound.PositionedSoundInstance; import net.minecraft.client.util.Window; import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.network.PacketByteBuf; import net.minecraft.registry.Registries; import net.minecraft.sound.SoundEvents; import net.minecraft.util.Util; @@ -398,6 +402,10 @@ public boolean isF3Enabled() { return MinecraftClient.getInstance().options.debugEnabled; } + public void sendPacket(MPKPacket packet) { + ClientPlayNetworking.send(MPKMod.NETWORKING_IDENTIFIER, new PacketByteBuf(Unpooled.wrappedBuffer(packet.getData()))); + } + public List getPressedButtons() { return new ArrayList<>(pressedButtons); } diff --git a/fabric-1.19.4/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_19_4/MPKMod.java b/fabric-1.19.4/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_19_4/MPKMod.java index 29ad989..8caca83 100644 --- a/fabric-1.19.4/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_19_4/MPKMod.java +++ b/fabric-1.19.4/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_19_4/MPKMod.java @@ -1,19 +1,18 @@ package io.github.kurrycat.mpkmod.compatibility.fabric_1_19_4; import io.github.kurrycat.mpkmod.compatibility.API; -import io.github.kurrycat.mpkmod.compatibility.MCClasses.Player; -import io.github.kurrycat.mpkmod.util.Vector3D; +import io.github.kurrycat.mpknetapi.common.MPKNetworking; +import io.github.kurrycat.mpknetapi.common.network.packet.MPKPacket; import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents; +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback; import net.minecraft.SharedConstants; import net.minecraft.client.MinecraftClient; import io.github.kurrycat.mpkmod.compatibility.MCClasses.KeyBinding; -import net.minecraft.client.util.math.MatrixStack; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import net.minecraft.util.Identifier; import java.util.HashMap; import java.util.Map; @@ -22,6 +21,7 @@ public class MPKMod implements ModInitializer { public static Map keyBindingMap = new HashMap<>(); public static final MPKMod INSTANCE = new MPKMod(); public final EventHandler eventHandler = new EventHandler(); + public static final Identifier NETWORKING_IDENTIFIER = Identifier.of(MPKNetworking.CHANNEL_NAMESPACE, MPKNetworking.CHANNEL_PATH); @Override public void onInitialize() { @@ -36,6 +36,13 @@ public void onInitialize() { ClientTickEvents.END_CLIENT_TICK.register(eventHandler::onClientTickEnd); ClientPlayConnectionEvents.JOIN.register(eventHandler::onServerConnect); ClientPlayConnectionEvents.DISCONNECT.register(eventHandler::onServerDisconnect); + + ClientPlayNetworking.registerGlobalReceiver(NETWORKING_IDENTIFIER, ((client, handler, buf, responseSender) -> { + MPKPacket packet = MPKPacket.handle(API.PACKET_LISTENER_CLIENT, buf.array(), null); + if (packet != null) { + API.Events.onPluginMessage(packet); + } + })); } public void init() { From bba13d9907a50eb3d2f87a222bcdd599903841b3 Mon Sep 17 00:00:00 2001 From: Cody <149296239+notdevcody@users.noreply.github.com> Date: Sat, 2 Nov 2024 00:01:55 +0100 Subject: [PATCH 05/10] feat(fabric-1.20.4): implement networking --- .../compatibility/fabric_1_20_4/EventHandler.java | 2 -- .../fabric_1_20_4/FunctionCompatibility.java | 8 ++++++++ .../mpkmod/compatibility/fabric_1_20_4/MPKMod.java | 13 +++++++++++++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/fabric-1.20.4/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_20_4/EventHandler.java b/fabric-1.20.4/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_20_4/EventHandler.java index 1d4db83..aeaa02d 100644 --- a/fabric-1.20.4/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_20_4/EventHandler.java +++ b/fabric-1.20.4/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_20_4/EventHandler.java @@ -1,10 +1,8 @@ package io.github.kurrycat.mpkmod.compatibility.fabric_1_20_4; - import io.github.kurrycat.mpkmod.compatibility.API; import io.github.kurrycat.mpkmod.compatibility.MCClasses.Player; import io.github.kurrycat.mpkmod.compatibility.fabric_1_20_4.mixin.KeyBindingAccessor; -import io.github.kurrycat.mpkmod.compatibility.fabric_1_20_4.MPKGuiScreen; import io.github.kurrycat.mpkmod.ticks.ButtonMS; import io.github.kurrycat.mpkmod.ticks.ButtonMSList; import io.github.kurrycat.mpkmod.util.BoundingBox3D; diff --git a/fabric-1.20.4/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_20_4/FunctionCompatibility.java b/fabric-1.20.4/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_20_4/FunctionCompatibility.java index 3ceaf80..c17cff1 100644 --- a/fabric-1.20.4/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_20_4/FunctionCompatibility.java +++ b/fabric-1.20.4/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_20_4/FunctionCompatibility.java @@ -8,6 +8,9 @@ import io.github.kurrycat.mpkmod.util.Debug; import io.github.kurrycat.mpkmod.util.Vector2D; import io.github.kurrycat.mpkmod.util.Vector3D; +import io.github.kurrycat.mpknetapi.common.network.packet.MPKPacket; +import io.netty.buffer.Unpooled; +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.minecraft.block.BlockState; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; @@ -20,6 +23,7 @@ import net.minecraft.client.sound.PositionedSoundInstance; import net.minecraft.client.util.Window; import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.network.PacketByteBuf; import net.minecraft.registry.Registries; import net.minecraft.sound.SoundEvents; import net.minecraft.util.Util; @@ -400,6 +404,10 @@ public boolean isF3Enabled() { return MinecraftClient.getInstance().getDebugHud().shouldShowDebugHud(); } + public void sendPacket(MPKPacket packet) { + ClientPlayNetworking.send(MPKMod.NETWORKING_IDENTIFIER, new PacketByteBuf(Unpooled.wrappedBuffer(packet.getData()))); + } + public List getPressedButtons() { return new ArrayList<>(pressedButtons); } diff --git a/fabric-1.20.4/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_20_4/MPKMod.java b/fabric-1.20.4/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_20_4/MPKMod.java index 66f94c7..8d4b6be 100644 --- a/fabric-1.20.4/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_20_4/MPKMod.java +++ b/fabric-1.20.4/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_20_4/MPKMod.java @@ -2,14 +2,18 @@ import io.github.kurrycat.mpkmod.compatibility.API; import io.github.kurrycat.mpkmod.compatibility.MCClasses.KeyBinding; +import io.github.kurrycat.mpknetapi.common.MPKNetworking; +import io.github.kurrycat.mpknetapi.common.network.packet.MPKPacket; import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents; +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback; import net.minecraft.SharedConstants; import net.minecraft.client.MinecraftClient; import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.util.Identifier; import java.util.HashMap; import java.util.Map; @@ -20,6 +24,8 @@ public class MPKMod implements ModInitializer { public final EventHandler eventHandler = new EventHandler(); public MatrixStack matrixStack; + public static final Identifier NETWORKING_IDENTIFIER = Identifier.of(MPKNetworking.CHANNEL_NAMESPACE, MPKNetworking.CHANNEL_PATH); + @Override public void onInitialize() { // This code runs as soon as Minecraft is in a mod-load-ready state. @@ -33,6 +39,13 @@ public void onInitialize() { ClientTickEvents.END_CLIENT_TICK.register(eventHandler::onClientTickEnd); ClientPlayConnectionEvents.JOIN.register(eventHandler::onServerConnect); ClientPlayConnectionEvents.DISCONNECT.register(eventHandler::onServerDisconnect); + + ClientPlayNetworking.registerGlobalReceiver(NETWORKING_IDENTIFIER, ((client, handler, buf, responseSender) -> { + MPKPacket packet = MPKPacket.handle(API.PACKET_LISTENER_CLIENT, buf.array(), null); + if (packet != null) { + API.Events.onPluginMessage(packet); + } + })); } private void registerKeybindingsFromGUIs() { From 56d7104e1dd40005a5a4b439d4522e67c2834d42 Mon Sep 17 00:00:00 2001 From: Cody <149296239+notdevcody@users.noreply.github.com> Date: Sat, 2 Nov 2024 00:10:39 +0100 Subject: [PATCH 06/10] feat(fabric-1.20.6): implement networking --- .../fabric_1_20_6/EventHandler.java | 2 -- .../fabric_1_20_6/FunctionCompatibility.java | 7 ++++ .../compatibility/fabric_1_20_6/MPKMod.java | 11 ++++++ .../network/DataCustomPayload.java | 36 +++++++++++++++++++ 4 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 fabric-1.20.6/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_20_6/network/DataCustomPayload.java diff --git a/fabric-1.20.6/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_20_6/EventHandler.java b/fabric-1.20.6/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_20_6/EventHandler.java index b711d46..ca818b1 100644 --- a/fabric-1.20.6/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_20_6/EventHandler.java +++ b/fabric-1.20.6/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_20_6/EventHandler.java @@ -1,10 +1,8 @@ package io.github.kurrycat.mpkmod.compatibility.fabric_1_20_6; - import io.github.kurrycat.mpkmod.compatibility.API; import io.github.kurrycat.mpkmod.compatibility.MCClasses.Player; import io.github.kurrycat.mpkmod.compatibility.fabric_1_20_6.mixin.KeyBindingAccessor; -import io.github.kurrycat.mpkmod.compatibility.fabric_1_20_6.MPKGuiScreen; import io.github.kurrycat.mpkmod.ticks.ButtonMS; import io.github.kurrycat.mpkmod.ticks.ButtonMSList; import io.github.kurrycat.mpkmod.util.BoundingBox3D; diff --git a/fabric-1.20.6/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_20_6/FunctionCompatibility.java b/fabric-1.20.6/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_20_6/FunctionCompatibility.java index ad21565..d2b1965 100644 --- a/fabric-1.20.6/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_20_6/FunctionCompatibility.java +++ b/fabric-1.20.6/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_20_6/FunctionCompatibility.java @@ -3,11 +3,14 @@ import com.mojang.blaze3d.systems.RenderSystem; import io.github.kurrycat.mpkmod.compatibility.MCClasses.*; import io.github.kurrycat.mpkmod.compatibility.fabric_1_20_6.mixin.KeyBindingAccessor; +import io.github.kurrycat.mpkmod.compatibility.fabric_1_20_6.network.DataCustomPayload; import io.github.kurrycat.mpkmod.gui.MPKGuiScreen; import io.github.kurrycat.mpkmod.util.BoundingBox3D; import io.github.kurrycat.mpkmod.util.Debug; import io.github.kurrycat.mpkmod.util.Vector2D; import io.github.kurrycat.mpkmod.util.Vector3D; +import io.github.kurrycat.mpknetapi.common.network.packet.MPKPacket; +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.minecraft.block.BlockState; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; @@ -400,6 +403,10 @@ public boolean isF3Enabled() { return MinecraftClient.getInstance().getDebugHud().shouldShowDebugHud(); } + public void sendPacket(MPKPacket packet) { + ClientPlayNetworking.send(new DataCustomPayload(packet.getData())); + } + public List getPressedButtons() { return new ArrayList<>(pressedButtons); } diff --git a/fabric-1.20.6/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_20_6/MPKMod.java b/fabric-1.20.6/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_20_6/MPKMod.java index a89462b..a070396 100644 --- a/fabric-1.20.6/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_20_6/MPKMod.java +++ b/fabric-1.20.6/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_20_6/MPKMod.java @@ -2,10 +2,13 @@ import io.github.kurrycat.mpkmod.compatibility.API; import io.github.kurrycat.mpkmod.compatibility.MCClasses.KeyBinding; +import io.github.kurrycat.mpkmod.compatibility.fabric_1_20_6.network.DataCustomPayload; +import io.github.kurrycat.mpknetapi.common.network.packet.MPKPacket; import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents; +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback; import net.minecraft.SharedConstants; import net.minecraft.client.MinecraftClient; @@ -33,6 +36,14 @@ public void onInitialize() { ClientTickEvents.END_CLIENT_TICK.register(eventHandler::onClientTickEnd); ClientPlayConnectionEvents.JOIN.register(eventHandler::onServerConnect); ClientPlayConnectionEvents.DISCONNECT.register(eventHandler::onServerDisconnect); + + DataCustomPayload.registerServerboundPayload(); + ClientPlayNetworking.registerGlobalReceiver(DataCustomPayload.registerClientboundPayload(), ((payload, context) -> { + MPKPacket packet = MPKPacket.handle(API.PACKET_LISTENER_CLIENT, payload.data(), null); + if (packet != null) { + API.Events.onPluginMessage(packet); + } + })); } private void registerKeybindingsFromGUIs() { diff --git a/fabric-1.20.6/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_20_6/network/DataCustomPayload.java b/fabric-1.20.6/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_20_6/network/DataCustomPayload.java new file mode 100644 index 0000000..5b29757 --- /dev/null +++ b/fabric-1.20.6/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_20_6/network/DataCustomPayload.java @@ -0,0 +1,36 @@ +package io.github.kurrycat.mpkmod.compatibility.fabric_1_20_6.network; + +import io.github.kurrycat.mpknetapi.common.MPKNetworking; +import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry; +import net.minecraft.network.PacketByteBuf; +import net.minecraft.network.codec.PacketCodec; +import net.minecraft.network.packet.CustomPayload; +import net.minecraft.util.Identifier; + +public record DataCustomPayload(byte[] data) implements CustomPayload { + public static final Id MPK_ID = new Id<>(Identifier.of(MPKNetworking.CHANNEL_NAMESPACE, MPKNetworking.CHANNEL_PATH)); + + public static final PacketCodec CODEC = PacketCodec.of( + (payload, buf) -> buf.writeBytes(payload.data()), + buf -> { + byte[] data = new byte[buf.readableBytes()]; + buf.readBytes(data); + return new DataCustomPayload(data); + } + ); + + @Override + public Id getId() { + return MPK_ID; + } + + public static Id registerClientboundPayload() { + PayloadTypeRegistry.playS2C().register(MPK_ID, DataCustomPayload.CODEC); + return MPK_ID; + } + + public static Id registerServerboundPayload() { + PayloadTypeRegistry.playC2S().register(MPK_ID, DataCustomPayload.CODEC); + return MPK_ID; + } +} \ No newline at end of file From 283191b0180ce88e2c216659b174e8cc844ee295 Mon Sep 17 00:00:00 2001 From: Cody <149296239+notdevcody@users.noreply.github.com> Date: Sat, 2 Nov 2024 00:14:49 +0100 Subject: [PATCH 07/10] feat(fabric-1.21): implement networking --- .../fabric_1_21/EventHandler.java | 1 - .../fabric_1_21/FunctionCompatibility.java | 7 ++++ .../compatibility/fabric_1_21/MPKMod.java | 11 ++++++ .../network/DataCustomPayload.java | 36 +++++++++++++++++++ 4 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 fabric-1.21/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21/network/DataCustomPayload.java diff --git a/fabric-1.21/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21/EventHandler.java b/fabric-1.21/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21/EventHandler.java index 87bd1f6..11e4a65 100644 --- a/fabric-1.21/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21/EventHandler.java +++ b/fabric-1.21/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21/EventHandler.java @@ -1,6 +1,5 @@ package io.github.kurrycat.mpkmod.compatibility.fabric_1_21; - import io.github.kurrycat.mpkmod.compatibility.API; import io.github.kurrycat.mpkmod.compatibility.MCClasses.Player; import io.github.kurrycat.mpkmod.compatibility.fabric_1_21.mixin.KeyBindingAccessor; diff --git a/fabric-1.21/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21/FunctionCompatibility.java b/fabric-1.21/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21/FunctionCompatibility.java index b61cdc1..70fb00d 100644 --- a/fabric-1.21/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21/FunctionCompatibility.java +++ b/fabric-1.21/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21/FunctionCompatibility.java @@ -3,11 +3,14 @@ import com.mojang.blaze3d.systems.RenderSystem; import io.github.kurrycat.mpkmod.compatibility.MCClasses.*; import io.github.kurrycat.mpkmod.compatibility.fabric_1_21.mixin.KeyBindingAccessor; +import io.github.kurrycat.mpkmod.compatibility.fabric_1_21.network.DataCustomPayload; import io.github.kurrycat.mpkmod.gui.MPKGuiScreen; import io.github.kurrycat.mpkmod.util.BoundingBox3D; import io.github.kurrycat.mpkmod.util.Debug; import io.github.kurrycat.mpkmod.util.Vector2D; import io.github.kurrycat.mpkmod.util.Vector3D; +import io.github.kurrycat.mpknetapi.common.network.packet.MPKPacket; +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.minecraft.block.BlockState; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; @@ -397,6 +400,10 @@ public boolean isF3Enabled() { return MinecraftClient.getInstance().getDebugHud().shouldShowDebugHud(); } + public void sendPacket(MPKPacket packet) { + ClientPlayNetworking.send(new DataCustomPayload(packet.getData())); + } + public List getPressedButtons() { return new ArrayList<>(pressedButtons); } diff --git a/fabric-1.21/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21/MPKMod.java b/fabric-1.21/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21/MPKMod.java index 995b913..1c7f5fe 100644 --- a/fabric-1.21/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21/MPKMod.java +++ b/fabric-1.21/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21/MPKMod.java @@ -2,10 +2,13 @@ import io.github.kurrycat.mpkmod.compatibility.API; import io.github.kurrycat.mpkmod.compatibility.MCClasses.KeyBinding; +import io.github.kurrycat.mpkmod.compatibility.fabric_1_21.network.DataCustomPayload; +import io.github.kurrycat.mpknetapi.common.network.packet.MPKPacket; import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents; +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback; import net.minecraft.SharedConstants; import net.minecraft.client.MinecraftClient; @@ -33,6 +36,14 @@ public void onInitialize() { ClientTickEvents.END_CLIENT_TICK.register(eventHandler::onClientTickEnd); ClientPlayConnectionEvents.JOIN.register(eventHandler::onServerConnect); ClientPlayConnectionEvents.DISCONNECT.register(eventHandler::onServerDisconnect); + + DataCustomPayload.registerServerboundPayload(); + ClientPlayNetworking.registerGlobalReceiver(DataCustomPayload.registerClientboundPayload(), ((payload, context) -> { + MPKPacket packet = MPKPacket.handle(API.PACKET_LISTENER_CLIENT, payload.data(), null); + if (packet != null) { + API.Events.onPluginMessage(packet); + } + })); } private void registerKeybindingsFromGUIs() { diff --git a/fabric-1.21/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21/network/DataCustomPayload.java b/fabric-1.21/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21/network/DataCustomPayload.java new file mode 100644 index 0000000..2236956 --- /dev/null +++ b/fabric-1.21/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21/network/DataCustomPayload.java @@ -0,0 +1,36 @@ +package io.github.kurrycat.mpkmod.compatibility.fabric_1_21.network; + +import io.github.kurrycat.mpknetapi.common.MPKNetworking; +import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry; +import net.minecraft.network.PacketByteBuf; +import net.minecraft.network.codec.PacketCodec; +import net.minecraft.network.packet.CustomPayload; +import net.minecraft.util.Identifier; + +public record DataCustomPayload(byte[] data) implements CustomPayload { + public static final Id MPK_ID = new Id<>(Identifier.of(MPKNetworking.CHANNEL_NAMESPACE, MPKNetworking.CHANNEL_PATH)); + + public static final PacketCodec CODEC = PacketCodec.of( + (payload, buf) -> buf.writeBytes(payload.data()), + buf -> { + byte[] data = new byte[buf.readableBytes()]; + buf.readBytes(data); + return new DataCustomPayload(data); + } + ); + + @Override + public Id getId() { + return MPK_ID; + } + + public static Id registerClientboundPayload() { + PayloadTypeRegistry.playS2C().register(MPK_ID, DataCustomPayload.CODEC); + return MPK_ID; + } + + public static Id registerServerboundPayload() { + PayloadTypeRegistry.playC2S().register(MPK_ID, DataCustomPayload.CODEC); + return MPK_ID; + } +} \ No newline at end of file From 0846b368b6fe765d33682b1eacb6afeb6e1f259d Mon Sep 17 00:00:00 2001 From: Cody <149296239+notdevcody@users.noreply.github.com> Date: Sat, 2 Nov 2024 00:17:06 +0100 Subject: [PATCH 08/10] feat(fabric-1.21.3): implement networking --- .../fabric_1_21_3/EventHandler.java | 1 - .../fabric_1_21_3/FunctionCompatibility.java | 7 ++++ .../compatibility/fabric_1_21_3/MPKMod.java | 11 ++++++ .../network/DataCustomPayload.java | 36 +++++++++++++++++++ 4 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 fabric-1.21.3/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_3/network/DataCustomPayload.java diff --git a/fabric-1.21.3/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_3/EventHandler.java b/fabric-1.21.3/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_3/EventHandler.java index d7e7ac0..4e34b7f 100644 --- a/fabric-1.21.3/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_3/EventHandler.java +++ b/fabric-1.21.3/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_3/EventHandler.java @@ -1,6 +1,5 @@ package io.github.kurrycat.mpkmod.compatibility.fabric_1_21_3; - import io.github.kurrycat.mpkmod.compatibility.API; import io.github.kurrycat.mpkmod.compatibility.MCClasses.Player; import io.github.kurrycat.mpkmod.compatibility.fabric_1_21_3.mixin.KeyBindingAccessor; diff --git a/fabric-1.21.3/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_3/FunctionCompatibility.java b/fabric-1.21.3/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_3/FunctionCompatibility.java index d0f7e50..bcc525c 100644 --- a/fabric-1.21.3/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_3/FunctionCompatibility.java +++ b/fabric-1.21.3/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_3/FunctionCompatibility.java @@ -3,11 +3,14 @@ import com.mojang.blaze3d.systems.RenderSystem; import io.github.kurrycat.mpkmod.compatibility.MCClasses.*; import io.github.kurrycat.mpkmod.compatibility.fabric_1_21_3.mixin.KeyBindingAccessor; +import io.github.kurrycat.mpkmod.compatibility.fabric_1_21_3.network.DataCustomPayload; import io.github.kurrycat.mpkmod.gui.MPKGuiScreen; import io.github.kurrycat.mpkmod.util.BoundingBox3D; import io.github.kurrycat.mpkmod.util.Debug; import io.github.kurrycat.mpkmod.util.Vector2D; import io.github.kurrycat.mpkmod.util.Vector3D; +import io.github.kurrycat.mpknetapi.common.network.packet.MPKPacket; +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.minecraft.block.BlockState; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gl.ShaderProgramKeys; @@ -397,6 +400,10 @@ public boolean isF3Enabled() { return MinecraftClient.getInstance().getDebugHud().shouldShowDebugHud(); } + public void sendPacket(MPKPacket packet) { + ClientPlayNetworking.send(new DataCustomPayload(packet.getData())); + } + public List getPressedButtons() { return new ArrayList<>(pressedButtons); } diff --git a/fabric-1.21.3/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_3/MPKMod.java b/fabric-1.21.3/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_3/MPKMod.java index 34ccc6d..8f9fd86 100644 --- a/fabric-1.21.3/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_3/MPKMod.java +++ b/fabric-1.21.3/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_3/MPKMod.java @@ -2,10 +2,13 @@ import io.github.kurrycat.mpkmod.compatibility.API; import io.github.kurrycat.mpkmod.compatibility.MCClasses.KeyBinding; +import io.github.kurrycat.mpkmod.compatibility.fabric_1_21_3.network.DataCustomPayload; +import io.github.kurrycat.mpknetapi.common.network.packet.MPKPacket; import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents; +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback; import net.minecraft.SharedConstants; import net.minecraft.client.MinecraftClient; @@ -33,6 +36,14 @@ public void onInitialize() { ClientTickEvents.END_CLIENT_TICK.register(eventHandler::onClientTickEnd); ClientPlayConnectionEvents.JOIN.register(eventHandler::onServerConnect); ClientPlayConnectionEvents.DISCONNECT.register(eventHandler::onServerDisconnect); + + DataCustomPayload.registerServerboundPayload(); + ClientPlayNetworking.registerGlobalReceiver(DataCustomPayload.registerClientboundPayload(), ((payload, context) -> { + MPKPacket packet = MPKPacket.handle(API.PACKET_LISTENER_CLIENT, payload.data(), null); + if (packet != null) { + API.Events.onPluginMessage(packet); + } + })); } private void registerKeybindingsFromGUIs() { diff --git a/fabric-1.21.3/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_3/network/DataCustomPayload.java b/fabric-1.21.3/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_3/network/DataCustomPayload.java new file mode 100644 index 0000000..dd59b06 --- /dev/null +++ b/fabric-1.21.3/src/main/java/io/github/kurrycat/mpkmod/compatibility/fabric_1_21_3/network/DataCustomPayload.java @@ -0,0 +1,36 @@ +package io.github.kurrycat.mpkmod.compatibility.fabric_1_21_3.network; + +import io.github.kurrycat.mpknetapi.common.MPKNetworking; +import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry; +import net.minecraft.network.PacketByteBuf; +import net.minecraft.network.codec.PacketCodec; +import net.minecraft.network.packet.CustomPayload; +import net.minecraft.util.Identifier; + +public record DataCustomPayload(byte[] data) implements CustomPayload { + public static final Id MPK_ID = new Id<>(Identifier.of(MPKNetworking.CHANNEL_NAMESPACE, MPKNetworking.CHANNEL_PATH)); + + public static final PacketCodec CODEC = PacketCodec.of( + (payload, buf) -> buf.writeBytes(payload.data()), + buf -> { + byte[] data = new byte[buf.readableBytes()]; + buf.readBytes(data); + return new DataCustomPayload(data); + } + ); + + @Override + public Id getId() { + return MPK_ID; + } + + public static Id registerClientboundPayload() { + PayloadTypeRegistry.playS2C().register(MPK_ID, DataCustomPayload.CODEC); + return MPK_ID; + } + + public static Id registerServerboundPayload() { + PayloadTypeRegistry.playC2S().register(MPK_ID, DataCustomPayload.CODEC); + return MPK_ID; + } +} \ No newline at end of file From d0db2e91634c174a0f90c631b218f8e42bf0c65a Mon Sep 17 00:00:00 2001 From: Cody <149296239+notdevcody@users.noreply.github.com> Date: Sat, 2 Nov 2024 00:27:02 +0100 Subject: [PATCH 09/10] fix(ci): checkout with modules --- .github/workflows/gradle.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 5794487..67390b1 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -21,7 +21,10 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - name: Checkout repo and submodules + uses: actions/checkout@v3 + with: + submodules: recursive - name: Set up JDK 8 uses: actions/setup-java@v3 with: From 93ce848769f1f7ff5864fdc73a34e464f2b15480 Mon Sep 17 00:00:00 2001 From: Cody <149296239+notdevcody@users.noreply.github.com> Date: Sun, 15 Dec 2024 14:26:32 +0100 Subject: [PATCH 10/10] Fix network-api submodule --- network-api | 1 + 1 file changed, 1 insertion(+) create mode 160000 network-api diff --git a/network-api b/network-api new file mode 160000 index 0000000..1aa48b6 --- /dev/null +++ b/network-api @@ -0,0 +1 @@ +Subproject commit 1aa48b685ca9df2d6b074355bbb7d7148766e545