Skip to content

Commit f73c20e

Browse files
committed
Fixes data sync with anti-xray
1 parent 8e6000c commit f73c20e

File tree

4 files changed

+164
-8
lines changed

4 files changed

+164
-8
lines changed
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package com.destroystokyo.paper.antixray;
2+
3+
import io.netty.buffer.ByteBuf;
4+
5+
public class DataBitsReader {
6+
7+
private ByteBuf dataBits; // Akarin
8+
private int bitsPerValue;
9+
private int mask;
10+
private int longInDataBitsIndex;
11+
private int bitInLongIndex;
12+
private long current;
13+
14+
public void setDataBits(ByteBuf dataBits) { // Akarin
15+
this.dataBits = dataBits;
16+
}
17+
18+
public void setBitsPerValue(int bitsPerValue) {
19+
this.bitsPerValue = bitsPerValue;
20+
mask = (1 << bitsPerValue) - 1;
21+
}
22+
23+
public void setIndex(int index) {
24+
this.longInDataBitsIndex = index;
25+
bitInLongIndex = 0;
26+
init();
27+
}
28+
29+
private void init() {
30+
if (dataBits.capacity() > longInDataBitsIndex + 7) { // Akarin
31+
// Akarin start
32+
dataBits.getLong(longInDataBitsIndex);
33+
/*
34+
current = ((((long) dataBits[longInDataBitsIndex]) << 56)
35+
| (((long) dataBits[longInDataBitsIndex + 1] & 0xff) << 48)
36+
| (((long) dataBits[longInDataBitsIndex + 2] & 0xff) << 40)
37+
| (((long) dataBits[longInDataBitsIndex + 3] & 0xff) << 32)
38+
| (((long) dataBits[longInDataBitsIndex + 4] & 0xff) << 24)
39+
| (((long) dataBits[longInDataBitsIndex + 5] & 0xff) << 16)
40+
| (((long) dataBits[longInDataBitsIndex + 6] & 0xff) << 8)
41+
| (((long) dataBits[longInDataBitsIndex + 7] & 0xff)));
42+
*/ // Akarin end
43+
}
44+
}
45+
46+
public int read() {
47+
int value = (int) (current >>> bitInLongIndex) & mask;
48+
bitInLongIndex += bitsPerValue;
49+
50+
if (bitInLongIndex > 63) {
51+
bitInLongIndex -= 64;
52+
longInDataBitsIndex += 8;
53+
init();
54+
55+
if (bitInLongIndex > 0) {
56+
value |= current << bitsPerValue - bitInLongIndex & mask;
57+
}
58+
}
59+
60+
return value;
61+
}
62+
}
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
package com.destroystokyo.paper.antixray;
2+
3+
import io.netty.buffer.ByteBuf;
4+
5+
public class DataBitsWriter {
6+
7+
private ByteBuf dataBits; // Akarin
8+
private int bitsPerValue;
9+
private long mask;
10+
private int longInDataBitsIndex;
11+
private int bitInLongIndex;
12+
private long current;
13+
private boolean dirty;
14+
15+
public void setDataBits(ByteBuf dataBits) { // Akarin
16+
this.dataBits = dataBits;
17+
}
18+
19+
public void setBitsPerValue(int bitsPerValue) {
20+
this.bitsPerValue = bitsPerValue;
21+
mask = (1 << bitsPerValue) - 1;
22+
}
23+
24+
public void setIndex(int index) {
25+
this.longInDataBitsIndex = index;
26+
bitInLongIndex = 0;
27+
init();
28+
}
29+
30+
private void init() {
31+
if (dataBits.capacity() > longInDataBitsIndex + 7) { // Akarin
32+
// Akarin start
33+
current = dataBits.getLong(longInDataBitsIndex);
34+
/*
35+
current = ((((long) dataBits[longInDataBitsIndex]) << 56)
36+
| (((long) dataBits[longInDataBitsIndex + 1] & 0xff) << 48)
37+
| (((long) dataBits[longInDataBitsIndex + 2] & 0xff) << 40)
38+
| (((long) dataBits[longInDataBitsIndex + 3] & 0xff) << 32)
39+
| (((long) dataBits[longInDataBitsIndex + 4] & 0xff) << 24)
40+
| (((long) dataBits[longInDataBitsIndex + 5] & 0xff) << 16)
41+
| (((long) dataBits[longInDataBitsIndex + 6] & 0xff) << 8)
42+
| (((long) dataBits[longInDataBitsIndex + 7] & 0xff)));
43+
*/ // Akarin end
44+
}
45+
46+
dirty = false;
47+
}
48+
49+
public void finish() {
50+
if (dirty && dataBits.capacity() > longInDataBitsIndex + 7) { // Akarin
51+
// Akarin start
52+
dataBits.setLong(longInDataBitsIndex, current);
53+
/*
54+
dataBits[longInDataBitsIndex] = (byte) (current >> 56 & 0xff);
55+
dataBits[longInDataBitsIndex + 1] = (byte) (current >> 48 & 0xff);
56+
dataBits[longInDataBitsIndex + 2] = (byte) (current >> 40 & 0xff);
57+
dataBits[longInDataBitsIndex + 3] = (byte) (current >> 32 & 0xff);
58+
dataBits[longInDataBitsIndex + 4] = (byte) (current >> 24 & 0xff);
59+
dataBits[longInDataBitsIndex + 5] = (byte) (current >> 16 & 0xff);
60+
dataBits[longInDataBitsIndex + 6] = (byte) (current >> 8 & 0xff);
61+
dataBits[longInDataBitsIndex + 7] = (byte) (current & 0xff);
62+
*/ // Akarin end
63+
}
64+
}
65+
66+
public void write(int value) {
67+
current = current & ~(mask << bitInLongIndex) | (value & mask) << bitInLongIndex;
68+
dirty = true;
69+
bitInLongIndex += bitsPerValue;
70+
71+
if (bitInLongIndex > 63) {
72+
finish();
73+
bitInLongIndex -= 64;
74+
longInDataBitsIndex += 8;
75+
init();
76+
77+
if (bitInLongIndex > 0) {
78+
current = current & ~(mask >>> bitsPerValue - bitInLongIndex) | (value & mask) >>> bitsPerValue - bitInLongIndex;
79+
dirty = true;
80+
}
81+
}
82+
}
83+
84+
public void skip() {
85+
bitInLongIndex += bitsPerValue;
86+
87+
if (bitInLongIndex > 63) {
88+
finish();
89+
bitInLongIndex -= 64;
90+
longInDataBitsIndex += 8;
91+
init();
92+
}
93+
}
94+
}

sources/src/main/java/com/destroystokyo/paper/antixray/PacketPlayOutMapChunkInfo.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public class PacketPlayOutMapChunkInfo {
1515
private final PacketPlayOutMapChunk packetPlayOutMapChunk;
1616
private final Chunk chunk;
1717
private final int chunkSectionSelector;
18-
private ByteBuf data; // Akarin - byte[] -> ByteBuf
18+
private ByteBuf data; // Akarin
1919
private final int[] bitsPerValue = new int[16];
2020
private final DataPalette[] dataPalettes = new DataPalette[16];
2121
private final int[] dataBitsIndexes = new int[16];
@@ -39,11 +39,11 @@ public int getChunkSectionSelector() {
3939
return chunkSectionSelector;
4040
}
4141

42-
public byte[] getData() {
43-
return data.array(); // Akarin
42+
public ByteBuf getData() { // Akarin
43+
return data;
4444
}
4545

46-
public void setData(ByteBuf data) { // Akarin - byte[] -> ByteBuf
46+
public void setData(ByteBuf data) { // Akarin
4747
this.data = data;
4848
}
4949

sources/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ public void b(PacketDataSerializer packetdataserializer) throws IOException {
105105
packetdataserializer.writeInt(this.b);
106106
packetdataserializer.writeBoolean(this.f);
107107
packetdataserializer.d(this.c);
108-
packetdataserializer.d(this.d.array().length); // Akarin
108+
packetdataserializer.d(this.d.capacity()); // Akarin
109109
packetdataserializer.writeBytes(this.d.array()); // Akarin
110110
packetdataserializer.d(this.e.size());
111111
Iterator iterator = this.e.iterator();
@@ -122,9 +122,9 @@ public void a(PacketListenerPlayOut packetlistenerplayout) {
122122
packetlistenerplayout.a(this);
123123
}
124124

125-
private ByteBuf allocateBuffer(int expectedCapacity) { return g(expectedCapacity); } // Akarin - OBFHELPER
126-
private ByteBuf g(int expectedCapacity) { // Akarin - added argument
127-
ByteBuf bytebuf = Unpooled.buffer(expectedCapacity); // Akarin
125+
private ByteBuf g() { return allocateBuffer(-1); } // Akarin
126+
private ByteBuf allocateBuffer(int expectedCapacity) { // Akarin - added argument
127+
ByteBuf bytebuf = expectedCapacity == -1 ? Unpooled.buffer() : Unpooled.buffer(expectedCapacity); // Akarin
128128

129129
bytebuf.writerIndex(0);
130130
return bytebuf;

0 commit comments

Comments
 (0)