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