1 package com.irtimaled.bbor.common.messages;
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;
8 import java.util.HashMap;
10 import java.util.function.BiConsumer;
12 class BoundingBoxSerializer {
13 private static final Map<Class, BiConsumer<AbstractBoundingBox, PayloadBuilder>> serializers = new HashMap<>();
16 serializers.put(BoundingBoxVillage.class, (bb, pb) -> serializeVillage((BoundingBoxVillage) bb, pb));
17 serializers.put(BoundingBoxCuboid.class, (bb, pb) -> serializeStructure((BoundingBoxCuboid)bb, pb));
20 static boolean canSerialize(AbstractBoundingBox key) {
21 return serializers.containsKey(key.getClass());
24 static void serialize(AbstractBoundingBox boundingBox, PayloadBuilder builder) {
25 BiConsumer<AbstractBoundingBox, PayloadBuilder> serializer = serializers.get(boundingBox.getClass());
26 if (serializer == null) return;
28 serializer.accept(boundingBox, builder);
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);
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());