SteamWar/FightSystem
Archiviert
13
1

Working full chunk techhider version without debug output

Signed-off-by: Lixfel <agga-games@gmx.de>
Dieser Commit ist enthalten in:
Lixfel 2020-04-15 16:32:49 +02:00
Ursprung 6a4c080b5d
Commit d8dc0cd6b0

Datei anzeigen

@ -35,6 +35,9 @@ public class TechHider_15 {
}
static void chunkHider(){
/*
* Bevor editing this function read and understand: https://wiki.vg/Chunk_Format
* */
ProtocolLibrary.getProtocolManager().getAsynchronousManager().registerAsyncHandler(new PacketAdapter(IFightSystem.getPlugin(), PacketType.Play.Server.MAP_CHUNK) {
@Override
public void onPacketSending(PacketEvent e) {
@ -114,12 +117,15 @@ public class TechHider_15 {
}
i += actPaletteLength;
}
//We modify only the chunk palette for performance reasons
int dataArrayLength = ITechHider.readVarInt(data, i);
int dataArrayLengthLength = ITechHider.readVarIntLength(data, i);
buffer.writeBytes(data, i, dataArrayLength * 8 + dataArrayLengthLength);
i += dataArrayLengthLength;
i += dataArrayLength * 8;
}else{
//Full Chunk/no palette, so the chunk has to be crawled through
int dataArrayLength = ITechHider.readVarInt(data, i);
int dataArrayLengthLength = ITechHider.readVarIntLength(data, i);
buffer.writeBytes(data, i, dataArrayLengthLength);
@ -128,8 +134,6 @@ public class TechHider_15 {
ByteBuf chunkData = UnpooledByteBufAllocator.DEFAULT.directBuffer(dataArrayLength * 8);
chunkData.writeBytes(data, i, dataArrayLength * 8);
int arrayEnd = dataArrayLength * 8 + i;
int bitsOver = 0; // Anzahl an Bits, die aus dem letzten Durchlauf noch über sind
int lastBits = 0; // Die letzten Bits aus dem vorigen Durchlauf
Bukkit.broadcastMessage("Full Chunk!");
@ -147,24 +151,21 @@ public class TechHider_15 {
if(currentPos > 50){ //64 - 14, Prüfen auf Ende des Longs
int offset = 14 - (currentPos - 50);
if(arrayEnd <= i+15)
System.out.println("Array Overflow!!!! i: " + i + " currentPos:" + currentPos + " bitsOver:" + bitsOver + " lastBits:" + lastBits);
blockId |= (data[i+14] << (offset + 8) | data[i+15] << offset) & 0x3FFF;
}
if(Config.HiddenBlocks.contains(blockId))
blockId = Config.ObfuscateWith;
if(blockId > 11336)
System.out.println("WTF? blockId: " + blockId);
//TODO: Fix last edge cases of Full Chunk techhider
//if(blockId > 11336) Should not occur, but occurs
result <<= 14;
result |= blockId;
currentPos -= 14;
}
if(currentPos > -14){ //Überprüfen der ersten Bits
if(currentPos > -14){ // Check the first bits of the chunk
int blockId = ((int)values << -currentPos | lastBits) & 0x3FFF;
if(Config.HiddenBlocks.contains(blockId))
blockId = Config.ObfuscateWith;
@ -183,9 +184,7 @@ public class TechHider_15 {
}
numChunkSections--;
}
if(data.length - i != 0)
Bukkit.getLogger().log(Level.WARNING, "There should be no more data. i: " + i + " data.length: " + data.length + " data[i]:" + data[i]);
buffer.writeBytes(data, i, data.length - i);
buffer.writeBytes(data, i, data.length - i); // MC appends a 0 byte at the end if there is a full chunk, idk why
if(changed){
data = new byte[buffer.readableBytes()];