forked from SteamWar/SteamWar
fixes
This commit is contained in:
@@ -57,6 +57,7 @@ tasks.register<FightServer>("WarGear21") {
|
|||||||
description = "Run a WarGear 1.21 Fight Server"
|
description = "Run a WarGear 1.21 Fight Server"
|
||||||
dependsOn(":SpigotCore:shadowJar")
|
dependsOn(":SpigotCore:shadowJar")
|
||||||
dependsOn(":FightSystem:shadowJar")
|
dependsOn(":FightSystem:shadowJar")
|
||||||
|
dependsOn(":KotlinCore:shadowJar")
|
||||||
template = "WarGear21"
|
template = "WarGear21"
|
||||||
worldName = "arenas/Pentraki"
|
worldName = "arenas/Pentraki"
|
||||||
config = "WarGear20.yml"
|
config = "WarGear20.yml"
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ public class TinyProtocol {
|
|||||||
|
|
||||||
public static final TinyProtocol instance = new TinyProtocol(Core.getInstance());
|
public static final TinyProtocol instance = new TinyProtocol(Core.getInstance());
|
||||||
private final Map<Class<?>, List<BiFunction<Player, Object, Object>>> packetFilters = new HashMap<>();
|
private final Map<Class<?>, List<BiFunction<Player, Object, Object>>> packetFilters = new HashMap<>();
|
||||||
private final Set<BiFunction<Player, Object, Object>> globalFilters = new HashSet<>();
|
private final Set<BiFunction<Player, Object, Object>> globalClientboundFilters = new HashSet<>();
|
||||||
|
|
||||||
public static void init() {
|
public static void init() {
|
||||||
// enforce init
|
// enforce init
|
||||||
@@ -235,8 +235,8 @@ public class TinyProtocol {
|
|||||||
packetFilters.getOrDefault(packetType, Collections.emptyList()).remove(filter);
|
packetFilters.getOrDefault(packetType, Collections.emptyList()).remove(filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addGlobalFilter(BiFunction<Player, Object, Object> filter) {
|
public void addGlobalClientboundFilter(BiFunction<Player, Object, Object> filter) {
|
||||||
globalFilters.add(filter);
|
globalClientboundFilters.add(filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -450,6 +450,13 @@ public class TinyProtocol {
|
|||||||
public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception {
|
public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception {
|
||||||
try {
|
try {
|
||||||
msg = filterPacket(player, msg);
|
msg = filterPacket(player, msg);
|
||||||
|
|
||||||
|
if(msg instanceof Packet<?>) {
|
||||||
|
for (BiFunction<Player, Object, Object> filter : globalClientboundFilters) {
|
||||||
|
msg = filter.apply(player, msg);
|
||||||
|
if (msg == null) break;
|
||||||
|
}
|
||||||
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
plugin.getLogger().log(Level.SEVERE, "Error in onPacketOutAsync().", e);
|
plugin.getLogger().log(Level.SEVERE, "Error in onPacketOutAsync().", e);
|
||||||
}
|
}
|
||||||
@@ -473,11 +480,6 @@ public class TinyProtocol {
|
|||||||
if (packet == null) break;
|
if (packet == null) break;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (BiFunction<Player, Object, Object> filter : globalFilters) {
|
|
||||||
packet = filter.apply(player, packet);
|
|
||||||
if (packet == null) break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return packet;
|
return packet;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ public abstract class ChunkHider {
|
|||||||
|
|
||||||
private final int SECTION_SPAN_SIZE = 16;
|
private final int SECTION_SPAN_SIZE = 16;
|
||||||
private final byte BIT_PER_BLOCK_INDIRECTION_LIMIT = 8;
|
private final byte BIT_PER_BLOCK_INDIRECTION_LIMIT = 8;
|
||||||
|
private final byte BIT_PER_BIOME_INDIRECTION_LIMIT = 3;
|
||||||
|
|
||||||
private final int BLOCKS_PER_SECTION = 4096;
|
private final int BLOCKS_PER_SECTION = 4096;
|
||||||
private final int BIOMES_PER_SECTION = 64;
|
private final int BIOMES_PER_SECTION = 64;
|
||||||
@@ -108,6 +109,8 @@ public abstract class ChunkHider {
|
|||||||
int palletLength = ProtocolUtils.readVarInt(in);
|
int palletLength = ProtocolUtils.readVarInt(in);
|
||||||
int[] pallet = ProtocolUtils.readVarIntArray(in, palletLength);
|
int[] pallet = ProtocolUtils.readVarIntArray(in, palletLength);
|
||||||
|
|
||||||
|
System.out.println(Arrays.toString(pallet));
|
||||||
|
|
||||||
long[] rawData = readSectionDataFromBuffer(in, bitsPerBlock, BLOCKS_PER_SECTION);
|
long[] rawData = readSectionDataFromBuffer(in, bitsPerBlock, BLOCKS_PER_SECTION);
|
||||||
SimpleBitStorage data = new SimpleBitStorage(bitsPerBlock, BLOCKS_PER_SECTION, rawData);
|
SimpleBitStorage data = new SimpleBitStorage(bitsPerBlock, BLOCKS_PER_SECTION, rawData);
|
||||||
|
|
||||||
@@ -128,6 +131,7 @@ public abstract class ChunkHider {
|
|||||||
int worldZ = sectionZ * chunkZ;
|
int worldZ = sectionZ * chunkZ;
|
||||||
|
|
||||||
int blockId = resolvedData[blockDataIndex];
|
int blockId = resolvedData[blockDataIndex];
|
||||||
|
System.out.println("DEV - " + blockId);
|
||||||
Block block = BuiltInRegistries.BLOCK.get(blockId).get().value();
|
Block block = BuiltInRegistries.BLOCK.get(blockId).get().value();
|
||||||
|
|
||||||
if(isPlayerPrivilegedToAccessPosition(player, worldX, worldY, worldZ) && isPlayerPrivilegedToAccessBlock(player, worldX, worldY, worldZ, block)) {
|
if(isPlayerPrivilegedToAccessPosition(player, worldX, worldY, worldZ) && isPlayerPrivilegedToAccessBlock(player, worldX, worldY, worldZ, block)) {
|
||||||
@@ -271,12 +275,12 @@ public abstract class ChunkHider {
|
|||||||
private void copyOverSectionBiomeData(ByteBuf oldData, ByteBuf newData){
|
private void copyOverSectionBiomeData(ByteBuf oldData, ByteBuf newData){
|
||||||
short bitsPerBiome = oldData.readShort();
|
short bitsPerBiome = oldData.readShort();
|
||||||
newData.writeShort(bitsPerBiome);
|
newData.writeShort(bitsPerBiome);
|
||||||
|
System.out.println(bitsPerBiome);
|
||||||
if(bitsPerBiome == 0) {
|
if(bitsPerBiome == 0) {
|
||||||
int sectionBiomeId = ProtocolUtils.readVarInt(oldData);
|
int sectionBiomeId = ProtocolUtils.readVarInt(oldData);
|
||||||
ProtocolUtils.writeVarInt(newData, sectionBiomeId);
|
ProtocolUtils.writeVarInt(newData, sectionBiomeId);
|
||||||
}
|
}
|
||||||
else if(bitsPerBiome <= BIT_PER_BLOCK_INDIRECTION_LIMIT) {
|
else if(bitsPerBiome <= BIT_PER_BIOME_INDIRECTION_LIMIT) {
|
||||||
int palletLength = ProtocolUtils.readVarInt(oldData);
|
int palletLength = ProtocolUtils.readVarInt(oldData);
|
||||||
ProtocolUtils.writeVarInt(newData, palletLength);
|
ProtocolUtils.writeVarInt(newData, palletLength);
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import it.unimi.dsi.fastutil.ints.IntArrayList;
|
|||||||
import it.unimi.dsi.fastutil.ints.IntList;
|
import it.unimi.dsi.fastutil.ints.IntList;
|
||||||
import it.unimi.dsi.fastutil.shorts.ShortArraySet;
|
import it.unimi.dsi.fastutil.shorts.ShortArraySet;
|
||||||
import it.unimi.dsi.fastutil.shorts.ShortSets;
|
import it.unimi.dsi.fastutil.shorts.ShortSets;
|
||||||
|
import net.minecraft.network.UnconfiguredPipelineHandler;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.world.level.block.entity.BlockEntityType;
|
import net.minecraft.world.level.block.entity.BlockEntityType;
|
||||||
import net.minecraft.world.phys.Vec3;
|
import net.minecraft.world.phys.Vec3;
|
||||||
@@ -26,6 +27,7 @@ import net.minecraft.core.BlockPos;
|
|||||||
import net.minecraft.core.SectionPos;
|
import net.minecraft.core.SectionPos;
|
||||||
import net.minecraft.network.PacketListener;
|
import net.minecraft.network.PacketListener;
|
||||||
import net.minecraft.network.protocol.Packet;
|
import net.minecraft.network.protocol.Packet;
|
||||||
|
import net.minecraft.network.protocol.handshake.ClientIntentionPacket;
|
||||||
import net.minecraft.network.protocol.common.ClientboundClearDialogPacket;
|
import net.minecraft.network.protocol.common.ClientboundClearDialogPacket;
|
||||||
import net.minecraft.network.protocol.common.ClientboundCustomPayloadPacket;
|
import net.minecraft.network.protocol.common.ClientboundCustomPayloadPacket;
|
||||||
import net.minecraft.network.protocol.common.ClientboundCustomReportDetailsPacket;
|
import net.minecraft.network.protocol.common.ClientboundCustomReportDetailsPacket;
|
||||||
@@ -162,6 +164,7 @@ import net.minecraft.network.protocol.login.ClientboundHelloPacket;
|
|||||||
import net.minecraft.network.protocol.login.ClientboundLoginCompressionPacket;
|
import net.minecraft.network.protocol.login.ClientboundLoginCompressionPacket;
|
||||||
import net.minecraft.network.protocol.login.ClientboundLoginDisconnectPacket;
|
import net.minecraft.network.protocol.login.ClientboundLoginDisconnectPacket;
|
||||||
import net.minecraft.network.protocol.login.ClientboundLoginFinishedPacket;
|
import net.minecraft.network.protocol.login.ClientboundLoginFinishedPacket;
|
||||||
|
import net.minecraft.network.protocol.configuration.ClientboundSelectKnownPacks;
|
||||||
import net.minecraft.world.level.block.Block;
|
import net.minecraft.world.level.block.Block;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
|
|
||||||
@@ -171,7 +174,7 @@ import net.minecraft.world.level.block.state.BlockState;
|
|||||||
* way that is also compliant with the principle of default-deny.
|
* way that is also compliant with the principle of default-deny.
|
||||||
*/
|
*/
|
||||||
public abstract class TechHider {
|
public abstract class TechHider {
|
||||||
private final Set<Class<? extends Packet<? extends PacketListener>>> bypassingPackets;
|
private final Set<Class<?>> bypassingPackets;
|
||||||
private final Map<Class<? extends Packet<? extends PacketListener>>, BiFunction<Player, Packet<? extends PacketListener>, Packet<? extends PacketListener>>> packetProcessors;
|
private final Map<Class<? extends Packet<? extends PacketListener>>, BiFunction<Player, Packet<? extends PacketListener>, Packet<? extends PacketListener>>> packetProcessors;
|
||||||
|
|
||||||
private final Block blockUsedForObfuscation;
|
private final Block blockUsedForObfuscation;
|
||||||
@@ -210,6 +213,7 @@ public abstract class TechHider {
|
|||||||
ClientboundCookieRequestPacket.class, // 5.1.6 Cookie Request
|
ClientboundCookieRequestPacket.class, // 5.1.6 Cookie Request
|
||||||
|
|
||||||
// --- 6.1.x Configuration Protocol ---
|
// --- 6.1.x Configuration Protocol ---
|
||||||
|
ClientboundSelectKnownPacks.class,
|
||||||
ClientboundCustomPayloadPacket.class, // 6.1.2 Clientbound Plugin Message
|
ClientboundCustomPayloadPacket.class, // 6.1.2 Clientbound Plugin Message
|
||||||
ClientboundFinishConfigurationPacket.class, // 6.1.4 Finish Configuration
|
ClientboundFinishConfigurationPacket.class, // 6.1.4 Finish Configuration
|
||||||
ClientboundKeepAlivePacket.class, // 6.1.5 Clientbound Keep Alive
|
ClientboundKeepAlivePacket.class, // 6.1.5 Clientbound Keep Alive
|
||||||
@@ -440,14 +444,19 @@ public abstract class TechHider {
|
|||||||
|
|
||||||
this.packetProcessors = processors;
|
this.packetProcessors = processors;
|
||||||
|
|
||||||
TinyProtocol.instance.addGlobalFilter((player, packet) -> {
|
TinyProtocol.instance.addGlobalClientboundFilter((player, packet) -> {
|
||||||
|
System.out.println(packet.getClass().toString());
|
||||||
|
|
||||||
if(bypassingPackets.contains(packet.getClass())) {
|
if(bypassingPackets.contains(packet.getClass())) {
|
||||||
|
System.out.println("bypassing");
|
||||||
return packet;
|
return packet;
|
||||||
}
|
}
|
||||||
else if(packetProcessors.containsKey(packet.getClass())) {
|
else if(packetProcessors.containsKey(packet.getClass())) {
|
||||||
|
System.out.println("processing");
|
||||||
return packetProcessors.get(packet.getClass()).apply(player, (Packet<? extends PacketListener>) packet);
|
return packetProcessors.get(packet.getClass()).apply(player, (Packet<? extends PacketListener>) packet);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
System.out.println("dropping");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user