Sueta

Phoenix Anti-Cheat

2.0.0-pre6

Anti-Hack System.

·Plugin



PAC is an anti-cheat system. Currently, it doesn't have check for all hack types but I'll add them soon. You can support us by reporting bugs :)

Discord: https://discord.gg/zB7797a
GitHub (for issues): Confuser2188/PhoenixAntiCheat

Explanation of new config

Example usage of actions section:

killaura:
  enabled: true
  actions: cancel:notify:vl>=3:pacmessage r u using <hack> m8?:vl==5:kick <player> <tag> st0p h4ck1ng n00b

In this usage, it will cancel all violations and notify admins. If violation is equal or more than 3, it will send message to player. If violation is equal to 5, it will kick him.

Use ' :' character for multiple commands. If you want to use it in message or something else, use ' \:' character.

Operators to check violation:

  • == (equal to)
  • > (greater than)
  • < (less than)
  • >= (greater than or equal to)
  • <= (less than or equal to)

Available internal commands: cancel, notify, pacmessage, pacbroadcast
Available placeholders: <player>, <tag>, <vl>, <ping>, <tps>, <hack> or <module>


The latest version of PAC currently compatible with
Spigot 1.7, 1.8, 1.9, 1.10. 1.11, 1.12, 1.13

Also, PAC supports protocol hack (1.7 - 1.8) and ViaVersion plugin.


If your server version is compatible with PAC, you can freely use it without any plugins.


Current list of permissions

Permissions

Phoenix.Command - You can use PAC commands if you have this permission
Phoenix.Notification - You can see notifications if you have this permission
Phoenix.Bypass.<module_name> - You can bypass this check if you have this permission

List of blocked hacks

Combat:

  • KillAura
  • ForceField
  • TpAura
  • Criticals

Movement:

  • Flight/Fly
  • Speed
  • Glide
  • LongJump
  • AirJump
  • Blink
  • AntiWeb
  • BunnyHop
  • InventoryMove
  • Spider
  • Timer
  • HeadRoll
  • Phase

Player:

  • ImpossibleInteract
  • MoreInventory
  • Regen

Chat:

  • Spam
  • UnknownCharacters

Render:

  • HealthESP/DamageIndicator

Other:

  • SpamBot
  • NBT exploit

WARNING: API is broken on version 2.0.0-pre6

API

API Version: 1

PACAPI

PACAPI: Main class for API

Usage:

import me.themuhammed2188.pac.api.PACAPI;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin{

    PACAPI pacapi;

    public void onEnable() {
        pacapi = new PACAPI(this);
    }
}

Methods:

PlayerPAC getPlayer(Player player) // Returns custom player class
int getMajorVersion() // Returns major version of API
int getMinorVersion() // Returns minor version of API
ServerPAC getServer() // Returns custom server class
String getVersionPAC() // Returns version of PAC plugin
Plugin getPlugin() // Returns PAC as a Plugin
void addCheck(Check check)  // Adds check to list
boolean removeCheck(Check check) // Removes check from list
Events

PlayerViolationEvent: Called when player is failed a check.

Usage:

import me.themuhammed2188.pac.api.HackType;
import me.themuhammed2188.pac.api.event.PlayerViolationEvent;
import me.themuhammed2188.pac.api.utils.Attribute;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin implements Listener{

    public void onEnable() {
        Bukkit.getServer().getPluginManager().registerEvents(this, this);
    }

    @EventHandler
    public void onViolation(PlayerViolationEvent event)
    {
        Player player = event.getPlayer();
        HackType hackType = event.getHackType();
        int VL = event.getVL();
        Attribute[] attributes = event.getAttributes();

        event.setCancelled(true);
    }
}

PlayerPacketReceivedEvent: Called when server received a packet from player.
PlayerPacketSentEvent: Called when server sent a packet to player.

Usage:

import me.themuhammed2188.pac.api.event.PlayerPacketReceivedEvent;
import me.themuhammed2188.pac.api.event.PlayerPacketSentEvent;
import me.themuhammed2188.pac.api.utils.Packet;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin implements Listener{

    public void onEnable() {
        Bukkit.getServer().getPluginManager().registerEvents(this, this);
    }

    @EventHandler
    public void onPacketReceived(PlayerPacketReceivedEvent event)
    {
        Player player = event.getPlayer();
        Packet packet = event.getPacket();

        event.setCancelled(true);
    }

    @EventHandler
    public void onPacketSent(PlayerPacketSentEvent event)
    {
        Player player = event.getPlayer();
        Packet packet = event.getPacket();

        event.setCancelled(true);
    }
}

PhoenixCommandEvent: Called when player used a command that starts with "/pac"

Usage:

import me.themuhammed2188.pac.api.event.PhoenixCommandEvent;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin implements Listener{

    public void onEnable() {
        Bukkit.getServer().getPluginManager().registerEvents(this, this);
    }

    @EventHandler
    public void onCommand(PhoenixCommandEvent event)
    {
        Player player = event.getPlayer();
        CommandSender sender = event.getSender();
        String[] args = event.getArgs();
        String cmd = event.getCmd();
    }
}
Check

You need to use addCheck(Check paramCheck) method in PACAPI to enable your module.

Usage:

import me.themuhammed2188.pac.api.Check;
import me.themuhammed2188.pac.api.utils.Attribute;
import org.bukkit.event.EventHandler;
import org.bukkit.event.player.PlayerMoveEvent;

public class TestCheck extends Check {

    public TestCheck() {
        super("Test");
    }

    @EventHandler
    public void onMove(PlayerMoveEvent e)
    {
        sendNotification(e.getPlayer(), "moving = hacking", 1, new Attribute[] { Attribute.get("type", 999)});
    }
}

Methods:

String getName()
void sendNotification(Player player, String info, int vl, Attribute[] attributes)
PlayerPAC

Methods:

Player getBukkitPlayer() // Returns org.bukkit.entity.Player
int getCPS() // Returns clicks per second
int getMovementPacketRate() // Returns movement packets per second
int getPing() // Returns NMS ping
boolean isOnGround() // Returns onGround method in PAC
ServerPAC

Methods:

List<Plugin> getPlugins() // Returns list of PAC addons
double getTPS() // Returns server ticks per second
String getVersion() // Returns server version
String getMinecraftVersion() // Returns server's minecraft version
String getSpigotName() // Returns server's build name
Attribute List
MorePackets:
("type", String: "instant") ("rate", int: rate) ("expected", expected)
("type", String: "sendRate") ("rate", int: preRate) ("expected", expected)

ASCII:
("msg", message)

Inventory:
("type", String: "move")
("type", String: "hit")

KillAura:
("type", String: "autoBlock")
("type", String: "forcefield") ("count", int: count)
("type", String: "instant") ("prev", fp) ("cur", float: diff)
("type", String: "static") ("val", float: val)
("type", String: "reaction") ("avg", float: avg) ("diff", float: diff) ("diffb", float: diffb)
("type", String: "zero") ("cur", float: cur) ("prev", int: 0)
("type", String: "wrong") ("diff", float: diff1) ("diff2" float: diff2)

HeadRoll:
("pitch", float: pitch)

Phase:
("block", org.bukkit.block.Block: b)

Speed:
("flags", String: flags) ("speed", double: dist) ("expected", double: expected)

Flight:
("type", String: "levitationSpeed") ("speed", double: speed) ("expected", double: expected)
("type", String: "fastLadder") ("speed", double: ladderSpeed) ("excepted", double: defaultSpeed)
("type", String: "miniJump") ("height", double: distHeight) ("jumpStep", int: jumpStep)
("type", String: "airJump") ("diff", double: adiff)
("type", String: "step") ("diff" double: adiff)
("type", String: "maxHeight") ("maxJumpHeight", double: max) ("height", double: adiff)
("type", String: "fastFall") ("height", double: height)
("type", String: "glide") ("fs", double: fallSpeed)
("type", String: "glide-b")

NBT:
("type", String: "bookPages") ("pages", int: list.size)
("type", String: "bookLength") ("length" int: list.length)

.


YouTube

Similar projects

Plugin →