プレイヤーごとの達成進捗をDBに保存し管理するクラス。

11Fields
1Constructors
19Methods
594Lines
Package
com.example.rankingplugin.progress
Source
progress/AchievementManager.java
Kind
class
Roles
イベント駆動DB / 永続化非同期 / スケジューラ初期化 / ブートストラップ集約 / 制御
このクラスにも章立て解説を追加しています。 自動抽出の一覧だけでなく、下の『重点クラスの詳細解説』で読む順番・内部サブシステム・変更時の注意点まで追えます。 全クラス章立てガイドを見る

クラス説明

プレイヤーごとの達成進捗をDBに保存し管理するクラス。
Achievement enum を追加すれば自動的にトラッキング対象になります。

責務と見どころ

重点クラスの詳細解説

プレイヤーごとの達成進捗をDBに保存し管理するクラス。progress パッケージの中でも 594 行規模の中核クラスで、運用中の主ループ・スケジューラが一か所に集まっています。中規模クラス群の中では変更影響が広く、章立てで読む価値が高いため重点解説へ追加しています。

最初に追う読む順番

  1. AchievementManager
    依存オブジェクトと初期状態を束ね、このクラスが担当するランタイムの前提を固めます。
  2. initTable
    不足テーブル・設定・内部状態を先に揃える入口です。変更を入れる前提条件の確認地点になります。
  3. startFlusher
    定期処理や公開 API の起動地点で、外部から見える挙動がここから立ち上がります。
  4. buildIndexes
    表示用または出力用のデータを組み立てます。
  5. syncSegments
    syncSegments の主要処理を担当します。
  6. syncAllAdvancementsFor
    プレイヤーの全実績を DB → Advancement に一括反映
  7. onEntityDeath
    運用中の中心ループです。イベント受理から状態更新までの主経路を追えます。
  8. onBlockBreak
    運用中の中心ループです。イベント受理から状態更新までの主経路を追えます。
  9. onJoin
    運用中の中心ループです。イベント受理から状態更新までの主経路を追えます。

内部サブシステムの地図

非同期処理と定期実行

メインスレッド境界とバックグラウンド処理が交差します。重い処理やタイミング起因の不具合を追うときの要所です。

主なメソッド

代表フロー詳解

通常運用の中心フロー

  1. onEntityDeath
  2. onBlockBreak
  3. onJoin

イベント受理、判定、状態更新、通知までの主経路です。体感不具合や想定外の分岐はこの流れのどこで止まるかを見ると切り分けやすいです。

変更時の注意点

外部接点

主な永続化テーブル

SQL 文字列から抽出できた主要テーブルです。スキーマ変更時の確認用です。

achievement_progressprogress

フィールド

VisibilityTypeName役割
privateJavaPluginpluginプラグイン本体参照です。
privateDataSourcedsDB 接続元を保持します。
privateintSLICESSLICES の状態を保持します。
privateEventRuntimeServiceeventRuntimeeventRuntime の状態を保持します。
privateAdvancementsManageradvadv の状態を保持します。
privateMap<UUID, EnumSet<Achievement>>completedCacheキャッシュまたは直近計算結果を保持します。
privateList<Achievement>blockAllblockAll の状態を保持します。
privateList<Achievement>mobAllmobAll の状態を保持します。
privateConcurrentMap<UUID, EnumMap<Achievement, AtomicInteger>>pendingpending の状態を保持します。
privateConcurrentMap<UUID, EnumMap<Achievement, Integer>>lastSlicelastSlice の状態を保持します。
privateConcurrentMap<UUID, EnumMap<Achievement, Integer>>progressCacheキャッシュまたは直近計算結果を保持します。

コンストラクタ / 初期化

Signature説明主要呼び出し
public AchievementManager(JavaPlugin plugin, DataSource ds, EventRuntimeService eventRuntime)依存オブジェクトや初期状態を受け取り、このクラスの動作を開始できる状態へ組み立てます。initTable → getPluginManager → registerEvents → resumeProgress → buildIndexes → startFlusher

メソッド索引

NameVisibilityKind説明
AchievementManagerpublicコンストラクタ依存オブジェクトや初期状態を受け取り、このクラスの動作を開始できる状態へ組み立てます。
buildIndexesprivateメソッド表示用または出力用のデータを組み立てます。
fastIncrementprivateメソッドfastIncrement の主要処理を担当します。
startFlusherprivateメソッド初期化と各種登録を行い、機能を有効化します。
flushPendingprivateメソッドDB への問い合わせまたは更新処理を担当します。
sliceOfprivateメソッドsliceOf の主要処理を担当します。
syncSegmentsprivateメソッドsyncSegments の主要処理を担当します。
initTableprivateメソッド初期化と各種登録を行い、機能を有効化します。
resumeProgressprivateメソッドresumeProgress の主要処理を担当します。
isAutomationprivateメソッド条件判定を行い、後続処理の分岐に使える真偽値を返します。
onEntityDeathpublicイベント処理イベント発生時の分岐と後続処理を担当します。
onBlockBreakpublicイベント処理イベント発生時の分岐と後続処理を担当します。
incrementprivateメソッドincrement の主要処理を担当します。
isCompletedprivateメソッド条件判定を行い、後続処理の分岐に使える真偽値を返します。
markCompletedprivateメソッドmarkCompleted の主要処理を担当します。
onJoinpublicイベント処理イベント発生時の分岐と後続処理を担当します。
syncAllAdvancementsForprivateメソッドプレイヤーの全実績を DB → Advancement に一括反映
announceCompletionprivateメソッドannounceCompletion の主要処理を担当します。
getProgressLinespublicメソッドプレイヤーの全進捗を「表示用文字列」のリストにして返す

メソッド詳細

AchievementManager

コンストラクタpublic
public AchievementManager(JavaPlugin plugin, DataSource ds, EventRuntimeService eventRuntime)

依存オブジェクトや初期状態を受け取り、このクラスの動作を開始できる状態へ組み立てます。

引数

throws

なし

主要な呼び出し順

initTablegetPluginManagerregisterEventsresumeProgressbuildIndexesstartFlushergetSchedulerrunTask

buildIndexes

メソッドprivate
private void buildIndexes()

表示用または出力用のデータを組み立てます。

引数

throws

なし

主要な呼び出し順

clearvaluesgetTypegetMaterialcomputeIfAbsentgetEntity

fastIncrement

メソッドprivate
private void fastIncrement(UUID uuid, Achievement a)

fastIncrement の主要処理を担当します。

引数

throws

なし

主要な呼び出し順

isCompletedcomputeIfAbsentincrementAndGet

startFlusher

メソッドprivate
private void startFlusher()

初期化と各種登録を行い、機能を有効化します。

引数

throws

なし

主要な呼び出し順

getSchedulerrunTaskTimerAsynchronously

flushPending

メソッドprivate
private void flushPending()

DB への問い合わせまたは更新処理を担当します。

引数

throws

なし

主要な呼び出し順

keySetremoveisEmptygetConnectionsetAutoCommitprepareStatementachievement_progressentrySet

sliceOf

メソッドprivate
private int sliceOf(int progress, int target)

sliceOf の主要処理を担当します。

引数

throws

なし

主要な呼び出し順

maxfloor

syncSegments

メソッドprivate
private void syncSegments(Map<UUID, EnumMap<Achievement, AtomicInteger>> applied)

syncSegments の主要処理を担当します。

引数

throws

なし

主要な呼び出し順

maxentrySetgetPlayergetKeyisOnlinegetValuekeySetisCompleted

initTable

メソッドprivate
private void initTable()

初期化と各種登録を行い、機能を有効化します。

引数

throws

なし

主要な呼び出し順

getConnectioncreateStatementexecuteUpdateachievement_progressgetLoggerseveregetMessage

resumeProgress

メソッドprivate
private void resumeProgress()

resumeProgress の主要処理を担当します。

引数

throws

なし

主要な呼び出し順

目立つ内部呼び出しは抽出されませんでした。

isAutomation

メソッドprivate
private boolean isAutomation(Player p)

条件判定を行い、後続処理の分岐に使える真偽値を返します。

引数

throws

なし

主要な呼び出し順

isLikelyAutomation

onEntityDeath

イベント処理public
public void onEntityDeath(EntityDeathEvent e)

イベント発生時の分岐と後続処理を担当します。

引数

throws

なし

主要な呼び出し順

getEntitygetKillerisAutomationaddMobKillIfActivegetNamegetEntityTypefastIncrementgetUniqueId

onBlockBreak

イベント処理public
public void onBlockBreak(BlockBreakEvent e)

イベント発生時の分岐と後続処理を担当します。

引数

throws

なし

主要な呼び出し順

getPlayerisAutomationaddOreGatherIfActivegetBlockgetTypefastIncrementgetUniqueId

increment

メソッドprivate
private void increment(UUID playerId, Achievement ach)

increment の主要処理を担当します。

引数

throws

なし

主要な呼び出し順

fastIncrement

isCompleted

メソッドprivate
private boolean isCompleted(UUID uuid, Achievement a)

条件判定を行い、後続処理の分岐に使える真偽値を返します。

引数

throws

なし

主要な呼び出し順

contains

markCompleted

メソッドprivate
private void markCompleted(UUID uuid, Achievement a)

markCompleted の主要処理を担当します。

引数

throws

なし

主要な呼び出し順

computeIfAbsentnoneOf

onJoin

イベント処理public
public void onJoin(org.bukkit.event.player.PlayerJoinEvent e)

イベント発生時の分岐と後続処理を担当します。

引数

throws

なし

主要な呼び出し順

getPlayerensureRootAwardgetSchedulerrunTaskAsynchronouslynoneOfgetConnectionprepareStatementsetString

syncAllAdvancementsFor

メソッドprivate
private void syncAllAdvancementsFor(Player player)

プレイヤーの全実績を DB → Advancement に一括反映

引数

throws

なし

主要な呼び出し順

getUniqueIdgetSchedulerrunTaskAsynchronouslygetConnectionprepareStatementsetStringtoStringexecuteQuery

announceCompletion

メソッドprivate
private void announceCompletion(UUID playerId, Achievement ach)

announceCompletion の主要処理を担当します。

引数

throws

なし

主要な呼び出し順

getSchedulerrunTaskgetPlayerisOnlinesendMessagegetDisplayName

getProgressLines

メソッドpublic
public List<String> getProgressLines(UUID playerId)

プレイヤーの全進捗を「表示用文字列」のリストにして返す

引数

throws

なし

主要な呼び出し順

toStringgetConnectionprepareStatementsetStringexecuteQuerynextvalueOfgetString

代表的な処理フロー

  1. 初期化フロー
    AchievementManager → initTable → getPluginManager → registerEvents → resumeProgress → buildIndexes
    依存オブジェクトや初期状態を受け取り、このクラスの動作を開始できる状態へ組み立てます。
  2. onEntityDeath フロー
    onEntityDeath → getEntity → getKiller → isAutomation → addMobKillIfActive → getName
    イベント発生時の分岐と後続処理を担当します。
  3. onJoin フロー
    onJoin → getPlayer → ensureRootAward → getScheduler → runTaskAsynchronously → noneOf
    イベント発生時の分岐と後続処理を担当します。
  4. onBlockBreak フロー
    onBlockBreak → getPlayer → isAutomation → addOreGatherIfActive → getBlock → getType
    イベント発生時の分岐と後続処理を担当します。
  5. initTable フロー
    initTable → getConnection → createStatement → executeUpdate → achievement_progress → getLogger
    初期化と各種登録を行い、機能を有効化します。
  6. startFlusher フロー
    startFlusher → getScheduler → runTaskTimerAsynchronously
    初期化と各種登録を行い、機能を有効化します。

外部との接点

Web ルート

このクラス内に目立つ Web ルート定義は見つかりませんでした。

SQL / テーブル

achievement_progressprogress

関連クラス

補足