Refactored the network package.
This commit is contained in:
@ -2,10 +2,10 @@ package dev.micle.totemofreviving.item.totem;
|
|||||||
|
|
||||||
import dev.micle.totemofreviving.TotemOfReviving;
|
import dev.micle.totemofreviving.TotemOfReviving;
|
||||||
import dev.micle.totemofreviving.setup.Config;
|
import dev.micle.totemofreviving.setup.Config;
|
||||||
import dev.micle.totemofreviving.network.ChangeTargetPacket;
|
import dev.micle.totemofreviving.network.client.ChangeTargetPacket;
|
||||||
import dev.micle.totemofreviving.network.ChargeTotemPacket;
|
import dev.micle.totemofreviving.network.client.ChargeTotemPacket;
|
||||||
import dev.micle.totemofreviving.network.Network;
|
import dev.micle.totemofreviving.network.NetworkManager;
|
||||||
import dev.micle.totemofreviving.network.ReviveTargetPacket;
|
import dev.micle.totemofreviving.network.client.ReviveTargetPacket;
|
||||||
import dev.micle.totemofreviving.setup.ModKeyMappings;
|
import dev.micle.totemofreviving.setup.ModKeyMappings;
|
||||||
import net.minecraft.ChatFormatting;
|
import net.minecraft.ChatFormatting;
|
||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
@ -214,12 +214,12 @@ public abstract class TotemItem extends Item {
|
|||||||
ItemStack chargeItem = (hand.equals(InteractionHand.MAIN_HAND)) ? player.getOffhandItem() : player.getMainHandItem();
|
ItemStack chargeItem = (hand.equals(InteractionHand.MAIN_HAND)) ? player.getOffhandItem() : player.getMainHandItem();
|
||||||
|
|
||||||
if (player.isCrouching()) {
|
if (player.isCrouching()) {
|
||||||
Network.channel.sendToServer(new ChangeTargetPacket(hand));
|
NetworkManager.getChannel().sendToServer(new ChangeTargetPacket(hand));
|
||||||
} else {
|
} else {
|
||||||
if (isCharge(chargeItem)) {
|
if (isCharge(chargeItem)) {
|
||||||
Network.channel.sendToServer(new ChargeTotemPacket(hand));
|
NetworkManager.getChannel().sendToServer(new ChargeTotemPacket(hand));
|
||||||
} else {
|
} else {
|
||||||
Network.channel.sendToServer(new ReviveTargetPacket(hand));
|
NetworkManager.getChannel().sendToServer(new ReviveTargetPacket(hand));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return super.use(world, player, hand);
|
return super.use(world, player, hand);
|
||||||
|
@ -1,83 +0,0 @@
|
|||||||
package dev.micle.totemofreviving.network;
|
|
||||||
|
|
||||||
import dev.micle.totemofreviving.TotemOfReviving;
|
|
||||||
import dev.micle.totemofreviving.util.MismatchedVersionException;
|
|
||||||
import net.minecraft.network.FriendlyByteBuf;
|
|
||||||
import net.minecraftforge.network.NetworkRegistry;
|
|
||||||
import net.minecraftforge.network.simple.SimpleChannel;
|
|
||||||
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.regex.Pattern;
|
|
||||||
|
|
||||||
public class Network {
|
|
||||||
public static final String VERSION = TotemOfReviving.MOD_ID + "-net-1";
|
|
||||||
private static final Pattern NET_VERSION_PATTERN = Pattern.compile(TotemOfReviving.MOD_ID + "-net-\\d+$");
|
|
||||||
private static final Pattern MOD_VERSION_PATTERN = Pattern.compile("Forge-\\d+\\.\\d+\\.\\d+-\\d+\\.\\d+\\.\\d+$");
|
|
||||||
|
|
||||||
public static SimpleChannel channel;
|
|
||||||
|
|
||||||
public static void init() {
|
|
||||||
channel = NetworkRegistry.ChannelBuilder.named(TotemOfReviving.createResourceLocation("network"))
|
|
||||||
.clientAcceptedVersions(s -> Objects.equals(s, VERSION))
|
|
||||||
.serverAcceptedVersions(s -> Objects.equals(s, VERSION))
|
|
||||||
.networkProtocolVersion(() -> VERSION)
|
|
||||||
.simpleChannel();
|
|
||||||
|
|
||||||
int id = 0;
|
|
||||||
channel.messageBuilder(ChangeTargetPacket.class, id++)
|
|
||||||
.encoder(ChangeTargetPacket::encode)
|
|
||||||
.decoder(ChangeTargetPacket::decode)
|
|
||||||
.consumer(ChangeTargetPacket::handle)
|
|
||||||
.add();
|
|
||||||
channel.messageBuilder(ChargeTotemPacket.class, id++)
|
|
||||||
.encoder(ChargeTotemPacket::encode)
|
|
||||||
.decoder(ChargeTotemPacket::decode)
|
|
||||||
.consumer(ChargeTotemPacket::handle)
|
|
||||||
.add();
|
|
||||||
channel.messageBuilder(ReviveTargetPacket.class, id++)
|
|
||||||
.encoder(ReviveTargetPacket::encode)
|
|
||||||
.decoder(ReviveTargetPacket::decode)
|
|
||||||
.consumer(ReviveTargetPacket::handle)
|
|
||||||
.add();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void writeVersionInfo(FriendlyByteBuf buffer, boolean senderIsServer) {
|
|
||||||
buffer.writeBoolean(senderIsServer);
|
|
||||||
buffer.writeUtf(VERSION);
|
|
||||||
buffer.writeUtf(TotemOfReviving.getVersion());
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void checkVersion(FriendlyByteBuf buffer) {
|
|
||||||
boolean senderIsServer = buffer.readBoolean();
|
|
||||||
String serverNetVersion = (senderIsServer) ? readNetVersion(buffer) : VERSION;
|
|
||||||
String serverModVersion = (senderIsServer) ? readModVersion(buffer) : TotemOfReviving.getVersion();
|
|
||||||
String clientNetVersion = (senderIsServer) ? VERSION : readNetVersion(buffer);
|
|
||||||
String clientModVersion = (senderIsServer) ? TotemOfReviving.getVersion() : readModVersion(buffer);
|
|
||||||
|
|
||||||
if (!serverNetVersion.equals(clientNetVersion)) {
|
|
||||||
throw new MismatchedVersionException(
|
|
||||||
String.format("The server and client are running different versions of [Micle's Totem of Reviving]. " +
|
|
||||||
"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 "UNKNOWN (" + netVersion + ")";
|
|
||||||
}
|
|
||||||
return netVersion;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String readModVersion(FriendlyByteBuf buffer) {
|
|
||||||
String modVersion = buffer.readUtf();
|
|
||||||
if (!modVersion.equals("NONE") && !MOD_VERSION_PATTERN.matcher(modVersion).matches()) {
|
|
||||||
return "UNKNOWN (" + modVersion + ")";
|
|
||||||
}
|
|
||||||
return modVersion;
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,44 @@
|
|||||||
|
package dev.micle.totemofreviving.network;
|
||||||
|
|
||||||
|
import dev.micle.totemofreviving.TotemOfReviving;
|
||||||
|
import dev.micle.totemofreviving.network.client.ChangeTargetPacket;
|
||||||
|
import dev.micle.totemofreviving.network.client.ChargeTotemPacket;
|
||||||
|
import dev.micle.totemofreviving.network.client.ReviveTargetPacket;
|
||||||
|
import net.minecraftforge.network.NetworkRegistry;
|
||||||
|
import net.minecraftforge.network.simple.SimpleChannel;
|
||||||
|
|
||||||
|
public class NetworkManager {
|
||||||
|
// Initialize variables
|
||||||
|
private static SimpleChannel channel;
|
||||||
|
|
||||||
|
public static void init() {
|
||||||
|
// Create channel
|
||||||
|
channel = NetworkRegistry.ChannelBuilder.named(TotemOfReviving.createResourceLocation("network"))
|
||||||
|
.clientAcceptedVersions(v -> v.equals(TotemOfReviving.getVersion()))
|
||||||
|
.serverAcceptedVersions(v -> v.equals(TotemOfReviving.getVersion()))
|
||||||
|
.networkProtocolVersion(TotemOfReviving::getVersion)
|
||||||
|
.simpleChannel();
|
||||||
|
|
||||||
|
// Register packets
|
||||||
|
int id = 0;
|
||||||
|
channel.messageBuilder(ChangeTargetPacket.class, id++)
|
||||||
|
.encoder(ChangeTargetPacket::encode)
|
||||||
|
.decoder(ChangeTargetPacket::decode)
|
||||||
|
.consumer(ChangeTargetPacket::handle)
|
||||||
|
.add();
|
||||||
|
channel.messageBuilder(ChargeTotemPacket.class, id++)
|
||||||
|
.encoder(ChargeTotemPacket::encode)
|
||||||
|
.decoder(ChargeTotemPacket::decode)
|
||||||
|
.consumer(ChargeTotemPacket::handle)
|
||||||
|
.add();
|
||||||
|
channel.messageBuilder(ReviveTargetPacket.class, id++)
|
||||||
|
.encoder(ReviveTargetPacket::encode)
|
||||||
|
.decoder(ReviveTargetPacket::decode)
|
||||||
|
.consumer(ReviveTargetPacket::handle)
|
||||||
|
.add();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static SimpleChannel getChannel() {
|
||||||
|
return channel;
|
||||||
|
}
|
||||||
|
}
|
@ -1,7 +1,8 @@
|
|||||||
package dev.micle.totemofreviving.network;
|
package dev.micle.totemofreviving.network.client;
|
||||||
|
|
||||||
import dev.micle.totemofreviving.TotemOfReviving;
|
import dev.micle.totemofreviving.TotemOfReviving;
|
||||||
import dev.micle.totemofreviving.item.totem.TotemItem;
|
import dev.micle.totemofreviving.item.totem.TotemItem;
|
||||||
|
import dev.micle.totemofreviving.network.NetworkManager;
|
||||||
import net.minecraft.ChatFormatting;
|
import net.minecraft.ChatFormatting;
|
||||||
import net.minecraft.network.FriendlyByteBuf;
|
import net.minecraft.network.FriendlyByteBuf;
|
||||||
import net.minecraft.network.chat.TextComponent;
|
import net.minecraft.network.chat.TextComponent;
|
||||||
@ -21,12 +22,10 @@ public class ChangeTargetPacket {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void encode(final ChangeTargetPacket packet, final FriendlyByteBuf buffer) {
|
public static void encode(final ChangeTargetPacket packet, final FriendlyByteBuf buffer) {
|
||||||
Network.writeVersionInfo(buffer, false);
|
|
||||||
buffer.writeEnum(packet.hand);
|
buffer.writeEnum(packet.hand);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ChangeTargetPacket decode(final FriendlyByteBuf buffer) {
|
public static ChangeTargetPacket decode(final FriendlyByteBuf buffer) {
|
||||||
Network.checkVersion(buffer);
|
|
||||||
return new ChangeTargetPacket(buffer.readEnum(InteractionHand.class));
|
return new ChangeTargetPacket(buffer.readEnum(InteractionHand.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -37,7 +36,7 @@ public class ChangeTargetPacket {
|
|||||||
if (sender == null) { return; }
|
if (sender == null) { return; }
|
||||||
|
|
||||||
ItemStack totemStack = sender.getItemInHand(packet.hand);
|
ItemStack totemStack = sender.getItemInHand(packet.hand);
|
||||||
PlayerList playerList = TotemOfReviving.PROXY.getServer().getPlayerList();
|
PlayerList playerList = TotemOfReviving.getProxy().getServer().getPlayerList();
|
||||||
int targetIndex = TotemItem.getTargetIndex(totemStack) + 1;
|
int targetIndex = TotemItem.getTargetIndex(totemStack) + 1;
|
||||||
|
|
||||||
if (targetIndex > playerList.getPlayerCount()-1) { targetIndex = 0; }
|
if (targetIndex > playerList.getPlayerCount()-1) { targetIndex = 0; }
|
@ -1,6 +1,7 @@
|
|||||||
package dev.micle.totemofreviving.network;
|
package dev.micle.totemofreviving.network.client;
|
||||||
|
|
||||||
import dev.micle.totemofreviving.item.totem.TotemItem;
|
import dev.micle.totemofreviving.item.totem.TotemItem;
|
||||||
|
import dev.micle.totemofreviving.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.minecraft.world.InteractionHand;
|
import net.minecraft.world.InteractionHand;
|
||||||
@ -17,12 +18,10 @@ public class ChargeTotemPacket {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void encode(final ChargeTotemPacket packet, final FriendlyByteBuf buffer) {
|
public static void encode(final ChargeTotemPacket packet, final FriendlyByteBuf buffer) {
|
||||||
Network.writeVersionInfo(buffer, false);
|
|
||||||
buffer.writeEnum(packet.hand);
|
buffer.writeEnum(packet.hand);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ChargeTotemPacket decode(final FriendlyByteBuf buffer) {
|
public static ChargeTotemPacket decode(final FriendlyByteBuf buffer) {
|
||||||
Network.checkVersion(buffer);
|
|
||||||
return new ChargeTotemPacket(buffer.readEnum(InteractionHand.class));
|
return new ChargeTotemPacket(buffer.readEnum(InteractionHand.class));
|
||||||
}
|
}
|
||||||
|
|
@ -1,7 +1,8 @@
|
|||||||
package dev.micle.totemofreviving.network;
|
package dev.micle.totemofreviving.network.client;
|
||||||
|
|
||||||
import dev.micle.totemofreviving.TotemOfReviving;
|
import dev.micle.totemofreviving.TotemOfReviving;
|
||||||
import dev.micle.totemofreviving.item.totem.TotemItem;
|
import dev.micle.totemofreviving.item.totem.TotemItem;
|
||||||
|
import dev.micle.totemofreviving.network.NetworkManager;
|
||||||
import net.minecraft.ChatFormatting;
|
import net.minecraft.ChatFormatting;
|
||||||
import net.minecraft.network.FriendlyByteBuf;
|
import net.minecraft.network.FriendlyByteBuf;
|
||||||
import net.minecraft.network.chat.TextComponent;
|
import net.minecraft.network.chat.TextComponent;
|
||||||
@ -20,12 +21,10 @@ public class ReviveTargetPacket {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void encode(final ReviveTargetPacket packet, final FriendlyByteBuf buffer) {
|
public static void encode(final ReviveTargetPacket packet, final FriendlyByteBuf buffer) {
|
||||||
Network.writeVersionInfo(buffer, false);
|
|
||||||
buffer.writeEnum(packet.hand);
|
buffer.writeEnum(packet.hand);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ReviveTargetPacket decode(final FriendlyByteBuf buffer) {
|
public static ReviveTargetPacket decode(final FriendlyByteBuf buffer) {
|
||||||
Network.checkVersion(buffer);
|
|
||||||
return new ReviveTargetPacket(buffer.readEnum(InteractionHand.class));
|
return new ReviveTargetPacket(buffer.readEnum(InteractionHand.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -39,7 +38,7 @@ public class ReviveTargetPacket {
|
|||||||
ServerPlayer target;
|
ServerPlayer target;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
target = TotemOfReviving.PROXY.getServer().getPlayerList().getPlayer(TotemItem.getTargetUUID(totemStack));
|
target = TotemOfReviving.getProxy().getServer().getPlayerList().getPlayer(TotemItem.getTargetUUID(totemStack));
|
||||||
if (target == null) { throw new NullPointerException("Target is null!"); }
|
if (target == null) { throw new NullPointerException("Target is null!"); }
|
||||||
} catch (NullPointerException exception) {
|
} catch (NullPointerException exception) {
|
||||||
sender.sendMessage(new TextComponent(ChatFormatting.WHITE + "Unable to find player!"), sender.getUUID());
|
sender.sendMessage(new TextComponent(ChatFormatting.WHITE + "Unable to find player!"), sender.getUUID());
|
@ -2,7 +2,7 @@ package dev.micle.totemofreviving.proxy;
|
|||||||
|
|
||||||
import dev.micle.totemofreviving.setup.Config;
|
import dev.micle.totemofreviving.setup.Config;
|
||||||
import dev.micle.totemofreviving.data.DataGenerators;
|
import dev.micle.totemofreviving.data.DataGenerators;
|
||||||
import dev.micle.totemofreviving.network.Network;
|
import dev.micle.totemofreviving.network.NetworkManager;
|
||||||
import dev.micle.totemofreviving.setup.Registration;
|
import dev.micle.totemofreviving.setup.Registration;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.server.MinecraftServer;
|
import net.minecraft.server.MinecraftServer;
|
||||||
@ -27,7 +27,7 @@ public class Proxy implements IProxy {
|
|||||||
// Initialize setup
|
// Initialize setup
|
||||||
Registration.register();
|
Registration.register();
|
||||||
Config.init();
|
Config.init();
|
||||||
Network.init();
|
NetworkManager.init();
|
||||||
|
|
||||||
// Register mod event bus listeners
|
// Register mod event bus listeners
|
||||||
IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus();
|
IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus();
|
||||||
|
Reference in New Issue
Block a user