Ensures chunk data to be synced (i guess)

This commit is contained in:
Sotr
2018-07-26 00:36:05 +08:00
parent 6de709c4c6
commit 5c03cad4f2
2 changed files with 88 additions and 3 deletions

View File

@@ -0,0 +1,85 @@
package com.destroystokyo.paper.antixray;
import io.netty.buffer.ByteBuf;
import net.minecraft.server.Chunk;
import net.minecraft.server.DataPalette;
import net.minecraft.server.IBlockData;
import net.minecraft.server.PacketPlayOutMapChunk;
/**
* Akarin Changes Note
* 1) byte[] -> ByteBuf (compatibility)
*/
public class PacketPlayOutMapChunkInfo {
private final PacketPlayOutMapChunk packetPlayOutMapChunk;
private final Chunk chunk;
private final int chunkSectionSelector;
private ByteBuf data; // Akarin - byte[] -> ByteBuf
private final int[] bitsPerValue = new int[16];
private final DataPalette[] dataPalettes = new DataPalette[16];
private final int[] dataBitsIndexes = new int[16];
private final IBlockData[][] predefinedBlockData = new IBlockData[16][];
public PacketPlayOutMapChunkInfo(PacketPlayOutMapChunk packetPlayOutMapChunk, Chunk chunk, int chunkSectionSelector) {
this.packetPlayOutMapChunk = packetPlayOutMapChunk;
this.chunk = chunk;
this.chunkSectionSelector = chunkSectionSelector;
}
public PacketPlayOutMapChunk getPacketPlayOutMapChunk() {
return packetPlayOutMapChunk;
}
public Chunk getChunk() {
return chunk;
}
public int getChunkSectionSelector() {
return chunkSectionSelector;
}
public byte[] getData() {
return data.array(); // Akarin
}
public void setData(ByteBuf data) { // Akarin - byte[] -> ByteBuf
this.data = data;
}
public int getBitsPerValue(int chunkSectionIndex) {
return bitsPerValue[chunkSectionIndex];
}
public void setBitsPerValue(int chunkSectionIndex, int bitsPerValue) {
this.bitsPerValue[chunkSectionIndex] = bitsPerValue;
}
public DataPalette getDataPalette(int chunkSectionIndex) {
return dataPalettes[chunkSectionIndex];
}
public void setDataPalette(int chunkSectionIndex, DataPalette dataPalette) {
dataPalettes[chunkSectionIndex] = dataPalette;
}
public int getDataBitsIndex(int chunkSectionIndex) {
return dataBitsIndexes[chunkSectionIndex];
}
public void setDataBitsIndex(int chunkSectionIndex, int dataBitsIndex) {
dataBitsIndexes[chunkSectionIndex] = dataBitsIndex;
}
public IBlockData[] getPredefinedBlockData(int chunkSectionIndex) {
return predefinedBlockData[chunkSectionIndex];
}
public void setPredefinedBlockData(int chunkSectionIndex, IBlockData[] predefinedBlockData) {
this.predefinedBlockData[chunkSectionIndex] = predefinedBlockData;
}
public boolean isWritten(int chunkSectionIndex) {
return bitsPerValue[chunkSectionIndex] != 0;
}
}

View File

@@ -21,7 +21,7 @@ public class PacketPlayOutMapChunk implements Packet<PacketListenerPlayOut> {
private int a; private int a;
private int b; private int b;
private int c; private int c;
private ByteBuf d; // Akarin private ByteBuf d; // Akarin - byte[] -> ByteBuf
private List<NBTTagCompound> e; private List<NBTTagCompound> e;
private boolean f; private boolean f;
private volatile boolean ready = false; // Paper - Async-Anti-Xray - Ready flag for the network manager private volatile boolean ready = false; // Paper - Async-Anti-Xray - Ready flag for the network manager
@@ -43,7 +43,7 @@ public class PacketPlayOutMapChunk implements Packet<PacketListenerPlayOut> {
// Paper start - Anti-Xray - Add chunk packet info // Paper start - Anti-Xray - Add chunk packet info
if (packetPlayOutMapChunkInfo != null) { if (packetPlayOutMapChunkInfo != null) {
packetPlayOutMapChunkInfo.setData(this.d.array()); // Akarin packetPlayOutMapChunkInfo.setData(this.d);
} }
// Paper end // Paper end
@@ -106,7 +106,7 @@ public class PacketPlayOutMapChunk implements Packet<PacketListenerPlayOut> {
packetdataserializer.writeBoolean(this.f); packetdataserializer.writeBoolean(this.f);
packetdataserializer.d(this.c); packetdataserializer.d(this.c);
packetdataserializer.d(this.d.array().length); // Akarin packetdataserializer.d(this.d.array().length); // Akarin
packetdataserializer.writeBytes(this.d); packetdataserializer.writeBytes(this.d.array());
packetdataserializer.d(this.e.size()); packetdataserializer.d(this.e.size());
Iterator iterator = this.e.iterator(); Iterator iterator = this.e.iterator();