Network:
- Removed methods for writing/reading/checking mod versions. - Changed accepted versions to the current mod version. - Removed MismatchedVersionException.java. These changes should enforce that the exact same mod versions are only allowed to play together.
This commit is contained in:
@ -1,7 +0,0 @@
|
|||||||
package dev.micle.loginprotection.network;
|
|
||||||
|
|
||||||
public class MismatchedVersionException extends RuntimeException {
|
|
||||||
public MismatchedVersionException(String msg) {
|
|
||||||
super(msg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -5,24 +5,18 @@ import dev.micle.loginprotection.network.client.InputPacket;
|
|||||||
import dev.micle.loginprotection.network.client.LastInputTickPacket;
|
import dev.micle.loginprotection.network.client.LastInputTickPacket;
|
||||||
import dev.micle.loginprotection.network.server.PlayerStatePacket;
|
import dev.micle.loginprotection.network.server.PlayerStatePacket;
|
||||||
import dev.micle.loginprotection.network.server.RequestLastInputTickPacket;
|
import dev.micle.loginprotection.network.server.RequestLastInputTickPacket;
|
||||||
import net.minecraft.network.FriendlyByteBuf;
|
|
||||||
import net.minecraftforge.network.NetworkRegistry;
|
import net.minecraftforge.network.NetworkRegistry;
|
||||||
import net.minecraftforge.network.simple.SimpleChannel;
|
import net.minecraftforge.network.simple.SimpleChannel;
|
||||||
|
|
||||||
import java.util.regex.Pattern;
|
|
||||||
|
|
||||||
public class NetworkManager {
|
public class NetworkManager {
|
||||||
private static final String VERSION = LoginProtection.MOD_ID + "-net-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("^\\d+\\.\\d+\\.\\d+-\\d+\\.\\d+\\.\\d+$");
|
|
||||||
private static SimpleChannel channel;
|
private static SimpleChannel channel;
|
||||||
|
|
||||||
public static void init() {
|
public static void init() {
|
||||||
// Create channel
|
// Create channel
|
||||||
channel = NetworkRegistry.ChannelBuilder.named(LoginProtection.createResourceLocation("network"))
|
channel = NetworkRegistry.ChannelBuilder.named(LoginProtection.createResourceLocation("network"))
|
||||||
.clientAcceptedVersions(v -> v.equals(VERSION))
|
.clientAcceptedVersions(v -> v.equals(LoginProtection.getVersion()))
|
||||||
.serverAcceptedVersions(v -> v.equals(VERSION))
|
.serverAcceptedVersions(v -> v.equals(LoginProtection.getVersion()))
|
||||||
.networkProtocolVersion(() -> VERSION)
|
.networkProtocolVersion(LoginProtection::getVersion)
|
||||||
.simpleChannel();
|
.simpleChannel();
|
||||||
|
|
||||||
// Register packets
|
// Register packets
|
||||||
@ -49,43 +43,6 @@ public class NetworkManager {
|
|||||||
.add();
|
.add();
|
||||||
}
|
}
|
||||||
|
|
||||||
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) || !serverModVersion.equals(clientModVersion)) {
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static SimpleChannel getChannel() {
|
public static SimpleChannel getChannel() {
|
||||||
return channel;
|
return channel;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,7 +2,6 @@ package dev.micle.loginprotection.network.client;
|
|||||||
|
|
||||||
import dev.micle.loginprotection.data.ProtectedPlayer;
|
import dev.micle.loginprotection.data.ProtectedPlayer;
|
||||||
import dev.micle.loginprotection.data.ProtectedPlayerManager;
|
import dev.micle.loginprotection.data.ProtectedPlayerManager;
|
||||||
import dev.micle.loginprotection.network.NetworkManager;
|
|
||||||
import net.minecraft.network.FriendlyByteBuf;
|
import net.minecraft.network.FriendlyByteBuf;
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
import net.minecraftforge.network.NetworkEvent;
|
import net.minecraftforge.network.NetworkEvent;
|
||||||
@ -10,12 +9,9 @@ import net.minecraftforge.network.NetworkEvent;
|
|||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
public class InputPacket {
|
public class InputPacket {
|
||||||
public static void encode(final InputPacket packet, final FriendlyByteBuf buffer) {
|
public static void encode(final InputPacket packet, final FriendlyByteBuf buffer) {}
|
||||||
NetworkManager.writeVersionInfo(buffer, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static InputPacket decode(final FriendlyByteBuf buffer) {
|
public static InputPacket decode(final FriendlyByteBuf buffer) {
|
||||||
NetworkManager.checkVersion(buffer);
|
|
||||||
return new InputPacket();
|
return new InputPacket();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,6 @@ package dev.micle.loginprotection.network.client;
|
|||||||
|
|
||||||
import dev.micle.loginprotection.data.ProtectedPlayer;
|
import dev.micle.loginprotection.data.ProtectedPlayer;
|
||||||
import dev.micle.loginprotection.data.ProtectedPlayerManager;
|
import dev.micle.loginprotection.data.ProtectedPlayerManager;
|
||||||
import dev.micle.loginprotection.network.NetworkManager;
|
|
||||||
import dev.micle.loginprotection.proxy.Proxy;
|
import dev.micle.loginprotection.proxy.Proxy;
|
||||||
import dev.micle.loginprotection.setup.Config;
|
import dev.micle.loginprotection.setup.Config;
|
||||||
import net.minecraft.network.FriendlyByteBuf;
|
import net.minecraft.network.FriendlyByteBuf;
|
||||||
@ -22,12 +21,10 @@ public class LastInputTickPacket {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void encode(final LastInputTickPacket packet, final FriendlyByteBuf buffer) {
|
public static void encode(final LastInputTickPacket packet, final FriendlyByteBuf buffer) {
|
||||||
NetworkManager.writeVersionInfo(buffer, false);
|
|
||||||
buffer.writeInt(packet.lastInputTick);
|
buffer.writeInt(packet.lastInputTick);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static LastInputTickPacket decode(final FriendlyByteBuf buffer) {
|
public static LastInputTickPacket decode(final FriendlyByteBuf buffer) {
|
||||||
NetworkManager.checkVersion(buffer);
|
|
||||||
return new LastInputTickPacket(buffer.readInt());
|
return new LastInputTickPacket(buffer.readInt());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,6 @@
|
|||||||
package dev.micle.loginprotection.network.server;
|
package dev.micle.loginprotection.network.server;
|
||||||
|
|
||||||
import dev.micle.loginprotection.data.ProtectedPlayer;
|
import dev.micle.loginprotection.data.ProtectedPlayer;
|
||||||
import dev.micle.loginprotection.network.NetworkManager;
|
|
||||||
import dev.micle.loginprotection.proxy.Proxy;
|
import dev.micle.loginprotection.proxy.Proxy;
|
||||||
import net.minecraft.network.FriendlyByteBuf;
|
import net.minecraft.network.FriendlyByteBuf;
|
||||||
import net.minecraftforge.network.NetworkEvent;
|
import net.minecraftforge.network.NetworkEvent;
|
||||||
@ -16,12 +15,10 @@ public class PlayerStatePacket {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void encode(final PlayerStatePacket packet, final FriendlyByteBuf buffer) {
|
public static void encode(final PlayerStatePacket packet, final FriendlyByteBuf buffer) {
|
||||||
NetworkManager.writeVersionInfo(buffer, true);
|
|
||||||
buffer.writeUtf(packet.state.toString());
|
buffer.writeUtf(packet.state.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static PlayerStatePacket decode(final FriendlyByteBuf buffer) {
|
public static PlayerStatePacket decode(final FriendlyByteBuf buffer) {
|
||||||
NetworkManager.checkVersion(buffer);
|
|
||||||
return new PlayerStatePacket(ProtectedPlayer.State.valueOf(buffer.readUtf()));
|
return new PlayerStatePacket(ProtectedPlayer.State.valueOf(buffer.readUtf()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -10,11 +10,9 @@ import java.util.function.Supplier;
|
|||||||
|
|
||||||
public class RequestLastInputTickPacket {
|
public class RequestLastInputTickPacket {
|
||||||
public static void encode(final RequestLastInputTickPacket packet, final FriendlyByteBuf buffer) {
|
public static void encode(final RequestLastInputTickPacket packet, final FriendlyByteBuf buffer) {
|
||||||
NetworkManager.writeVersionInfo(buffer, false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static RequestLastInputTickPacket decode(final FriendlyByteBuf buffer) {
|
public static RequestLastInputTickPacket decode(final FriendlyByteBuf buffer) {
|
||||||
NetworkManager.checkVersion(buffer);
|
|
||||||
return new RequestLastInputTickPacket();
|
return new RequestLastInputTickPacket();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user