Reward Service に関するサービス層・業務処理を担当します。

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

クラス説明

クラス直前の Javadoc は見つかりませんでした。ソースとメソッド構成から責務を補完しています。

責務と見どころ

重点クラスの詳細解説

Reward Service に関するサービス層・業務処理を担当します。(root) パッケージの中でも 451 行規模の中核クラスで、運用中の主ループ・スケジューラが一か所に集まっています。中規模クラス群の中では変更影響が広く、章立てで読む価値が高いため重点解説へ追加しています。

最初に追う読む順番

  1. RewardService
    依存オブジェクトと初期状態を束ね、このクラスが担当するランタイムの前提を固めます。
  2. ensureThresholdLoaded
    不足テーブル・設定・内部状態を先に揃える入口です。変更を入れる前提条件の確認地点になります。
  3. loadMaxThresholdFromDb
    実体や対象状態を作る段階で、後続フローがどのデータを前提に動くかを掴めます。
  4. buildSurvivalPool
    表示用または出力用のデータを組み立てます。
  5. processBatch
    運用中の中心ループです。イベント受理から状態更新までの主経路を追えます。
  6. onJoin
    運用中の中心ループです。イベント受理から状態更新までの主経路を追えます。
  7. kickWorker
    kickWorker の主要処理を担当します。
  8. drainWorker
    drainWorker の主要処理を担当します。
  9. checkAndGrant
    スコア更新直後に呼ぶ(UUID/Name版)。

内部サブシステムの地図

運用中の主ループ

イベント受理、定期監視、判定、進行更新など、実際に挙動を生む中心ロジックです。

主なメソッド
主なフィールド

非同期処理と定期実行

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

主なメソッド
主なフィールド

代表フロー詳解

通常運用の中心フロー

  1. onJoin
  2. processBatch

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

変更時の注意点

外部接点

主な永続化テーブル

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

reward_records

フィールド

VisibilityTypeName役割
privateHikariDataSourcedsDB 接続元を保持します。
privateJavaPluginpluginプラグイン本体参照です。
privateZoneIdTZTZ の状態を保持します。
privatejava.util.concurrent.ConcurrentHashMap<UUID, Long>lastScoreslastScores の状態を保持します。
privatejava.util.concurrent.ConcurrentHashMap<UUID, YearMonth>loadedMonthsloadedMonths の状態を保持します。
privateQueue<Runnable>pendingpending の状態を保持します。
privateAtomicBooleanworkerRunningworkerRunning の状態を保持します。
privatejava.util.concurrent.ConcurrentHashMap<UUID, java.util.Map<Long, ThresholdReward>>deferreddeferred の状態を保持します。
privatejava.util.concurrent.ConcurrentHashMap<UUID, YearMonth>deferredMonthdeferredMonth の状態を保持します。
privateLinkedHashMap<Long, ItemStack[]>REWARDSREWARDS の状態を保持します。
privateSet<Material>CREATIVE_ONLY_SETCREATIVE_ONLY_SET の状態を保持します。
privateList<Material>SURVIVAL_RANDOM_POOLSURVIVAL_RANDOM_POOL の状態を保持します。

コンストラクタ / 初期化

Signature説明主要呼び出し
public RewardService(JavaPlugin plugin, HikariDataSource ds)依存オブジェクトや初期状態を受け取り、このクラスの動作を開始できる状態へ組み立てます。getConnection → createStatement → executeUpdate → reward_records → printStackTrace → now

メソッド索引

NameVisibilityKind説明
RewardServicepublicコンストラクタ依存オブジェクトや初期状態を受け取り、このクラスの動作を開始できる状態へ組み立てます。
onJoinpublicイベント処理イベント発生時の分岐と後続処理を担当します。
kickWorkerprivateメソッドkickWorker の主要処理を担当します。
drainWorkerprivateメソッドdrainWorker の主要処理を担当します。
loadMaxThresholdFromDbprivateメソッド今月の最大thresholdを取得するヘルパー
ensureThresholdLoadedprivateメソッド必要なテーブル・状態・前提条件が揃っているかを確認し、不足分を補います。
checkAndGrantpublicメソッドスコア更新直後に呼ぶ(Player版)。
checkAndGrantpublicメソッドスコア更新直後に呼ぶ(UUID/Name版)。
maybeAddprivateメソッドmaybeAdd の主要処理を担当します。
isDefinitelyNonSurvivalprivateメソッド条件判定を行い、後続処理の分岐に使える真偽値を返します。
buildSurvivalPoolprivateメソッド表示用または出力用のデータを組み立てます。
processBatchprivateメソッドDB への問い合わせまたは更新処理を担当します。
deliverOnMainThreadprivateメソッドdeliverOnMainThread の主要処理を担当します。
deferprivateメソッドdefer の主要処理を担当します。
giveRandom3privateメソッドgiveRandom3 の主要処理を担当します。
clearOldRewardspublicメソッド月替わり時に古い記録を消して再度取得可能に

メソッド詳細

RewardService

コンストラクタpublic
public RewardService(JavaPlugin plugin, HikariDataSource ds)

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

引数

throws

なし

主要な呼び出し順

getConnectioncreateStatementexecuteUpdatereward_recordsprintStackTracenowgetOnlinePlayersloadMaxThresholdFromDb

onJoin

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

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

引数

throws

なし

主要な呼び出し順

getPlayergetUniqueIdgetNamenowgetSchedulerrunTaskAsynchronouslycontainsKeyloadMaxThresholdFromDb

kickWorker

メソッドprivate
private void kickWorker()

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

引数

throws

なし

主要な呼び出し順

compareAndSetgetSchedulerrunTaskAsynchronously

drainWorker

メソッドprivate
private void drainWorker()

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

引数

throws

なし

主要な呼び出し順

pollrungetLoggerwarningisEmptykickWorker

loadMaxThresholdFromDb

メソッドprivate
private long loadMaxThresholdFromDb(UUID uuid, YearMonth ym)

今月の最大thresholdを取得するヘルパー

引数

throws

なし

主要な呼び出し順

getConnectionprepareStatementsetStringtoStringsetIntgetYeargetMonthValueexecuteQuery

ensureThresholdLoaded

メソッドprivate
private long ensureThresholdLoaded(UUID uuid, YearMonth ym)

必要なテーブル・状態・前提条件が揃っているかを確認し、不足分を補います。

引数

throws

なし

主要な呼び出し順

equalsgetOrDefaultloadMaxThresholdFromDb

checkAndGrant

メソッドpublic
public void checkAndGrant(Player p, long newScore)

スコア更新直後に呼ぶ(Player版)。

引数

throws

なし

主要な呼び出し順

isPrimaryThreadgetUniqueIdgetNamegetSchedulerrunTask

checkAndGrant

メソッドpublic
public void checkAndGrant(UUID uuid, String name, long newScore)

スコア更新直後に呼ぶ(UUID/Name版)。

引数

throws

なし

主要な呼び出し順

nowensureThresholdLoadedentrySetgetKeygetValueisEmptyprocessBatchkickWorker

maybeAdd

メソッドprivatestatic
private static void maybeAdd(Set<Material> set, String name)

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

引数

throws

なし

主要な呼び出し順

valueOf

isDefinitelyNonSurvival

メソッドprivatestatic
private static boolean isDefinitelyNonSurvival(Material m)

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

引数

throws

なし

主要な呼び出し順

namestartsWithcontains

buildSurvivalPool

メソッドprivatestatic
private static List<Material> buildSurvivalPool()

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

引数

throws

なし

主要な呼び出し順

valuesisItemgetMaxStackSizenameendsWithequalsgetKeygetNamespace

processBatch

メソッドprivate
private void processBatch(UUID uuid, String name, YearMonth ym, List<ThresholdReward> list)

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

引数

throws

なし

主要な呼び出し順

getConnectionprepareStatementsetStringtoStringsetIntgetYeargetMonthValuesetLong

deliverOnMainThread

メソッドprivate
private boolean deliverOnMainThread(UUID uuid, String name, ThresholdReward tr)

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

引数

throws

なし

主要な呼び出し順

getSchedulerrunTaskgetPlayerisOnlinecompletegiveRandom3sendMessageformat

defer

メソッドprivate
private void defer(UUID uuid, YearMonth ym, ThresholdReward tr)

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

引数

throws

なし

主要な呼び出し順

compute

giveRandom3

メソッドprivate
private void giveRandom3(Player p)

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

引数

throws

なし

主要な呼び出し順

isEmptyshufflesizegetInventoryaddItemvaluesforEachgetWorld

clearOldRewards

メソッドpublic
public void clearOldRewards(YearMonth newMonth)

月替わり時に古い記録を消して再度取得可能に

引数

throws

なし

主要な呼び出し順

getConnectionprepareStatementsetIntgetYeargetMonthValueexecuteUpdateprintStackTraceclear

代表的な処理フロー

  1. 初期化フロー
    RewardService → getConnection → createStatement → executeUpdate → reward_records → printStackTrace
    依存オブジェクトや初期状態を受け取り、このクラスの動作を開始できる状態へ組み立てます。
  2. onJoin フロー
    onJoin → getPlayer → getUniqueId → getName → now → getScheduler
    イベント発生時の分岐と後続処理を担当します。
  3. loadMaxThresholdFromDb フロー
    loadMaxThresholdFromDb → getConnection → prepareStatement → setString → toString → setInt
    今月の最大thresholdを取得するヘルパー
  4. buildSurvivalPool フロー
    buildSurvivalPool → values → isItem → getMaxStackSize → name → endsWith
    表示用または出力用のデータを組み立てます。
  5. ensureThresholdLoaded フロー
    ensureThresholdLoaded → equals → getOrDefault → loadMaxThresholdFromDb
    必要なテーブル・状態・前提条件が揃っているかを確認し、不足分を補います。
  6. checkAndGrant フロー
    checkAndGrant → now → ensureThresholdLoaded → entrySet → getKey → getValue
    スコア更新直後に呼ぶ(UUID/Name版)。

外部との接点

Web ルート

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

SQL / テーブル

reward_records

関連クラス

補足