1212import org .jetbrains .annotations .Nullable ;
1313
1414import java .io .IOException ;
15+ import java .math .BigDecimal ;
16+ import java .math .BigInteger ;
1517
1618public 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 );
0 commit comments