Skip to content

Commit 390e450

Browse files
committed
add byte arr, long arr, big int and big decimal sync values
1 parent 6ce2bf5 commit 390e450

File tree

5 files changed

+154
-1
lines changed

5 files changed

+154
-1
lines changed

src/main/java/com/cleanroommc/modularui/utils/serialization/ByteBufAdapters.java

Lines changed: 87 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
import org.jetbrains.annotations.Nullable;
1313

1414
import java.io.IOException;
15+
import java.math.BigDecimal;
16+
import java.math.BigInteger;
1517

1618
public class ByteBufAdapters {
1719

@@ -22,9 +24,93 @@ public class ByteBufAdapters {
2224
public static final IByteBufAdapter<ByteBuf> BYTE_BUF = makeAdapter(NetworkUtils::readByteBuf, NetworkUtils::writeByteBuf, null);
2325
public static final IByteBufAdapter<PacketBuffer> PACKET_BUFFER = makeAdapter(NetworkUtils::readPacketBuffer, NetworkUtils::writeByteBuf, null);
2426

27+
public static final IByteBufAdapter<byte[]> BYTE_ARR = new IByteBufAdapter<>() {
28+
@Override
29+
public byte[] deserialize(PacketBuffer buffer) throws IOException {
30+
return buffer.readByteArray();
31+
}
32+
33+
@Override
34+
public void serialize(PacketBuffer buffer, byte[] u) throws IOException {
35+
buffer.writeBytes(u);
36+
}
37+
38+
@Override
39+
public boolean areEqual(byte @NotNull [] t1, byte @NotNull [] t2) {
40+
if (t1.length != t2.length) return false;
41+
for (int i = 0; i < t1.length; i++) {
42+
if (t1[i] != t2[i]) return false;
43+
}
44+
return true;
45+
}
46+
};
47+
48+
public static final IByteBufAdapter<long[]> LONG_ARR = new IByteBufAdapter<>() {
49+
@Override
50+
public long[] deserialize(PacketBuffer buffer) throws IOException {
51+
long[] u = new long[buffer.readVarInt()];
52+
for (int i = 0; i < u.length; i++) {
53+
u[i] = buffer.readLong();
54+
}
55+
return u;
56+
}
57+
58+
@Override
59+
public void serialize(PacketBuffer buffer, long[] u) throws IOException {
60+
buffer.writeVarInt(u.length);
61+
for (long i : u) {
62+
buffer.writeLong(i);
63+
}
64+
}
65+
66+
@Override
67+
public boolean areEqual(long @NotNull [] t1, long @NotNull [] t2) {
68+
if (t1.length != t2.length) return false;
69+
for (int i = 0; i < t1.length; i++) {
70+
if (t1[i] != t2[i]) return false;
71+
}
72+
return true;
73+
}
74+
};
75+
76+
public static final IByteBufAdapter<BigInteger> BIG_INT = new IByteBufAdapter<>() {
77+
@Override
78+
public BigInteger deserialize(PacketBuffer buffer) throws IOException {
79+
return new BigInteger(buffer.readByteArray());
80+
}
81+
82+
@Override
83+
public void serialize(PacketBuffer buffer, BigInteger u) throws IOException {
84+
buffer.writeBytes(u.toByteArray());
85+
}
86+
87+
@Override
88+
public boolean areEqual(@NotNull BigInteger t1, @NotNull BigInteger t2) {
89+
return t1.equals(t2);
90+
}
91+
};
92+
93+
public static final IByteBufAdapter<BigDecimal> BIG_DECIMAL = new IByteBufAdapter<>() {
94+
@Override
95+
public BigDecimal deserialize(PacketBuffer buffer) throws IOException {
96+
return new BigDecimal(new BigInteger(buffer.readByteArray()), buffer.readVarInt());
97+
}
98+
99+
@Override
100+
public void serialize(PacketBuffer buffer, BigDecimal u) throws IOException {
101+
buffer.writeBytes(u.unscaledValue().toByteArray());
102+
buffer.writeVarInt(u.scale());
103+
}
104+
105+
@Override
106+
public boolean areEqual(@NotNull BigDecimal t1, @NotNull BigDecimal t2) {
107+
return t1.equals(t2);
108+
}
109+
};
110+
25111
public static <T> IByteBufAdapter<T> makeAdapter(@NotNull IByteBufDeserializer<T> deserializer, @NotNull IByteBufSerializer<T> serializer, @Nullable IEquals<T> comparator) {
26112
final IEquals<T> tester = comparator != null ? comparator : IEquals.defaultTester();
27-
return new IByteBufAdapter<T>() {
113+
return new IByteBufAdapter<>() {
28114
@Override
29115
public T deserialize(PacketBuffer buffer) throws IOException {
30116
return deserializer.deserialize(buffer);
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.cleanroommc.modularui.value.sync;
2+
3+
import com.cleanroommc.modularui.utils.serialization.ByteBufAdapters;
4+
5+
import org.jetbrains.annotations.NotNull;
6+
import org.jetbrains.annotations.Nullable;
7+
8+
import java.math.BigDecimal;
9+
import java.math.BigInteger;
10+
import java.util.function.Consumer;
11+
import java.util.function.Supplier;
12+
13+
public class BigDecimalSyncValue extends GenericSyncValue<BigDecimal> {
14+
15+
public BigDecimalSyncValue(@NotNull Supplier<BigDecimal> getter, @Nullable Consumer<BigDecimal> setter) {
16+
super(getter, setter, ByteBufAdapters.BIG_DECIMAL, v -> new BigDecimal(v.unscaledValue(), v.scale()));
17+
}
18+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.cleanroommc.modularui.value.sync;
2+
3+
import com.cleanroommc.modularui.utils.serialization.ByteBufAdapters;
4+
5+
import org.jetbrains.annotations.NotNull;
6+
import org.jetbrains.annotations.Nullable;
7+
8+
import java.math.BigInteger;
9+
import java.util.function.Consumer;
10+
import java.util.function.Supplier;
11+
12+
public class BigIntSyncValue extends GenericSyncValue<BigInteger> {
13+
14+
public BigIntSyncValue(@NotNull Supplier<BigInteger> getter, @Nullable Consumer<BigInteger> setter) {
15+
super(getter, setter, ByteBufAdapters.BIG_INT, v -> new BigInteger(v.toByteArray()));
16+
}
17+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.cleanroommc.modularui.value.sync;
2+
3+
import com.cleanroommc.modularui.utils.serialization.ByteBufAdapters;
4+
5+
import org.jetbrains.annotations.NotNull;
6+
import org.jetbrains.annotations.Nullable;
7+
8+
import java.util.function.Consumer;
9+
import java.util.function.Supplier;
10+
11+
public class ByteArraySyncValue extends GenericSyncValue<byte[]> {
12+
13+
public ByteArraySyncValue(@NotNull Supplier<byte[]> getter, @Nullable Consumer<byte[]> setter) {
14+
super(getter, setter, ByteBufAdapters.BYTE_ARR, byte[]::clone);
15+
}
16+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.cleanroommc.modularui.value.sync;
2+
3+
import com.cleanroommc.modularui.utils.serialization.ByteBufAdapters;
4+
5+
import org.jetbrains.annotations.NotNull;
6+
import org.jetbrains.annotations.Nullable;
7+
8+
import java.util.function.Consumer;
9+
import java.util.function.Supplier;
10+
11+
public class LongArraySyncValue extends GenericSyncValue<long[]> {
12+
13+
public LongArraySyncValue(@NotNull Supplier<long[]> getter, @Nullable Consumer<long[]> setter) {
14+
super(getter, setter, ByteBufAdapters.LONG_ARR, long[]::clone);
15+
}
16+
}

0 commit comments

Comments
 (0)