毎日ランダム時間に巨人ボスをスポーン・管理するクラス。

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

クラス説明

毎日ランダム時間に巨人ボスをスポーン・管理するクラス。
データベースで設定を管理し、プレイヤー別ダメージを記録、討伐時にスコアを付与。

責務と見どころ

重点クラスの詳細解説

毎日ランダム時間に巨人ボスをスポーン・管理するクラス。boss パッケージの中でも 1050 行規模の中核クラスで、運用中の主ループ・永続化境界・スケジューラが一か所に集まっています。中規模クラス群の中では変更影響が広く、章立てで読む価値が高いため重点解説へ追加しています。

最初に追う読む順番

  1. GiantBossManager
    依存オブジェクトと初期状態を束ね、このクラスが担当するランタイムの前提を固めます。
  2. createTables
    実体や対象状態を作る段階で、後続フローがどのデータを前提に動くかを掴めます。
  3. loadBaseDamageFromDB
    実体や対象状態を作る段階で、後続フローがどのデータを前提に動くかを掴めます。
  4. spawnBoss
    実体や対象状態を作る段階で、後続フローがどのデータを前提に動くかを掴めます。
  5. onPlayerJoin
    運用中の中心ループです。イベント受理から状態更新までの主経路を追えます。
  6. onBossAnyDamage
    運用中の中心ループです。イベント受理から状態更新までの主経路を追えます。
  7. onBossDamage
    運用中の中心ループです。イベント受理から状態更新までの主経路を追えます。
  8. onBossDeath
    運用中の中心ループです。イベント受理から状態更新までの主経路を追えます。
  9. recordPlayerDamage
    結果を反映・永続化する境界です。表示だけ直って保存が壊れる系の切り分けに向きます。

内部サブシステムの地図

代表フロー詳解

反映・保存・終了の流れ

  1. removeBossBar
  2. recordPlayerDamage
  3. despawnLocalBoss

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

変更時の注意点

外部接点

主な永続化テーブル

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

giant_bossgiant_boss_damagedamage

フィールド

VisibilityTypeName役割
privateZoneIdTZTZ の状態を保持します。
privateJavaPluginpluginプラグイン本体参照です。
privateDataSourcedsDB 接続元を保持します。
privateScoreServicescoreService関連サービスへの参照です。
privatebooleaneliteMobsEnabledeliteMobsEnabled の状態を保持します。
privateUUIDbossUuidbossUuid の状態を保持します。
privateintbossLevelbossLevel の状態を保持します。
privateBossBarbossBarbossBar の状態を保持します。
privateBukkitTaskbarUpdateTask非同期処理やスケジューラ制御に使うハンドルです。
privateGiantbossboss の状態を保持します。
privateintspecialCooldownTicksspecialCooldownTicks の状態を保持します。
privateRandomskillRandskillRand の状態を保持します。
privatelongattackCooldownMsattackCooldownMs の状態を保持します。
privatelonglastAttackTimelastAttackTime の状態を保持します。
privatebooleanlocalSpawnedlocalSpawned の状態を保持します。
privatedoublecachedCurrentHealthキャッシュまたは直近計算結果を保持します。
privatedoublecachedMaxHealthキャッシュまたは直近計算結果を保持します。
privateLocalTimescheduledSpawnTimescheduledSpawnTime の状態を保持します。
privatelongcachedTotalDamageキャッシュまたは直近計算結果を保持します。
privateintlastSteplastStep の状態を保持します。
privatedoublebaseDamageCachedキャッシュまたは直近計算結果を保持します。
privateintscheduledLevelscheduledLevel の状態を保持します。
privatecom.example.rankingplugin.db.DbExecdbdb の状態を保持します。
privateStringMETA_INTERNAL_GIANT_DAMAGEMETA_INTERNAL_GIANT_DAMAGE の状態を保持します。
privateNamespacedKeyKEY_BOSS_DATEKEY_BOSS_DATE の状態を保持します。
privatebooleanscheduledOnlyscheduledOnly の状態を保持します。
privateObjectscheduledSpawnLockscheduledSpawnLock の状態を保持します。
privateBukkitTaskscheduledSpawnTask非同期処理やスケジューラ制御に使うハンドルです。
privateLocalDatescheduledDateJstscheduledDateJst の状態を保持します。
privateArenaChunkKeeper.HandlearenaKeepHandlearenaKeepHandle の状態を保持します。

コンストラクタ / 初期化

Signature説明主要呼び出し
public GiantBossManager(JavaPlugin plugin, DataSource ds, ScoreService scoreService)依存オブジェクトや初期状態を受け取り、このクラスの動作を開始できる状態へ組み立てます。specialBossesEnabled → getLogger → info → getServer → getPluginManager → getPlugin

メソッド索引

NameVisibilityKind説明
specialBossesEnabledprivateメソッドspecialBossesEnabled の主要処理を担当します。
GiantBossManagerpublicコンストラクタ依存オブジェクトや初期状態を受け取り、このクラスの動作を開始できる状態へ組み立てます。
beginArenaKeepprivateメソッドbeginArenaKeep の主要処理を担当します。
endArenaKeepprivateメソッドendArenaKeep の主要処理を担当します。
tryGetDomeRadiusprivateメソッドtryGetDomeRadius の主要処理を担当します。
purgeOldGiantsprivateメソッドpurgeOldGiants の主要処理を担当します。
onPlayerJoinpublicイベント処理イベント発生時の分岐と後続処理を担当します。
getBossLevelprivateメソッド必要な状態を取得し、呼び出し側で利用しやすい形へ返します。
createTablesprivateメソッドDB への問い合わせまたは更新処理を担当します。
hasSpawnRecordprivateメソッド条件判定を行い、後続処理の分岐に使える真偽値を返します。
scheduleNextSpawnprivateメソッド翌日12:00〜23:59間のランダム時間にスポーンをスケジュール
scheduleDbPollingprivateメソッドDB への問い合わせまたは更新処理を担当します。
spawnBossprivateメソッドDB への問い合わせまたは更新処理を担当します。
findSpawnLocationprivateメソッド必要な状態を取得し、呼び出し側で利用しやすい形へ返します。
clearDamageDataprivateメソッドプレイヤー別ダメージ記録をクリア
onBossAnyDamagepublicイベント処理イベント発生時の分岐と後続処理を担当します。
onBossDamagepublicイベント処理ダメージイベントで記録
damagePlayerInternalprivateメソッドdamagePlayerInternal の主要処理を担当します。
loadBaseDamageFromDBprivateメソッド必要な状態を取得し、呼び出し側で利用しやすい形へ返します。
scheduleBaseDamageRefreshprivateメソッドDB への問い合わせまたは更新処理を担当します。
currentTenthStepprivateメソッドcurrentTenthStep の主要処理を担当します。
computeBossAttackDamageprivateメソッドcomputeBossAttackDamage の主要処理を担当します。
onBossDeathpublicイベント処理討伐時にスコア付与
removeBossBarprivateメソッド対象データや登録状態を削除・解除します。
getNextMidnightprivateメソッド必要な状態を取得し、呼び出し側で利用しやすい形へ返します。
despawnLocalBossprivateメソッドdespawnLocalBoss の主要処理を担当します。
scheduleMidnightCleanupprivateメソッド日付が変わったらボスを消す
recordPlayerDamageprivateメソッドDB への問い合わせまたは更新処理を担当します。

メソッド詳細

specialBossesEnabled

メソッドprivate
private boolean specialBossesEnabled()

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

引数

throws

なし

主要な呼び出し順

getConfiggetBoolean

GiantBossManager

コンストラクタpublic
public GiantBossManager(JavaPlugin plugin, DataSource ds, ScoreService scoreService)

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

引数

throws

なし

主要な呼び出し順

specialBossesEnabledgetLoggerinfogetServergetPluginManagergetPlugincreateTablesregisterEvents

beginArenaKeep

メソッドprivate
private void beginArenaKeep()

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

引数

throws

なし

主要な呼び出し順

ensureReadygetBossSpawntryGetDomeRadiusclosekeepgetLoggerwarninggetMessage

endArenaKeep

メソッドprivate
private void endArenaKeep()

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

引数

throws

なし

主要な呼び出し順

closegetLoggerwarninggetMessage

tryGetDomeRadius

メソッドprivate
private int tryGetDomeRadius(World w, int fallback)

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

引数

throws

なし

主要な呼び出し順

forNamegetMethodinvokeintValue

purgeOldGiants

メソッドprivate
private void purgeOldGiants()

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

引数

throws

なし

主要な呼び出し順

ensureReadynowtoStringgetEntitiesByClassgetScoreboardTagscontainsgetPersistentDataContainerequals

onPlayerJoin

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

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

引数

throws

なし

主要な呼び出し順

isDeadaddPlayergetPlayer

getBossLevel

メソッドprivate
private int getBossLevel()

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

引数

throws

なし

主要な呼び出し順

getConnectionprepareStatementsetDatevalueOfnowexecuteQuerynextgetInt

createTables

メソッドprivate
private void createTables()

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

引数

throws

なし

主要な呼び出し順

getConnectioncreateStatementexecuteUpdategiant_bossgiant_boss_damagegetLoggerseveregetMessage

hasSpawnRecord

メソッドprivate
private boolean hasSpawnRecord(LocalDate date)

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

引数

throws

なし

主要な呼び出し順

getConnectionprepareStatementsetDatevalueOfexecuteQuerynextgetLoggersevere

scheduleNextSpawn

メソッドprivate
private void scheduleNextSpawn()

翌日12:00〜23:59間のランダム時間にスポーンをスケジュール

引数

throws

なし

主要な呼び出し順

nowcancelsupplyconnprepareStatementsetDatevalueOfexecuteQuery

scheduleDbPolling

メソッドprivate
private void scheduleDbPolling()

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

引数

throws

なし

主要な呼び出し順

runnowsupplyconnprepareStatementsetDatevalueOfexecuteQuery

spawnBoss

メソッドprivate
private void spawnBoss()

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

引数

throws

なし

主要な呼び出し順

nowequalsgetLoggerwarningatTimeisBeforebeginArenaKeepinfo

findSpawnLocation

メソッドprivate
private Location findSpawnLocation(double minRadius, double maxRadius, World world)

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

引数

throws

なし

主要な呼び出し順

getOnlinePlayersisEmptynextIntsizegetLocationnextDoublegetXcos

clearDamageData

メソッドprivate
private void clearDamageData()

プレイヤー別ダメージ記録をクリア

引数

throws

なし

主要な呼び出し順

runconnprepareStatementsetDatevalueOfnowexecuteUpdategetLogger

onBossAnyDamage

イベント処理public
public void onBossAnyDamage(EntityDamageEvent e)

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

引数

throws

なし

主要な呼び出し順

getEntitygetUniqueIdequalsgetFinalDamagemaxisDeadsetHealthmin

onBossDamage

イベント処理public
public void onBossDamage(EntityDamageByEntityEvent e)

ダメージイベントで記録

引数

throws

なし

主要な呼び出し順

getDamagergetUniqueIdequalsgetEntityhasMetadatasetCancelledgetFinalDamagerecordPlayerDamage

damagePlayerInternal

メソッドprivate
private void damagePlayerInternal(Player target, double damage)

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

引数

throws

なし

主要な呼び出し順

setMetadatadamageremoveMetadata

loadBaseDamageFromDB

メソッドprivate
private double loadBaseDamageFromDB()

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

引数

throws

なし

主要な呼び出し順

getConnectionprepareStatementsetDatevalueOfnowexecuteQuerynextgetObject

scheduleBaseDamageRefresh

メソッドprivate
private void scheduleBaseDamageRefresh()

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

引数

throws

なし

主要な呼び出し順

runisOfflinesupplyconnprepareStatementsetDatevalueOfnow

currentTenthStep

メソッドprivate
private int currentTenthStep()

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

引数

throws

なし

主要な呼び出し順

floorgetLoggerinfo

computeBossAttackDamage

メソッドprivate
private double computeBossAttackDamage()

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

引数

throws

なし

主要な呼び出し順

loadBaseDamageFromDBcurrentTenthStep

onBossDeath

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

討伐時にスコア付与

引数

throws

なし

主要な呼び出し順

getEntitygetUniqueIdequalsmaxgetDropssupplyconnprepareStatement

removeBossBar

メソッドprivate
private void removeBossBar()

対象データや登録状態を削除・解除します。

引数

throws

なし

主要な呼び出し順

cancelsetVisiblegetOnlinePlayersremovePlayer

getNextMidnight

メソッドprivate
private LocalDateTime getNextMidnight()

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

引数

throws

なし

主要な呼び出し順

nowplusDaysatStartOfDay

despawnLocalBoss

メソッドprivate
private void despawnLocalBoss()

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

引数

throws

なし

主要な呼び出し順

getWorldsforEachgetEntitiesstreamfiltergetUniqueIdequalsremoveBossBar

scheduleMidnightCleanup

メソッドprivate
private void scheduleMidnightCleanup()

日付が変わったらボスを消す

引数

throws

なし

主要な呼び出し順

nowtruncatedToplusDaysbetweenwithZoneSameInstantsystemDefaulttoMillisrun

recordPlayerDamage

メソッドprivate
private void recordPlayerDamage(String uuid, double d)

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

引数

throws

なし

主要な呼び出し順

roundgetSchedulerrunTaskAsynchronouslygetConnectionprepareStatementgiant_boss_damagesetDatevalueOf

代表的な処理フロー

  1. 初期化フロー
    GiantBossManager → specialBossesEnabled → getLogger → info → getServer → getPluginManager
    依存オブジェクトや初期状態を受け取り、このクラスの動作を開始できる状態へ組み立てます。
  2. onBossAnyDamage フロー
    onBossAnyDamage → getEntity → getUniqueId → equals → getFinalDamage → max
    イベント発生時の分岐と後続処理を担当します。
  3. onBossDamage フロー
    onBossDamage → getDamager → getUniqueId → equals → getEntity → hasMetadata
    ダメージイベントで記録
  4. onBossDeath フロー
    onBossDeath → getEntity → getUniqueId → equals → max → getDrops
    討伐時にスコア付与
  5. onPlayerJoin フロー
    onPlayerJoin → isDead → addPlayer → getPlayer
    イベント発生時の分岐と後続処理を担当します。
  6. loadBaseDamageFromDB フロー
    loadBaseDamageFromDB → getConnection → prepareStatement → setDate → valueOf → now
    必要な状態を取得し、呼び出し側で利用しやすい形へ返します。

外部との接点

Web ルート

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

SQL / テーブル

giant_bossgiant_boss_damagedamage

関連クラス

補足