From 137b9cd6703f0999023fa5ee99f8544ada216f6c Mon Sep 17 00:00:00 2001 From: Micle Date: Sat, 21 May 2022 20:55:46 +0100 Subject: [PATCH] Created a network manager for better implementation of network related content. --- .../network/NetworkManager.java | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 src/main/java/dev/micle/loginprotection/network/NetworkManager.java diff --git a/src/main/java/dev/micle/loginprotection/network/NetworkManager.java b/src/main/java/dev/micle/loginprotection/network/NetworkManager.java new file mode 100644 index 0000000..9fd3cbb --- /dev/null +++ b/src/main/java/dev/micle/loginprotection/network/NetworkManager.java @@ -0,0 +1,64 @@ +package dev.micle.loginprotection.network; + +import dev.micle.loginprotection.LoginProtection; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraftforge.network.NetworkRegistry; +import net.minecraftforge.network.simple.SimpleChannel; + +import java.util.regex.Pattern; + +public class NetworkManager { + private static final String VERSION = LoginProtection.MOD_ID + "1"; + private static final Pattern NET_VERSION_PATTERN = Pattern.compile(String.format("/^%s-net-\\d+$/", LoginProtection.MOD_ID)); + private static final Pattern MOD_VERSION_PATTERN = Pattern.compile("/^Forge-\\d+\\.\\d+\\.\\d+-\\d+\\.\\d+\\.\\d+$/"); + private static SimpleChannel channel; + + public static void init() { + // Create channel + channel = NetworkRegistry.ChannelBuilder.named(LoginProtection.createResourceLocation("network")) + .clientAcceptedVersions(v -> v.equals(VERSION)) + .serverAcceptedVersions(v -> v.equals(VERSION)) + .networkProtocolVersion(() -> VERSION) + .simpleChannel(); + + // Register packets + int id = 0; + } + + public static void writeVersionInfo(FriendlyByteBuf buffer, boolean senderIsServer) { + buffer.writeBoolean(senderIsServer); + buffer.writeUtf(VERSION); + buffer.writeUtf(LoginProtection.getVersion()); + } + + public static void checkVersion(FriendlyByteBuf buffer) { + boolean senderIsServer = buffer.readBoolean(); + String serverNetVersion = (senderIsServer) ? readNetVersion(buffer) : VERSION; + String serverModVersion = (senderIsServer) ? readModVersion(buffer) : LoginProtection.getVersion(); + String clientNetVersion = (senderIsServer) ? VERSION : readNetVersion(buffer); + String clientModVersion = (senderIsServer) ? LoginProtection.getVersion() : readModVersion(buffer); + + if (!serverNetVersion.equals(clientNetVersion)) { + throw new MismatchedVersionException(String.format("The server and client are running mismatched " + + "versions of [Micle's Login Protection]. Try updating this mod on either the client and or " + + "the server. Client version is %s (%s). Server version is %s (%s).", clientModVersion, + clientNetVersion, serverModVersion, serverNetVersion)); + } + } + + public static String readNetVersion(FriendlyByteBuf buffer) { + String netVersion = buffer.readUtf(); + if (!NET_VERSION_PATTERN.matcher(netVersion).matches()) { + return String.format("UNKNOWN (%s)", netVersion); + } + return netVersion; + } + + public static String readModVersion(FriendlyByteBuf buffer) { + String modVersion = buffer.readUtf(); + if (!modVersion.equals("NONE") && !MOD_VERSION_PATTERN.matcher(modVersion).matches()) { + return String.format("UNKNOWN (%s)", modVersion); + } + return modVersion; + } +}