new packet system 1.20.5

This commit is contained in:
Oth3r 2024-01-22 17:56:34 -06:00
commit 189ae2d2b5
3 changed files with 26 additions and 52 deletions

View file

@ -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;
}
}

View file

@ -3,23 +3,24 @@ package one.oth3r.sit;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.GsonBuilder; import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken; import com.google.gson.reflect.TypeToken;
import io.netty.buffer.ByteBuf;
import io.netty.util.ReferenceCountUtil;
import net.fabricmc.api.ModInitializer; import net.fabricmc.api.ModInitializer;
import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry;
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; 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.MinecraftServer;
import net.minecraft.server.command.CommandManager; import net.minecraft.server.command.CommandManager;
import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.text.MutableText; import net.minecraft.text.MutableText;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import net.minecraft.util.Identifier;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
public class Sit implements ModInitializer { public class Sit implements ModInitializer {
@ -39,16 +40,22 @@ public class Sit implements ModInitializer {
config.load(); config.load();
Events.register(); Events.register();
//PACKETS //PACKETS
ServerPlayNetworking.registerGlobalReceiver(PacketBuilder.getIdentifier(), PayloadTypeRegistry.playC2S().register(SettingsPayload.ID, SettingsPayload.CODEC);
(server, player, handler, buf, responseSender) -> { ServerPlayNetworking.registerGlobalReceiver(SettingsPayload.ID,((payload, context) -> {
// copy to not throw errors
PacketBuilder packet = new PacketBuilder(buf.copy());
server.execute(() -> { server.execute(() -> {
Type hashMapToken = new TypeToken<HashMap<String, Object>>() {}.getType(); Type hashMapToken = new TypeToken<HashMap<String, Object>>() {}.getType();
Gson gson = new GsonBuilder().disableHtmlEscaping().create(); Gson gson = new GsonBuilder().disableHtmlEscaping().create();
playerSettings.put(player,gson.fromJson(packet.getMessage(),hashMapToken)); playerSettings.put(context.player(),gson.fromJson(payload.value,hashMapToken));
});
}); });
}));
}
public record SettingsPayload(String value) implements CustomPayload {
public static final CustomPayload.Id<SettingsPayload> ID = new CustomPayload.Id<>(new Identifier(MOD_ID,"settings_v1.1"));
public static final PacketCodec<RegistryByteBuf, SettingsPayload> CODEC = PacketCodecs.STRING.xmap(SettingsPayload::new, SettingsPayload::value).cast();
@Override
public Id<SettingsPayload> getId() {
return ID;
}
} }
public static MutableText lang(String key, Object... args) { public static MutableText lang(String key, Object... args) {
if (isClient) return Text.translatable(key, args); if (isClient) return Text.translatable(key, args);

View file

@ -4,6 +4,8 @@ import com.google.gson.Gson;
import com.google.gson.GsonBuilder; import com.google.gson.GsonBuilder;
import net.fabricmc.api.ClientModInitializer; import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents; 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 class SitClient implements ClientModInitializer {
public static boolean inGame = false; public static boolean inGame = false;
@ -13,13 +15,13 @@ public class SitClient implements ClientModInitializer {
ClientPlayConnectionEvents.JOIN.register((handler, sender, client) -> { ClientPlayConnectionEvents.JOIN.register((handler, sender, client) -> {
inGame = true; inGame = true;
// send a data packet whenever joining a server // send a data packet whenever joining a server
client.execute(SitClient::sendPackets); ClientPlayNetworking.send(sendPackets());
}); });
// reset inGame // reset inGame
ClientPlayConnectionEvents.DISCONNECT.register((handler, client) -> inGame = false); ClientPlayConnectionEvents.DISCONNECT.register((handler, client) -> inGame = false);
} }
public static void sendPackets() { public static CustomPayload sendPackets() {
Gson gson = new GsonBuilder().disableHtmlEscaping().create(); Gson gson = new GsonBuilder().disableHtmlEscaping().create();
new PacketBuilder(gson.toJson(Utl.getHandSettings())).send(); return new Sit.SettingsPayload(gson.toJson(Utl.getHandSettings()));
} }
} }