1 package com.irtimaled.bbor.common.messages;
3 import com.irtimaled.bbor.common.models.*;
5 import java.util.HashMap;
7 import java.util.function.BiConsumer;
9 class BoundingBoxSerializer {
10 private static final Map<Class, BiConsumer<AbstractBoundingBox, PayloadBuilder>> serializers = new HashMap<>();
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));
18 static boolean canSerialize(AbstractBoundingBox key) {
19 return serializers.containsKey(key.getClass());
22 static void serialize(AbstractBoundingBox boundingBox, PayloadBuilder builder) {
23 BiConsumer<AbstractBoundingBox, PayloadBuilder> serializer = serializers.get(boundingBox.getClass());
24 if (serializer == null) return;
26 serializer.accept(boundingBox, builder);
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);
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());
47 private static void serializeMobSpawner(BoundingBoxMobSpawner boundingBox, PayloadBuilder builder) {
48 builder.writeChar('M')
49 .writeCoords(boundingBox.getCoords());