]> git.lizzy.rs Git - BoundingBoxOutlineReloaded.git/blob - src/main/java/com/irtimaled/bbor/common/messages/PayloadBuilder.java
Setup for 1.16.3 Fabric
[BoundingBoxOutlineReloaded.git] / src / main / java / com / irtimaled / bbor / common / messages / PayloadBuilder.java
1 package com.irtimaled.bbor.common.messages;
2
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;
11
12 import java.util.HashMap;
13 import java.util.Map;
14 import java.util.function.BiFunction;
15
16 public class PayloadBuilder {
17     private static final Map<String, Identifier> packetNames = new HashMap<>();
18
19     static PayloadBuilder clientBound(String name) {
20         return new PayloadBuilder(packetNames.computeIfAbsent(name, Identifier::new), CustomPayloadS2CPacket::new);
21     }
22
23     static PayloadBuilder serverBound(String name) {
24         return new PayloadBuilder(packetNames.computeIfAbsent(name, Identifier::new), CustomPayloadC2SPacket::new);
25     }
26
27     private final Identifier name;
28     private final BiFunction<Identifier, PacketByteBuf, Packet<?>> packetBuilder;
29     private final PacketByteBuf buffer;
30
31     private PayloadBuilder(Identifier name, BiFunction<Identifier, PacketByteBuf, Packet<?>> packetBuilder) {
32         this.name = name;
33         this.buffer = new PacketByteBuf(Unpooled.buffer());
34         this.packetBuilder = packetBuilder;
35     }
36
37     private Packet<?> packet;
38
39     public Packet<?> build() {
40         if (packet == null)
41             packet = packetBuilder.apply(name, buffer);
42         return packet;
43     }
44
45     PayloadBuilder writeLong(long value) {
46         buffer.writeLong(value);
47         packet = null;
48         return this;
49     }
50
51     PayloadBuilder writeInt(int value) {
52         buffer.writeInt(value);
53         packet = null;
54         return this;
55     }
56
57     PayloadBuilder writeVarInt(int value) {
58         buffer.writeVarInt(value);
59         packet = null;
60         return this;
61     }
62
63     PayloadBuilder writeChar(char value) {
64         buffer.writeChar(value);
65         packet = null;
66         return this;
67     }
68
69     PayloadBuilder writeCoords(Coords coords) {
70         return writeVarInt(coords.getX())
71                 .writeVarInt(coords.getY())
72                 .writeVarInt(coords.getZ());
73     }
74
75     public PayloadBuilder writeDimensionId(DimensionId dimensionId) {
76         buffer.writeIdentifier(dimensionId.getValue());
77         packet = null;
78         return this;
79     }
80 }