毎日 0:00(JST) にスコアTOP5を確定し、ランダムエフェクトを「1日1回」発動できるボーナスを配布する。

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

クラス説明

毎日 0:00(JST) にスコアTOP5を確定し、ランダムエフェクトを「1日1回」発動できるボーナスを配布する。

/rp scoreeffect で発動(TOP5外 or 本日使用済みはメッセージのみ)

責務と見どころ

重点クラスの詳細解説

毎日 0:00(JST) にスコアTOP5を確定し、ランダムエフェクトを「1日1回」発動できるボーナスを配布する。scoreeffect パッケージの 小〜中規模クラスで、運用中の主ループ・スケジューラを確認する起点です。全面展開版では、他の重点クラスと同じ章立てで読めるように補強しています。

最初に追う読む順番

  1. DailyScoreEffectService
    依存オブジェクトと初期状態を束ね、このクラスが担当するランタイムの前提を固めます。
  2. ensureTodayLoaded
    不足テーブル・設定・内部状態を先に揃える入口です。変更を入れる前提条件の確認地点になります。
  3. start
    定期処理や公開 API の起動地点で、外部から見える挙動がここから立ち上がります。
  4. handleCommand
    運用中の中心ループです。イベント受理から状態更新までの主経路を追えます。
  5. onJoin
    運用中の中心ループです。イベント受理から状態更新までの主経路を追えます。
  6. stop
    後片付けと停止の出口です。残骸や再ログイン後の不整合はここを確認します。
  7. sendHint
    sendHint の主要処理を担当します。
  8. recomputeToday
    今日のTOP5を確定してDB&キャッシュを書き換える(非同期計算→同期通知)。

内部サブシステムの地図

運用中の主ループ

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

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

終了処理と掃除

停止時やフロー終端で残る実体・タスク・キャッシュを戻す出口です。

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

非同期処理と定期実行

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

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

代表フロー詳解

初期化と起動の流れ

  1. DailyScoreEffectService
  2. start
  3. ensureTodayLoaded

このクラスが前提状態を揃え、外部から利用可能な形まで立ち上がる流れです。新規依存の追加や起動失敗の調査はまずここから追います。

通常運用の中心フロー

  1. handleCommand
  2. onJoin

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

反映・保存・終了の流れ

  1. stop

結果を保持し、必要なら永続化し、最後に掃除まで行う出口です。画面更新だけ合って保存が壊れるケースや残骸が残るケースの確認に向きます。

変更時の注意点

フィールド

VisibilityTypeName役割
privateZoneIdTZTZ の状態を保持します。
privateMap<Integer, Integer>RANK_TO_MINUTESRANK_TO_MINUTES の状態を保持します。
privateList<String>EFFECT_KEYSEFFECT_KEYS の状態を保持します。
privateJavaPluginpluginプラグイン本体参照です。
privateScoreManagerscoreManager関連マネージャーへの参照です。
privateScoreEffectDaodaodao の状態を保持します。
privateRandomrndrnd の状態を保持します。
privateObjectloadLockloadLock の状態を保持します。
privateLocalDateloadedDayloadedDay の状態を保持します。
privateLocalDateloadingDayloadingDay の状態を保持します。
privateMap<UUID, ScoreEffectDao.DailyBonus>todayCacheキャッシュまたは直近計算結果を保持します。
privateBukkitTaskmidnightTask非同期処理やスケジューラ制御に使うハンドルです。

コンストラクタ / 初期化

Signature説明主要呼び出し
public DailyScoreEffectService(JavaPlugin plugin, DataSource ds, ScoreManager scoreManager)依存オブジェクトや初期状態を受け取り、このクラスの動作を開始できる状態へ組み立てます。主要呼び出しなし

メソッド索引

NameVisibilityKind説明
DailyScoreEffectServicepublicコンストラクタ依存オブジェクトや初期状態を受け取り、このクラスの動作を開始できる状態へ組み立てます。
startpublicメソッド初期化と各種登録を行い、機能を有効化します。
stoppublicメソッド動作中の処理やリソースを安全に停止・解放します。
handleCommandpublicメソッド/rp scoreeffect の本体
onJoinpublicイベント処理イベント発生時の分岐と後続処理を担当します。
sendHintprivateメソッドsendHint の主要処理を担当します。
ensureTodayLoadedprivateメソッド今日分キャッシュをロード(必要なら生成)。
recomputeTodaypublicメソッド今日のTOP5を確定してDB&キャッシュを書き換える(非同期計算→同期通知)。
scheduleNextMidnightprivateメソッドscheduleNextMidnight の主要処理を担当します。
potionTypeFromKeyprivateメソッドpotionTypeFromKey の主要処理を担当します。
effectDisplayNameprivateメソッドeffectDisplayName の主要処理を担当します。

メソッド詳細

DailyScoreEffectService

コンストラクタpublic
public DailyScoreEffectService(JavaPlugin plugin, DataSource ds, ScoreManager scoreManager)

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

引数

throws

なし

主要な呼び出し順

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

start

メソッドpublic
public void start()

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

引数

throws

なし

主要な呼び出し順

ensureTablesensureTodayLoadedscheduleNextMidnightgetPluginManagerregisterEvents

stop

メソッドpublic
public void stop()

動作中の処理やリソースを安全に停止・解放します。

引数

throws

なし

主要な呼び出し順

cancelclear

handleCommand

メソッドpublic
public void handleCommand(Player p)

/rp scoreeffect の本体

引数

throws

なし

主要な呼び出し順

ensureTodayLoadednowequalssendMessagegetUniqueIdusedpotionTypeFromKeyeffectKey

onJoin

イベント処理public
public void onJoin(PlayerJoinEvent e)

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

引数

throws

なし

主要な呼び出し順

getPlayerensureTodayLoadedgetUniqueIdusedsendHint

sendHint

メソッドprivate
private void sendHint(Player p, ScoreEffectDao.DailyBonus b)

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

引数

throws

なし

主要な呼び出し順

sendMessageeffectDisplayNameeffectKeydurationMinutes

ensureTodayLoaded

メソッドprivate
private void ensureTodayLoaded(boolean canRecomputeIfMissing)

今日分キャッシュをロード(必要なら生成)。

引数

throws

なし

主要な呼び出し順

nowequalscleargetSchedulerrunTaskAsynchronouslyemptyListloadForDaygetLogger

recomputeToday

メソッドpublic
public void recomputeToday()

今日のTOP5を確定してDB&キャッシュを書き換える(非同期計算→同期通知)。

引数

throws

なし

主要な呼び出し順

nowgetSchedulerrunTaskAsynchronouslygetRankingTopForBonusgetKeynextIntsizegetOrDefault

scheduleNextMidnight

メソッドprivate
private void scheduleNextMidnight()

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

引数

throws

なし

主要な呼び出し順

cancelnowtoLocalDateplusDaysatStartOfDaymaxbetweentoMillis

potionTypeFromKey

メソッドprivate
private PotionEffectType potionTypeFromKey(String keyStr)

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

引数

throws

なし

主要な呼び出し順

fromStringgetByKey

effectDisplayName

メソッドprivate
private String effectDisplayName(String effectKey)

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

引数

throws

なし

主要な呼び出し順

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

代表的な処理フロー

  1. onJoin フロー
    onJoin → getPlayer → ensureTodayLoaded → getUniqueId → used → sendHint
    イベント発生時の分岐と後続処理を担当します。
  2. handleCommand フロー
    handleCommand → ensureTodayLoaded → now → equals → sendMessage → getUniqueId
    /rp scoreeffect の本体
  3. start フロー
    start → ensureTables → ensureTodayLoaded → scheduleNextMidnight → getPluginManager → registerEvents
    初期化と各種登録を行い、機能を有効化します。
  4. ensureTodayLoaded フロー
    ensureTodayLoaded → now → equals → clear → getScheduler → runTaskAsynchronously
    今日分キャッシュをロード(必要なら生成)。
  5. stop フロー
    stop → cancel → clear
    動作中の処理やリソースを安全に停止・解放します。

外部との接点

Web ルート

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

SQL / テーブル

テーブル名の抽出はありませんでした。

関連クラス

補足