起動・前提準備
初期テーブル、依存状態、定期処理の点灯など、このクラスが動き始める前提をまとめています。
Shield Manager に関する管理・集約処理を担当します。
com.example.rankingplugin.combatcombat/ShieldManager.javaclassクラス直前の Javadoc は見つかりませんでした。ソースとメソッド構成から責務を補完しています。
Shield Manager に関する管理・集約処理を担当します。combat パッケージの中でも 403 行規模の中核クラスで、運用中の主ループ・Web 導線・スケジューラが一か所に集まっています。中規模クラス群の中では変更影響が広く、章立てで読む価値が高いため重点解説へ追加しています。
ShieldManageronRespawnonConsumerequestResyncresyncNowscheduleResyncfireShieldIfDisplayChangedwriteCurFastcollectShieldSlots初期テーブル、依存状態、定期処理の点灯など、このクラスが動き始める前提をまとめています。
外部から呼ばれる公開メソッドや、対象プレイヤー・対象データ・対象ワールドを引き当てる経路です。
イベント受理、定期監視、判定、進行更新など、実際に挙動を生む中心ロジックです。
メモリ状態と保存状態を揃え、結果を次の呼び出しや画面表示へ繋ぐ部分です。
Web から見えるエンドポイント、セッション解決、レスポンス整形を含みます。画面追加や API 変更時の起点になります。
このクラスが前提状態を揃え、外部から利用可能な形まで立ち上がる流れです。新規依存の追加や起動失敗の調査はまずここから追います。
イベント受理、判定、状態更新、通知までの主経路です。体感不具合や想定外の分岐はこの流れのどこで止まるかを見ると切り分けやすいです。
結果を保持し、必要なら永続化し、最後に掃除まで行う出口です。画面更新だけ合って保存が壊れるケースや残骸が残るケースの確認に向きます。
| Signature | 説明 | 主要呼び出し |
|---|---|---|
public ShieldManager(JavaPlugin plugin) | 依存オブジェクトや初期状態を受け取り、このクラスの動作を開始できる状態へ組み立てます。 | getServer → getPluginManager → registerEvents |
| Name | Visibility | Kind | 説明 |
|---|---|---|---|
| ShieldManager | public | コンストラクタ | 依存オブジェクトや初期状態を受け取り、このクラスの動作を開始できる状態へ組み立てます。 |
| requestResync | public | メソッド | requestResync の主要処理を担当します。 |
| resyncNow | public | メソッド | resyncNow の主要処理を担当します。 |
| scheduleResync | private | メソッド | scheduleResync の主要処理を担当します。 |
| fireShieldIfDisplayChanged | private | メソッド | fireShieldIfDisplayChanged の主要処理を担当します。 |
| writeCurFast | private | メソッド | writeCurFast の主要処理を担当します。 |
| fireShieldIfDisplayChanged | private | メソッド | fireShieldIfDisplayChanged の主要処理を担当します。 |
| collectShieldSlots | private | メソッド | collectShieldSlots の主要処理を担当します。 |
| getCurrent | public | メソッド | 総シールド 現在値 |
| getMax | public | メソッド | 総シールド 最大値(装備レベルから計算&不足していれば初期化) |
| absorb | public | メソッド | シールド吸収:装備アイテムの“現在値”から順に差し引く。 |
| heal | public | メソッド | シールド回復(食べ物など)。 |
| heal | public | イベント処理 | シールド回復(食べ物など)。 |
| onRespawn | public | イベント処理 | イベント発生時の分岐と後続処理を担当します。 |
| onConsume | public | イベント処理 | 消費アイテムでシールド回復 |
| onConsume | public | イベント処理 | 消費アイテムでシールド回復 |
| readCur | private | メソッド | readCur の主要処理を担当します。 |
| readMax | private | メソッド | readMax の主要処理を担当します。 |
| writeCur | private | メソッド | writeCur の主要処理を担当します。 |
| isShieldPiece | private | メソッド | 条件判定を行い、後続処理の分岐に使える真偽値を返します。 |
| calcMaxForItem | private | メソッド | レベルPDCからこのアイテムのシールド上限を計算 |
| armorOrder | private | メソッド | armorOrder の主要処理を担当します。 |
| getPiece | private | メソッド | 必要な状態を取得し、呼び出し側で利用しやすい形へ返します。 |
| setBack | private | メソッド | setBack の主要処理を担当します。 |
public ShieldManager(JavaPlugin plugin)依存オブジェクトや初期状態を受け取り、このクラスの動作を開始できる状態へ組み立てます。
JavaPlugin pluginなし
public void requestResync(Player p, ShieldChangeEvent.Cause cause)requestResync の主要処理を担当します。
Player pShieldChangeEvent.Cause causeなし
public void resyncNow(Player p, ShieldChangeEvent.Cause cause)resyncNow の主要処理を担当します。
Player pShieldChangeEvent.Cause causeなし
private void scheduleResync(Player p, ShieldChangeEvent.Cause cause)scheduleResync の主要処理を担当します。
Player pShieldChangeEvent.Cause causeなし
private void fireShieldIfDisplayChanged(Player p, ShieldChangeEvent.Cause cause)fireShieldIfDisplayChanged の主要処理を担当します。
Player pShieldChangeEvent.Cause causeなし
private void writeCurFast(Player p, ShieldSlot s, double newCur)writeCurFast の主要処理を担当します。
Player pShieldSlot sdouble newCurなし
private void fireShieldIfDisplayChanged(java.util.UUID id, ShieldChangeEvent.Cause cause)fireShieldIfDisplayChanged の主要処理を担当します。
java.util.UUID idShieldChangeEvent.Cause causeなし
private List<ShieldSlot> collectShieldSlots(Player p)collectShieldSlots の主要処理を担当します。
Player pなし
public double getCurrent(Player p)総シールド 現在値
Player pなし
public double getMax(Player p)総シールド 最大値(装備レベルから計算&不足していれば初期化)
Player pなし
public double absorb(Player p, double incoming)シールド吸収:装備アイテムの“現在値”から順に差し引く。
Player pdouble incomingなし
public void heal(Player p, double amount)シールド回復(食べ物など)。
Player pdouble amountなし
public void heal(Player p, double amount) { if (amount <= 0) return; List<ShieldSlot> slots = collectShieldSlots(p); if (slots.isEmpty()) return; slots.sort(Comparator.comparingDouble((ShieldSlot s) -> (s.max - s.cur)).reversed()); double left = amount; boolean changed = false; for (ShieldSlot s : slots) { if (left <= 1e-9) break; double need = Math.max(0, s.max - s.cur); if (need <= 0) continue; double add = Math.min(left, need); if (add > 0) { s.cur += add; left -= add; writeCurFast(p, s, s.cur); changed = true; } } if (changed) { scheduleResync(p, ShieldChangeEvent.Cause.HEAL); } } /* ========= イベント ========= */ public void onJoin(PlayerJoinEvent e)シールド回復(食べ物など)。
Player pdouble amount) { if (amount <= 0) return; List<ShieldSlot> slots = collectShieldSlots(p); if (slots.isEmpty()) return; slots.sort(Comparator.comparingDouble((ShieldSlot s) -> (s.max - s.cur)).reversed()); double left = amount; boolean changed = false; for (ShieldSlot s : slots) { if (left <= 1e-9) break; double need = Math.max(0, s.max - s.cur); if (need <= 0) continue; double add = Math.min(left, need); if (add > 0) { s.cur += add; left -= add; writeCurFast(p, s, s.cur); changed = true; } } if (changed) { scheduleResync(p, ShieldChangeEvent.Cause.HEAL); } } /* ========= イベント ========= */ public void onJoin(PlayerJoinEvent eなし
public void onRespawn(PlayerRespawnEvent e)イベント発生時の分岐と後続処理を担当します。
PlayerRespawnEvent eなし
public void onConsume(PlayerItemConsumeEvent e)消費アイテムでシールド回復
PlayerItemConsumeEvent eなし
public void onConsume(PlayerItemConsumeEvent e) { double heal = switch (e.getItem().getType()) { case GOLDEN_CARROT -> 2.0; case GOLDEN_APPLE -> 4.0; case ENCHANTED_GOLDEN_APPLE -> 10.0; default -> 0.0; }; if (heal > 0 && e.getPlayer() != null) { heal(e.getPlayer(), heal); } } /* ========= 内部ユーティリティ ========= */ private void ensureInitAll(Player p)消費アイテムでシールド回復
PlayerItemConsumeEvent e) { double heal = switch (e.getItem().getType()) { case GOLDEN_CARROT -> 2.0; case GOLDEN_APPLE -> 4.0; case ENCHANTED_GOLDEN_APPLE -> 10.0; default -> 0.0; }; if (heal > 0 && e.getPlayer() != null) { heal(e.getPlayer(), heal); } } /* ========= 内部ユーティリティ ========= */ private void ensureInitAll(Player pなし
private double readCur(ItemStack it, boolean initIfMissing)readCur の主要処理を担当します。
ItemStack itboolean initIfMissingなし
private double readMax(ItemStack it, boolean initIfMissing)readMax の主要処理を担当します。
ItemStack itboolean initIfMissingなし
private void writeCur(Player p, EquipmentSlot slot, ItemStack it, double newCur)writeCur の主要処理を担当します。
Player pEquipmentSlot slotItemStack itdouble newCurなし
private boolean isShieldPiece(ItemStack it)条件判定を行い、後続処理の分岐に使える真偽値を返します。
ItemStack itなし
private double calcMaxForItem(ItemStack it)レベルPDCからこのアイテムのシールド上限を計算
ItemStack itなし
private List<EquipmentSlot> armorOrder()armorOrder の主要処理を担当します。
なし
private ItemStack getPiece(Player p, EquipmentSlot slot)必要な状態を取得し、呼び出し側で利用しやすい形へ返します。
Player pEquipmentSlot slotなし
private void setBack(Player p, EquipmentSlot slot, ItemStack it)setBack の主要処理を担当します。
Player pEquipmentSlot slotItemStack itなし
ShieldManager → getServer → getPluginManager → registerEventsonConsume → armorOrder → getPiece → isShieldPiece → calcMaxForItem → getItemMetaonRespawn → getServer → getScheduler → runTask → scheduleResync → getPlayeronConsume → getItem → getType → getPlayer → healheal → scheduleResync → getPlayerabsorb → armorOrder → sort → comparingDouble → readCur → getPiece