]> git.lizzy.rs Git - BoundingBoxOutlineReloaded.git/blob - src/main/java/com/irtimaled/bbor/common/messages/BoundingBoxSerializer.java
Fully stop needing config on BoundingBoxType
[BoundingBoxOutlineReloaded.git] / src / main / java / com / irtimaled / bbor / common / messages / BoundingBoxSerializer.java
1 package com.irtimaled.bbor.common.messages;
2
3 import com.irtimaled.bbor.common.models.AbstractBoundingBox;
4 import com.irtimaled.bbor.common.models.BoundingBoxCuboid;
5 import com.irtimaled.bbor.common.models.BoundingBoxVillage;
6 import com.irtimaled.bbor.common.models.Coords;
7
8 import java.util.HashMap;
9 import java.util.Map;
10 import java.util.function.BiConsumer;
11
12 class BoundingBoxSerializer {
13     private static final Map<Class, BiConsumer<AbstractBoundingBox, PayloadBuilder>> serializers = new HashMap<>();
14
15     static {
16         serializers.put(BoundingBoxVillage.class, (bb, pb) -> serializeVillage((BoundingBoxVillage) bb, pb));
17         serializers.put(BoundingBoxCuboid.class, (bb, pb) -> serializeStructure((BoundingBoxCuboid)bb, pb));
18     }
19
20     static boolean canSerialize(AbstractBoundingBox key) {
21         return serializers.containsKey(key.getClass());
22     }
23
24     static void serialize(AbstractBoundingBox boundingBox, PayloadBuilder builder) {
25         BiConsumer<AbstractBoundingBox, PayloadBuilder> serializer = serializers.get(boundingBox.getClass());
26         if (serializer == null) return;
27
28         serializer.accept(boundingBox, builder);
29     }
30
31     private static void serializeVillage(BoundingBoxVillage boundingBox, PayloadBuilder builder) {
32         builder.writeChar('V')
33                 .writeCoords(boundingBox.getCenter())
34                 .writeVarInt(boundingBox.getRadius())
35                 .writeBoolean(boundingBox.getSpawnsIronGolems())
36                 .writeVarInt(boundingBox.getColor().getRGB());
37         for (Coords door : boundingBox.getDoors()) {
38             builder.writeCoords(door);
39         }
40     }
41
42     private static void serializeStructure(BoundingBoxCuboid boundingBox, PayloadBuilder builder) {
43         builder.writeChar('S')
44                 .writeInt(boundingBox.getType().hashCode())
45                 .writeCoords(boundingBox.getMinCoords())
46                 .writeCoords(boundingBox.getMaxCoords());
47     }
48 }