TechHider refactoring, simple Blocktagging

This commit is contained in:
Lixfel
2024-12-21 16:53:49 +01:00
parent 1b47700c19
commit 793fc31b5c
16 changed files with 269 additions and 208 deletions
@@ -19,24 +19,26 @@
package de.steamwar.techhider;
import io.netty.buffer.ByteBuf;
import java.util.Collections;
import java.util.Set;
public class ChunkHider14 extends ChunkHider9 {
@Override
protected void dataHider(PosEvaluator locationEvaluator, int obfuscationTarget, Set<Integer> obfuscate, ByteBuf in, ByteBuf out, boolean skip, boolean blockPrecise) {
out.writeShort(in.readShort()); // Block count
byte bitsPerBlock = in.readByte();
out.writeByte(bitsPerBlock);
protected void dataHider(SectionHider section) {
section.copyBlockCount();
section.copyBitsPerBlock();
if(bitsPerBlock < 9) {
obfuscationTarget = ChunkHider.processPalette(obfuscationTarget, obfuscate, in, out);
obfuscate = Collections.emptySet();
boolean hasPalette = section.getBitsPerBlock() < 9;
if(hasPalette)
section.processPalette();
if(section.isSkipSection()) {
section.skipDataArray();
} else {
if(hasPalette && !section.blockPrecise()) {
section.skipDataArray();
return;
}
processDataArray(section);
}
processDataArray(locationEvaluator, obfuscationTarget, obfuscate, in, out, bitsPerBlock, skip || (!blockPrecise && bitsPerBlock < 9));
}
}
@@ -20,31 +20,34 @@
package de.steamwar.techhider;
import com.comphenix.tinyprotocol.Reflection;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import java.util.Set;
import java.util.function.BiFunction;
import java.util.function.UnaryOperator;
public class ProtocolWrapper14 extends ProtocolWrapper8 {
@Override
public BiFunction<Player, Object, Object> blockBreakHiderGenerator(Class<?> blockBreakPacket, Object obfuscationTarget, Set<Material> obfuscate, TechHider.LocationEvaluator locationEvaluator) {
public BiFunction<Player, Object, Object> blockBreakHiderGenerator(Class<?> blockBreakPacket, TechHider techHider) {
UnaryOperator<Object> blockBreakCloner = ProtocolUtils.shallowCloneGenerator(blockBreakPacket);
Reflection.FieldAccessor<?> blockBreakPosition = Reflection.getField(blockBreakPacket, TechHider.blockPosition, 0);
Reflection.FieldAccessor<?> blockBreakBlockData = Reflection.getField(blockBreakPacket, TechHider.iBlockData, 0);
return (p, packet) -> {
switch (locationEvaluator.checkBlockPos(p, blockBreakPosition.get(packet))) {
switch (techHider.getLocationEvaluator().checkBlockPos(p, blockBreakPosition.get(packet))) {
case SKIP:
return packet;
case CHECK:
if(!TechHider.iBlockDataHidden(obfuscate, blockBreakBlockData.get(packet)))
if(!techHider.iBlockDataHidden(blockBreakBlockData.get(packet)))
return packet;
case HIDE:
packet = blockBreakCloner.apply(packet);
blockBreakBlockData.set(packet, techHider.getObfuscationTarget());
return packet;
case HIDE_AIR:
default:
packet = blockBreakCloner.apply(packet);
blockBreakBlockData.set(packet, obfuscationTarget);
blockBreakBlockData.set(packet, TechHider.AIR);
return packet;
}
};