From 189ae2d2b587ebb06f286e634d77dac82960666f Mon Sep 17 00:00:00 2001 From: Oth3r Date: Mon, 22 Jan 2024 17:56:34 -0600 Subject: [PATCH] new packet system 1.20.5 --- .../java/one/oth3r/sit/PacketBuilder.java | 35 ------------------- src/main/java/one/oth3r/sit/Sit.java | 35 +++++++++++-------- src/main/java/one/oth3r/sit/SitClient.java | 8 +++-- 3 files changed, 26 insertions(+), 52 deletions(-) delete mode 100644 src/main/java/one/oth3r/sit/PacketBuilder.java 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/Sit.java b/src/main/java/one/oth3r/sit/Sit.java index 08abcc9..baeafa1 100644 --- a/src/main/java/one/oth3r/sit/Sit.java +++ b/src/main/java/one/oth3r/sit/Sit.java @@ -3,23 +3,24 @@ package one.oth3r.sit; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.reflect.TypeToken; -import io.netty.buffer.ByteBuf; -import io.netty.util.ReferenceCountUtil; import net.fabricmc.api.ModInitializer; +import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry; import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; -import net.minecraft.network.PacketByteBuf; +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.server.MinecraftServer; import net.minecraft.server.command.CommandManager; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.text.MutableText; import net.minecraft.text.Text; +import net.minecraft.util.Identifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.lang.reflect.Type; -import java.nio.charset.StandardCharsets; -import java.util.Arrays; import java.util.HashMap; public class Sit implements ModInitializer { @@ -39,16 +40,22 @@ public class Sit implements ModInitializer { config.load(); Events.register(); //PACKETS - ServerPlayNetworking.registerGlobalReceiver(PacketBuilder.getIdentifier(), - (server, player, handler, buf, responseSender) -> { - // copy to not throw errors - PacketBuilder packet = new PacketBuilder(buf.copy()); + PayloadTypeRegistry.playC2S().register(SettingsPayload.ID, SettingsPayload.CODEC); + ServerPlayNetworking.registerGlobalReceiver(SettingsPayload.ID,((payload, context) -> { server.execute(() -> { - Type hashMapToken = new TypeToken>() {}.getType(); - Gson gson = new GsonBuilder().disableHtmlEscaping().create(); - playerSettings.put(player,gson.fromJson(packet.getMessage(),hashMapToken)); - }); - }); + Type hashMapToken = new TypeToken>() {}.getType(); + Gson gson = new GsonBuilder().disableHtmlEscaping().create(); + playerSettings.put(context.player(),gson.fromJson(payload.value,hashMapToken)); + }); + })); + } + public record SettingsPayload(String value) implements CustomPayload { + public static final CustomPayload.Id ID = new CustomPayload.Id<>(new Identifier(MOD_ID,"settings_v1.1")); + public static final PacketCodec CODEC = PacketCodecs.STRING.xmap(SettingsPayload::new, SettingsPayload::value).cast(); + @Override + public Id getId() { + return ID; + } } public static MutableText lang(String key, Object... args) { if (isClient) return Text.translatable(key, args); diff --git a/src/main/java/one/oth3r/sit/SitClient.java b/src/main/java/one/oth3r/sit/SitClient.java index 2a1d2e1..555bd09 100644 --- a/src/main/java/one/oth3r/sit/SitClient.java +++ b/src/main/java/one/oth3r/sit/SitClient.java @@ -4,6 +4,8 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents; +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; +import net.minecraft.network.packet.CustomPayload; public class SitClient implements ClientModInitializer { public static boolean inGame = false; @@ -13,13 +15,13 @@ public class SitClient implements ClientModInitializer { ClientPlayConnectionEvents.JOIN.register((handler, sender, client) -> { inGame = true; // send a data packet whenever joining a server - client.execute(SitClient::sendPackets); + ClientPlayNetworking.send(sendPackets()); }); // reset inGame ClientPlayConnectionEvents.DISCONNECT.register((handler, client) -> inGame = false); } - public static void sendPackets() { + public static CustomPayload sendPackets() { Gson gson = new GsonBuilder().disableHtmlEscaping().create(); - new PacketBuilder(gson.toJson(Utl.getHandSettings())).send(); + return new Sit.SettingsPayload(gson.toJson(Utl.getHandSettings())); } }