diff --git a/src/main/java/one/oth3r/sit/PacketBuilder.java b/src/main/java/one/oth3r/sit/PacketBuilder.java deleted file mode 100644 index 6afb6cf..0000000 --- a/src/main/java/one/oth3r/sit/PacketBuilder.java +++ /dev/null @@ -1,35 +0,0 @@ -package one.oth3r.sit; - -import io.netty.buffer.ByteBuf; -import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; -import net.fabricmc.fabric.api.networking.v1.PacketByteBufs; -import net.minecraft.network.PacketByteBuf; -import net.minecraft.util.Identifier; - -import java.nio.ByteBuffer; -import java.nio.charset.StandardCharsets; - -public class PacketBuilder { - public static final String SETTINGS = "settings_v1.0"; - private final String message; - private final PacketByteBuf packetByteBuf = PacketByteBufs.create(); - public PacketBuilder(ByteBuf buf) { - // Read any data sent in the packet - message = buf.toString(StandardCharsets.UTF_8); - packetByteBuf.writeBytes(buf); - } - public PacketBuilder(String message) { - this.message = message; - packetByteBuf.writeBytes(ByteBuffer.wrap(message.getBytes(StandardCharsets.UTF_8)).array()); - } - public static Identifier getIdentifier() { - // only 1 packet rn - return new Identifier(Sit.MOD_ID, SETTINGS); - } - public void send() { - ClientPlayNetworking.send(getIdentifier(), packetByteBuf); - } - public String getMessage() { - return this.message; - } -} diff --git a/src/main/java/one/oth3r/sit/packet/PacketSender.java b/src/main/java/one/oth3r/sit/packet/PacketSender.java new file mode 100644 index 0000000..ff624bb --- /dev/null +++ b/src/main/java/one/oth3r/sit/packet/PacketSender.java @@ -0,0 +1,39 @@ +package one.oth3r.sit.packet; + +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; +import net.fabricmc.fabric.api.networking.v1.PacketByteBufs; +import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; +import net.minecraft.network.PacketByteBuf; +import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.util.Identifier; +import one.oth3r.sit.utl.Data; + +import java.nio.ByteBuffer; +import java.nio.charset.StandardCharsets; + +public class PacketSender { + private final PacketByteBuf data; + private final PacketType type; + + public PacketSender(PacketType type, String data) { + this.type = type; + this.data = PacketByteBufs.create() + .writeBytes(ByteBuffer.wrap(data.getBytes(StandardCharsets.UTF_8))); + } + + public void sendToPlayer(ServerPlayerEntity player) { + ServerPlayNetworking.send(player,getIdentifier(type),data); + } + + public void sendToServer() { + ClientPlayNetworking.send(getIdentifier(type),data); + } + + public static Identifier getIdentifier(PacketType packetType) { + return new Identifier(Data.MOD_ID, packetType.getId()); + } + + public static String getPacketData(PacketByteBuf buf) { + return buf.toString(StandardCharsets.UTF_8); + } +} diff --git a/src/main/java/one/oth3r/sit/packet/PacketType.java b/src/main/java/one/oth3r/sit/packet/PacketType.java new file mode 100644 index 0000000..28b351c --- /dev/null +++ b/src/main/java/one/oth3r/sit/packet/PacketType.java @@ -0,0 +1,16 @@ +package one.oth3r.sit.packet; + +public enum PacketType { + RESPONSE("response_v1.0"), + SETTINGS("settings_v2.0"); + + final String id; + + PacketType(String id) { + this.id = id; + } + + public String getId() { + return id; + } +} diff --git a/src/main/java/one/oth3r/sit/packet/SitPayloads.java b/src/main/java/one/oth3r/sit/packet/SitPayloads.java deleted file mode 100644 index e1aaba9..0000000 --- a/src/main/java/one/oth3r/sit/packet/SitPayloads.java +++ /dev/null @@ -1,43 +0,0 @@ -package one.oth3r.sit.packet; - -import net.minecraft.network.RegistryByteBuf; -import net.minecraft.network.codec.PacketCodec; -import net.minecraft.network.codec.PacketCodecs; -import net.minecraft.network.packet.CustomPayload; -import net.minecraft.util.Identifier; -import one.oth3r.sit.utl.Data; - -public class SitPayloads { - /** - * the packet that the client sends to the server - * @param value the sitting settings for the client - */ - public record SettingsPayload(String value) implements CustomPayload { - - public static final Id ID = new Id<>(Identifier.of(Data.MOD_ID,"settings_v2.0")); - - public static final PacketCodec CODEC = PacketCodecs.STRING.xmap(SettingsPayload::new, SettingsPayload::value).cast(); - - @Override - public Id getId() { - return ID; - } - } - - /** - * the packet that the server sends to the client when responding to the settings payload - */ - public record ResponsePayload(String value) implements CustomPayload { - - public static final String VERSION = "response_v1.0"; - - public static final Id ID = new Id<>(Identifier.of(Data.MOD_ID,VERSION)); - - public static final PacketCodec CODEC = PacketCodecs.STRING.xmap(ResponsePayload::new, ResponsePayload::value).cast(); - - @Override - public Id getId() { - return ID; - } - } -} diff --git a/src/main/java/one/oth3r/sit/utl/Events.java b/src/main/java/one/oth3r/sit/utl/Events.java index f06a485..fbc2241 100644 --- a/src/main/java/one/oth3r/sit/utl/Events.java +++ b/src/main/java/one/oth3r/sit/utl/Events.java @@ -8,7 +8,6 @@ import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; import net.fabricmc.fabric.api.event.player.UseBlockCallback; -import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry; import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; import net.minecraft.client.MinecraftClient; @@ -21,7 +20,8 @@ import one.oth3r.sit.command.SitCommand; import one.oth3r.sit.file.FileData; import one.oth3r.sit.file.LangReader; import one.oth3r.sit.file.SittingConfig; -import one.oth3r.sit.packet.SitPayloads; +import one.oth3r.sit.packet.PacketSender; +import one.oth3r.sit.packet.PacketType; import one.oth3r.sit.screen.ConfigScreen; import org.lwjgl.glfw.GLFW; @@ -83,35 +83,37 @@ public class Events { private static class Packet { private static void common() { - // register the data - PayloadTypeRegistry.playC2S().register(SitPayloads.SettingsPayload.ID, SitPayloads.SettingsPayload.CODEC); - - PayloadTypeRegistry.playS2C().register(SitPayloads.ResponsePayload.ID, SitPayloads.ResponsePayload.CODEC); - // server receiver is common /// receiving the sitting setting payload - ServerPlayNetworking.registerGlobalReceiver(SitPayloads.SettingsPayload.ID,((payload, context) -> Data.getServer().execute(() -> { - // save the setting on the server for that player - FileData.setPlayerSetting(context.player(),Utl.getGson().fromJson(payload.value(), SittingConfig.class)); + ServerPlayNetworking.registerGlobalReceiver(PacketSender.getIdentifier(PacketType.SETTINGS), + ((server, player, handler, buf, responseSender) -> { + String packetData = PacketSender.getPacketData(buf); + server.execute(() -> { + // save the setting on the server for that player + FileData.setPlayerSetting(player,Utl.getGson().fromJson(packetData, SittingConfig.class)); - // send the player back a response packet for confirmation - ServerPlayNetworking.send(context.player(),new SitPayloads.ResponsePayload(SitPayloads.ResponsePayload.VERSION)); + // send the player back a response packet for confirmation + new PacketSender(PacketType.RESPONSE,PacketType.RESPONSE.getId()).sendToPlayer(player); - // log the receiving of the packet from the player - Data.LOGGER.info(Utl.lang("sit!.console.player_settings",context.player().getName().getString()).getString()); - }))); + // log the receiving of the packet from the player + Data.LOGGER.info(Utl.lang("sit!.console.player_settings",player.getName().getString()).getString()); + }); + })); } private static void client() { /// receiving the response packet from the server - ClientPlayNetworking.registerGlobalReceiver(SitPayloads.ResponsePayload.ID, ((payload, context) -> { - // only update when needed - if (!Data.isSupportedServer()) { - Data.setSupportedServer(true); - Data.LOGGER.info(Utl.lang("sit!.console.connected",payload.value()).getString()); - } - })); + ClientPlayNetworking.registerGlobalReceiver(PacketSender.getIdentifier(PacketType.RESPONSE), + ((client, handler, buf, responseSender) -> { + String packetData = PacketSender.getPacketData(buf); + client.execute(() -> { + if (!Data.isSupportedServer()) { + Data.setSupportedServer(true); + Data.LOGGER.info(Utl.lang("sit!.console.connected",packetData).getString()); + } + }); + })); } } diff --git a/src/main/java/one/oth3r/sit/utl/Utl.java b/src/main/java/one/oth3r/sit/utl/Utl.java index 03e6cd1..49c144c 100644 --- a/src/main/java/one/oth3r/sit/utl/Utl.java +++ b/src/main/java/one/oth3r/sit/utl/Utl.java @@ -5,7 +5,6 @@ import com.google.gson.reflect.TypeToken; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonWriter; import com.google.gson.stream.MalformedJsonException; -import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.minecraft.block.*; import net.minecraft.block.enums.BlockHalf; import net.minecraft.block.enums.SlabType; @@ -29,7 +28,8 @@ import net.minecraft.util.math.Vec3d; import net.minecraft.world.RaycastContext; import net.minecraft.world.World; import one.oth3r.sit.file.*; -import one.oth3r.sit.packet.SitPayloads; +import one.oth3r.sit.packet.PacketSender; +import one.oth3r.sit.packet.PacketType; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -414,7 +414,7 @@ public class Utl { */ public static void sendSettingsPackets() { if (Data.isClient() && Data.isInGame()) { - ClientPlayNetworking.send(new SitPayloads.SettingsPayload(Utl.getGson().toJson(FileData.getSittingConfig()))); + new PacketSender(PacketType.SETTINGS, Utl.getGson().toJson(FileData.getSittingConfig())).sendToServer(); } }