mirror of
https://github.com/funkemunky/KauriV3.git
synced 2026-05-31 05:51:55 +00:00
Adding health spoofing
- Optimized Materials class code. - Optimized Horizontal - Added kauri to command. - Added health spoofing in JoinListener.
This commit is contained in:
@@ -296,18 +296,14 @@ public class Horizontal extends Check {
|
||||
tagsBuilder.addTag("sneak-edge");
|
||||
}
|
||||
|
||||
List<SimpleCollisionBox> collisionBoxes = Helper.getCollisions(player.getBukkitPlayer().getWorld(),
|
||||
box.copy()
|
||||
.addCoord(lmotionX ,lmotionY, lmotionZ), Materials.SOLID);
|
||||
List<SimpleCollisionBox> collisionBoxes = Helper.toCollisionsDowncasted(Helper
|
||||
.blockCollisions(player.getBlockInfo().blocks, box.copy()
|
||||
.addCoord(lmotionX ,lmotionY, lmotionZ), Materials.SOLID));
|
||||
|
||||
double beforeY = lmotionY;
|
||||
int yCount = 0;
|
||||
for (SimpleCollisionBox blockBox : collisionBoxes) {
|
||||
yCount++;
|
||||
lmotionY = blockBox.calculateYOffset(box, lmotionY);
|
||||
}
|
||||
|
||||
double afterY = lmotionY;
|
||||
box = box.offset(0, lmotionY, 0);
|
||||
|
||||
boolean stepped = onGround || (originalY != lmotionY && originalY < 0);
|
||||
@@ -456,7 +452,6 @@ public class Horizontal extends Check {
|
||||
pmotionz = y;
|
||||
pmotiony = z;
|
||||
|
||||
tagsBuilder.addTag(String.format("X: %.6f, Y: %.6f, z: %.6f", originalX, originalY, originalZ));
|
||||
tags = tagsBuilder;
|
||||
|
||||
if (deltaAll < precision) {
|
||||
@@ -649,4 +644,4 @@ public class Horizontal extends Check {
|
||||
private static float roundToFloat(double d) {
|
||||
return (float) ((double) Math.round(d * 1.0E8D) / 1.0E8D);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
package dev.brighten.ac.check.impl.packet;
|
||||
|
||||
import dev.brighten.ac.api.check.CheckType;
|
||||
import dev.brighten.ac.check.Check;
|
||||
import dev.brighten.ac.check.CheckData;
|
||||
import dev.brighten.ac.check.WAction;
|
||||
import dev.brighten.ac.data.APlayer;
|
||||
import dev.brighten.ac.packet.wrapper.out.WPacketPlayOutEntityMetadata;
|
||||
import dev.brighten.ac.packet.wrapper.out.WPacketPlayOutSpawnEntityLiving;
|
||||
|
||||
@CheckData(name = "Metadata", checkId = "metadata", type = CheckType.BADPACKETS)
|
||||
public class Metadata extends Check {
|
||||
|
||||
public Metadata(APlayer player) {
|
||||
super(player);
|
||||
}
|
||||
|
||||
WAction<WPacketPlayOutEntityMetadata> packet = packet -> {
|
||||
debug("entityId: " + packet.getEntityId());
|
||||
packet.getWatchedObjects().forEach(watchedObject -> {
|
||||
debug("watchedObject: " + watchedObject.getObjectType() + "," + watchedObject.getDataValueId() + ", " + watchedObject.getWatchedObject());
|
||||
});
|
||||
};
|
||||
|
||||
WAction<WPacketPlayOutSpawnEntityLiving> spawn = packet -> {
|
||||
debug("(spawned) entityId: " + packet.getEntityId());
|
||||
packet.getWatchedObjects().forEach(watchedObject -> {
|
||||
if(watchedObject.getDataValueId() == 0) {
|
||||
byte bitInfo = (byte) watchedObject.getWatchedObject();
|
||||
boolean sneaking = (bitInfo & 1 << 1) != 0;
|
||||
boolean sprinting = (bitInfo & 1 << 3) != 0;
|
||||
boolean invisible = (bitInfo & 1 << 5) != 0;
|
||||
|
||||
debug("sneaking:%s sprinting:%s invisible:%s", sneaking, sprinting, invisible);
|
||||
}
|
||||
debug("watchedObject: " + watchedObject.getObjectType() + "," + watchedObject.getDataValueId() + ", " + watchedObject.getWatchedObject());
|
||||
});
|
||||
};
|
||||
}
|
||||
@@ -47,7 +47,7 @@ import java.util.stream.Collectors;
|
||||
import java.util.zip.CRC32;
|
||||
|
||||
@Init
|
||||
@CommandAlias("anticheat|ac")
|
||||
@CommandAlias("kauri|anticheat|ac")
|
||||
@CommandPermission("anticheat.command")
|
||||
public class AnticheatCommand extends BaseCommand {
|
||||
|
||||
|
||||
@@ -3,8 +3,13 @@ package dev.brighten.ac.listener;
|
||||
import dev.brighten.ac.Anticheat;
|
||||
import dev.brighten.ac.data.APlayer;
|
||||
import dev.brighten.ac.packet.handler.HandlerAbstract;
|
||||
import dev.brighten.ac.packet.wrapper.PacketType;
|
||||
import dev.brighten.ac.packet.wrapper.objects.WrappedWatchableObject;
|
||||
import dev.brighten.ac.packet.wrapper.out.WPacketPlayOutEntityMetadata;
|
||||
import dev.brighten.ac.packet.wrapper.out.WPacketPlayOutNamedEntitySpawn;
|
||||
import dev.brighten.ac.utils.RunUtils;
|
||||
import dev.brighten.ac.utils.annotation.Init;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
@@ -28,6 +33,25 @@ public class JoinListener implements Listener {
|
||||
.process(player, event.getType(), event.getPacket())) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
if(event.getType().equals(PacketType.ENTITY_METADATA)) {
|
||||
WPacketPlayOutEntityMetadata packet = event.getPacket();
|
||||
|
||||
for (WrappedWatchableObject watchedObject : packet.getWatchedObjects()) {
|
||||
if(watchedObject.getDataValueId() == 6 && watchedObject.getWatchedObject() instanceof Float) {
|
||||
watchedObject.setWatchedObject(1f);
|
||||
|
||||
Bukkit.broadcastMessage("Set watched object and sending packet:"
|
||||
+ watchedObject.getWatchedObject());
|
||||
|
||||
HandlerAbstract.getHandler().sendPacket(player, packet.getPacket());
|
||||
event.setCancelled(true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else if(event.getType().equals(PacketType.NAMED_ENTITY_SPAWN)) {
|
||||
WPacketPlayOutNamedEntitySpawn packet = event.getPacket();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
@@ -42,7 +66,7 @@ public class JoinListener implements Listener {
|
||||
|
||||
if(player.isSendingPackets()) return;
|
||||
|
||||
/*if(event.getType().equals(PacketType.CLIENT_TRANSACTION)) {
|
||||
if(event.getType().equals(PacketType.CLIENT_TRANSACTION)) {
|
||||
if(player.getPacketQueue().size() > 0) {
|
||||
player.setSendingPackets(true);
|
||||
Object packetToSend = null;
|
||||
@@ -73,7 +97,7 @@ public class JoinListener implements Listener {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}*/
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@ import dev.brighten.ac.utils.reflections.impl.CraftReflection;
|
||||
import dev.brighten.ac.utils.reflections.impl.MinecraftReflection;
|
||||
import dev.brighten.ac.utils.reflections.types.WrappedClass;
|
||||
import io.netty.channel.*;
|
||||
import lombok.SneakyThrows;
|
||||
import net.minecraft.server.v1_8_R3.PacketLoginInStart;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
@@ -152,8 +153,8 @@ public class ModernHandler extends HandlerAbstract {
|
||||
@Override
|
||||
public void sendPacket(Player player, Object packet) {
|
||||
if(packet instanceof WPacket) {
|
||||
getChannel(player).pipeline().writeAndFlush(((WPacket) packet).getPacket());
|
||||
} else getChannel(player).pipeline().writeAndFlush(packet);
|
||||
getChannel(player).pipeline().writeAndFlush((new SilentObject(((WPacket) packet).getPacket())));
|
||||
} else getChannel(player).pipeline().writeAndFlush(new SilentObject(packet));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -192,7 +193,13 @@ public class ModernHandler extends HandlerAbstract {
|
||||
private Player player;
|
||||
|
||||
@Override
|
||||
public void channelRead(ChannelHandlerContext ctx, Object msg) {
|
||||
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
|
||||
|
||||
if(msg instanceof SilentObject) {
|
||||
super.channelRead(ctx, ((SilentObject)msg).packet);
|
||||
return;
|
||||
}
|
||||
|
||||
String name = msg.getClass().getName();
|
||||
int index = name.lastIndexOf(".");
|
||||
String packetName = name.substring(index + 1);
|
||||
@@ -229,16 +236,18 @@ public class ModernHandler extends HandlerAbstract {
|
||||
}
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
super.channelRead(ctx, msg);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
super.channelRead(ctx, msg);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception {
|
||||
|
||||
if(msg instanceof SilentObject) {
|
||||
super.write(ctx, ((SilentObject)msg).packet, promise);
|
||||
return;
|
||||
}
|
||||
|
||||
String name = msg.getClass().getName();
|
||||
int index = name.lastIndexOf(".");
|
||||
String packetName = name.substring(index + 1);
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
package dev.brighten.ac.packet.handler;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
class SilentObject {
|
||||
public final Object packet;
|
||||
}
|
||||
@@ -159,6 +159,10 @@ public class PacketProcessor {
|
||||
|
||||
for (ListenerEntry tuple : list) {
|
||||
tuple.getListener().onEvent(asyncInfo);
|
||||
|
||||
if (asyncInfo.isCancelled()) {
|
||||
cancelled = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return cancelled ? null : info.getPacket();
|
||||
|
||||
@@ -591,16 +591,11 @@ public class Processor_18 implements PacketConverter {
|
||||
PacketPlayOutNamedEntitySpawn packet = (PacketPlayOutNamedEntitySpawn) object;
|
||||
PacketDataSerializer serial = serialize(packet);
|
||||
|
||||
|
||||
WPacketPlayOutNamedEntitySpawn nes = WPacketPlayOutNamedEntitySpawn.builder().entityId(serial.e()).uuid(serial.g())
|
||||
return WPacketPlayOutNamedEntitySpawn.builder().entityId(serial.e()).uuid(serial.g())
|
||||
.x(serial.readInt() / 32.).y(serial.readInt() / 32.).z(serial.readInt() / 32.)
|
||||
.yaw(serial.readByte() * 360.F / 256.F).pitch(serial.readByte() * 360.F / 256.F)
|
||||
.itemInHand(MiscUtils.getById(serial.readShort()))
|
||||
.build();
|
||||
|
||||
|
||||
|
||||
return nes;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -627,8 +622,8 @@ public class Processor_18 implements PacketConverter {
|
||||
return vanilla;
|
||||
}
|
||||
|
||||
private static WrappedClass classSpawnEntityLiving = new WrappedClass(PacketPlayOutSpawnEntityLiving.class);
|
||||
private static WrappedField splDataWatcher = classSpawnEntityLiving.getFieldByType(DataWatcher.class, 0),
|
||||
private static final WrappedClass classSpawnEntityLiving = new WrappedClass(PacketPlayOutSpawnEntityLiving.class);
|
||||
private static final WrappedField splDataWatcher = classSpawnEntityLiving.getFieldByType(DataWatcher.class, 0),
|
||||
splWatchList = classSpawnEntityLiving.getFieldByType(List.class, 0);
|
||||
|
||||
@SneakyThrows
|
||||
@@ -652,8 +647,8 @@ public class Processor_18 implements PacketConverter {
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
private static WrappedClass dataWatcherClass = new WrappedClass(DataWatcher.class);
|
||||
private static WrappedField watchableMap = dataWatcherClass.getFieldByName("d");
|
||||
private static final WrappedClass dataWatcherClass = new WrappedClass(DataWatcher.class);
|
||||
private static final WrappedField watchableMap = dataWatcherClass.getFieldByName("d");
|
||||
@Override
|
||||
public Object processSpawnLiving(WPacketPlayOutSpawnEntityLiving packet) {
|
||||
PacketPlayOutSpawnEntityLiving vanilla = new PacketPlayOutSpawnEntityLiving();
|
||||
@@ -674,10 +669,9 @@ public class Processor_18 implements PacketConverter {
|
||||
try {
|
||||
DataWatcher watcher = new DataWatcher(null);
|
||||
|
||||
packet.getWatchedObjects().forEach(w ->{
|
||||
watcher.a(w.getDataValueId(), w.getWatchedObject());
|
||||
System.out.println("Adding object: " + w.getDataValueId() + ";" + w.getWatchedObject());
|
||||
});
|
||||
for (WrappedWatchableObject w : packet.getWatchedObjects()) {
|
||||
watcher.a(w.getDataValueId(), w.getWatchedObject());;
|
||||
}
|
||||
|
||||
watcher.a(serializer);
|
||||
splDataWatcher.set(vanilla, watcher);
|
||||
@@ -751,7 +745,7 @@ public class Processor_18 implements PacketConverter {
|
||||
serialized.b(packet.getEntityId());
|
||||
|
||||
List<DataWatcher.WatchableObject> watchedObjects = packet.getWatchedObjects().stream()
|
||||
.map(w -> (DataWatcher.WatchableObject)w.getVanillaObject()).collect(Collectors.toList());
|
||||
.map(w -> (DataWatcher.WatchableObject)w.toVanillaObject()).collect(Collectors.toList());
|
||||
|
||||
try {
|
||||
DataWatcher.a(watchedObjects, serialized);
|
||||
@@ -790,7 +784,6 @@ public class Processor_18 implements PacketConverter {
|
||||
|
||||
private static void writePacketData(PacketDataSerializer serializer, List<WrappedWatchableObject> objects) {
|
||||
for (WrappedWatchableObject object : objects) {
|
||||
System.out.println("Writing object:" + object.getDataValueId() + ";" + object.getWatchedObject());
|
||||
int i = (object.getObjectType() << 5 | object.getDataValueId() & 31) & 255;
|
||||
serializer.writeByte(i);
|
||||
switch (object.getObjectType()) {
|
||||
|
||||
@@ -6,11 +6,13 @@ import dev.brighten.ac.packet.wrapper.WPacket;
|
||||
import dev.brighten.ac.packet.wrapper.objects.WrappedWatchableObject;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Builder
|
||||
@Getter
|
||||
@Setter
|
||||
public class WPacketPlayOutEntityMetadata extends WPacket {
|
||||
|
||||
private int entityId;
|
||||
|
||||
@@ -5,12 +5,14 @@ import dev.brighten.ac.packet.wrapper.PacketType;
|
||||
import dev.brighten.ac.packet.wrapper.WPacket;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Builder
|
||||
public class WPacketPlayOutNamedEntitySpawn extends WPacket {
|
||||
|
||||
|
||||
@@ -19,28 +19,38 @@ public class Materials {
|
||||
|
||||
static {
|
||||
for (int i = 0; i < MATERIAL_FLAGS.length; i++) {
|
||||
Material material = Material.values()[i];
|
||||
Material mat = Material.values()[i];
|
||||
|
||||
//We use the one in BlockUtils also since we can't trust Material to include everything.
|
||||
if (material.isSolid() || material.name().contains("COMPARATOR") || material.name().contains("DIODE")) {
|
||||
if (mat.isSolid() || mat.name().contains("COMPARATOR") || mat.name().contains("DIODE")) {
|
||||
MATERIAL_FLAGS[i] |= SOLID;
|
||||
}
|
||||
if (material.name().endsWith("_STAIRS")) {
|
||||
if (mat.name().endsWith("_STAIRS")) {
|
||||
MATERIAL_FLAGS[i] |= STAIRS;
|
||||
}
|
||||
|
||||
if (material.name().contains("SLAB") || material.name().contains("STEP")) {
|
||||
if (mat.name().contains("SLAB") || mat.name().contains("STEP")) {
|
||||
MATERIAL_FLAGS[i] |= SLABS;
|
||||
}
|
||||
|
||||
if(material.name().contains("SKULL"))
|
||||
if(mat.name().contains("SKULL"))
|
||||
MATERIAL_FLAGS[i] = SOLID;
|
||||
|
||||
if(material.name().contains("STATIONARY") || material.name().contains("LAVA") || material.name().contains("WATER")) {
|
||||
if(material.name().contains("LAVA")) {
|
||||
if(mat.name().contains("STATIONARY") || mat.name().contains("LAVA") || mat.name().contains("WATER")) {
|
||||
if(mat.name().contains("LAVA")) {
|
||||
MATERIAL_FLAGS[i] |= LIQUID | LAVA;
|
||||
} else MATERIAL_FLAGS[i] |= LIQUID | WATER;
|
||||
}
|
||||
|
||||
if (mat.name().contains("FENCE")) {
|
||||
if(!mat.name().contains("GATE")) MATERIAL_FLAGS[mat.ordinal()] |= FENCE;
|
||||
}
|
||||
if(mat.name().contains("WALL")) MATERIAL_FLAGS[mat.ordinal()] |= WALL;
|
||||
if(mat.name().contains("PLATE")) MATERIAL_FLAGS[mat.ordinal()] = 0;
|
||||
if(mat.name().contains("BED") && !mat.name().contains("ROCK")) MATERIAL_FLAGS[mat.ordinal()] |= SLABS;
|
||||
if(mat.name().contains("ICE")) MATERIAL_FLAGS[mat.ordinal()] |= ICE;
|
||||
if(mat.name().contains("CARPET")) MATERIAL_FLAGS[mat.ordinal()] = SOLID;
|
||||
if(mat.name().contains("SIGN")) MATERIAL_FLAGS[mat.ordinal()] = 0;
|
||||
}
|
||||
|
||||
// fix some types where isSolid() returns the wrong value
|
||||
@@ -60,18 +70,6 @@ public class Materials {
|
||||
// ladders
|
||||
MATERIAL_FLAGS[XMaterial.LADDER.parseMaterial().ordinal()] |= LADDER | SOLID;
|
||||
MATERIAL_FLAGS[XMaterial.VINE.parseMaterial().ordinal()] |= LADDER | SOLID;
|
||||
for (Material mat : Material.values()) {
|
||||
if(!mat.isBlock()) continue;
|
||||
if (mat.name().contains("FENCE")) {
|
||||
if(!mat.name().contains("GATE")) MATERIAL_FLAGS[mat.ordinal()] |= FENCE;
|
||||
}
|
||||
if(mat.name().contains("WALL")) MATERIAL_FLAGS[mat.ordinal()] |= WALL;
|
||||
if(mat.name().contains("PLATE")) MATERIAL_FLAGS[mat.ordinal()] = 0;
|
||||
if(mat.name().contains("BED") && !mat.name().contains("ROCK")) MATERIAL_FLAGS[mat.ordinal()] |= SLABS;
|
||||
if(mat.name().contains("ICE")) MATERIAL_FLAGS[mat.ordinal()] |= ICE;
|
||||
if(mat.name().contains("CARPET")) MATERIAL_FLAGS[mat.ordinal()] = SOLID;
|
||||
if(mat.name().contains("SIGN")) MATERIAL_FLAGS[mat.ordinal()] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
public static int getBitmask(Material material) {
|
||||
|
||||
Reference in New Issue
Block a user