本文档适用于 Tatako Anticheat 插件,最近更新2026/5/3,Tatako版本 1.0-b5-pe2-260426a
Tatako 提供了一套公开的 API,API未混淆,提供警报监听,设置被动检测等功能。包名是 com.tjshawa.api
重要 此类已废弃,为兼容性而保留,请使用CheckInfoBuilder
package com.tjshawa.api.check;
public interface CheckInfo {
String name();
String description();
String type();
boolean experimental();
String complexType();
}
接口,用于提供检测的基本元信息。方法:
| 方法 | 返回 | 说明 |
|---|---|---|
name() | String | 检测名称 |
description() | String | 检测描述 |
type() | String | 检测类型(如 "Combat") |
experimental() | boolean | 是否为实验性检测 |
complexType() | String | 复杂类型标识(可选) |
重要 此类已废弃,为兼容性而保留,请使用CheckInfoBuilder
package com.tjshawa.api.check;
public class LegacyCheckInfo implements CheckInfo {
private final String name;
private final String type;
private final String description;
private final boolean experimental;
private final String complexType;
public LegacyCheckInfo(String name, String type, String description, boolean experimental, String complexType) {
this.name = name;
this.type = type;
this.description = description;
this.experimental = experimental;
this.complexType = complexType;
}
// 注解兼容方法
@Override
public String name() {
return name;
}
@Override
public String type() {
return type;
}
@Override
public String description() {
return description;
}
@Override
public boolean experimental() {
return experimental;
}
@Override
public String complexType() {
return complexType;
}
}
旧版兼容实现,访问方式相同,内部使用字段存储。
package com.tjshawa.api.check;
import lombok.Builder;
import lombok.Value;
@Value
@Builder
public class CheckInfoBuilder {
String type;
String name;
@Builder.Default
String description = "";
@Builder.Default
boolean experimental = false;
@Builder.Default
String complexType = "";
}
package com.tjshawa.api.check;
public enum CheckType {
COMBAT("Combat"),
MOVEMENT("Movement"),
PLAYER("Player");
private final String name;
CheckType(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public static CheckType fromPackageName(String packageName) {
for (CheckType checkType : CheckType.values()) {
if (packageName.contains(checkType.getName().toLowerCase())) {
return checkType;
}
}
return null;
}
}
枚举,定义了三种检测类型:
COMBAT 战斗检测MOVEMENT 移动检测PLAYER 玩家行为检测package com.tjshawa.api.check;
public interface TatakoCheck {
/*
使用Builder构造的新方法
*/
CheckInfoBuilder getInfo();
@Deprecated
/*
兼容老程序使用注解读取信息
*/
CheckInfo getCheckInfo();
String getPunishCommand();
boolean isEnabled();
int getMaxVl();
int getVl();
long getLastFlagTime();
void setVl(int vl);
}
核心接口,所有检测必须实现:
| 方法 | 说明 |
|---|---|
getInfo() | 返回 CheckInfoBuilder(推荐使用) |
getCheckInfo() | 旧版兼容,已弃用 |
getPunishCommand() | 惩罚指令 |
isEnabled() | 检测是否启用 |
getMaxVl() | 最大VL |
getVl() | 当前VL |
getLastFlagTime() | 上次触发检测的时间戳 |
setVl(int) | 设置VL |
package com.tjshawa.api.listener;
import com.tjshawa.api.check.TatakoCheck;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
public final class TatakoFlagEvent extends Event implements Cancellable {
private boolean cancelled;
private final Player player;
private final TatakoCheck check;
public TatakoFlagEvent(Player player, TatakoCheck check) {
super(true);
this.player = player;
this.check = check;
this.cancelled = false;
}
public Player getPlayer() {return player;}
public TatakoCheck getCheck() {return check;}
private static final HandlerList handlers = new HandlerList();
public HandlerList getHandlers() { return handlers; }
public static HandlerList getHandlerList() { return handlers; }
@Override
public boolean isCancelled() { return cancelled; }
@Override
public void setCancelled(final boolean b) { cancelled = b; }
}
当玩家被检测违规时触发,可取消。继承 Cancellable。获取玩家、检测对象。
package com.tjshawa.api.listener;
import com.tjshawa.api.check.TatakoCheck;
import net.md_5.bungee.api.chat.TextComponent;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
public class TatakoSendAlertEvent extends Event implements Cancellable {
private boolean cancelled;
private final Player player;
private final TextComponent message;
private final TatakoCheck check;
private final String info;
public TatakoSendAlertEvent(final TextComponent message, final Player player, final TatakoCheck check, final String info) {
super(true);
this.player = player;
this.message = message;
this.check = check;
this.info = info;
this.cancelled = false;
}
private static final HandlerList handlers = new HandlerList();
public HandlerList getHandlers() { return handlers; }
public static HandlerList getHandlerList() { return handlers; }
public Player getPlayer() { return player; }
public TextComponent getMessage() { return message; }
public TatakoCheck getCheck() { return check; }
public String getInfo() { return info; }
@Override
public boolean isCancelled() { return cancelled; }
@Override
public void setCancelled(final boolean b) { cancelled = b; }
}
发送警报消息前触发,可取消。包含消息 TextComponent、玩家、检测及额外信息。
package com.tjshawa.api.listener;
import lombok.Getter;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
@Getter
public final class PassiveModeCheckPlayerEvent extends Event{
private final Player player;
private final boolean check;
private static final HandlerList HANDLERS = new HandlerList();
public PassiveModeCheckPlayerEvent(Player player, boolean check) {
super(true);
this.player = player;
this.check = check;
}
public static HandlerList getHandlerList() { return HANDLERS; }
@Override
public HandlerList getHandlers() { return HANDLERS; }
}
需要被动检测玩家时,由其他插件触发。Tatako监听此事件,并执行被动检查。
CheckInfoBuilder 而非 CheckInfo。