mirror of
https://github.com/funkemunky/KauriV3.git
synced 2026-06-03 23:02:17 +00:00
Even more fun stuff
This commit is contained in:
@@ -3,92 +3,194 @@ package dev.brighten.ac.handler;
|
||||
import dev.brighten.ac.Anticheat;
|
||||
import dev.brighten.ac.data.APlayer;
|
||||
import dev.brighten.ac.data.obj.NormalAction;
|
||||
import dev.brighten.ac.packet.wrapper.WPacket;
|
||||
import dev.brighten.ac.packet.ProtocolVersion;
|
||||
import dev.brighten.ac.packet.wrapper.PacketType;
|
||||
import dev.brighten.ac.packet.wrapper.in.WPacketPlayInEntityAction;
|
||||
import dev.brighten.ac.packet.wrapper.in.WPacketPlayInFlying;
|
||||
import dev.brighten.ac.packet.wrapper.out.WPacketPlayOutEntityEffect;
|
||||
import dev.brighten.ac.packet.wrapper.in.WPacketPlayInUseEntity;
|
||||
import dev.brighten.ac.packet.wrapper.out.*;
|
||||
import dev.brighten.ac.utils.KLocation;
|
||||
import dev.brighten.ac.utils.MovementUtils;
|
||||
import lombok.val;
|
||||
import net.minecraft.server.v1_8_R3.Packet;
|
||||
import net.minecraft.server.v1_8_R3.PacketPlayInSteerVehicle;
|
||||
import net.minecraft.server.v1_8_R3.PacketPlayInTransaction;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
|
||||
import java.util.Deque;
|
||||
import java.util.LinkedList;
|
||||
import java.util.Optional;
|
||||
import java.util.*;
|
||||
|
||||
public class PacketHandler {
|
||||
public void process(APlayer player, Packet packetObject) {
|
||||
if(packetObject instanceof PacketPlayInTransaction) {
|
||||
long currentTimeMillis = System.currentTimeMillis();
|
||||
PacketPlayInTransaction packet = (PacketPlayInTransaction) packetObject;
|
||||
|
||||
if(packet.a() == 0) {
|
||||
if(Anticheat.INSTANCE.getKeepaliveProcessor().keepAlives.getIfPresent(packet.b()) != null) {
|
||||
Anticheat.INSTANCE.getKeepaliveProcessor().addResponse(player, packet.b());
|
||||
public void process(APlayer player, PacketType type, Object packetObject) {
|
||||
switch (type) {
|
||||
case CLIENT_TRANSACTION: {
|
||||
long currentTimeMillis = System.currentTimeMillis();
|
||||
PacketPlayInTransaction packet = (PacketPlayInTransaction) packetObject;
|
||||
|
||||
val optional = Anticheat.INSTANCE.getKeepaliveProcessor().getResponse(player);
|
||||
if(packet.a() == 0) {
|
||||
if(Anticheat.INSTANCE.getKeepaliveProcessor().keepAlives.getIfPresent(packet.b()) != null) {
|
||||
Anticheat.INSTANCE.getKeepaliveProcessor().addResponse(player, packet.b());
|
||||
|
||||
int current = Anticheat.INSTANCE.getKeepaliveProcessor().tick;
|
||||
val optional = Anticheat.INSTANCE.getKeepaliveProcessor().getResponse(player);
|
||||
|
||||
optional.ifPresent(ka -> {
|
||||
player.addPlayerTick();
|
||||
int current = Anticheat.INSTANCE.getKeepaliveProcessor().tick;
|
||||
|
||||
player.getLagInfo().setLastTransPing(player.getLagInfo().getTransPing());
|
||||
player.getLagInfo().setTransPing(current - ka.start);
|
||||
optional.ifPresent(ka -> {
|
||||
player.addPlayerTick();
|
||||
|
||||
if(player.instantTransaction.size() > 0) {
|
||||
synchronized (player.instantTransaction) {
|
||||
Deque<Short> toRemove = new LinkedList<>();
|
||||
player.instantTransaction.forEach((key, tuple) -> {
|
||||
if((currentTimeMillis - tuple.one.getStamp())
|
||||
> player.getLagInfo().getTransPing() * 52L + 750L) {
|
||||
tuple.two.accept(tuple.one);
|
||||
toRemove.add(key);
|
||||
player.getLagInfo().setLastTransPing(player.getLagInfo().getTransPing());
|
||||
player.getLagInfo().setTransPing(current - ka.start);
|
||||
|
||||
if(player.instantTransaction.size() > 0) {
|
||||
synchronized (player.instantTransaction) {
|
||||
Deque<Short> toRemove = new LinkedList<>();
|
||||
player.instantTransaction.forEach((key, tuple) -> {
|
||||
if((currentTimeMillis - tuple.one.getStamp())
|
||||
> player.getLagInfo().getTransPing() * 52L + 750L) {
|
||||
tuple.two.accept(tuple.one);
|
||||
toRemove.add(key);
|
||||
}
|
||||
});
|
||||
Short key = null;
|
||||
while((key = toRemove.poll()) != null) {
|
||||
player.instantTransaction.remove(key);
|
||||
}
|
||||
});
|
||||
Short key = null;
|
||||
while((key = toRemove.poll()) != null) {
|
||||
player.instantTransaction.remove(key);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(Math.abs(player.getLagInfo().getLastTransPing() - player.getLagInfo().getTransPing()) > 1) {
|
||||
player.getLagInfo().getLastPingDrop().reset();
|
||||
}
|
||||
if(Math.abs(player.getLagInfo().getLastTransPing()
|
||||
- player.getLagInfo().getTransPing()) > 1) {
|
||||
player.getLagInfo().getLastPingDrop().reset();
|
||||
}
|
||||
|
||||
ka.getReceived(player.getBukkitPlayer().getUniqueId()).ifPresent(r -> {
|
||||
r.receivedStamp = currentTimeMillis;
|
||||
ka.getReceived(player.getBukkitPlayer().getUniqueId()).ifPresent(r -> {
|
||||
r.receivedStamp = currentTimeMillis;
|
||||
});
|
||||
|
||||
synchronized (player.keepAliveStamps) {
|
||||
List<NormalAction> toRemove = new ArrayList<>();
|
||||
for (NormalAction action : player.keepAliveStamps) {
|
||||
if(action.stamp > ka.start) continue;
|
||||
|
||||
action.action.accept(ka);
|
||||
toRemove.add(action);
|
||||
}
|
||||
|
||||
toRemove.forEach(player.keepAliveStamps::remove);
|
||||
toRemove.clear();
|
||||
}
|
||||
});
|
||||
|
||||
for (NormalAction action : player.keepAliveStamps) {
|
||||
if(action.stamp > ka.start) continue;
|
||||
|
||||
action.action.accept(ka);
|
||||
player.keepAliveStamps.remove(action);
|
||||
}
|
||||
});
|
||||
player.getLagInfo().getLastClientTransaction().reset();
|
||||
} else {
|
||||
Optional.ofNullable(player.instantTransaction.remove(packet.b()))
|
||||
.ifPresent(t -> t.two.accept(t.one));
|
||||
player.getLagInfo().getLastClientTransaction().reset();
|
||||
} else {
|
||||
Optional.ofNullable(player.instantTransaction.remove(packet.b()))
|
||||
.ifPresent(t -> t.two.accept(t.one));
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case FLYING: {
|
||||
WPacketPlayInFlying packet = (WPacketPlayInFlying) packetObject;
|
||||
|
||||
player.getEntityLocationHandler().onFlying();
|
||||
|
||||
if(player.getMovement().isExcuseNextFlying()) {
|
||||
player.getMovement().setExcuseNextFlying(false);
|
||||
return;
|
||||
}
|
||||
|
||||
if(player.getPlayerVersion().isOrAbove(ProtocolVersion.V1_17)
|
||||
&& packet.isMoved() && packet.isLooked()
|
||||
&& MovementUtils.isSameLocation(new KLocation(packet.getX(), packet.getY(), packet.getZ()),
|
||||
player.getMovement().getTo().getLoc())) {
|
||||
player.getMovement().setExcuseNextFlying(true);
|
||||
}
|
||||
|
||||
player.getMovement().process(packet, System.currentTimeMillis());
|
||||
break;
|
||||
}
|
||||
case ENTITY_EFFECT: {
|
||||
WPacketPlayOutEntityEffect packet = (WPacketPlayOutEntityEffect) packetObject;
|
||||
|
||||
player.getPotionHandler().onPotionEffect(packet);
|
||||
break;
|
||||
}
|
||||
case SERVER_POSITION: {
|
||||
player.getMovement().addPosition((WPacketPlayOutPosition) packetObject);
|
||||
break;
|
||||
}
|
||||
case ATTACH: {
|
||||
WPacketPlayOutAttachEntity packet = (WPacketPlayOutAttachEntity) packetObject;
|
||||
|
||||
if(packet.getHoldingEntityId() != -1) {
|
||||
player.getInfo().setInVehicle(true);
|
||||
player.getInfo().getVehicleSwitch().reset();
|
||||
} else {
|
||||
player.getInfo().setInVehicle(false);
|
||||
player.getInfo().getVehicleSwitch().reset();
|
||||
}
|
||||
break;
|
||||
}
|
||||
case STEER_VEHICLE: {
|
||||
PacketPlayInSteerVehicle packet = (PacketPlayInSteerVehicle) packetObject;
|
||||
|
||||
// Check for isUnmount()
|
||||
if(player.getBukkitPlayer().isInsideVehicle() && packet.d()) {
|
||||
player.getInfo().getVehicleSwitch().reset();
|
||||
player.getInfo().setInVehicle(false);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case ENTITY_ACTION: {
|
||||
WPacketPlayInEntityAction packet = (WPacketPlayInEntityAction) packetObject;
|
||||
|
||||
switch (packet.getAction()) {
|
||||
case START_SNEAKING: {
|
||||
player.getInfo().setSneaking(true);
|
||||
break;
|
||||
}
|
||||
case STOP_SNEAKING: {
|
||||
player.getInfo().setSneaking(false);
|
||||
break;
|
||||
}
|
||||
case START_SPRINTING: {
|
||||
player.getInfo().setSprinting(true);
|
||||
break;
|
||||
}
|
||||
case STOP_SPRINTING: {
|
||||
player.getInfo().setSprinting(false);
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case ENTITY_TELEPORT: {
|
||||
WPacketPlayOutEntityTeleport packet = (WPacketPlayOutEntityTeleport) packetObject;
|
||||
|
||||
player.getEntityLocationHandler().onTeleportSent(packet);
|
||||
break;
|
||||
}
|
||||
case ENTITY:
|
||||
case ENTITY_MOVE:
|
||||
case ENTITY_LOOK:
|
||||
case ENTITY_MOVELOOK: {
|
||||
WPacketPlayOutEntity packet = (WPacketPlayOutEntity) packetObject;
|
||||
|
||||
player.getEntityLocationHandler().onRelPosition(packet);
|
||||
break;
|
||||
}
|
||||
case USE_ENTITY: {
|
||||
WPacketPlayInUseEntity packet = (WPacketPlayInUseEntity) packetObject;
|
||||
|
||||
Entity target = packet.getEntity(player.getBukkitPlayer().getWorld());
|
||||
|
||||
if(target instanceof LivingEntity) {
|
||||
player.getInfo().setTarget((LivingEntity) target);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
player.callPacket(packetObject);
|
||||
}
|
||||
|
||||
public void process(APlayer player, WPacket packetObject) {
|
||||
|
||||
if(packetObject instanceof WPacketPlayInFlying) {
|
||||
WPacketPlayInFlying packet = (WPacketPlayInFlying) packetObject;
|
||||
|
||||
player.getMovement().process(packet, System.currentTimeMillis());
|
||||
} else if(packetObject instanceof WPacketPlayOutEntityEffect) {
|
||||
WPacketPlayOutEntityEffect packet = (WPacketPlayOutEntityEffect) packetObject;
|
||||
|
||||
player.getPotionHandler().onPotionEffect(packet);
|
||||
}
|
||||
|
||||
player.callPacket(packetObject);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user