1 package com.irtimaled.bbor.common.messages;
3 import com.irtimaled.bbor.common.models.Coords;
4 import com.irtimaled.bbor.common.models.DimensionId;
5 import io.netty.buffer.Unpooled;
6 import net.minecraft.network.Packet;
7 import net.minecraft.network.PacketByteBuf;
8 import net.minecraft.network.packet.c2s.play.CustomPayloadC2SPacket;
9 import net.minecraft.network.packet.s2c.play.CustomPayloadS2CPacket;
10 import net.minecraft.util.Identifier;
12 import java.util.HashMap;
14 import java.util.function.BiFunction;
16 public class PayloadBuilder {
17 private static final Map<String, Identifier> packetNames = new HashMap<>();
19 static PayloadBuilder clientBound(String name) {
20 return new PayloadBuilder(packetNames.computeIfAbsent(name, Identifier::new), CustomPayloadS2CPacket::new);
23 static PayloadBuilder serverBound(String name) {
24 return new PayloadBuilder(packetNames.computeIfAbsent(name, Identifier::new), CustomPayloadC2SPacket::new);
27 private final Identifier name;
28 private final BiFunction<Identifier, PacketByteBuf, Packet<?>> packetBuilder;
29 private final PacketByteBuf buffer;
31 private PayloadBuilder(Identifier name, BiFunction<Identifier, PacketByteBuf, Packet<?>> packetBuilder) {
33 this.buffer = new PacketByteBuf(Unpooled.buffer());
34 this.packetBuilder = packetBuilder;
37 private Packet<?> packet;
39 public Packet<?> build() {
41 packet = packetBuilder.apply(name, buffer);
45 PayloadBuilder writeLong(long value) {
46 buffer.writeLong(value);
51 PayloadBuilder writeInt(int value) {
52 buffer.writeInt(value);
57 PayloadBuilder writeVarInt(int value) {
58 buffer.writeVarInt(value);
63 PayloadBuilder writeChar(char value) {
64 buffer.writeChar(value);
69 PayloadBuilder writeCoords(Coords coords) {
70 return writeVarInt(coords.getX())
71 .writeVarInt(coords.getY())
72 .writeVarInt(coords.getZ());
75 public PayloadBuilder writeDimensionId(DimensionId dimensionId) {
76 buffer.writeIdentifier(dimensionId.getValue());