From 205514413e84c5311b61127e917e847815e61e65 Mon Sep 17 00:00:00 2001 From: JustDoom <61824552+JustDoom@users.noreply.github.com> Date: Mon, 19 Jul 2021 19:27:06 +1000 Subject: [PATCH] timerB (i think works) and remove stuff in groundspoof --- .../flappyanticheat/checks/CheckManager.java | 4 +- .../movement/groundspoof/GroundSpoofA.java | 123 ++++++------------ .../checks/player/timer/TimerB.java | 39 ++++++ 3 files changed, 80 insertions(+), 86 deletions(-) create mode 100644 src/main/java/com/justdoom/flappyanticheat/checks/player/timer/TimerB.java diff --git a/src/main/java/com/justdoom/flappyanticheat/checks/CheckManager.java b/src/main/java/com/justdoom/flappyanticheat/checks/CheckManager.java index 0983e11..1d8a6af 100644 --- a/src/main/java/com/justdoom/flappyanticheat/checks/CheckManager.java +++ b/src/main/java/com/justdoom/flappyanticheat/checks/CheckManager.java @@ -17,6 +17,7 @@ import com.justdoom.flappyanticheat.checks.player.blockplace.BlockPlaceB; import com.justdoom.flappyanticheat.checks.player.skinblinker.SkinBlinkerA; import com.justdoom.flappyanticheat.checks.player.timer.TimerA; +import com.justdoom.flappyanticheat.checks.player.timer.TimerB; import io.github.retrooper.packetevents.PacketEvents; import org.bukkit.Bukkit; @@ -29,7 +30,7 @@ public CheckManager(FlappyAnticheat plugin) { } public void loadChecks(){ - PacketEvents.get().registerListener(new GroundSpoofA()); + Bukkit.getPluginManager().registerEvents(new GroundSpoofA(), plugin); PacketEvents.get().registerListener(new FlyA()); PacketEvents.get().registerListener(new FlyB()); PacketEvents.get().registerListener(new JumpA()); @@ -41,6 +42,7 @@ public void loadChecks(){ PacketEvents.get().registerListener(new SkinBlinkerA()); PacketEvents.get().registerListener(new AntiCactusA()); PacketEvents.get().registerListener(new TimerA()); + PacketEvents.get().registerListener(new TimerB()); PacketEvents.get().registerListener(new ForcefieldA()); PacketEvents.get().registerListener(new ReachA()); diff --git a/src/main/java/com/justdoom/flappyanticheat/checks/movement/groundspoof/GroundSpoofA.java b/src/main/java/com/justdoom/flappyanticheat/checks/movement/groundspoof/GroundSpoofA.java index e5b7d2b..dbd1b1e 100644 --- a/src/main/java/com/justdoom/flappyanticheat/checks/movement/groundspoof/GroundSpoofA.java +++ b/src/main/java/com/justdoom/flappyanticheat/checks/movement/groundspoof/GroundSpoofA.java @@ -1,11 +1,13 @@ package com.justdoom.flappyanticheat.checks.movement.groundspoof; +import com.justdoom.flappyanticheat.FlappyAnticheat; import com.justdoom.flappyanticheat.checks.Check; import com.justdoom.flappyanticheat.utils.PlayerUtil; import com.justdoom.flappyanticheat.utils.ServerUtil; import io.github.retrooper.packetevents.event.impl.PacketPlayReceiveEvent; import io.github.retrooper.packetevents.packettype.PacketType; import io.github.retrooper.packetevents.packetwrappers.play.in.flying.WrappedPacketInFlying; +import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Tag; @@ -13,6 +15,9 @@ import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerMoveEvent; import java.util.HashMap; import java.util.List; @@ -20,106 +25,54 @@ import java.util.UUID; import java.util.concurrent.atomic.AtomicReference; -public class GroundSpoofA extends Check { +public class GroundSpoofA extends Check implements Listener { private int buffer = 0; - private Map lastInAir = new HashMap<>(); - private Map lastOnGround = new HashMap<>(); - - public GroundSpoofA(){ + private boolean isLastOnGround; + + public GroundSpoofA() { super("GroundSpoof", "A", false); } - @Override - public void onPacketPlayReceive(PacketPlayReceiveEvent e) { + @EventHandler + public void check(PlayerMoveEvent e) { Player player = e.getPlayer(); - if (e.getPacketId() == PacketType.Play.Client.POSITION || e.getPacketId() == PacketType.Play.Client.POSITION_LOOK) { - - WrappedPacketInFlying packet = new WrappedPacketInFlying(e.getNMSPacket()); - - if(ServerUtil.lowTPS(("checks." + check + "." + checkType).toLowerCase()) || player.getLocation().getY() < 1 || player.isDead()){ - return; - } - - if (player.isInsideVehicle()){ - return; - } - - double groundY = 0.015625; - boolean client = packet.isOnGround(), server = packet.getY() % groundY < 0.0001; - - if (client && !server && !PlayerUtil.isOnClimbable(player)) { - if (++buffer > 1) { - - boolean boat = false; - boolean shulker = false; - boolean pistonHead = false; - - AtomicReference> nearby = new AtomicReference<>(); - sync(() -> nearby.set(player.getNearbyEntities(1.5, 10, 1.5))); - - for (Entity entity : nearby.get()) { - if (entity.getType() == EntityType.BOAT && player.getLocation().getY() > entity.getLocation().getY()) { - boat = true; - break; - } - - if (entity.getType() == EntityType.SHULKER && player.getLocation().getY() > entity.getBoundingBox().getMinY()) { - shulker = true; - break; - } - } - - for (Block block : PlayerUtil.getNearbyBlocks(new Location(player.getWorld(), packet.getX(), packet.getY(), packet.getZ()), 2)) { - - if (Tag.SHULKER_BOXES.isTagged(block.getType())) { - shulker = true; - break; - } - - if (block.getType() == Material.PISTON_HEAD) { - pistonHead = true; - break; - } - } + if (player.getLocation().getY() < 1 + || player.isDead() + || player.isInsideVehicle()) { + return; + } - if (!boat && !shulker && !pistonHead) { - String suspectedHack; - if(packet.getY() % groundY == 0.0){ - suspectedHack = "Criticals/Anti Hunger"; - } else { - suspectedHack = "NoFall"; - } - fail("mod=" + packet.getY() % groundY + " &7Client: &2" + client + " &7Server: &2" + server + " &7Suspected Hack: &2" + suspectedHack, player); - } + double groundY = 0.015625; + boolean client = player.isOnGround(), server = e.getTo().getY() % groundY < 0.0001; + + if (client && !server && !e.getFrom().getBlock().getType().name().contains("LADDER") + && !e.getTo().getBlock().getType().name().contains("LADDER") + && !e.getFrom().getBlock().getType().name().contains("VINE") + && !e.getTo().getBlock().getType().name().contains("VINE")) { + + boolean boat = false; + boolean shulker = false; + boolean pistonHead = false; + // TODO Implement better pistons + for (Entity entity : player.getNearbyEntities(1.5, 2, 1.5)) { + if (entity.getType() == EntityType.BOAT && player.getLocation().getY() > entity.getLocation().getY()) { + boat = true; + break; } - } else if (buffer > 0) buffer-=0.5; - - boolean inAir = true; - boolean lastInAir = this.lastInAir.getOrDefault(player.getUniqueId(), false); - - for (Block block : PlayerUtil.getNearbyBlocksConfigurable(new Location(player.getWorld(), player.getLocation().getX(), player.getLocation().getY() -1, player.getLocation().getZ()), 1, 0, 1)) { - if (block.getType() != Material.AIR) { - inAir = false; + if (entity.getType() == EntityType.SHULKER) { + shulker = true; break; } } - boolean lastOnGround = this.lastOnGround.getOrDefault(player.getUniqueId(), true); - - //check if they have packet on ground, are in the air, and were last in the air. - if (packet.isOnGround() && lastOnGround && inAir && lastInAir) { - String suspectedHack = "NoFall"; - - fail("mod=" + packet.getY() % groundY + " &7Client: &2" + client + " &7Server: &2" + server + " &7Suspected Hack: &2" + suspectedHack, player); - + if (!boat && !shulker && !pistonHead && ++buffer > 1) { + Bukkit.getScheduler().runTaskAsynchronously(FlappyAnticheat.getInstance(), () -> fail("mod=" + e.getTo().getY() % groundY + " &7Client: &2" + client + " &7Server: &2" + server, player)); } - - this.lastOnGround.put(player.getUniqueId(), packet.isOnGround()); - this.lastInAir.put(player.getUniqueId(), inAir); - } + } else if (buffer > 0) + buffer -= 0.5; } } \ No newline at end of file diff --git a/src/main/java/com/justdoom/flappyanticheat/checks/player/timer/TimerB.java b/src/main/java/com/justdoom/flappyanticheat/checks/player/timer/TimerB.java new file mode 100644 index 0000000..8ad94f3 --- /dev/null +++ b/src/main/java/com/justdoom/flappyanticheat/checks/player/timer/TimerB.java @@ -0,0 +1,39 @@ +package com.justdoom.flappyanticheat.checks.player.timer; + +import com.justdoom.flappyanticheat.checks.Check; +import io.github.retrooper.packetevents.event.impl.PacketPlayReceiveEvent; +import io.github.retrooper.packetevents.event.impl.PacketPlaySendEvent; +import io.github.retrooper.packetevents.packettype.PacketType; + +public class TimerB extends Check { + + private long lastFlyingTime = 0L; + private long balance = 0L; + + public TimerB() { + super("Timer", "B", true); + } + + @Override + public void onPacketPlayReceive(PacketPlayReceiveEvent event) { + if (event.getPacketId() == PacketType.Play.Client.POSITION) { + if (lastFlyingTime != 0L) { + final long now = System.currentTimeMillis(); + balance += 50L; + balance -= now - lastFlyingTime; + if (balance > 0) { + fail("balance=" + balance, event.getPlayer()); + balance = -50; + } + } + lastFlyingTime = System.currentTimeMillis(); + } + } + + @Override + public void onPacketPlaySend(PacketPlaySendEvent event){ + if (event.getPacketId() == PacketType.Play.Server.POSITION) { + balance -= 50; + } + } +}