【Bukkit】【Spigot】リーチハックの対策の方法

リーチハック、意外とたちが悪いハックです。

これに遭遇したら攻撃が当たりません!

エンティティがダメージを受けた時にそのソース元(プレイヤー)からの距離を計算し、規定の値以上の時はリーチハックとして警告するプラグインを作ってみます。

対策方法

エンティティがダメージを受けた時のイベント

EntityDamageByEntityEventを使用します。

// 最大のリーチ
public static double final MAX_REACH = 3.45D;

@EventHandler
public void onDamage(EntityDamageByEntityEvent event){
// 攻撃元がプレイヤーであるか
if (event.getDamager() instanceof Player) {
// プレイヤーであったとき、
// 対象との距離を計算する
double range = event.getDamager().getLocation().distance(event.getEntity().getLocation());
if (range > MAX_REACH) {
// 最大のリーチを超えてます
Bukkit.broadcastMessage("Reach !!!");
}
}
}

このコードは高低差を考慮していないものになります。

高低差を考慮するには以下のようなコードを加える必要があります。

// 高低差の確認
double rangeY = Math.abs(event.getDamager().getLocation().getY() - event.getEntity().getLocation().getY());

if (rangeY > MAX_REACH) {
// これはハック
} else {
// 単純な距離を計算する
}

投稿者:

kema

趣味でプログラミングしてるだけの人

%d