]> git.lizzy.rs Git - BoundingBoxOutlineReloaded.git/blob - src/main/java/com/irtimaled/bbor/common/messages/AddBoundingBox.java
Support older server versions
[BoundingBoxOutlineReloaded.git] / src / main / java / com / irtimaled / bbor / common / messages / AddBoundingBox.java
1 package com.irtimaled.bbor.common.messages;
2
3 import com.irtimaled.bbor.client.events.AddBoundingBoxReceived;
4 import com.irtimaled.bbor.common.models.AbstractBoundingBox;
5 import com.irtimaled.bbor.common.models.DimensionId;
6 import net.minecraft.world.dimension.DimensionType;
7
8 import java.util.HashSet;
9 import java.util.Set;
10
11 public class AddBoundingBox {
12     public static final String NAME = "bbor:add_bounding_box_v2";
13     public static final String LEGACY = "bbor:add_bounding_box";
14
15     public static PayloadBuilder getPayload(DimensionId dimensionId, AbstractBoundingBox key, Set<AbstractBoundingBox> boundingBoxes) {
16         if (!BoundingBoxSerializer.canSerialize(key)) return null;
17
18         PayloadBuilder builder = PayloadBuilder.clientBound(NAME)
19                 .writeDimensionId(dimensionId);
20         BoundingBoxSerializer.serialize(key, builder);
21         if (boundingBoxes != null && boundingBoxes.size() > 1) {
22             for (AbstractBoundingBox boundingBox : boundingBoxes) {
23                 BoundingBoxSerializer.serialize(boundingBox, builder);
24             }
25         }
26         return builder;
27     }
28
29     public static AddBoundingBoxReceived getEvent(PayloadReader reader, String name) {
30         DimensionId dimensionId = getDimensionId(reader, name);
31         AbstractBoundingBox key = BoundingBoxDeserializer.deserialize(reader);
32         if (key == null) return null;
33
34         Set<AbstractBoundingBox> boundingBoxes = new HashSet<>();
35         while (reader.isReadable()) {
36             AbstractBoundingBox boundingBox = BoundingBoxDeserializer.deserialize(reader);
37             boundingBoxes.add(boundingBox);
38         }
39         if (boundingBoxes.size() == 0)
40             boundingBoxes.add(key);
41         return new AddBoundingBoxReceived(dimensionId, key, boundingBoxes);
42     }
43
44     private static DimensionId getDimensionId(PayloadReader reader, String name) {
45         if (name.equals(NAME)) return reader.readDimensionId();
46
47         int dimensionRawId = reader.readVarInt();
48         DimensionType dimensionType = DimensionType.getById(dimensionRawId);
49         return DimensionId.from(dimensionType);
50     }
51 }