From 99ac5ec942d94dfdcf18ee3e4b68a201c22b1955 Mon Sep 17 00:00:00 2001 From: Dawson <30784509+funkemunky@users.noreply.github.com> Date: Fri, 30 Sep 2022 16:17:24 -0400 Subject: [PATCH] Updating Phase check --- .../ac/check/impl/movement/Phase.java | 58 +++++++++++++++---- .../brighten/ac/handler/MovementHandler.java | 1 + .../java/dev/brighten/ac/utils/KLocation.java | 7 +++ .../ac/utils/world/blocks/DynamicFence.java | 2 +- .../ac/utils/world/blocks/DynamicPane.java | 2 +- .../ac/utils/world/blocks/DynamicWall.java | 2 +- 6 files changed, 59 insertions(+), 13 deletions(-) diff --git a/src/main/java/dev/brighten/ac/check/impl/movement/Phase.java b/src/main/java/dev/brighten/ac/check/impl/movement/Phase.java index f7b31f1..33990fd 100644 --- a/src/main/java/dev/brighten/ac/check/impl/movement/Phase.java +++ b/src/main/java/dev/brighten/ac/check/impl/movement/Phase.java @@ -3,14 +3,11 @@ package dev.brighten.ac.check.impl.movement; import dev.brighten.ac.api.check.CheckType; import dev.brighten.ac.check.Check; import dev.brighten.ac.check.CheckData; -import dev.brighten.ac.check.WTimedAction; +import dev.brighten.ac.check.WCancellable; import dev.brighten.ac.data.APlayer; import dev.brighten.ac.packet.ProtocolVersion; import dev.brighten.ac.packet.wrapper.in.WPacketPlayInFlying; -import dev.brighten.ac.utils.Helper; -import dev.brighten.ac.utils.KLocation; -import dev.brighten.ac.utils.Materials; -import dev.brighten.ac.utils.XMaterial; +import dev.brighten.ac.utils.*; import dev.brighten.ac.utils.timer.Timer; import dev.brighten.ac.utils.timer.impl.TickTimer; import dev.brighten.ac.utils.world.types.SimpleCollisionBox; @@ -46,13 +43,39 @@ public class Phase extends Check { private final Timer lastFlag = new TickTimer(5); private KLocation fromWhereShitAintBad = null; + private int ticks; - WTimedAction packet = (packet, now) -> { + private KLocation toSetback = null; + + + WCancellable packet = (packet) -> { + if(packet.isMoved() && ticks < 3) { + ticks++; + return false; + } + + if(toSetback != null && packet.isMoved()) { + if(player.getMovement().getTo().getLoc().toVector().distanceSquared(toSetback.toVector()) < 0.0001) { + toSetback = null; + debug("Reached loc"); + } else { + RunUtils.task(() -> player.getBukkitPlayer().teleport(toSetback + .toLocation(player.getBukkitPlayer().getWorld()))); + debug("Hasnt reached location"); + return true; + } + } if(!packet.isMoved() || player.getCreation().isNotPassed(800L) - || ((player.getInfo().lastRespawn.isNotPassed(500L) - || player.getMovement().getMoveTicks() == 0) && lastFlag.isPassed(12)) + || player.getInfo().lastRespawn.isNotPassed(10) + || (player.getMovement().getMoveTicks() == 0 + && player.getMovement().getPosLocs().stream() + .anyMatch(kloc -> kloc.toVector() + .distanceSquared(player.getMovement().getTo().getLoc().toVector()) < 0.01)) || player.getInfo().isCreative() || player.getInfo().isCanFly()) { - return; + debug("Returned: " + player.getMovement().getMoveTicks() + "," + player.getMovement().getPosLocs().stream() + .anyMatch(kloc -> kloc.toVector() + .distanceSquared(player.getMovement().getTo().getLoc().toVector()) < 0.01)); + return false; } SimpleCollisionBox fromBox = player.getMovement().getFrom().getBox().copy(), toBox = fromBox.copy(); @@ -81,8 +104,23 @@ public class Phase extends Check { toBox.offset(0, 0, deltaZ); - debug("(%s): new=[%.3f, %.3f, %.3f] old=[%.3f, %.3f, %.3f]", deltaX, deltaY, deltaZ, + KLocation calculatedTo = player.getMovement().getFrom().getLoc().clone().add(deltaX, deltaY, deltaZ); + + double dx = Math.abs(deltaX - player.getMovement().getDeltaX()), + dy = Math.abs(deltaY - player.getMovement().getDeltaY()), + dz = Math.abs(deltaZ - player.getMovement().getDeltaZ()); + + double totalDelta = dx + dy + dz; + + if(totalDelta > 0.001) { + RunUtils.task(() -> player.getBukkitPlayer().teleport(calculatedTo + .toLocation(player.getBukkitPlayer().getWorld()))); + flag("x=%.4f, y=%.4f, z=%.4f", dx, dy, dz); + } + + debug("(%s) [%.5f]: new=[%.3f, %.3f, %.3f] old=[%.3f, %.3f, %.3f]", collisions.size(), totalDelta, deltaX, deltaY, deltaZ, player.getMovement().getDeltaX(), player.getMovement().getDeltaY(), player.getMovement().getDeltaZ()); + return false; }; } diff --git a/src/main/java/dev/brighten/ac/handler/MovementHandler.java b/src/main/java/dev/brighten/ac/handler/MovementHandler.java index 414cfaa..d1c4c29 100644 --- a/src/main/java/dev/brighten/ac/handler/MovementHandler.java +++ b/src/main/java/dev/brighten/ac/handler/MovementHandler.java @@ -39,6 +39,7 @@ public class MovementHandler { private float deltaYaw, deltaPitch, lDeltaYaw, lDeltaPitch, pitchGCD, lastPitchGCD, yawGCD, lastYawGCD; @Getter private int moveTicks; + @Getter private final List posLocs = new ArrayList<>(); @Getter private final List lookingAtBoxes = new ArrayList<>(); diff --git a/src/main/java/dev/brighten/ac/utils/KLocation.java b/src/main/java/dev/brighten/ac/utils/KLocation.java index ae19d80..11e36a1 100644 --- a/src/main/java/dev/brighten/ac/utils/KLocation.java +++ b/src/main/java/dev/brighten/ac/utils/KLocation.java @@ -58,6 +58,13 @@ public class KLocation { return new KLocation(x, y, z, yaw, pitch, timeStamp); } + public KLocation add(double x, double y, double z) { + this.x+= x; + this.y+= y; + this.z+= z; + return this; + } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/src/main/java/dev/brighten/ac/utils/world/blocks/DynamicFence.java b/src/main/java/dev/brighten/ac/utils/world/blocks/DynamicFence.java index bef5501..fb6e3c4 100644 --- a/src/main/java/dev/brighten/ac/utils/world/blocks/DynamicFence.java +++ b/src/main/java/dev/brighten/ac/utils/world/blocks/DynamicFence.java @@ -55,7 +55,7 @@ public class DynamicFence implements CollisionFactory { private static boolean fenceConnects(ProtocolVersion v, APlayer player, WrappedBlock fenceBlock, BlockFace direction) { Optional targetBlock = BlockUtils.getRelative(player, fenceBlock.getLocation(), direction, 1); - if(targetBlock.isEmpty()) return false; + if(!targetBlock.isPresent()) return false; Material target = targetBlock.get().getType(); Material fence = fenceBlock.getType(); diff --git a/src/main/java/dev/brighten/ac/utils/world/blocks/DynamicPane.java b/src/main/java/dev/brighten/ac/utils/world/blocks/DynamicPane.java index aa6e18f..a1b24c4 100644 --- a/src/main/java/dev/brighten/ac/utils/world/blocks/DynamicPane.java +++ b/src/main/java/dev/brighten/ac/utils/world/blocks/DynamicPane.java @@ -48,7 +48,7 @@ public class DynamicPane implements CollisionFactory { private static boolean fenceConnects(ProtocolVersion v, APlayer player, WrappedBlock fenceBlock, BlockFace direction) { Optional targetBlock = BlockUtils.getRelative(player, fenceBlock.getLocation(), direction, 1); - if(targetBlock.isEmpty()) return false; + if(!targetBlock.isPresent()) return false; Material target = targetBlock.get().getType(); if (!isPane(target)&&DynamicFence.isBlacklisted(target)) diff --git a/src/main/java/dev/brighten/ac/utils/world/blocks/DynamicWall.java b/src/main/java/dev/brighten/ac/utils/world/blocks/DynamicWall.java index af01860..e784795 100644 --- a/src/main/java/dev/brighten/ac/utils/world/blocks/DynamicWall.java +++ b/src/main/java/dev/brighten/ac/utils/world/blocks/DynamicWall.java @@ -62,7 +62,7 @@ public class DynamicWall implements CollisionFactory { private static boolean wallConnects(ProtocolVersion v, APlayer player, WrappedBlock fenceBlock, BlockFace direction) { Optional targetBlock = BlockUtils.getRelative(player, fenceBlock.getLocation(), direction, 1); - if(targetBlock.isEmpty()) return false; + if(!targetBlock.isPresent()) return false; Material target = targetBlock.get().getType();