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 n00bIn 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 listEvents
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 PACServerPAC
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 nameAttribute 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).
Similar projects
Plugin →Let Me Despawn
Improves performance by tweaking mob despawn rules. Say bye to pesky unintentional persistent mobs.
25MSueta
JourneyMap
Real-time map used for mapping in-game or your browser as you explore.
14.7MSueta
Emotecraft
Create your own emotes in Minecraft.
7.5MSueta
Simple Tpa
A simple tpa plugin which sends requests
5.4MSueta
Common Network
Forge and Fabric Unified Networking Solution
3.9MSueta
Set Home
A lightweight plugin for players to set their homes.
3.8MSueta
