CPS-Limiter — Minecraft PvPサーバー向けCPS(クリック/秒)制限プラグイン

Security

概要

CPS-Limiterは、Minecraft 1.7.10のSpigotサーバー向けに作られたシンプルで信頼できるCPS(クリック/秒)制御プラグインです。既存の多くのアンチチートが誤検知やパフォーマンス問題を起こすのに対し、本プラグインは「ロールリングウィンドウ(一定時間内のクリックを集計)」を採用し、短時間の過剰クリックを検出して上限を設けることで、正当なPvP操作に悪影響を出さないことを重視しています。基本はイベント(PlayerInteractEvent)ベースで動作し、より正確な検出が必要な場合はProtocolLibを使ったパケットカウントをオプションで有効化できます。設定は柔軟で、閾値・ウィンドウ長・免除リストなどを調整可能です。

GitHub

リポジトリの統計情報

  • スター数: 4
  • フォーク数: 0
  • ウォッチャー数: 4
  • コミット数: 2
  • ファイル数: 9
  • メインの言語: Java

主な特徴

  • EventベースのシンプルなCPS検出(PlayerInteractEvent)で導入が容易
  • 任意でProtocolLibを使ったパケットベースの高精度検出をサポート
  • ローリングウィンドウでCPSを算出、短時間の連打のみを対象に制限
  • 設定可能(閾値・ウィンドウ長・免除対象など)で正当なPvPに配慮

技術的なポイント

本プラグインの核は「ロールリングウィンドウ」によるCPS算出と、それに基づく“キャップ(上限化)”の実装です。一般的にこれは各プレイヤーに対してクリック時刻のタイムスタンプを保持し、現在時刻からウィンドウ長(デフォルト1秒)を遡った範囲に含まれる時刻の個数をカウントする方式で実装されます。効率化のためにArrayDequeやLinkedListで古いタイムスタンプを順次削除する、あるいは固定長のリングバッファを使う手法が採られます。イベントベース実装ではBukkitのPlayerInteractEventを監視し、閾値を超えたクリックをキャンセルしたり、追加クリックを無視することで攻撃速度を抑制します。

オプションのProtocolLib連携は、サーバーが受け取るクライアント側のクリックに相当するパケット(たとえばArmAnimationやUseEntityのクライアントパケット)をフックしてカウントすることで、サーバー上で判定されない“ミスクリック”やラグでイベントが生成されないケースも含めて検出精度を高めます。パケット処理は頻度が高いため、処理は軽量化(不要なオブジェクト生成の回避やバッチ処理)を意識する必要があります。

パフォーマンス面では、プレイヤー数が増えるとタイムスタンプ管理のコストが積み上がるため、定期的に古いプレイヤーデータをクリーンアップする、または一定時間非アクティブなプレイヤーのデータを破棄する設計が有効です。さらに、誤検知を避けるために「閾値を超えた瞬間に即BANする」のではなく、一定の緩衝や通知、ログ出力、あるいは一時的なクリック制限(キャップ)を適用する挙動が採られています。設定ファイル(YAML想定)でウィンドウ長、CPS閾値、ProtocolLibの有効化、免除権限・ワールド・アイテム条件などを調整でき、運用環境に合わせたチューニングが可能です。1.7.10向けに設計されているため最新のMinecraftバージョンではProtocolやパケット名が異なり、移植時は対応パケットの見直しが必要です。

プロジェクトの構成

主要なファイルとディレクトリ:

  • .gitattributes: file
  • .gitignore: file
  • LICENSE: file
  • README.md: file
  • SETUP.md: file

…他 4 ファイル

まとめ

軽量で導入が簡単、PvPに配慮したCPS制限を必要とする古めのSpigot環境に最適です。

リポジトリ情報: