Phoenix Anti-Cheat 凤凰反作弊 | |
---|---|
![]() |
反黑客系统。 |
作 者 | TheMuhammed2188 |
发布时间 | 2015年4月19日 |
支持核心 | Spigot | 原生版本 |
支持版本 | 1.7,1.8,1.9,1.10,1.11,1.12,1.13 |
插件详细介绍
PAC 是一款反作弊系统,目前仍在开发中,未来会加入更多作弊类型的检测。你可以通过提交 Bug 来支持我们。
Discord: https://discord.gg/zB7797a
GitHub (for issues): Confuser2188/PhoenixAntiCheat
以下展示了 actions 部分的用法示例:
killaura:
enabled: true
actions: cancel:notify:vl>=3:pacmessage r u using <hack> m8?:vl==5:kick <player> <tag> st0p h4ck1ng n00b
在这个例子中,所有违规行为都会被取消并通知管理员。如果违规值大于等于 3,会向玩家发送消息。如果违规值等于 5,则会踢出玩家。
注意:
:
字符分隔多个命令。:
,请使用 \:
进行转义。==
(等于)>
(大于)<
(小于)>=
(大于等于)<=
(小于等于)cancel
notify
pacmessage
pacbroadcast
<player>
<tag>
<vl>
<ping>
<tps>
<hack>
或 <module>
PAC 的最新版本兼容 Spigot 1.7、1.8、1.9、1.10、1.11、1.12 和 1.13。
PAC 还支持协议破解 (1.7 - 1.8) 和 ViaVersion 插件。
如果您的服务器版本与 PAC 兼容,则无需任何其他插件即可自由使用它。
Phoenix.Command
- 使用 PAC 命令Phoenix.Notification
- 接收通知Phoenix.Bypass.<module_name>
- 绕过特定模块的检测API 在 2.0.0-pre6 版本中已损坏。
PACAPI 是 API 的主类。
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);
}
}
PlayerPAC getPlayer(Player player) // 返回自定义玩家类
int getMajorVersion() // 返回 API 的主版本号
int getMinorVersion() // 返回 API 的次版本号
ServerPAC getServer() // 返回自定义服务器类
String getVersionPAC() // 返回 PAC 插件的版本
Plugin getPlugin() // 返回 PAC 插件对象
void addCheck(Check check) // 添加检测到列表
boolean removeCheck(Check check) // 从列表中删除检测
当玩家未能通过检测时调用。
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);
}
}
当服务器收到来自玩家的数据包时调用。
当服务器向玩家发送数据包时调用。
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);
}
}
当玩家使用以 "/pac" 开头的命令时调用。
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();
}
}
你需要使用 addCheck(Check paramCheck)
方法在 PACAPI 中启用你的模块。
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)});
}
}
String getName()
void sendNotification(Player player, String info, int vl, Attribute[] attributes)
Player getBukkitPlayer() // 返回 org.bukkit.entity.Player
int getCPS() // 返回每秒点击次数
int getMovementPacketRate() // 返回每秒移动数据包数量
int getPing() // 返回 NMS ping
boolean isOnGround() // 返回 PAC 中的 onGround 方法
List<Plugin> getPlugins() // 返回 PAC 插件列表
double getTPS() // 返回服务器每秒 Tick
String getVersion() // 返回服务器版本
String getMinecraftVersion() // 返回服务器的 Minecraft 版本
String getSpigotName() // 返回服务器构建名称
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)