起動・前提準備
初期テーブル、依存状態、定期処理の点灯など、このクラスが動き始める前提をまとめています。
Fantasia と現世のインベントリ/ゲームモードを安全にスワップするサービス。
com.example.rankingplugin.fantasyfantasy/FantasyReturnService.javaclassFantasia と現世のインベントリ/ゲームモードを安全にスワップするサービス。 重要な修正点: - Fantasia滞在中の「現世側インベントリ(outside)」を必ずディスクへ永続化し、再起動後も /fantasy back で復元できる - ログアウト時に outside を削除しない(Fantasia滞在中に再起動しても戻れる) - outside が無い場合は絶対に外へ出さない(戻った瞬間に空になったように見える事故を防ぐ)
Fantasia と現世のインベントリ/ゲームモードを安全にスワップするサービス。fantasy パッケージの中でも 670 行規模の中核クラスで、運用中の主ループ・スケジューラが一か所に集まっています。中規模クラス群の中では変更影響が広く、章立てで読む価値が高いため重点解説へ追加しています。
FantasyReturnServiceloadInsideSnapshotloadOutsideDataonWorldChangeonSteponQuitapplySnapshotOrClearapplyTeleportSafetyapplyOutsideDataNow初期テーブル、依存状態、定期処理の点灯など、このクラスが動き始める前提をまとめています。
外部から呼ばれる公開メソッドや、対象プレイヤー・対象データ・対象ワールドを引き当てる経路です。
イベント受理、定期監視、判定、進行更新など、実際に挙動を生む中心ロジックです。
メモリ状態と保存状態を揃え、結果を次の呼び出しや画面表示へ繋ぐ部分です。
Bukkit イベントや内部イベントを受けたあと、どの状態を更新するかをまとめています。
このクラスが前提状態を揃え、外部から利用可能な形まで立ち上がる流れです。新規依存の追加や起動失敗の調査はまずここから追います。
onWorldChangeonSteponQuitapplySnapshotOrClearsaveInsideSnapshotsaveOutsideSnapshotsaveOutsideSnapshotToイベント受理、判定、状態更新、通知までの主経路です。体感不具合や想定外の分岐はこの流れのどこで止まるかを見ると切り分けやすいです。
applySnapshotOrClearsaveInsideSnapshotsaveOutsideSnapshotsaveOutsideSnapshotTodeleteOutsideFileapplyTeleportSafety結果を保持し、必要なら永続化し、最後に掃除まで行う出口です。画面更新だけ合って保存が壊れるケースや残骸が残るケースの確認に向きます。
| Signature | 説明 | 主要呼び出し |
|---|---|---|
public FantasyReturnService(Plugin plugin, Location returnPad) | 依存オブジェクトや初期状態を受け取り、このクラスの動作を開始できる状態へ組み立てます。 | getDataFolder → exists → mkdirs → getPluginManager → registerEvents |
| Name | Visibility | Kind | 説明 |
|---|---|---|---|
| FantasyReturnService | public | コンストラクタ | 依存オブジェクトや初期状態を受け取り、このクラスの動作を開始できる状態へ組み立てます。 |
| getReturnPad | public | メソッド | 必要な状態を取得し、呼び出し側で利用しやすい形へ返します。 |
| isFantasiaGroup | private | メソッド | 条件判定を行い、後続処理の分岐に使える真偽値を返します。 |
| markSwap | private | メソッド | markSwap の主要処理を担当します。 |
| unlockSwapLater | private | メソッド | unlockSwapLater の主要処理を担当します。 |
| file | private | メソッド | file の主要処理を担当します。 |
| outsideFile | private | メソッド | outsideFile の主要処理を担当します。 |
| outsideRecoveryFile | private | メソッド | outsideRecoveryFile の主要処理を担当します。 |
| castList | private | メソッド | castList の主要処理を担当します。 |
| applySnapshotOrClear | private | メソッド | applySnapshotOrClear の主要処理を担当します。 |
| saveInsideSnapshot | private | メソッド | 状態を永続化または更新し、最新状態へ反映します。 |
| loadInsideSnapshot | private | メソッド | 必要な状態を取得し、呼び出し側で利用しやすい形へ返します。 |
| saveOutsideSnapshot | private | メソッド | 状態を永続化または更新し、最新状態へ反映します。 |
| saveOutsideSnapshotTo | private | メソッド | 状態を永続化または更新し、最新状態へ反映します。 |
| loadOutsideData | private | メソッド | 必要な状態を取得し、呼び出し側で利用しやすい形へ返します。 |
| deleteOutsideFile | private | メソッド | 対象データや登録状態を削除・解除します。 |
| scheduleDeleteOutsideFile | private | メソッド | scheduleDeleteOutsideFile の主要処理を担当します。 |
| safeOutsideFallback | private | メソッド | safeOutsideFallback の主要処理を担当します。 |
| applyTeleportSafety | private | メソッド | applyTeleportSafety の主要処理を担当します。 |
| updateOutsideSnapshotFromCurrent | private | メソッド | 状態を永続化または更新し、最新状態へ反映します。 |
| applyOutsideDataNow | private | メソッド | applyOutsideDataNow の主要処理を担当します。 |
| scheduleOutsideReapply | private | メソッド | scheduleOutsideReapply の主要処理を担当します。 |
| enterFantasiaNoTp | public | メソッド | すでにワールドが Fantasia に変わった後に呼ばれる想定(InventoryGuardから呼ばれる) - outside を保存 - inside をロードして適用 |
| leaveFantasiaNoTp | public | メソッド | すでにワールドが Fantasia 外に変わった後に呼ばれる想定(InventoryGuardから呼ばれる) - inside を保存 - outside を復元 |
| teleportToFantasia | public | メソッド | /fantasy 等から Fantasiaへ安全に入る(戻り地点を必ず保存する) |
| teleportBack | public | メソッド | Fantasiaから現世へ戻す(outsideが無い場合は絶対に外へ出さない) |
| onWorldChange | public | イベント処理 | イベント発生時の分岐と後続処理を担当します。 |
| onStep | public | イベント処理 | returnPad を踏んだら帰還(存在する構造に依存するので「同一ブロックにいるか」だけ判定) |
| onQuit | public | イベント処理 | Fantasia滞在中にログアウトしても outside を消さない。 |
| isFantasiaOnly | private | メソッド | 条件判定を行い、後続処理の分岐に使える真偽値を返します。 |
| markFantasiaOnly | private | メソッド | markFantasiaOnly の主要処理を担当します。 |
| purgeFantasiaItems | private | メソッド | purgeFantasiaItems の主要処理を担当します。 |
public FantasyReturnService(Plugin plugin, Location returnPad)依存オブジェクトや初期状態を受け取り、このクラスの動作を開始できる状態へ組み立てます。
Plugin pluginLocation returnPadなし
public Location getReturnPad()必要な状態を取得し、呼び出し側で利用しやすい形へ返します。
なし
private boolean isFantasiaGroup(World w)条件判定を行い、後続処理の分岐に使える真偽値を返します。
World wなし
private void markSwap(Player p, boolean on)markSwap の主要処理を担当します。
Player pboolean onなし
private void unlockSwapLater(Player p, long delayTicks)unlockSwapLater の主要処理を担当します。
Player plong delayTicksなし
private File file(UUID id)file の主要処理を担当します。
UUID idなし
private File outsideFile(UUID id)outsideFile の主要処理を担当します。
UUID idなし
private File outsideRecoveryFile(UUID id)outsideRecoveryFile の主要処理を担当します。
UUID idなし
private static List<ItemStack> castList(List<?> raw)castList の主要処理を担当します。
List<?> rawなし
private static void applySnapshotOrClear(PlayerInventory inv, InvSnapshot snap)applySnapshotOrClear の主要処理を担当します。
PlayerInventory invInvSnapshot snapなし
private void saveInsideSnapshot(UUID id, InvSnapshot snap)状態を永続化または更新し、最新状態へ反映します。
UUID idInvSnapshot snapなし
private InvSnapshot loadInsideSnapshot(UUID id)必要な状態を取得し、呼び出し側で利用しやすい形へ返します。
UUID idなし
private void saveOutsideSnapshot(UUID id, InvSnapshot snap, GameMode mode, Location ret)状態を永続化または更新し、最新状態へ反映します。
UUID idInvSnapshot snapGameMode modeLocation retなし
private void saveOutsideSnapshotTo(UUID id, File target, InvSnapshot snap, GameMode mode, Location ret, String label)状態を永続化または更新し、最新状態へ反映します。
UUID idFile targetInvSnapshot snapGameMode modeLocation retString labelなし
private OutsideData loadOutsideData(UUID id)必要な状態を取得し、呼び出し側で利用しやすい形へ返します。
UUID idなし
private void deleteOutsideFile(UUID id)対象データや登録状態を削除・解除します。
UUID idなし
private void scheduleDeleteOutsideFile(UUID id, long delayTicks)scheduleDeleteOutsideFile の主要処理を担当します。
UUID idlong delayTicksなし
private Location safeOutsideFallback(Player p)safeOutsideFallback の主要処理を担当します。
Player pなし
private void applyTeleportSafety(Player p)applyTeleportSafety の主要処理を担当します。
Player pなし
private void updateOutsideSnapshotFromCurrent(Player p, Location rpOverride)状態を永続化または更新し、最新状態へ反映します。
Player pLocation rpOverrideなし
private void applyOutsideDataNow(Player p, OutsideData od)applyOutsideDataNow の主要処理を担当します。
Player pOutsideData odなし
private void scheduleOutsideReapply(Player p, OutsideData od, long delayTicks)scheduleOutsideReapply の主要処理を担当します。
Player pOutsideData odlong delayTicksなし
public void enterFantasiaNoTp(Player p)すでにワールドが Fantasia に変わった後に呼ばれる想定(InventoryGuardから呼ばれる) - outside を保存 - inside をロードして適用
Player pなし
public void leaveFantasiaNoTp(Player p)すでにワールドが Fantasia 外に変わった後に呼ばれる想定(InventoryGuardから呼ばれる) - inside を保存 - outside を復元
Player pなし
public void teleportToFantasia(Player p, Location to)/fantasy 等から Fantasiaへ安全に入る(戻り地点を必ず保存する)
Player pLocation toなし
public boolean teleportBack(Player p)Fantasiaから現世へ戻す(outsideが無い場合は絶対に外へ出さない)
Player pなし
public void onWorldChange(PlayerChangedWorldEvent e)イベント発生時の分岐と後続処理を担当します。
PlayerChangedWorldEvent eなし
public void onStep(PlayerInteractEvent e)returnPad を踏んだら帰還(存在する構造に依存するので「同一ブロックにいるか」だけ判定)
PlayerInteractEvent eなし
public void onQuit(PlayerQuitEvent e)Fantasia滞在中にログアウトしても outside を消さない。
PlayerQuitEvent eなし
private boolean isFantasiaOnly(ItemStack it)条件判定を行い、後続処理の分岐に使える真偽値を返します。
ItemStack itなし
private void markFantasiaOnly(ItemStack it)markFantasiaOnly の主要処理を担当します。
ItemStack itなし
private void purgeFantasiaItems(PlayerInventory inv)purgeFantasiaItems の主要処理を担当します。
PlayerInventory invなし
FantasyReturnService → getDataFolder → exists → mkdirs → getPluginManager → registerEventsonQuit → getPlayer → getUniqueId → isFantasiaGroup → getWorld → saveInsideSnapshotonStep → getPlayer → isFantasiaGroup → getWorld → hasMetadata → getNameonWorldChange → getPlayer → hasMetadata → getUniqueId → currentTimeMillis → getFromloadInsideSnapshot → file → exists → loadConfiguration → castList → getListloadOutsideData → outsideFile → outsideRecoveryFile → exists → loadConfiguration → castList