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