12
0

Block precise TechHider (preparation for block HullHider) #257

Zusammengeführt
Lixfel hat 3 Commits von hullTechHider nach master 2024-03-13 17:12:55 +01:00 zusammengeführt
4 geänderte Dateien mit 13 neuen und 8 gelöschten Zeilen
Nur Änderungen aus Commit de43c08316 werden angezeigt - Alle Commits anzeigen

Datei anzeigen

@ -27,7 +27,7 @@ import java.util.Set;
public class ChunkHider14 extends ChunkHider9 { public class ChunkHider14 extends ChunkHider9 {
@Override @Override
protected void dataHider(PosEvaluator locationEvaluator, int obfuscationTarget, Set<Integer> obfuscate, ByteBuf in, ByteBuf out, boolean skip) { protected void dataHider(PosEvaluator locationEvaluator, int obfuscationTarget, Set<Integer> obfuscate, ByteBuf in, ByteBuf out, boolean skip, boolean blockPrecise) {
out.writeShort(in.readShort()); // Block count out.writeShort(in.readShort()); // Block count
byte bitsPerBlock = in.readByte(); byte bitsPerBlock = in.readByte();
out.writeByte(bitsPerBlock); out.writeByte(bitsPerBlock);
@ -37,6 +37,6 @@ public class ChunkHider14 extends ChunkHider9 {
obfuscate = Collections.emptySet(); obfuscate = Collections.emptySet();
} }
processDataArray(locationEvaluator, obfuscationTarget, obfuscate, in, out, bitsPerBlock, skip); processDataArray(locationEvaluator, obfuscationTarget, obfuscate, in, out, bitsPerBlock, skip || (!blockPrecise && bitsPerBlock < 9));
} }
} }

Datei anzeigen

@ -73,7 +73,8 @@ public class ChunkHider18 implements ChunkHider {
int zOffset = 16*chunkZ; int zOffset = 16*chunkZ;
for(int yOffset = p.getWorld().getMinHeight(); yOffset < p.getWorld().getMaxHeight(); yOffset += 16) { for(int yOffset = p.getWorld().getMinHeight(); yOffset < p.getWorld().getMaxHeight(); yOffset += 16) {
int finalYOffset = yOffset; int finalYOffset = yOffset;
dataHider((x, y, z) -> locationEvaluator.check(p, x+xOffset, y+finalYOffset, z+zOffset), obfuscationTarget, obfuscate, in, out, locationEvaluator.skipChunkSection(p, chunkX, yOffset/16, chunkZ)); int chunkY = yOffset/16;
dataHider((x, y, z) -> locationEvaluator.check(p, x+xOffset, y+finalYOffset, z+zOffset), obfuscationTarget, obfuscate, in, out, locationEvaluator.skipChunkSection(p, chunkX, chunkY, chunkZ), locationEvaluator.blockPrecise(p, chunkX, chunkY, chunkZ));
} }
out.writeBytes(in); // MC appends a 0 byte at the end if there is a full chunk, idk why out.writeBytes(in); // MC appends a 0 byte at the end if there is a full chunk, idk why
@ -95,7 +96,7 @@ public class ChunkHider18 implements ChunkHider {
return !hiddenBlockEntities.contains((String) getName.invoke(getKey.invoke(tileEntityTypes, entityType.get(tile)))); return !hiddenBlockEntities.contains((String) getName.invoke(getKey.invoke(tileEntityTypes, entityType.get(tile))));
} }
private void dataHider(PosEvaluator locationEvaluator, int obfuscationTarget, Set<Integer> obfuscate, ByteBuf in, ByteBuf out, boolean skip) { private void dataHider(PosEvaluator locationEvaluator, int obfuscationTarget, Set<Integer> obfuscate, ByteBuf in, ByteBuf out, boolean skip, boolean blockPrecise) {
out.writeShort(in.readShort()); // Block count out.writeShort(in.readShort()); // Block count
containerWalker(in, out, 15, obfuscationTarget, skip ? Collections.emptySet() : obfuscate, (paletteTarget, dataArrayLength, bitsPerBlock) -> { containerWalker(in, out, 15, obfuscationTarget, skip ? Collections.emptySet() : obfuscate, (paletteTarget, dataArrayLength, bitsPerBlock) -> {
@ -107,7 +108,7 @@ public class ChunkHider18 implements ChunkHider {
palettedObfuscate = obfuscate; palettedObfuscate = obfuscate;
} }
if(skip || dataArrayLength == 0) { if(skip || dataArrayLength == 0 || (!blockPrecise && bitsPerBlock < 15)) {
out.writeBytes(in, dataArrayLength*8); out.writeBytes(in, dataArrayLength*8);
return; return;
} }

Datei anzeigen

@ -67,7 +67,7 @@ public class ChunkHider9 extends ChunkHider8 {
continue; continue;
int yOffset = 16*chunkY; int yOffset = 16*chunkY;
dataHider((x, y, z) -> locationEvaluator.check(p, x+xOffset, y+yOffset, z+zOffset), obfuscationTarget, obfuscate, in, out, locationEvaluator.skipChunkSection(p, chunkX, chunkY, chunkZ)); dataHider((x, y, z) -> locationEvaluator.check(p, x+xOffset, y+yOffset, z+zOffset), obfuscationTarget, obfuscate, in, out, locationEvaluator.skipChunkSection(p, chunkX, chunkY, chunkZ), locationEvaluator.blockPrecise(p, chunkX, chunkY, chunkZ));
} }
byte[] data = new byte[out.readableBytes()]; byte[] data = new byte[out.readableBytes()];
out.readBytes(data); out.readBytes(data);
@ -77,7 +77,7 @@ public class ChunkHider9 extends ChunkHider8 {
}; };
} }
protected void dataHider(PosEvaluator locationEvaluator, int obfuscationTarget, Set<Integer> obfuscate, ByteBuf in, ByteBuf out, boolean skip) { protected void dataHider(PosEvaluator locationEvaluator, int obfuscationTarget, Set<Integer> obfuscate, ByteBuf in, ByteBuf out, boolean skip, boolean blockPrecise) {
byte bitsPerBlock = in.readByte(); byte bitsPerBlock = in.readByte();
out.writeByte(bitsPerBlock); out.writeByte(bitsPerBlock);
@ -87,7 +87,7 @@ public class ChunkHider9 extends ChunkHider8 {
obfuscate = Collections.emptySet(); obfuscate = Collections.emptySet();
} }
processDataArray(locationEvaluator, obfuscationTarget, obfuscate, in, out, bitsPerBlock, skip); processDataArray(locationEvaluator, obfuscationTarget, obfuscate, in, out, bitsPerBlock, skip || (!blockPrecise && bitsPerBlock < 9));
out.writeBytes(in, 4096); //Skylight (Not in Nether/End!!!) 2048 + Blocklight 2048 out.writeBytes(in, 4096); //Skylight (Not in Nether/End!!!) 2048 + Blocklight 2048
} }

Datei anzeigen

@ -160,5 +160,9 @@ public class TechHider {
default State checkBlockPos(Player player, Object pos) { default State checkBlockPos(Player player, Object pos) {
return check(player, blockPositionX.get(pos), blockPositionY.get(pos), blockPositionZ.get(pos)); return check(player, blockPositionX.get(pos), blockPositionY.get(pos), blockPositionZ.get(pos));
} }
default boolean blockPrecise(Player player, int x, int y, int z) {
return false;
}
} }
} }