diff --git a/FightSystem_14/src/de/steamwar/techhider/BlockIds14.java b/FightSystem_14/src/de/steamwar/techhider/BlockIds14.java deleted file mode 100644 index 1a946ef..0000000 --- a/FightSystem_14/src/de/steamwar/techhider/BlockIds14.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - This file is a part of the SteamWar software. - - Copyright (C) 2021 SteamWar.de-Serverteam - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - */ - -package de.steamwar.techhider; - -import net.minecraft.server.v1_14_R1.*; -import org.bukkit.Material; - -import java.util.HashSet; -import java.util.Set; - -public class BlockIds14 implements BlockIds { - @Override - public int materialToId(Material material) { - return Block.getCombinedId(IRegistry.BLOCK.get(new MinecraftKey(material.name().toLowerCase())).getBlockData()); - } - - @Override - public Set materialToAllIds(Material material) { - Set ids = new HashSet<>(); - for(IBlockData data : IRegistry.BLOCK.get(new MinecraftKey(material.name().toLowerCase())).getStates().a()) { - ids.add(Block.getCombinedId(data)); - } - - if(material == Material.WATER){ - Fluid water = FluidTypes.WATER.a(false); - for(IBlockData data : Block.REGISTRY_ID){ - if(data.p() == water){ - ids.add(Block.getCombinedId(data)); - } - } - } - - return ids; - } -} diff --git a/FightSystem_14/src/de/steamwar/techhider/ChunkHider14.java b/FightSystem_14/src/de/steamwar/techhider/ChunkHider14.java deleted file mode 100644 index eae64df..0000000 --- a/FightSystem_14/src/de/steamwar/techhider/ChunkHider14.java +++ /dev/null @@ -1,141 +0,0 @@ -/* - This file is a part of the SteamWar software. - - Copyright (C) 2021 SteamWar.de-Serverteam - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - */ - -package de.steamwar.techhider; - -import io.netty.buffer.ByteBuf; -import io.netty.buffer.UnpooledByteBufAllocator; - -import java.nio.ByteBuffer; -import java.nio.LongBuffer; -import java.util.Set; - -public class ChunkHider14 extends ChunkHider9 { - - @Override - protected byte[] dataHider(int obfuscationTarget, Set obfuscate, byte[] data, Integer primaryBitMask) { - ByteBuf buffer = UnpooledByteBufAllocator.DEFAULT.directBuffer(data.length + 100); - int i = 0; - - while(primaryBitMask != 0){ - while((primaryBitMask & 1) == 0){ - primaryBitMask >>= 1; - } - - buffer.writeBytes(data, i, 2); // Block count - i += 2; - byte bitsPerBlock = data[i++]; - buffer.writeByte(bitsPerBlock); - - if(bitsPerBlock < 9){ - int paletteLength = ProtocolUtils.readVarInt(data, i); - int paletteLengthLength = ProtocolUtils.readVarIntLength(data, i); - buffer.writeBytes(data, i, paletteLengthLength); - i += paletteLengthLength; - for(int actPaletteId = 0; actPaletteId < paletteLength; actPaletteId++){ - int blockId = ProtocolUtils.readVarInt(data, i); - int actPaletteLength = ProtocolUtils.readVarIntLength(data, i); - - if(obfuscate.contains(blockId)){ - buffer.writeBytes(ProtocolUtils.writeVarInt(obfuscationTarget)); - }else{ - buffer.writeBytes(data, i, actPaletteLength); - } - i += actPaletteLength; - } - - //We modify only the chunk palette for performance reasons - int dataArrayLength = ProtocolUtils.readVarInt(data, i); - int dataArrayLengthLength = ProtocolUtils.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 = ProtocolUtils.readVarInt(data, i); - int dataArrayLengthLength = ProtocolUtils.readVarIntLength(data, i); - buffer.writeBytes(data, i, dataArrayLengthLength); - i += dataArrayLengthLength; - - ByteBuffer source = ByteBuffer.wrap(data, i, dataArrayLength * 8); - VariableValueArray values = new VariableValueArray(bitsPerBlock, dataArrayLength, source.asLongBuffer()); - - for(int pos = 0; pos < 4096; pos++){ - if(obfuscate.contains(values.get(pos))){ - values.set(pos, obfuscationTarget); - } - } - - for(long l : values.backing) - buffer.writeLong(l); - - i += dataArrayLength * 8; - } - - primaryBitMask >>= 1; - } - buffer.writeBytes(data, i, data.length - i); // MC appends a 0 byte at the end if there is a full chunk, idk why - - data = new byte[buffer.readableBytes()]; - buffer.readBytes(data); - return data; - } - - private static final class VariableValueArray { - private final long[] backing; - private final int bitsPerValue; - private final long valueMask; - - public VariableValueArray(int bitsPerEntry, int dataArrayLength, LongBuffer buffer) { - this.bitsPerValue = bitsPerEntry; - this.backing = new long[dataArrayLength]; - buffer.get(backing); - this.valueMask = (1L << this.bitsPerValue) - 1; - } - - public int get(int index) { - index *= bitsPerValue; - int i0 = index >> 6; - int i1 = index & 0x3f; - - long value = backing[i0] >>> i1; - - // The value is divided over two long values - if (i1 + bitsPerValue > 64) { - value |= backing[++i0] << 64 - i1; - } - - return (int) (value & valueMask); - } - - public void set(int index, int value) { - index *= bitsPerValue; - int i0 = index >> 6; - int i1 = index & 0x3f; - - backing[i0] = this.backing[i0] & ~(this.valueMask << i1) | (value & valueMask) << i1; - int i2 = i1 + bitsPerValue; - // The value is divided over two long values - if (i2 > 64) { - i0++; - backing[i0] = backing[i0] & -(1L << i2 - 64) | value >> 64 - i1; - } - } - } -} diff --git a/FightSystem_14/src/de/steamwar/techhider/ProtocolWrapper14.java b/FightSystem_14/src/de/steamwar/techhider/ProtocolWrapper14.java deleted file mode 100644 index bb52f52..0000000 --- a/FightSystem_14/src/de/steamwar/techhider/ProtocolWrapper14.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - This file is a part of the SteamWar software. - - Copyright (C) 2021 SteamWar.de-Serverteam - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - */ - -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 blockBreakHiderGenerator(Class blockBreakPacket, Object obfuscationTarget, Set obfuscate, TechHider.BypassEvaluator bypass) { - UnaryOperator 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) -> { - Object pos = blockBreakPosition.get(packet); - if(bypass.bypass(p, ProtocolUtils.posToChunk(TechHider.blockPositionX.get(pos)), ProtocolUtils.posToChunk(TechHider.blockPositionZ.get(pos)))) - return packet; - - if(ProtocolWrapper.impl.iBlockDataHidden(obfuscate, blockBreakBlockData.get(packet))){ - packet = blockBreakCloner.apply(packet); - blockBreakBlockData.set(packet, obfuscationTarget); - } - return packet; - }; - } -} diff --git a/FightSystem_15/src/de/steamwar/techhider/BlockIds15.java b/FightSystem_15/src/de/steamwar/techhider/BlockIds15.java deleted file mode 100644 index 15e7c4d..0000000 --- a/FightSystem_15/src/de/steamwar/techhider/BlockIds15.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - This file is a part of the SteamWar software. - - Copyright (C) 2021 SteamWar.de-Serverteam - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - */ - -package de.steamwar.techhider; - -import net.minecraft.server.v1_15_R1.*; -import org.bukkit.Material; - -import java.util.HashSet; -import java.util.Set; - -public class BlockIds15 implements BlockIds { - @Override - public int materialToId(Material material) { - return Block.getCombinedId(IRegistry.BLOCK.get(new MinecraftKey(material.name().toLowerCase())).getBlockData()); - } - - @Override - public Set materialToAllIds(Material material) { - Set ids = new HashSet<>(); - for(IBlockData data : IRegistry.BLOCK.get(new MinecraftKey(material.name().toLowerCase())).getStates().a()) { - ids.add(Block.getCombinedId(data)); - } - - if(material == Material.WATER){ - Fluid water = FluidTypes.WATER.a(false); - for(IBlockData data : Block.REGISTRY_ID){ - if(data.getFluid() == water){ - ids.add(Block.getCombinedId(data)); - } - } - } - - return ids; - } -} diff --git a/FightSystem_18/src/de/steamwar/techhider/BlockIds18.java b/FightSystem_18/src/de/steamwar/techhider/BlockIds18.java deleted file mode 100644 index 13cf029..0000000 --- a/FightSystem_18/src/de/steamwar/techhider/BlockIds18.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - This file is a part of the SteamWar software. - - Copyright (C) 2021 SteamWar.de-Serverteam - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - */ - -package de.steamwar.techhider; - -import net.minecraft.core.IRegistry; -import net.minecraft.resources.MinecraftKey; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.state.IBlockData; -import net.minecraft.world.level.material.Fluid; -import net.minecraft.world.level.material.FluidTypes; -import org.bukkit.Material; - -import java.util.HashSet; -import java.util.Set; - -public class BlockIds18 implements BlockIds { - @Override - public int materialToId(Material material) { - return Block.i(IRegistry.U.a(new MinecraftKey(material.name().toLowerCase())).n()); - } - - @Override - public Set materialToAllIds(Material material) { - Set ids = new HashSet<>(); - for(IBlockData data : IRegistry.U.a(new MinecraftKey(material.name().toLowerCase())).m().a()){ - ids.add(Block.i(data)); - } - - if(material == Material.WATER){ - Fluid water = FluidTypes.c.h(); - for(IBlockData data : Block.o) { - if(data.o() == water) { - ids.add(Block.i(data)); - } - } - } - - return ids; - } -} diff --git a/FightSystem_18/src/de/steamwar/techhider/ChunkHider18.java b/FightSystem_18/src/de/steamwar/techhider/ChunkHider18.java deleted file mode 100644 index 53dc78f..0000000 --- a/FightSystem_18/src/de/steamwar/techhider/ChunkHider18.java +++ /dev/null @@ -1,154 +0,0 @@ -/* - This file is a part of the SteamWar software. - - Copyright (C) 2021 SteamWar.de-Serverteam - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - */ - -package de.steamwar.techhider; - -import com.comphenix.tinyprotocol.Reflection; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.UnpooledByteBufAllocator; -import net.minecraft.core.IRegistry; -import net.minecraft.network.protocol.game.ClientboundLevelChunkPacketData; -import net.minecraft.network.protocol.game.ClientboundLevelChunkWithLightPacket; -import net.minecraft.util.SimpleBitStorage; -import net.minecraft.world.level.block.entity.TileEntityTypes; -import org.bukkit.World; -import org.bukkit.entity.Player; - -import java.nio.ByteBuffer; -import java.util.List; -import java.util.Set; -import java.util.function.BiFunction; -import java.util.function.IntFunction; -import java.util.function.UnaryOperator; -import java.util.stream.Collectors; - -public class ChunkHider18 implements ChunkHider { - @Override - public Class mapChunkPacket() { - return ClientboundLevelChunkWithLightPacket.class; - } - - private static final UnaryOperator chunkPacketCloner = ProtocolUtils.shallowCloneGenerator(ClientboundLevelChunkWithLightPacket.class); - private static final UnaryOperator chunkDataCloner = ProtocolUtils.shallowCloneGenerator(ClientboundLevelChunkPacketData.class); - - private static final Reflection.FieldAccessor chunkX = Reflection.getField(ClientboundLevelChunkWithLightPacket.class, int.class, 0); - private static final Reflection.FieldAccessor chunkZ = Reflection.getField(ClientboundLevelChunkWithLightPacket.class, int.class, 1); - private static final Reflection.FieldAccessor chunkData = Reflection.getField(ClientboundLevelChunkWithLightPacket.class, ClientboundLevelChunkPacketData.class, 0); - - private static final Reflection.FieldAccessor dataField = Reflection.getField(ClientboundLevelChunkPacketData.class, byte[].class, 0); - private static final Reflection.FieldAccessor tileEntities = Reflection.getField(ClientboundLevelChunkPacketData.class, List.class, 0); - public static final Class tileEntity = Reflection.getClass("net.minecraft.network.protocol.game.ClientboundLevelChunkPacketData$a"); - protected static final Reflection.FieldAccessor entityType = Reflection.getField(tileEntity, TileEntityTypes.class, 0); - - @Override - public BiFunction chunkHiderGenerator(TechHider.BypassEvaluator bypass, int obfuscationTarget, Set obfuscate, Set hiddenBlockEntities) { - return (p, packet) -> { - if(bypass.bypass(p, chunkX.get(packet), chunkZ.get(packet))) - return packet; - - packet = chunkPacketCloner.apply(packet); - Object data = chunkDataCloner.apply(chunkData.get(packet)); - - tileEntities.set(data, ((List)tileEntities.get(data)).stream().filter(te -> tileEntityVisible(hiddenBlockEntities, te)).collect(Collectors.toList())); - - World world = p.getWorld(); - int sections = (world.getMaxHeight() - world.getMinHeight()) / 16; - dataField.set(data, dataHider(obfuscationTarget, obfuscate, dataField.get(data), sections)); - - chunkData.set(packet, data); - return packet; - }; - } - - protected boolean tileEntityVisible(Set hiddenBlockEntities, Object tile) { - return !hiddenBlockEntities.contains(IRegistry.aa.b(entityType.get(tile)).a()); - } - - private byte[] dataHider(int obfuscationTarget, Set obfuscate, byte[] data, int sections) { - ByteBuf buffer = UnpooledByteBufAllocator.DEFAULT.directBuffer(data.length + 100); - int i = 0; - - while(sections-- > 0) { - buffer.writeBytes(data, i, 2); // Block count - i += 2; - - i = containerWalker(data, buffer, i, 15, blockId -> obfuscate.contains(blockId) ? obfuscationTarget : blockId, (curI, dataArrayLength, bitsPerBlock) -> { - if(bitsPerBlock < 15) { - buffer.writeBytes(data, curI, dataArrayLength * 8); - } else { - ByteBuffer source = ByteBuffer.wrap(data, curI, dataArrayLength * 8); - long[] array = new long[dataArrayLength]; - source.asLongBuffer().get(array); - SimpleBitStorage values = new SimpleBitStorage(bitsPerBlock, 4096, array); - - for (int pos = 0; pos < 4096; pos++) { - if (obfuscate.contains(values.a(pos))) { - values.b(pos, obfuscationTarget); - } - } - - for (long l : values.a()) - buffer.writeLong(l); - } - }); - i = containerWalker(data, buffer, i, 6, value -> value, (curI, dataArrayLength, bitsPerBlock) -> buffer.writeBytes(data, curI, dataArrayLength * 8)); - } - buffer.writeBytes(data, i, data.length - i); // MC appends a 0 byte at the end if there is a full chunk, idk why - - byte[] outdata = new byte[buffer.readableBytes()]; - buffer.readBytes(outdata); - return outdata; - } - - private int containerWalker(byte[] data, ByteBuf buffer, int i, int globalPalette, IntFunction palette, TriConsumer dataArray) { - byte bitsPerBlock = data[i++]; - buffer.writeByte(bitsPerBlock); - - if(bitsPerBlock == 0) { - int paletteValue = ProtocolUtils.readVarInt(data, i); - i += ProtocolUtils.readVarIntLength(data, i); - buffer.writeBytes(ProtocolUtils.writeVarInt(palette.apply(paletteValue))); - }else if(bitsPerBlock < globalPalette) { - int paletteLength = ProtocolUtils.readVarInt(data, i); - int paletteLengthLength = ProtocolUtils.readVarIntLength(data, i); - buffer.writeBytes(data, i, paletteLengthLength); - i += paletteLengthLength; - - for(int actPaletteId = 0; actPaletteId < paletteLength; actPaletteId++) { - int paletteValue = ProtocolUtils.readVarInt(data, i); - i += ProtocolUtils.readVarIntLength(data, i); - buffer.writeBytes(ProtocolUtils.writeVarInt(palette.apply(paletteValue))); - } - } - - int dataArrayLength = ProtocolUtils.readVarInt(data, i); - int dataArrayLengthLength = ProtocolUtils.readVarIntLength(data, i); - buffer.writeBytes(data, i, dataArrayLengthLength); - i += dataArrayLengthLength; - - dataArray.accept(i, dataArrayLength, bitsPerBlock); - i += dataArrayLength * 8; - - return i; - } - - private interface TriConsumer { - void accept(X x, Y y, Z z); - } -} diff --git a/FightSystem_18/src/de/steamwar/techhider/ProtocolWrapper18.java b/FightSystem_18/src/de/steamwar/techhider/ProtocolWrapper18.java deleted file mode 100644 index 7edbd8d..0000000 --- a/FightSystem_18/src/de/steamwar/techhider/ProtocolWrapper18.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - This file is a part of the SteamWar software. - - Copyright (C) 2021 SteamWar.de-Serverteam - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - */ - -package de.steamwar.techhider; - -import com.comphenix.tinyprotocol.Reflection; -import net.minecraft.core.IRegistry; -import net.minecraft.core.SectionPosition; -import net.minecraft.network.protocol.game.PacketPlayOutBlockBreak; -import net.minecraft.world.level.block.entity.TileEntityTypes; -import net.minecraft.world.level.block.state.IBlockData; -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 ProtocolWrapper18 implements ProtocolWrapper { - - private static final Reflection.FieldAccessor multiBlockChangeChunk = Reflection.getField(TechHider.multiBlockChangePacket, SectionPosition.class, 0); - private static final Reflection.FieldAccessor multiBlockChangeBlocks = Reflection.getField(TechHider.multiBlockChangePacket, IBlockData[].class, 0); - private static final BiFunction, Object> iBlockDataArrayCloner = ProtocolUtils.arrayCloneGenerator(TechHider.iBlockData); - @Override - public BiFunction multiBlockChangeGenerator(Object obfuscationTarget, Set obfuscate, TechHider.BypassEvaluator bypass) { - return (p, packet) -> { - Object chunkCoords = multiBlockChangeChunk.get(packet); - if(bypass.bypass(p, TechHider.blockPositionX.get(chunkCoords), TechHider.blockPositionZ.get(chunkCoords))) - return packet; - - packet = TechHider.multiBlockChangeCloner.apply(packet); - multiBlockChangeBlocks.set(packet, iBlockDataArrayCloner.apply(multiBlockChangeBlocks.get(packet), block -> ProtocolWrapper.impl.iBlockDataHidden(obfuscate, block) ? obfuscationTarget : block)); - return packet; - }; - } - - private static final Reflection.FieldAccessor tileEntityType = Reflection.getField(TechHider.tileEntityDataPacket, TileEntityTypes.class, 0); - @Override - public boolean unfilteredTileEntityDataAction(Object packet) { - return tileEntityType.get(packet) != TileEntityTypes.h; - } - - @Override - public BiFunction blockBreakHiderGenerator(Class blockBreakPacket, Object obfuscationTarget, Set obfuscate, TechHider.BypassEvaluator bypass) { - return (p, packet) -> { - PacketPlayOutBlockBreak breakPacket = (PacketPlayOutBlockBreak) packet; - if(bypass.bypass(p, ProtocolUtils.posToChunk(TechHider.blockPositionX.get(breakPacket.b())), ProtocolUtils.posToChunk(TechHider.blockPositionZ.get(breakPacket.b())))) - return packet; - - if(!ProtocolWrapper.impl.iBlockDataHidden(obfuscate, breakPacket.c())) - return packet; - - return new PacketPlayOutBlockBreak(breakPacket.b(), (IBlockData) obfuscationTarget, breakPacket.d(), breakPacket.a()); - }; - } - - @Override - public boolean iBlockDataHidden(Set obfuscate, Object iBlockData) { - return obfuscate.contains(Material.getMaterial(IRegistry.U.b(((IBlockData) iBlockData).b()).a().toUpperCase())); - } -} diff --git a/FightSystem_19/src/de/steamwar/techhider/BlockIds19.java b/FightSystem_19/src/de/steamwar/techhider/BlockIds19.java deleted file mode 100644 index e1e0b54..0000000 --- a/FightSystem_19/src/de/steamwar/techhider/BlockIds19.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - This file is a part of the SteamWar software. - - Copyright (C) 2021 SteamWar.de-Serverteam - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - */ - -package de.steamwar.techhider; - -import net.minecraft.core.IRegistry; -import net.minecraft.resources.MinecraftKey; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.state.IBlockData; -import net.minecraft.world.level.material.Fluid; -import net.minecraft.world.level.material.FluidTypes; -import org.bukkit.Material; - -import java.util.HashSet; -import java.util.Set; - -public class BlockIds19 implements BlockIds { - @Override - public int materialToId(Material material) { - return Block.i(IRegistry.V.a(new MinecraftKey(material.name().toLowerCase())).m()); - } - - @Override - public Set materialToAllIds(Material material) { - Set ids = new HashSet<>(); - for(IBlockData data : IRegistry.V.a(new MinecraftKey(material.name().toLowerCase())).k().a()){ - ids.add(Block.i(data)); - } - - if(material == Material.WATER){ - Fluid water = FluidTypes.c.h(); - for(IBlockData data : Block.o) { - if(data.p() == water) { - ids.add(Block.i(data)); - } - } - } - - return ids; - } -} diff --git a/FightSystem_19/src/de/steamwar/techhider/ChunkHider19.java b/FightSystem_19/src/de/steamwar/techhider/ChunkHider19.java deleted file mode 100644 index 0ebba1c..0000000 --- a/FightSystem_19/src/de/steamwar/techhider/ChunkHider19.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - This file is a part of the SteamWar software. - - Copyright (C) 2021 SteamWar.de-Serverteam - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - */ - -package de.steamwar.techhider; - -import net.minecraft.core.IRegistry; - -import java.util.Set; - -public class ChunkHider19 extends ChunkHider18 { - @Override - protected boolean tileEntityVisible(Set hiddenBlockEntities, Object tile) { - return !hiddenBlockEntities.contains(IRegistry.ab.b(entityType.get(tile)).a()); - } -} diff --git a/FightSystem_19/src/de/steamwar/techhider/ProtocolWrapper19.java b/FightSystem_19/src/de/steamwar/techhider/ProtocolWrapper19.java deleted file mode 100644 index 240f854..0000000 --- a/FightSystem_19/src/de/steamwar/techhider/ProtocolWrapper19.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - This file is a part of the SteamWar software. - - Copyright (C) 2021 SteamWar.de-Serverteam - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - */ - -package de.steamwar.techhider; - -import com.comphenix.tinyprotocol.Reflection; -import net.minecraft.core.IRegistry; -import net.minecraft.core.SectionPosition; -import net.minecraft.world.level.block.entity.TileEntityTypes; -import net.minecraft.world.level.block.state.IBlockData; -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 ProtocolWrapper19 implements ProtocolWrapper { - - private static final Reflection.FieldAccessor multiBlockChangeChunk = Reflection.getField(TechHider.multiBlockChangePacket, SectionPosition.class, 0); - private static final Reflection.FieldAccessor multiBlockChangeBlocks = Reflection.getField(TechHider.multiBlockChangePacket, IBlockData[].class, 0); - private static final BiFunction, Object> iBlockDataArrayCloner = ProtocolUtils.arrayCloneGenerator(TechHider.iBlockData); - @Override - public BiFunction multiBlockChangeGenerator(Object obfuscationTarget, Set obfuscate, TechHider.BypassEvaluator bypass) { - return (p, packet) -> { - Object chunkCoords = multiBlockChangeChunk.get(packet); - if(bypass.bypass(p, TechHider.blockPositionX.get(chunkCoords), TechHider.blockPositionZ.get(chunkCoords))) - return packet; - - packet = TechHider.multiBlockChangeCloner.apply(packet); - multiBlockChangeBlocks.set(packet, iBlockDataArrayCloner.apply(multiBlockChangeBlocks.get(packet), block -> ProtocolWrapper.impl.iBlockDataHidden(obfuscate, block) ? obfuscationTarget : block)); - return packet; - }; - } - - private static final Reflection.FieldAccessor tileEntityType = Reflection.getField(TechHider.tileEntityDataPacket, TileEntityTypes.class, 0); - @Override - public boolean unfilteredTileEntityDataAction(Object packet) { - return tileEntityType.get(packet) != TileEntityTypes.h; - } - - @Override - public BiFunction blockBreakHiderGenerator(Class blockBreakPacket, Object obfuscationTarget, Set obfuscate, TechHider.BypassEvaluator bypass) { - return null; - } - - @Override - public boolean iBlockDataHidden(Set obfuscate, Object iBlockData) { - return obfuscate.contains(Material.getMaterial(IRegistry.V.b(((IBlockData) iBlockData).b()).a().toUpperCase())); - } -} diff --git a/FightSystem_8/src/de/steamwar/techhider/BlockIds8.java b/FightSystem_8/src/de/steamwar/techhider/BlockIds8.java deleted file mode 100644 index 538e8db..0000000 --- a/FightSystem_8/src/de/steamwar/techhider/BlockIds8.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - This file is a part of the SteamWar software. - - Copyright (C) 2021 SteamWar.de-Serverteam - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - */ - -package de.steamwar.techhider; - -import org.bukkit.Material; - -import java.util.Collections; -import java.util.Set; - -public class BlockIds8 implements BlockIds { - @Override - @SuppressWarnings("deprecation") - public int materialToId(Material material) { - return material.getId() << 4; - } - - @Override - public Set materialToAllIds(Material material) { - return Collections.singleton(materialToId(material)); - } -} diff --git a/FightSystem_8/src/de/steamwar/techhider/ChunkHider8.java b/FightSystem_8/src/de/steamwar/techhider/ChunkHider8.java deleted file mode 100644 index 3cc0d36..0000000 --- a/FightSystem_8/src/de/steamwar/techhider/ChunkHider8.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - This file is a part of the SteamWar software. - - Copyright (C) 2021 SteamWar.de-Serverteam - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - */ - -package de.steamwar.techhider; - -import com.comphenix.tinyprotocol.Reflection; -import org.bukkit.entity.Player; - -import java.util.Set; -import java.util.function.BiFunction; - -public class ChunkHider8 implements ChunkHider { - - protected static final Class mapChunkPacket = Reflection.getClass("{nms}.PacketPlayOutMapChunk"); - @Override - public Class mapChunkPacket() { - return mapChunkPacket; - } - - @Override - public BiFunction chunkHiderGenerator(TechHider.BypassEvaluator bypass, int obfuscationTarget, Set obfuscate, Set hiddenBlockEntities) { - return null; - } -} diff --git a/FightSystem_8/src/de/steamwar/techhider/ProtocolWrapper8.java b/FightSystem_8/src/de/steamwar/techhider/ProtocolWrapper8.java deleted file mode 100644 index abc9e61..0000000 --- a/FightSystem_8/src/de/steamwar/techhider/ProtocolWrapper8.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - This file is a part of the SteamWar software. - - Copyright (C) 2021 SteamWar.de-Serverteam - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - */ - -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 ProtocolWrapper8 implements ProtocolWrapper { - private static final Class chunkCoordinateIntPair = Reflection.getClass("{nms}.ChunkCoordIntPair"); - private static final Reflection.FieldAccessor multiBlockChangeChunk = Reflection.getField(TechHider.multiBlockChangePacket, chunkCoordinateIntPair, 0); - private static final Reflection.FieldAccessor chunkCoordinateX = Reflection.getField(chunkCoordinateIntPair, int.class, 0); - private static final Reflection.FieldAccessor chunkCoordinateZ = Reflection.getField(chunkCoordinateIntPair, int.class, 1); - private static final Class multiBlockChangeInfo = Reflection.getClass("{nms}.PacketPlayOutMultiBlockChange$MultiBlockChangeInfo"); - private static final Reflection.ConstructorInvoker multiBlockChangeInfoConstructor = Reflection.getConstructor(multiBlockChangeInfo, TechHider.multiBlockChangePacket, short.class, TechHider.iBlockData); - private static final BiFunction, Object> multiBlockChangeInfoArrayCloner = ProtocolUtils.arrayCloneGenerator(multiBlockChangeInfo); - private static final Reflection.FieldAccessor multiBlockChangeInfoBlock = Reflection.getField(multiBlockChangeInfo, TechHider.iBlockData, 0); - private static final Reflection.FieldAccessor multiBlockChangeInfoPos = Reflection.getField(multiBlockChangeInfo, short.class, 0); - private static final Class multiBlockChangeInfoArray = Reflection.getClass("[L{nms}.PacketPlayOutMultiBlockChange$MultiBlockChangeInfo;"); - private static final Reflection.FieldAccessor multiBlockChangeInfos = Reflection.getField(TechHider.multiBlockChangePacket, multiBlockChangeInfoArray, 0); - @Override - public BiFunction multiBlockChangeGenerator(Object obfuscationTarget, Set obfuscate, TechHider.BypassEvaluator bypass) { - return (p, packet) -> { - Object chunkCoords = multiBlockChangeChunk.get(packet); - if(bypass.bypass(p, chunkCoordinateX.get(chunkCoords), chunkCoordinateZ.get(chunkCoords))) - return packet; - - Object modpacket = TechHider.multiBlockChangeCloner.apply(packet); - multiBlockChangeInfos.set(modpacket, multiBlockChangeInfoArrayCloner.apply(multiBlockChangeInfos.get(modpacket), mbci -> { - if(ProtocolWrapper.impl.iBlockDataHidden(obfuscate, multiBlockChangeInfoBlock.get(mbci))) - return multiBlockChangeInfoConstructor.invoke(modpacket, multiBlockChangeInfoPos.get(mbci), obfuscationTarget); - return mbci; - })); - return modpacket; - }; - } - - private static final Reflection.FieldAccessor tileEntityDataAction = Reflection.getField(TechHider.tileEntityDataPacket, int.class, 0); - @Override - public boolean unfilteredTileEntityDataAction(Object packet) { - return tileEntityDataAction.get(packet) != 9; - } - - @Override - public BiFunction blockBreakHiderGenerator(Class blockBreakPacket, Object obfuscationTarget, Set obfuscate, TechHider.BypassEvaluator bypass) { - return null; - } - - private static final Reflection.MethodInvoker getBlockByBlockData = Reflection.getTypedMethod(TechHider.iBlockData, null, TechHider.block); - private static final Reflection.MethodInvoker getMaterialByBlock = Reflection.getTypedMethod(TechHider.craftMagicNumbers, "getMaterial", Material.class, TechHider.block); - @Override - public boolean iBlockDataHidden(Set obfuscate, Object iBlockData) { - return obfuscate.contains((Material) getMaterialByBlock.invoke(null, getBlockByBlockData.invoke(iBlockData))); - } -} diff --git a/FightSystem_9/src/de/steamwar/techhider/ChunkHider9.java b/FightSystem_9/src/de/steamwar/techhider/ChunkHider9.java deleted file mode 100644 index 0272dd6..0000000 --- a/FightSystem_9/src/de/steamwar/techhider/ChunkHider9.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - This file is a part of the SteamWar software. - - Copyright (C) 2021 SteamWar.de-Serverteam - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - */ - -package de.steamwar.techhider; - -import com.comphenix.tinyprotocol.Reflection; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.UnpooledByteBufAllocator; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; - -import java.util.List; -import java.util.Set; -import java.util.function.BiFunction; -import java.util.function.UnaryOperator; -import java.util.logging.Level; -import java.util.stream.Collectors; - -public class ChunkHider9 extends ChunkHider8 { - - private static final UnaryOperator mapChunkCloner = ProtocolUtils.shallowCloneGenerator(mapChunkPacket); - - private static final Reflection.FieldAccessor mapChunkX = Reflection.getField(mapChunkPacket, int.class, 0); - private static final Reflection.FieldAccessor mapChunkZ = Reflection.getField(mapChunkPacket, int.class, 1); - private static final Reflection.FieldAccessor mapChunkBitMask = Reflection.getField(mapChunkPacket, int.class, 2); - private static final Reflection.FieldAccessor mapChunkBlockEntities = Reflection.getField(mapChunkPacket, List.class, 0); - private static final Reflection.FieldAccessor mapChunkData = Reflection.getField(mapChunkPacket, byte[].class, 0); - - private static final Class nbtTagCompound = Reflection.getClass("{nms.nbt}.NBTTagCompound"); - private static final Reflection.MethodInvoker nbtTagGetString = Reflection.getTypedMethod(nbtTagCompound, null, String.class, String.class); - - @Override - public BiFunction chunkHiderGenerator(TechHider.BypassEvaluator bypass, int obfuscationTarget, Set obfuscate, Set hiddenBlockEntities) { - return (p, packet) -> { - if(bypass.bypass(p, mapChunkX.get(packet), mapChunkZ.get(packet))) - return packet; - - packet = mapChunkCloner.apply(packet); - mapChunkBlockEntities.set(packet, ((List)mapChunkBlockEntities.get(packet)).stream().filter( - nbttag -> !hiddenBlockEntities.contains((String) nbtTagGetString.invoke(nbttag, "id")) - ).collect(Collectors.toList())); - - byte[] data = dataHider(obfuscationTarget, obfuscate, mapChunkData.get(packet), mapChunkBitMask.get(packet)); - mapChunkData.set(packet, data); - - return packet; - }; - } - - protected byte[] dataHider(int obfuscationTarget, Set obfuscate, byte[] data, Integer primaryBitMask) { - ByteBuf buffer = UnpooledByteBufAllocator.DEFAULT.directBuffer(data.length + 100); - int i = 0; - - while(i < data.length){ - byte bitsPerBlock = data[i++]; - buffer.writeByte(bitsPerBlock); - - if(bitsPerBlock != 13){ - int paletteLength = ProtocolUtils.readVarInt(data, i); - int paletteLengthLength = ProtocolUtils.readVarIntLength(data, i); - buffer.writeBytes(data, i, paletteLengthLength); - i += paletteLengthLength; - - for(int actPaletteId = 0; actPaletteId < paletteLength; actPaletteId++){ - int entry = ProtocolUtils.readVarInt(data, i); - i += ProtocolUtils.readVarIntLength(data, i); - - if(obfuscate.contains(entry)){ - entry = obfuscationTarget; - } - buffer.writeBytes(ProtocolUtils.writeVarInt(entry)); - } - }else{ - buffer.writeByte(data[++i]); //Empty palette - Bukkit.getLogger().log(Level.SEVERE, "Full chunk occured"); - } - - int dataArrayLength = ProtocolUtils.readVarInt(data, i); - int dataArrayLengthLength = ProtocolUtils.readVarIntLength(data, i); - buffer.writeBytes(data, i, dataArrayLength*8 + dataArrayLengthLength); - i += dataArrayLengthLength; - i += dataArrayLength * 8; - - buffer.writeBytes(data, i, 4096); - i += 4096; //Skylight (Not in Nether/End!!!) 2048 + Blocklight 2048 - } - - data = new byte[buffer.readableBytes()]; - buffer.readBytes(data); - return data; - } -} diff --git a/FightSystem_Core/src/de/steamwar/techhider/BlockIds.java b/FightSystem_Core/src/de/steamwar/techhider/BlockIds.java deleted file mode 100644 index 1ab7353..0000000 --- a/FightSystem_Core/src/de/steamwar/techhider/BlockIds.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - This file is a part of the SteamWar software. - - Copyright (C) 2021 SteamWar.de-Serverteam - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - */ - -package de.steamwar.techhider; - -import de.steamwar.core.VersionDependent; -import de.steamwar.fightsystem.FightSystem; -import org.bukkit.Material; - -import java.util.Set; - -public interface BlockIds { - BlockIds impl = VersionDependent.getVersionImpl(FightSystem.getPlugin()); - - int materialToId(Material material); - Set materialToAllIds(Material material); -} diff --git a/FightSystem_Core/src/de/steamwar/techhider/ChunkHider.java b/FightSystem_Core/src/de/steamwar/techhider/ChunkHider.java deleted file mode 100644 index 0711f37..0000000 --- a/FightSystem_Core/src/de/steamwar/techhider/ChunkHider.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - This file is a part of the SteamWar software. - - Copyright (C) 2022 SteamWar.de-Serverteam - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - */ - -package de.steamwar.techhider; - -import de.steamwar.core.VersionDependent; -import de.steamwar.fightsystem.FightSystem; -import org.bukkit.entity.Player; - -import java.util.Set; -import java.util.function.BiFunction; - -public interface ChunkHider { - ChunkHider impl = VersionDependent.getVersionImpl(FightSystem.getPlugin()); - - Class mapChunkPacket(); - BiFunction chunkHiderGenerator(TechHider.BypassEvaluator bypass, int obfuscationTarget, Set obfuscate, Set hiddenBlockEntities); -} diff --git a/FightSystem_Core/src/de/steamwar/techhider/ProtocolUtils.java b/FightSystem_Core/src/de/steamwar/techhider/ProtocolUtils.java deleted file mode 100644 index 1fc9e31..0000000 --- a/FightSystem_Core/src/de/steamwar/techhider/ProtocolUtils.java +++ /dev/null @@ -1,164 +0,0 @@ -/* - This file is a part of the SteamWar software. - - Copyright (C) 2022 SteamWar.de-Serverteam - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - */ - -package de.steamwar.techhider; - -import com.comphenix.tinyprotocol.Reflection; -import com.comphenix.tinyprotocol.TinyProtocol; -import com.google.common.primitives.Bytes; -import org.bukkit.Bukkit; - -import java.lang.reflect.Array; -import java.lang.reflect.Field; -import java.lang.reflect.Modifier; -import java.util.ArrayList; -import java.util.List; -import java.util.function.BiConsumer; -import java.util.function.BiFunction; -import java.util.function.UnaryOperator; - -public class ProtocolUtils { - private ProtocolUtils() {} - - public static void broadcastPacket(Object packet) { - Bukkit.getOnlinePlayers().stream().map(TinyProtocol.instance::getChannel).filter(TinyProtocol.instance::hasInjected).forEach(channel -> TinyProtocol.instance.sendPacket(channel, packet)); - } - - public static BiFunction, Object> arrayCloneGenerator(Class elementClass) { - return (array, worker) -> { - int length = Array.getLength(array); - Object result = Array.newInstance(elementClass, length); - - for(int i = 0; i < length; i++) - Array.set(result, i, worker.apply(Array.get(array, i))); - - return result; - }; - } - - public static UnaryOperator shallowCloneGenerator(Class clazz) { - BiConsumer filler = shallowFill(clazz); - - return source -> { - Object clone = Reflection.newInstance(clazz); - filler.accept(source, clone); - return clone; - }; - } - - private static BiConsumer shallowFill(Class clazz) { - if(clazz == null) - return (source, clone) -> {}; - - BiConsumer superFiller = shallowFill(clazz.getSuperclass()); - - Field[] fds = clazz.getDeclaredFields(); - List fields = new ArrayList<>(); - for(Field field : fds) { - if (Modifier.isStatic(field.getModifiers())) - continue; - - field.setAccessible(true); - fields.add(field); - } - - return (source, clone) -> { - superFiller.accept(source, clone); - try { - for(Field field : fields) { - field.set(clone, field.get(source)); - } - } catch (IllegalAccessException e) { - throw new IllegalStateException("Could not set field", e); - } - - }; - } - - public static int posToChunk(int c){ - int chunk = c / 16; - if(c<0) - chunk--; - return chunk; - } - - public static int readVarInt(byte[] array, int startPos) { - int numRead = 0; - int result = 0; - byte read; - do { - read = array[startPos + numRead]; - int value = (read & 0b01111111); - result |= (value << (7 * numRead)); - - numRead++; - if (numRead > 5) { - break; - } - } while ((read & 0b10000000) != 0); - - return result; - } - - public static int readVarIntLength(byte[] array, int startPos) { - int numRead = 0; - byte read; - do { - read = array[startPos + numRead]; - numRead++; - if (numRead > 5) { - break; - } - } while ((read & 0b10000000) != 0); - - return numRead; - } - - public static byte[] writeVarInt(int value) { - List buffer = new ArrayList<>(5); - do { - byte temp = (byte)(value & 0b01111111); - // Note: >>> means that the sign bit is shifted with the rest of the number rather than being left alone - value >>>= 7; - if (value != 0) { - temp |= 0b10000000; - } - buffer.add(temp); - } while (value != 0); - return Bytes.toArray(buffer); - } - - public static class ChunkPos{ - final int x; - final int z; - - public ChunkPos(int x, int z){ - this.x = x; - this.z = z; - } - - public final int x(){ - return x; - } - - public final int z(){ - return z; - } - } -} diff --git a/FightSystem_Core/src/de/steamwar/techhider/ProtocolWrapper.java b/FightSystem_Core/src/de/steamwar/techhider/ProtocolWrapper.java deleted file mode 100644 index 49da27d..0000000 --- a/FightSystem_Core/src/de/steamwar/techhider/ProtocolWrapper.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - This file is a part of the SteamWar software. - - Copyright (C) 2021 SteamWar.de-Serverteam - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - */ - -package de.steamwar.techhider; - -import de.steamwar.core.VersionDependent; -import de.steamwar.fightsystem.FightSystem; -import org.bukkit.Material; -import org.bukkit.entity.Player; - -import java.util.Set; -import java.util.function.BiFunction; - -public interface ProtocolWrapper { - ProtocolWrapper impl = VersionDependent.getVersionImpl(FightSystem.getPlugin()); - - - boolean unfilteredTileEntityDataAction(Object packet); - - BiFunction blockBreakHiderGenerator(Class blockBreakPacket, Object obfuscationTarget, Set obfuscate, TechHider.BypassEvaluator bypass); - - BiFunction multiBlockChangeGenerator(Object obfuscationTarget, Set obfuscate, TechHider.BypassEvaluator bypass); - - boolean iBlockDataHidden(Set obfuscate, Object iBlockData); -}