]> git.lizzy.rs Git - BoundingBoxOutlineReloaded.git/blobdiff - src/main/java/com/irtimaled/bbor/common/messages/BoundingBoxSerializer.java
Upgrade to 1.14.2
[BoundingBoxOutlineReloaded.git] / src / main / java / com / irtimaled / bbor / common / messages / BoundingBoxSerializer.java
index c94b77139129243c0302c98f6ca6a474054ceae9..f8498381f10765fa0ca1a6cc75c5638ef6c91abe 100644 (file)
@@ -1,61 +1,34 @@
 package com.irtimaled.bbor.common.messages;
 
-import com.irtimaled.bbor.common.models.BoundingBox;
-import com.irtimaled.bbor.common.models.BoundingBoxMobSpawner;
-import com.irtimaled.bbor.common.models.BoundingBoxStructure;
-import com.irtimaled.bbor.common.models.BoundingBoxVillage;
-import net.minecraft.network.PacketBuffer;
-import net.minecraft.util.math.BlockPos;
+import com.irtimaled.bbor.common.models.AbstractBoundingBox;
+import com.irtimaled.bbor.common.models.BoundingBoxCuboid;
 
-import java.awt.*;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.function.BiConsumer;
 
 class BoundingBoxSerializer {
-    static void serialize(BoundingBox boundingBox, PacketBuffer buf) {
-        if (boundingBox instanceof BoundingBoxVillage) {
-            serializeVillage((BoundingBoxVillage) boundingBox, buf);
-        }
-        if (boundingBox instanceof BoundingBoxStructure) {
-            serializeStructure((BoundingBoxStructure) boundingBox, buf);
-        }
-        if (boundingBox instanceof BoundingBoxMobSpawner) {
-            serializeMobSpawner((BoundingBoxMobSpawner) boundingBox, buf);
-        }
-    }
-
-    private static void serializeVillage(BoundingBoxVillage boundingBox, PacketBuffer buf) {
-        buf.writeChar('V');
-        serializeBlockPos(boundingBox.getCenter(), buf);
-        buf.writeVarInt(boundingBox.getRadius());
-        buf.writeBoolean(boundingBox.getSpawnsIronGolems());
-        serializeColor(boundingBox.getColor(), buf);
-        for (BlockPos door : boundingBox.getDoors()) {
-            serializeBlockPos(door, buf);
-        }
-    }
+    private static final Map<Class, BiConsumer<AbstractBoundingBox, PayloadBuilder>> serializers = new HashMap<>();
 
-    private static void serializeStructure(BoundingBoxStructure boundingBox, PacketBuffer buf) {
-        buf.writeChar('S');
-        buf.writeInt(boundingBox.getTypeName().hashCode());
-        serializeCuboid(boundingBox, buf);
+    static {
+        serializers.put(BoundingBoxCuboid.class, (bb, pb) -> serializeStructure((BoundingBoxCuboid)bb, pb));
     }
 
-    private static void serializeMobSpawner(BoundingBoxMobSpawner boundingBox, PacketBuffer buf) {
-        buf.writeChar('M');
-        serializeBlockPos(boundingBox.getCenter(), buf);
+    static boolean canSerialize(AbstractBoundingBox key) {
+        return serializers.containsKey(key.getClass());
     }
 
-    private static void serializeColor(Color color, PacketBuffer buf) {
-        buf.writeVarInt(color.getRGB());
-    }
+    static void serialize(AbstractBoundingBox boundingBox, PayloadBuilder builder) {
+        BiConsumer<AbstractBoundingBox, PayloadBuilder> serializer = serializers.get(boundingBox.getClass());
+        if (serializer == null) return;
 
-    private static void serializeCuboid(BoundingBox boundingBox, PacketBuffer buf) {
-        serializeBlockPos(boundingBox.getMinBlockPos(), buf);
-        serializeBlockPos(boundingBox.getMaxBlockPos(), buf);
+        serializer.accept(boundingBox, builder);
     }
 
-    private static void serializeBlockPos(BlockPos blockPos, PacketBuffer buf) {
-        buf.writeVarInt(blockPos.getX());
-        buf.writeVarInt(blockPos.getY());
-        buf.writeVarInt(blockPos.getZ());
+    private static void serializeStructure(BoundingBoxCuboid boundingBox, PayloadBuilder builder) {
+        builder.writeChar('S')
+                .writeInt(boundingBox.getType().hashCode())
+                .writeCoords(boundingBox.getMinCoords())
+                .writeCoords(boundingBox.getMaxCoords());
     }
 }