1 package com.irtimaled.bbor.common.messages;
3 import com.irtimaled.bbor.common.models.Coords;
4 import io.netty.buffer.Unpooled;
5 import net.minecraft.network.Packet;
6 import net.minecraft.network.PacketBuffer;
7 import net.minecraft.network.play.client.CPacketCustomPayload;
8 import net.minecraft.network.play.server.SPacketCustomPayload;
9 import net.minecraft.util.ResourceLocation;
11 import java.util.HashMap;
13 import java.util.function.BiFunction;
15 public class PayloadBuilder {
16 private static final Map<String, ResourceLocation> packetNames = new HashMap<>();
18 static PayloadBuilder clientBound(String name) {
19 return new PayloadBuilder(packetNames.computeIfAbsent(name, ResourceLocation::new), SPacketCustomPayload::new);
22 static PayloadBuilder serverBound(String name) {
23 return new PayloadBuilder(packetNames.computeIfAbsent(name, ResourceLocation::new), CPacketCustomPayload::new);
26 private final ResourceLocation name;
27 private final BiFunction<ResourceLocation, PacketBuffer, Packet<?>> packetBuilder;
28 private final PacketBuffer buffer;
30 private PayloadBuilder(ResourceLocation name, BiFunction<ResourceLocation, PacketBuffer, Packet<?>> packetBuilder) {
32 this.buffer = new PacketBuffer(Unpooled.buffer());
33 this.packetBuilder = packetBuilder;
36 private Packet<?> packet;
38 public Packet<?> build() {
40 packet = packetBuilder.apply(name, buffer);
44 PayloadBuilder writeLong(long value) {
45 buffer.writeLong(value);
50 PayloadBuilder writeInt(int value) {
51 buffer.writeInt(value);
56 PayloadBuilder writeVarInt(int value) {
57 buffer.writeVarInt(value);
62 PayloadBuilder writeChar(char value) {
63 buffer.writeChar(value);
68 PayloadBuilder writeBoolean(boolean value) {
69 buffer.writeBoolean(value);
74 PayloadBuilder writeCoords(Coords coords) {
75 return writeVarInt(coords.getX())
76 .writeVarInt(coords.getY())
77 .writeVarInt(coords.getZ());