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

15Fields
1Constructors
34Methods
548Lines
Package
com.example.rankingplugin.level
Source
level/LevelingService.java
Kind
class
Roles
DB / 永続化サービス層
このクラスにも章立て解説を追加しています。 自動抽出の一覧だけでなく、下の『重点クラスの詳細解説』で読む順番・内部サブシステム・変更時の注意点まで追えます。 全クラス章立てガイドを見る

クラス説明

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

責務と見どころ

重点クラスの詳細解説

Leveling Service に関するサービス層・業務処理を担当します。level パッケージの中でも 548 行規模の中核クラスで、永続化境界が一か所に集まっています。中規模クラス群の中では変更影響が広く、章立てで読む価値が高いため重点解説へ追加しています。

最初に追う読む順番

  1. LevelingService
    依存オブジェクトと初期状態を束ね、このクラスが担当するランタイムの前提を固めます。
  2. ensureTables
    不足テーブル・設定・内部状態を先に揃える入口です。変更を入れる前提条件の確認地点になります。
  3. ensureSp
    不足テーブル・設定・内部状態を先に揃える入口です。変更を入れる前提条件の確認地点になります。
  4. startLuckyBuff
    定期処理や公開 API の起動地点で、外部から見える挙動がここから立ち上がります。
  5. loadDefaultAbilities
    実体や対象状態を作る段階で、後続フローがどのデータを前提に動くかを掴めます。
  6. loadSpFromDbIfNeeded
    実体や対象状態を作る段階で、後続フローがどのデータを前提に動くかを掴めます。
  7. saveSp
    結果を反映・永続化する境界です。表示だけ直って保存が壊れる系の切り分けに向きます。
  8. setLevelUpListener
    setLevelUpListener の主要処理を担当します。
  9. getLevel
    必要な状態を取得し、呼び出し側で利用しやすい形へ返します。

内部サブシステムの地図

イベント受理と主処理

Bukkit イベントや内部イベントを受けたあと、どの状態を更新するかをまとめています。

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

代表フロー詳解

通常運用の中心フロー

  1. setLevelUpListener
  2. saveSp

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

反映・保存・終了の流れ

  1. setLevelUpListener
  2. saveSp

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

変更時の注意点

外部接点

主な永続化テーブル

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

level_profileslevel_thresholdslevel_sp_statespconfig

フィールド

VisibilityTypeName役割
privatePluginpluginプラグイン本体参照です。
privateDataSourcedsDB 接続元を保持します。
privateStringserverIdserverId の状態を保持します。
privateLevelUpListenerlevelUpListenerlevelUpListener の状態を保持します。
privateMap<String, AbilityDef>abilitiesabilities の状態を保持します。
privateMap<UUID, Map<String, Long>>lastUseEpochlastUseEpoch の状態を保持します。
privateMap<UUID, Double>spNowspNow の状態を保持します。
privateMap<UUID, Long>spLastTsspLastTs の状態を保持します。
privateMap<UUID, LuckBuff>luckMapluckMap の状態を保持します。
privateintXP_BASE_HARDXP_BASE_HARD の状態を保持します。
privatedoubleXP_GROWTH_HARDXP_GROWTH_HARD の状態を保持します。
privatedoubleSP_BASESP_BASE の状態を保持します。
privatedoubleSP_PER_LEVELSP_PER_LEVEL の状態を保持します。
privatedoubleSP_REGEN_PER_SECSP_REGEN_PER_SEC の状態を保持します。
privatejava.util.Map<java.util.UUID, LuckyBuff>luckyBuffsluckyBuffs の状態を保持します。

コンストラクタ / 初期化

Signature説明主要呼び出し
public LevelingService(Plugin plugin, DataSource ds)依存オブジェクトや初期状態を受け取り、このクラスの動作を開始できる状態へ組み立てます。getConfig → getString → getServer → getName → isBlank → loadDefaultAbilities

メソッド索引

NameVisibilityKind説明
LevelingServicepublicコンストラクタ依存オブジェクトや初期状態を受け取り、このクラスの動作を開始できる状態へ組み立てます。
setLevelUpListenerpublicメソッドsetLevelUpListener の主要処理を担当します。
ensureTablespublicメソッド必要なテーブル・状態・前提条件が揃っているかを確認し、不足分を補います。
getLevelpublicメソッド必要な状態を取得し、呼び出し側で利用しやすい形へ返します。
getXppublicメソッド必要な状態を取得し、呼び出し側で利用しやすい形へ返します。
getNextLevelXppublicメソッド次レベルに必要なトータルXP(現在レベル→次のレベルに必要な量)
calcSpMaxFromLevelprivateメソッドレベルに応じた最大SP(設定: base + per_level*(lv-1))
getSppublicメソッド必要な状態を取得し、呼び出し側で利用しやすい形へ返します。
getMaxSppublicメソッド必要な状態を取得し、呼び出し側で利用しやすい形へ返します。
refillSpOnLevelUpprivateメソッドレベルアップ時などに呼ぶと自然に最大SPへ近づく
ensureSpprivateメソッド時刻差から自然回復を適用(遅延評価。
spendSppublicメソッドspendSp の主要処理を担当します。
spendAllSppublicメソッド現在所持している SP をすべて消費し、実際に消費した整数値を返す。
saveSppublicメソッド状態を永続化または更新し、最新状態へ反映します。
flushSppublicメソッドflushSp の主要処理を担当します。
seedThresholdsIfEmptypublicメソッドDB への問い合わせまたは更新処理を担当します。
getOrCreateProfilepublicメソッド必要な状態を取得し、呼び出し側で利用しやすい形へ返します。
addXppublicメソッドDB への問い合わせまたは更新処理を担当します。
isFriendlyMobprivateメソッド条件判定を行い、後続処理の分岐に使える真偽値を返します。
calcXpFromEntitypublicメソッドcalcXpFromEntity の主要処理を担当します。
getReqXpprivateメソッド必要な状態を取得し、呼び出し側で利用しやすい形へ返します。
loadDefaultAbilitiesprivateメソッド必要な状態を取得し、呼び出し側で利用しやすい形へ返します。
startLuckyBuffpublicメソッド初期化と各種登録を行い、機能を有効化します。
enableLuckypublicメソッドenableLucky の主要処理を担当します。
getLuckyMultiplierpublicメソッド必要な状態を取得し、呼び出し側で利用しやすい形へ返します。
registerAbilityprivateメソッド初期化と各種登録を行い、機能を有効化します。
getAllAbilitiespublicメソッド必要な状態を取得し、呼び出し側で利用しやすい形へ返します。
getAbilitypublicメソッド必要な状態を取得し、呼び出し側で利用しやすい形へ返します。
getDropMultiplierpublicメソッド必要な状態を取得し、呼び出し側で利用しやすい形へ返します。
canUsepublicメソッド条件判定を行い、後続処理の分岐に使える真偽値を返します。
getCooldownRemainingpublicメソッド必要な状態を取得し、呼び出し側で利用しやすい形へ返します。
markUsedpublicメソッドmarkUsed の主要処理を担当します。
uuidToBytespublicメソッドuuidToBytes の主要処理を担当します。
loadSpFromDbIfNeededprivateメソッド必要な状態を取得し、呼び出し側で利用しやすい形へ返します。

メソッド詳細

LevelingService

コンストラクタpublic
public LevelingService(Plugin plugin, DataSource ds)

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

引数

throws

なし

主要な呼び出し順

getConfiggetStringgetServergetNameisBlankloadDefaultAbilities

setLevelUpListener

メソッドpublic
public void setLevelUpListener(LevelUpListener listener)

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

引数

throws

なし

主要な呼び出し順

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

ensureTables

メソッドpublic
public void ensureTables()

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

引数

throws

なし

主要な呼び出し順

level_profileslevel_thresholdslevel_sp_stategetConnectioncreateStatementexecuteUpdategetLoggersevere

getLevel

メソッドpublic
public int getLevel(UUID uuid)

必要な状態を取得し、呼び出し側で利用しやすい形へ返します。

引数

throws

なし

主要な呼び出し順

getOrCreateProfile

getXp

メソッドpublic
public long getXp(UUID uuid)

必要な状態を取得し、呼び出し側で利用しやすい形へ返します。

引数

throws

なし

主要な呼び出し順

getOrCreateProfile

getNextLevelXp

メソッドpublic
public long getNextLevelXp(UUID uuid)

次レベルに必要なトータルXP(現在レベル→次のレベルに必要な量)

引数

throws

なし

主要な呼び出し順

getOrCreateProfilegetReqXplongValue

calcSpMaxFromLevel

メソッドprivate
private int calcSpMaxFromLevel(int level)

レベルに応じた最大SP(設定: base + per_level*(lv-1))

引数

throws

なし

主要な呼び出し順

roundmax

getSp

メソッドpublic
public int getSp(UUID uuid)

必要な状態を取得し、呼び出し側で利用しやすい形へ返します。

引数

throws

なし

主要な呼び出し順

ensureSproundgetOrDefaultgetMaxSp

getMaxSp

メソッドpublic
public int getMaxSp(UUID uuid)

必要な状態を取得し、呼び出し側で利用しやすい形へ返します。

引数

throws

なし

主要な呼び出し順

getConnectionprepareStatementsetStringsetBytesuuidToBytesexecuteQuerynextgetInt

refillSpOnLevelUp

メソッドprivate
private void refillSpOnLevelUp(UUID uuid)

レベルアップ時などに呼ぶと自然に最大SPへ近づく

引数

throws

なし

主要な呼び出し順

ensureSpgetOrDefaultgetMaxSpmaxminroundcurrentTimeMillissaveSp

ensureSp

メソッドprivate
private void ensureSp(UUID uuid)

時刻差から自然回復を適用(遅延評価。

引数

throws

なし

主要な呼び出し順

loadSpFromDbIfNeededcurrentTimeMillisgetOrDefaultmaxgetMaxSpminsaveSpround

spendSp

メソッドpublic
public boolean spendSp(Player p, double amount)

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

引数

throws

なし

主要な呼び出し順

getUniqueIdensureSpgetOrDefaultgetMaxSpmaxcurrentTimeMillissaveSpround

spendAllSp

メソッドpublic
public int spendAllSp(Player p)

現在所持している SP をすべて消費し、実際に消費した整数値を返す。

引数

throws

なし

主要な呼び出し順

getUniqueIdensureSproundgetOrDefaultgetMaxSpcurrentTimeMillissaveSp

saveSp

メソッドpublic
public void saveSp(UUID uuid, int sp, int spMax)

状態を永続化または更新し、最新状態へ反映します。

引数

throws

なし

主要な呼び出し順

getConnectionprepareStatementlevel_sp_statesetStringsetBytesuuidToBytessetIntexecuteUpdate

flushSp

メソッドpublic
public void flushSp(UUID uuid)

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

引数

throws

なし

主要な呼び出し順

roundgetOrDefaultgetMaxSpsaveSp

seedThresholdsIfEmpty

メソッドpublic
public void seedThresholdsIfEmpty()

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

引数

throws

なし

主要な呼び出し順

getConnectionprepareStatementexecuteQuerynextgetIntlevel_thresholdsroundpow

getOrCreateProfile

メソッドpublic
public Profile getOrCreateProfile(UUID uuid)

必要な状態を取得し、呼び出し側で利用しやすい形へ返します。

引数

throws

なし

主要な呼び出し順

getConnectionprepareStatementsetStringsetBytesuuidToBytesexecuteQuerynextgetInt

addXp

メソッドpublic
public void addXp(Player p, int xp, String reason)

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

引数

throws

なし

主要な呼び出し順

getUniqueIdgetConnectionsetAutoCommitgetOrCreateProfilegetReqXpprepareStatementsetIntsetString

isFriendlyMob

メソッドprivate
private boolean isFriendlyMob(org.bukkit.entity.LivingEntity le)

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

引数

throws

なし

主要な呼び出し順

getType

calcXpFromEntity

メソッドpublic
public int calcXpFromEntity(LivingEntity le, boolean hostileBonus, boolean bossBonus, boolean passivePenalty)

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

引数

throws

なし

主要な呼び出し順

isFriendlyMobgetAttributemaxgetValueroundgetTypecontains

getReqXp

メソッドprivate
private Integer getReqXp(int toLevel)

必要な状態を取得し、呼び出し側で利用しやすい形へ返します。

引数

throws

なし

主要な呼び出し順

getConnectionprepareStatementsetIntexecuteQuerynextgetInt

loadDefaultAbilities

メソッドprivate
private void loadDefaultAbilities()

必要な状態を取得し、呼び出し側で利用しやすい形へ返します。

引数

throws

なし

主要な呼び出し順

clearregisterAbility

startLuckyBuff

メソッドpublic
public void startLuckyBuff(java.util.UUID u, double multiplier, int seconds)

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

引数

throws

なし

主要な呼び出し順

currentTimeMillis

enableLucky

メソッドpublic
public void enableLucky(org.bukkit.entity.Player p, int seconds, double multiplier)

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

引数

throws

なし

主要な呼び出し順

startLuckyBuffgetUniqueId

getLuckyMultiplier

メソッドpublic
public double getLuckyMultiplier(java.util.UUID u)

必要な状態を取得し、呼び出し側で利用しやすい形へ返します。

引数

throws

なし

主要な呼び出し順

currentTimeMillisremovemax

registerAbility

メソッドprivate
private void registerAbility(AbilityDef def)

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

引数

throws

なし

主要な呼び出し順

toLowerCase

getAllAbilities

メソッドpublic
public Collection<AbilityDef> getAllAbilities()

必要な状態を取得し、呼び出し側で利用しやすい形へ返します。

引数

throws

なし

主要な呼び出し順

values

getAbility

メソッドpublic
public AbilityDef getAbility(String key)

必要な状態を取得し、呼び出し側で利用しやすい形へ返します。

引数

throws

なし

主要な呼び出し順

toLowerCase

getDropMultiplier

メソッドpublic
public double getDropMultiplier(UUID uuid)

必要な状態を取得し、呼び出し側で利用しやすい形へ返します。

引数

throws

なし

主要な呼び出し順

currentTimeMillisremove

canUse

メソッドpublic
public boolean canUse(Player p, String key)

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

引数

throws

なし

主要な呼び出し順

getAbilitygetOrCreateProfilegetUniqueIdcurrentTimeMilliscomputeIfAbsentgetOrDefault

getCooldownRemaining

メソッドpublic
public long getCooldownRemaining(Player p, String key)

必要な状態を取得し、呼び出し側で利用しやすい形へ返します。

引数

throws

なし

主要な呼び出し順

getAbilitycurrentTimeMilliscomputeIfAbsentgetUniqueIdgetOrDefaultmax

markUsed

メソッドpublic
public void markUsed(Player p, String key)

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

引数

throws

なし

主要な呼び出し順

computeIfAbsentgetUniqueIdtoLowerCasecurrentTimeMillis

uuidToBytes

メソッドpublicstatic
public static byte[] uuidToBytes(UUID u)

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

引数

throws

なし

主要な呼び出し順

allocateputLonggetMostSignificantBitsgetLeastSignificantBitsarray

loadSpFromDbIfNeeded

メソッドprivate
private void loadSpFromDbIfNeeded(UUID uuid)

必要な状態を取得し、呼び出し側で利用しやすい形へ返します。

引数

throws

なし

主要な呼び出し順

containsKeygetConnectionprepareStatementsetStringsetBytesuuidToBytesexecuteQuerynext

代表的な処理フロー

  1. 初期化フロー
    LevelingService → getConfig → getString → getServer → getName → isBlank
    依存オブジェクトや初期状態を受け取り、このクラスの動作を開始できる状態へ組み立てます。
  2. loadSpFromDbIfNeeded フロー
    loadSpFromDbIfNeeded → containsKey → getConnection → prepareStatement → setString → setBytes
    必要な状態を取得し、呼び出し側で利用しやすい形へ返します。
  3. saveSp フロー
    saveSp → getConnection → prepareStatement → level_sp_state → setString → setBytes
    状態を永続化または更新し、最新状態へ反映します。
  4. ensureSp フロー
    ensureSp → loadSpFromDbIfNeeded → currentTimeMillis → getOrDefault → max → getMaxSp
    時刻差から自然回復を適用(遅延評価。
  5. ensureTables フロー
    ensureTables → level_profiles → level_thresholds → level_sp_state → getConnection → createStatement
    必要なテーブル・状態・前提条件が揃っているかを確認し、不足分を補います。
  6. registerAbility フロー
    registerAbility → toLowerCase
    初期化と各種登録を行い、機能を有効化します。

外部との接点

Web ルート

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

SQL / テーブル

level_profilesCURRENT_TIMESTAMPlevel_thresholdslevel_sp_statespconfig

関連クラス

補足