Skip to content

Commit

Permalink
Merge branch 'main' into main
Browse files Browse the repository at this point in the history
  • Loading branch information
JustDoom authored May 18, 2021
2 parents fdf861e + 592b7cd commit 84e98b2
Show file tree
Hide file tree
Showing 23 changed files with 358 additions and 76 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>com.justdoom</groupId>
<artifactId>FlappyAnticheat</artifactId>
<version>1.5.2-BETA</version>
<version>1.6.0-BETA</version>
<packaging>jar</packaging>

<name>FlappyAnticheat</name>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import com.justdoom.flappyanticheat.checks.CheckManager;
import com.justdoom.flappyanticheat.commands.FlagClickCommand;
import com.justdoom.flappyanticheat.commands.FlappyACCommand;
import com.justdoom.flappyanticheat.customevents.EventTests;
import com.justdoom.flappyanticheat.data.FileData;
import com.justdoom.flappyanticheat.data.PlayerDataManager;
import com.justdoom.flappyanticheat.events.tabcomplete.FlappyAnticheatTabCompletion;
Expand Down Expand Up @@ -72,14 +71,12 @@ public String call() throws Exception {
this.getServer().getPluginManager().registerEvents(new PlayerConnectionListener(this), this);

this.getCommand("flappyanticheat").setExecutor(new FlappyACCommand());
this.getCommand("flappyacpunish").setExecutor(new FlagClickCommand());
this.getCommand("flappyacflagclick").setExecutor(new FlagClickCommand());
this.getCommand("flappyanticheat").setTabCompleter(new FlappyAnticheatTabCompletion());

loadModules();

PacketEvents.get().init();

Bukkit.getServer().getPluginManager().registerEvents(new EventTests(), this);
}

@Override
Expand Down
19 changes: 12 additions & 7 deletions src/main/java/com/justdoom/flappyanticheat/checks/Check.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,6 @@ public class Check extends PacketListenerAbstract {
public String check, checkType;
public boolean experimental;

public CheckData checkData;

public Check(String check, String checkType, boolean experimental) {

this.check = check;
Expand All @@ -53,12 +51,16 @@ public void fail(String debug, Player player) {
flagmsg = flagmsg.replace("{player}", player.getName()).replace("{check}", this.check + " " + checkType).replace("{vl}", String.valueOf(FlappyAnticheat.getInstance().violationHandler.getViolations(this, player)));
String hover = FlappyAnticheat.getInstance().getConfig().getString("messages.hover").replace("{ping}", String.valueOf(Ping.getPing(player))).replace("{debug}", debug).replace("{tps}", String.valueOf(PacketEvents.get().getServerUtils().getTPS()));

if(experimental){
flagmsg = flagmsg+"&r*";
}

TextComponent component = new TextComponent(Color.translate(flagmsg));
component.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder(Color.translate(hover)).create()));
component.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/flappyacpunish " + player.getName()));
component.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/flappyacflagclick " + player.getName()));

FlappyAnticheat.getInstance().dataManager.dataMap.values()
.stream().filter(playerData -> player.hasPermission("flappyanticheat.alerts"))
.stream().filter(playerData -> player.hasPermission("flappyanticheat.alerts") && !FlappyAnticheat.getInstance().dataManager.alertsDisabled.contains(player))
.forEach(playerData -> playerData.player.spigot().sendMessage(component));

if (FlappyAnticheat.getInstance().getConfig().getBoolean("messages.flag-to-console")) {
Expand All @@ -77,10 +79,13 @@ public void punish(Player player, String path){

for(String command: FlappyAnticheat.getInstance().getConfig().getStringList(path + ".punish-commands")) {
command = command.replace("{player}", player.getName());
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command);
String finalCommand = command;
Bukkit.getScheduler().runTask(FlappyAnticheat.getInstance(), () -> Bukkit.dispatchCommand(Bukkit.getConsoleSender(), finalCommand));
}
for(Player p:Bukkit.getOnlinePlayers()){
p.sendMessage(Color.translate(FlappyAnticheat.getInstance().getConfig().getString("messages.punish")).replace("{player}", player.getName()));
if(FlappyAnticheat.getInstance().getConfig().getBoolean(path + ".broadcast-punishment")) {
for (Player p : Bukkit.getOnlinePlayers()) {
p.sendMessage(Color.translate(FlappyAnticheat.getInstance().getConfig().getString("messages.punish")).replace("{player}", player.getName()));
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,16 @@
import com.justdoom.flappyanticheat.FlappyAnticheat;
import com.justdoom.flappyanticheat.checks.movement.fly.FlyA;
import com.justdoom.flappyanticheat.checks.movement.groundspoof.GroundSpoofA;
import com.justdoom.flappyanticheat.checks.movement.noslow.NoSlowA;
import com.justdoom.flappyanticheat.checks.movement.speed.SpeedA;
import com.justdoom.flappyanticheat.checks.player.blockplace.BlockPlaceA;
import com.justdoom.flappyanticheat.checks.player.badpackets.BadPacketsA;
import com.justdoom.flappyanticheat.checks.player.badpackets.BadPacketsB;
import com.justdoom.flappyanticheat.checks.combat.killaura.KillAuraA;
import com.justdoom.flappyanticheat.checks.combat.autoclicker.AutoClickerA;
import com.justdoom.flappyanticheat.data.PlayerData;
import com.justdoom.flappyanticheat.checks.player.blockplace.BlockPlaceB;
import com.justdoom.flappyanticheat.checks.player.skinblinker.SkinBlinkerA;
import io.github.retrooper.packetevents.PacketEvents;
import io.github.retrooper.packetevents.event.PacketListener;
import org.bukkit.Bukkit;

public class CheckManager {
Expand All @@ -29,5 +31,10 @@ public void loadChecks(){
PacketEvents.get().registerListener(new NoSlowA());
PacketEvents.get().registerListener(new AutoClickerA());
PacketEvents.get().registerListener(new KillAuraA());
PacketEvents.get().registerListener(new SkinBlinkerA());
PacketEvents.get().registerListener(new SpeedA());

Bukkit.getPluginManager().registerEvents(new BlockPlaceA(), plugin);
Bukkit.getPluginManager().registerEvents(new BlockPlaceB(), plugin);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,6 @@

public class GroundSpoofA extends Check {

private final double groundY = 0.015625;

private int buffer = 0;

public GroundSpoofA(){
Expand All @@ -42,13 +40,15 @@ public void onPacketPlayReceive(PacketPlayReceiveEvent e) {

WrappedPacketInFlying packet = new WrappedPacketInFlying(e.getNMSPacket());

double groundY = 0.015625;
boolean client = packet.isOnGround(), server = packet.getY() % groundY < 0.0001;

if (client != server) {
if (++buffer > 1) {

//player.sendMessage("C: " + client + " S: " + server);

if(player.getLocation().getY() < 1){
return;
}
boolean boat = false;
boolean shulker = false;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,34 +9,54 @@
import io.github.retrooper.packetevents.packetwrappers.play.in.entityaction.WrappedPacketInEntityAction;
import io.github.retrooper.packetevents.packetwrappers.play.in.flying.WrappedPacketInFlying;
import io.github.retrooper.packetevents.packetwrappers.play.in.helditemslot.WrappedPacketInHeldItemSlot;
import io.github.retrooper.packetevents.packetwrappers.play.in.useentity.WrappedPacketInUseEntity;
import io.github.retrooper.packetevents.packetwrappers.play.out.helditemslot.WrappedPacketOutHeldItemSlot;
import org.bukkit.Location;

@CheckData(name = "Fly", type = "A", experimental = false)
public class NoSlowA extends Check {

private int buffer;
private int hitTicks;
private double lastDist;
private Location lastLocation;

public NoSlowA(){
super("NoSlow", "A", false);
super("NoSlow", "A", true);
}

//doesnt work

@Override
public void onPacketPlayReceive(PacketPlayReceiveEvent event) {
if (event.getPacketId() == PacketType.Play.Client.POSITION || event.getPacketId() == PacketType.Play.Client.POSITION_LOOK) {
if(event.getPacketId() == PacketType.Play.Client.POSITION){
WrappedPacketInFlying packet = new WrappedPacketInFlying(event.getNMSPacket());
WrappedPacketInHeldItemSlot packet2 = new WrappedPacketInHeldItemSlot(event.getNMSPacket());
if(event.getPlayer().isBlocking() && event.getPlayer().isSprinting()){
if (++buffer > 10) {
final int slot = packet2.getCurrentSelectedSlot() == 8 ? 1 : 8;
final WrappedPacketOutHeldItemSlot wrapper = new WrappedPacketOutHeldItemSlot(slot);
PacketEvents.get().getPlayerUtils().sendPacket(event.getPlayer(), wrapper);
buffer /= 2;

Location currentLoc = new Location(event.getPlayer().getWorld(), packet.getX(), packet.getY(), packet.getZ());
Location lastLocation = this.lastLocation;
this.lastLocation = currentLoc;

double dist = test(lastLocation, currentLoc);
double lastDist = this.lastDist;
this.lastDist = dist;

if(event.getPlayer().isSprinting() && ++hitTicks <= 2){
double accel = Math.abs(dist - lastDist);
//event.getPlayer().sendMessage(String.valueOf(accel));
if(accel < 0.027){
//event.getPlayer().sendMessage("YEEEEEEEEEEEES");
//fail("test", event.getPlayer());
}
} else {
buffer -= buffer > 0 ? 0.25 : 0;
}

} else if (event.getPacketId() == PacketType.Play.Client.USE_ENTITY) {
WrappedPacketInUseEntity packet = new WrappedPacketInUseEntity(event.getNMSPacket());
hitTicks = 0;
}
}

public double test(Location from, Location to){
double dx = to.getX() - from.getX();
double dz = to.getZ() - from.getZ();
return Math.sqrt(dx * dx + dz * dz);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package com.justdoom.flappyanticheat.checks.movement.speed;

import com.justdoom.flappyanticheat.checks.Check;
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.entity.Player;

public class SpeedA extends Check {

private int onGroundTime = 0;
private boolean lastOnGround;

public SpeedA(){
super("Speed", "A", true);
}

@Override
public void onPacketPlayReceive(PacketPlayReceiveEvent event) {
if(event.getPacketId() == PacketType.Play.Client.POSITION){
WrappedPacketInFlying packet = new WrappedPacketInFlying(event.getNMSPacket());
Player player = event.getPlayer();

double deltaX = packet.getX() - player.getLocation().getX();
double deltaZ = packet.getZ() - player.getLocation().getZ();

double deltaXZ = Math.hypot(deltaX, deltaZ);

boolean onGround = packet.isOnGround();
boolean lastOnGround = this.lastOnGround;
this.lastOnGround = onGround;

if(deltaXZ > 0.4) {
//player.sendMessage(String.valueOf(deltaXZ));
}

/**double distX = packet.getX() - player.getLocation().getX();
double distZ = packet.getZ() - player.getLocation().getZ();
double dist = (distX * distX) + (distZ * distZ);
double lastDist = this.lastDist;
this.lastDist = dist;
boolean onGround = packet.isOnGround();
boolean lastOnGround = this.lastOnGround;
this.lastOnGround = onGround;
float friction = 0.91F;
double shiftedLastDist = lastDist * friction;
double equalness = dist - shiftedLastDist;
double scaledEqualness = equalness * 138;
if(!onGround && !lastOnGround){
if(scaledEqualness >= 1.0){
Bukkit.broadcastMessage(String.valueOf(scaledEqualness));
}
}
if(packet.isOnGround()){
onGroundTime++;
}
if(onGroundTime >= 15){
//double expected = thisMove / data.getGroundTime() + baseMove;
}**/
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,9 @@ public void onPacketPlayReceive(PacketPlayReceiveEvent event) {
if (event.getPacketId() == PacketType.Play.Client.POSITION || event.getPacketId() == PacketType.Play.Client.POSITION_LOOK) {
float pitch = event.getPlayer().getLocation().getPitch();
if(Math.abs(pitch) > 90F || Math.abs(pitch) < -90F){
fail("pitch=" + pitch, event.getPlayer());
String suspectedHack = "Old/Bad KillAura (This cannot false)";
fail("&7pitch=&2" + pitch + " &7Suspected Hack: &2" + suspectedHack, event.getPlayer());
}
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,10 @@
import com.justdoom.flappyanticheat.data.PlayerData;
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 io.github.retrooper.packetevents.packetwrappers.play.in.useentity.WrappedPacketInUseEntity;

public class BadPacketsB extends Check {

private boolean wasLastArmAnimation = true;
private boolean wasLastArmAnimation = false;

public BadPacketsB(){
super("BadPackets", "B", false);
Expand All @@ -20,7 +18,7 @@ public BadPacketsB(){
public void onPacketPlayReceive(PacketPlayReceiveEvent event) {
if (event.getPacketId() == PacketType.Play.Client.USE_ENTITY){
if(!wasLastArmAnimation){
fail("ArmAnimation=false", event.getPlayer());
fail("&7ArmAnimation=&2false", event.getPlayer());
}
} else if (event.getPacketId() == PacketType.Play.Client.ARM_ANIMATION){
wasLastArmAnimation = true;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package com.justdoom.flappyanticheat.checks.player.blockplace;

import com.justdoom.flappyanticheat.FlappyAnticheat;
import com.justdoom.flappyanticheat.checks.Check;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockPlaceEvent;

import java.util.ArrayList;
import java.util.List;

public class BlockPlaceA extends Check implements Listener {

public BlockPlaceA() {
super("BlockPlace", "A", true);
}

@EventHandler
public void onBlockPlace(BlockPlaceEvent event) {
Player player = event.getPlayer();

Block block = event.getBlock();
boolean placedOnAir = true;

List<Material> blockFace = new ArrayList<Material>() {{
add(block.getRelative(BlockFace.UP).getType());
add(block.getRelative(BlockFace.NORTH).getType());
add(block.getRelative(BlockFace.EAST).getType());
add(block.getRelative(BlockFace.SOUTH).getType());
add(block.getRelative(BlockFace.WEST).getType());
add(block.getRelative(BlockFace.DOWN).getType());
}};

for (Material material : blockFace) {
if (material != Material.AIR && material != Material.LAVA && material != Material.WATER && material != Material.CAVE_AIR && material != Material.VOID_AIR) {
placedOnAir = false;
break;
}
}
if (placedOnAir) {
Bukkit.getScheduler().runTaskAsynchronously(FlappyAnticheat.getInstance(), () -> fail("faces=" + blockFace, player));
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.justdoom.flappyanticheat.checks.player.blockplace;

import com.justdoom.flappyanticheat.FlappyAnticheat;
import com.justdoom.flappyanticheat.checks.Check;
import org.bukkit.Bukkit;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.inventory.ItemStack;

public class BlockPlaceB extends Check implements Listener {

public BlockPlaceB() {
super("BlockPlace", "B", true);
}

@EventHandler
public void onBlockPlace(BlockPlaceEvent event) {
Player player = event.getPlayer();

Block block = event.getBlock();

ItemStack hand = player.getItemInHand();

if (block.getType() != hand.getType()) {
Bukkit.getScheduler().runTaskAsynchronously(FlappyAnticheat.getInstance(), () -> fail("hand=" + hand.getType() + " placed=" + block.getType(), player));
}
}
}
Loading

0 comments on commit 84e98b2

Please sign in to comment.