World Dimension Loader (WDL) 1.1.3
日本語 README / 初心者向け導入・設定ガイド
Minecraft 1.20.1 / Forge 47.4.22 / Java 17

============================================================
0. まず最初に
============================================================

World Dimension Loader（WDL）は、外部のMinecraftワールドを
「必要なときだけ読み込むDimension」として登録し、
Gateから移動できるようにするForge MODです。

大量のワールドを登録しても、それらをすべて同時に
ServerLevelとして常駐させる設計ではありません。

登録したワールドはCatalogとして管理され、
必要になったDimensionだけLazy Mountされます。

WDL 1.1.3では、1.0.0のGate / Random Dimension / Auto-Unloadに加えて、

・プレイヤーごとのReturn History（帰還履歴）
・Return Gateから「来た道を戻る」機能
・DimensionごとのBed Respawn許可
・マルチプレイヤー用の個別帰還履歴

が追加されています。


------------------------------------------------------------
対応環境
------------------------------------------------------------

Minecraft : 1.20.1
Forge     : 47.4.22
Java      : 17
MOD ID    : worlddimensionloader

安定Storage方式:
IMPORT

AUTOを指定した場合も、WDL 1.1.3では安定しているIMPORT方式を使用します。

DIRECTは将来 / 実験用です。
通常運用ではAUTOまたはIMPORTを使用してください。


------------------------------------------------------------
とにかく最短で使いたい人へ
------------------------------------------------------------

最初は、このREADMEを全部読む必要はありません。

初回は次の6ステップだけでOKです。

1. WDLをmodsへ入れてMinecraft / Serverを一度起動
2. 外部ワールドを WDL_custom_dimensions に入れる
3. dimensions.toml にそのワールドを登録
4. gates.toml にGateを1つ登録
5. /wdl scan → /wdl list で READY を確認
6. Gateを作ってBasic Dimension Igniterで開く

まず「1ワールド + 1Gate」が動けば成功です。

その後、必要に応じて:

・複数Dimension
・ランダムGate
・rarity / weight
・Return History
・Return Gate
・Bed Respawn
・Auto-Unload
・特定Dimensionの常時ロード（keep_loaded）
・Creative Dimension Igniterの管理者用マスター起動
・Session Resume（WDL Dimension内で終了した位置への復帰）

へ広げてください。


============================================================
1. ファイルを置く場所
============================================================

【シングルプレイ】

WDL本体:
.minecraft/mods/WDL-1.1.3.jar

Config:
.minecraft/config/worlddimensionloader/

外部ワールド:
.minecraft/WDL_custom_dimensions/


【専用サーバー】

WDL本体:
server-root/mods/WDL-1.1.3.jar

Config:
server-root/config/worlddimensionloader/

外部ワールド:
server-root/WDL_custom_dimensions/


マルチプレイでは、WDLをサーバーと参加クライアントの両方へ導入してください。

外部ワールド本体はサーバー側だけに配置します。
クライアント側へ配布ワールドをコピーする必要はありません。


============================================================
2. 既存WDLユーザーのアップデート方法
============================================================

WDL 1.1.3は、以前のWDL Configとの互換性を維持しています。

そのため、通常のアップデートでは:

    config/worlddimensionloader/

を削除する必要はありません。

既存Configに新しい項目が書かれていない場合も、
WDLは安全なデフォルト値を使用します。

例:

[dimensions.runtime]
keep_loaded = false

が未記載
→ falseとして動作

[dimensions.bed]
allow_bed_respawn = false

が未記載
→ falseとして動作


------------------------------------------------------------
最新のConfig説明・新設定を見たい場合
------------------------------------------------------------

新しいWDLでは、初回生成Configに新設定や説明コメントが追加されています。

最新形式のConfigを利用したい場合は、次の方法を推奨します。

1. Minecraft / Serverを完全に終了する
2. `config/worlddimensionloader/` をバックアップする
3. 既存の `worlddimensionloader` Configフォルダを別の場所へ退避する
4. WDL 1.1.3でMinecraft / Serverを一度起動する
5. 最新形式のConfigが自動生成されたことを確認する
6. Minecraft / Serverを終了する
7. 旧Configから、自分で登録したDimension / Gate設定を新Configへコピーする
8. 新しく追加された設定項目や説明コメントは残す
9. 起動後 `/wdl scan` → `/wdl list` でREADYを確認する


重要:

旧Configファイルを新Configへ丸ごと上書きすると、
新しい設定項目や説明コメントも消えてしまいます。

「古いファイルをそのまま戻す」のではなく、
必要なDimension / Gate定義を新しいConfigへコピーする方法を推奨します。


============================================================
3. 初回セットアップ
============================================================

ここでは例として:

    my_world

という外部ワールドを登録します。


------------------------------------------------------------
STEP 1 : 外部ワールドを配置
------------------------------------------------------------

外部ワールドを:

WDL_custom_dimensions/my_world/

へ配置します。

正しい例:

WDL_custom_dimensions/
└─ my_world/
   ├─ level.dat
   ├─ region/
   ├─ data/
   └─ ...


重要:

level.dat は my_world フォルダ直下に必要です。


よくある失敗:

WDL_custom_dimensions/my_world/my_world/level.dat

のような二重フォルダ。

正しくは:

WDL_custom_dimensions/my_world/level.dat

です。


------------------------------------------------------------
STEP 2 : dimensions.toml
------------------------------------------------------------

config/worlddimensionloader/dimensions.toml

へ追加します。


[[dimensions]]
id = "my_world"
display_name = "My World"
enabled = true
folder = "my_world"
rarity = "COMMON"

[dimensions.destination]
prefer_anchor = true
prefer_world_spawn = true
fallback_x = 0
fallback_y = 80
fallback_z = 0
fallback_yaw = 0.0
fallback_pitch = 0.0

[dimensions.respawn]
mode = "INHERIT"

[dimensions.return_scroll]
enabled = true
xp_level_cost = 5


【重要: keep_loaded / Bed Respawn は必要な場合だけ追記】

通常の利用では、次の2項目は記述しなくてOKです。
未記載の場合はどちらも false として動作します。

常時ロードしたいDimensionだけ、次を追加してください。

[dimensions.runtime]
keep_loaded = true

そのWDL Dimension内のベッドを死亡Respawn地点として許可したい場合だけ、
次を追加してください。

[dimensions.bed]
allow_bed_respawn = true

通常のLazy Mountと睡眠専用Bedで使う場合は、
[dimensions.runtime] / [dimensions.bed] 自体を省略して構いません。


【重要: weightについて】

weightは必須ではありません。

rarityだけ設定する場合:

rarity = "RARE"

だけでOKです。

その場合、common.tomlのRARE用weightを自動使用します。

個別に出現率を調整したい場合だけ:

weight = 8

のように追加してください。


【TOMLの空欄に注意】

次のように値を空にしないでください。

誤:
weight =
fallback_x =

TOMLとして無効になり、Configを正常に読めなくなることがあります。

不要な項目は「空欄にする」のではなく、
省略できる項目なら行ごと削除してください。


------------------------------------------------------------
STEP 3 : /wdl scan
------------------------------------------------------------

Configを保存したら、ゲーム内またはサーバーコンソールで:

/wdl scan

続けて:

/wdl list

を実行します。

対象が:

[READY] my_world

になっていれば登録成功です。


主な状態:

READY
  使用可能

DISABLED
  enabled = false

MISSING_FOLDER
  folderで指定したフォルダが存在しない

MISSING_LEVEL_DAT
  ワールドフォルダ直下にlevel.datがない

INVALID_PATH
  dimension root外へ出る不正なpath


------------------------------------------------------------
STEP 4 : gates.toml
------------------------------------------------------------

config/worlddimensionloader/gates.toml

へ追加します。


[[gates]]
id = "my_world_gate"
display_name = "My World Gate"
enabled = true
gate_type = "DIMENSION"

frame_block = "minecraft:obsidian"
corner_block = "minecraft:crying_obsidian"

min_inner_width = 2
min_inner_height = 3
max_inner_width = 8
max_inner_height = 8

allowed_igniters = []

selection_mode = "LIST"
dimensions = ["my_world"]

open_time_seconds = 10


allowed_igniters = [] の場合、通常の起動条件として
Basic / Advanced Igniterを許可します。

・basic_dimension_igniter
・advanced_dimension_igniter

Creative Dimension Igniterは1.1.2から管理・テスト用のマスターIgniterなので、
allowed_ignitersへの記載に関係なく使用できます。

特定のIgniterだけ許可したい場合は明示してください。


例:

allowed_igniters = [
  "worlddimensionloader:basic_dimension_igniter"
]


------------------------------------------------------------
STEP 5 : Gateを作る
------------------------------------------------------------

上の例では:

角:
crying_obsidian

辺:
obsidian


最小内部サイズは 2 x 3 です。


◆■■◆
■    ■
■    ■
■    ■
◆■■◆

◆ = crying_obsidian
■ = obsidian
空白 = Gate内部


------------------------------------------------------------
STEP 6 : Gateを開く
------------------------------------------------------------

Igniterを持ってGateフレームへ使用します。

テスト用:

/give @s worlddimensionloader:basic_dimension_igniter


正常ならPortalが生成されます。

移動先Dimensionがまだロードされていなくても、
WDLが必要に応じてLazy Mountします。


============================================================
4. Configファイル一覧
============================================================

config/worlddimensionloader/
├─ common.toml
├─ dimensions.toml
└─ gates.toml


common.toml
  WDL全体の共通設定。
  Runtime / Auto-Unload / Respawn / Return History /
  Return Scroll / Rarity Weightなど。

dimensions.toml
  Dimensionごとの設定。
  Folder / Rarity / Weight / 到着地点 /
  Bed Respawn / Return Scrollなど。

gates.toml
  Gateのフレーム、Igniter、接続先、抽選、コストなど。


Config変更後は:

/wdl scan

で再読み込みできます。


============================================================
5. common.toml
============================================================

------------------------------------------------------------
[general]
------------------------------------------------------------

strict_validation = true

推奨:
true

外部ワールドのWorldGen情報を安全に利用できない場合、
危険なMountを拒否します。


debug_logging = false

通常:
false

調査時:
true


default_gate_open_time_seconds = 10

Gate側でopen_time_secondsを省略した場合のデフォルト秒数。


------------------------------------------------------------
[paths]
------------------------------------------------------------

dimension_root_folder = "WDL_custom_dimensions"

外部ワールドのrootフォルダ。


------------------------------------------------------------
[runtime]
------------------------------------------------------------

storage_mode = "AUTO"

通常:
AUTO または IMPORT

DIRECT:
将来 / 実験用


max_loaded_dimensions = 4

同時にLive状態で保持するWDL Dimension数の上限。

これは「登録可能数」ではありません。

例:

登録Dimension = 300
max_loaded_dimensions = 4

でも、300個をCatalogへ登録できます。


auto_unload = false

true:
未使用Dimensionを自動Unload

false:
自動Unloadしない


unload_delay_seconds = 300

Auto-Unloadまでの待機時間。


vs_remount_cooldown_ticks = 100

Valkyrien Skies 2.4.11互換用のsame-ID Remount safety cooldown。


------------------------------------------------------------
[respawn]
------------------------------------------------------------

mode = "OVERWORLD"

主な値:

OVERWORLD
VANILLA


OVERWORLD:
WDL Dimension内で死亡した場合、
WDLがOverworld側Respawnを処理します。

VANILLA:
WDLの通常Respawn上書きを行いません。


prefer_overworld_player_spawn = true

Overworldの個人Spawnを優先。


fallback_to_overworld_world_spawn = true

個人Spawnが使えなければWorld Spawnへ。


------------------------------------------------------------
[return_history]  ← WDL 1.1.0以降
------------------------------------------------------------

max_entries = 3

プレイヤーごとに保存する帰還履歴の最大数。

設定範囲:
1 ～ 10

デフォルト:
3


return_gate_uses_history = true

true:
RETURN Gateは、可能なら「直前に通ってきたGate側」へ戻ります。

false:
RETURN GateはReturn Historyを使わずOverworldへ帰還します。


return_scroll_uses_history = false

false（デフォルト）:
Return Scrollは従来どおりOverworldへ直接帰還します。

true:
Return ScrollもReturn Historyを使って1段戻ります。


============================================================
6. Return History  ← WDL 1.1.0以降
============================================================

WDL 1.1.3では、プレイヤーごとに
「まだ戻っていないGateの帰り道」を記録できます。

これは単純な移動ログではありません。

通常のDIMENSION Gateによる正常な転移だけを記録します。


記録対象:

DIMENSION Gate
→ Destination決定
→ Mount成功
→ Teleport成功
→ Historyへ記録


記録しないもの:

・Return Gateによる帰還
・Return Scrollによる帰還
・死亡Respawn
・/wdl tp
・Vanilla /tp
・Anchor登録


------------------------------------------------------------
Return Gateの基本動作
------------------------------------------------------------

デフォルト:

return_gate_uses_history = true


例:

Overworld → A → B → C

History:
Overworld
A
B

CでReturn Gate:

C → B

さらに:

B → A
A → Overworld


つまり「来た道を1段ずつ戻る」動作です。


------------------------------------------------------------
履歴が空の場合
------------------------------------------------------------

有効なReturn Historyがない場合、
RETURN GateはOverworldへFallbackします。


------------------------------------------------------------
Return Scroll
------------------------------------------------------------

デフォルト:

return_scroll_uses_history = false


そのためReturn Scrollは、
緊急脱出用としてOverworldへ直接帰還できます。

Overworldへ直接帰還した場合、
古いReturn Historyはclearされます。


------------------------------------------------------------
ループ圧縮
------------------------------------------------------------

Return Historyは「移動ログ」ではなく
「未解決の帰路」として保存されます。


例:

A → B → A

Aへ戻った時点で、
A → B の探索は完了したと判断します。


例:

A → B → C → A

Aまで戻ったため、
途中のB / Cを含む帰路は閉じられます。


特にハブDimensionを使う場合:

A → B → A → C → A → D → A

のように移動しても、
Aが履歴を何度も埋め尽くすことはありません。


OverworldからAへ来ていた場合:

Overworld → A → B → A → C → A

なら、最終的にOverworldへの帰路だけが残ります。


------------------------------------------------------------
マルチプレイヤー
------------------------------------------------------------

Return HistoryはプレイヤーUUIDごとに保存されます。

Player 1とPlayer 2が同じGateを使っても、
帰還履歴は混ざりません。

ログアウト / ログイン、
サーバー再起動後も履歴を維持します。


------------------------------------------------------------
Auto-UnloadされたDimensionへ戻る場合
------------------------------------------------------------

Return Historyの行き先がUNLOADEDでも、
WDLが必要に応じてLazy Mountしてから帰還します。

Teleport成功後にだけ履歴を1件消費します。

一時的なMount / Teleport失敗では、
履歴を先に失いません。


============================================================
7. dimensions.toml
============================================================

基本例:


[[dimensions]]
id = "ancient_city"
display_name = "Ancient City"
enabled = true
folder = "ancient_city"
rarity = "RARE"

[dimensions.destination]
prefer_anchor = true
prefer_world_spawn = true
fallback_x = 0
fallback_y = 80
fallback_z = 0
fallback_yaw = 0.0
fallback_pitch = 0.0

[dimensions.respawn]
mode = "INHERIT"

[dimensions.runtime]
keep_loaded = false

[dimensions.bed]
allow_bed_respawn = false

[dimensions.return_scroll]
enabled = true
xp_level_cost = 5


------------------------------------------------------------
id / folder / display_name
------------------------------------------------------------

id:
WDL内部Dimension ID。
Gateのdimensions = [...] にはこれを使用します。

folder:
WDL_custom_dimensions内の実フォルダ名。

display_name:
人が読むための表示名。


------------------------------------------------------------
rarity
------------------------------------------------------------

指定可能:

COMMON
UNCOMMON
RARE
EPIC
LEGENDARY
CUSTOM


weightを設定していない場合、
common.tomlのrarity_weightsから抽選weightを取得します。


------------------------------------------------------------
weight
------------------------------------------------------------

weightは省略可能です。

例:

rarity = "RARE"

だけなら、RAREの標準weightを使用。


個別調整したい場合:

rarity = "RARE"
weight = 8


この場合、抽選には8が使用されます。

個別weightはrarityより優先されます。


weight = 0

はランダム抽選候補から除外。


------------------------------------------------------------
[dimensions.destination]
------------------------------------------------------------

到着地点の基本優先順位:

1. Dimensional Anchor
2. 外部ワールド本来のSpawn
3. fallback座標


------------------------------------------------------------
[dimensions.respawn]
------------------------------------------------------------

mode = "INHERIT"

指定可能:

INHERIT
OVERWORLD
VANILLA


INHERIT:
common.tomlのrespawn設定を使用。

OVERWORLD:
このDimensionではOverworld Respawn。

VANILLA:
このDimensionでは通常のWDL Respawn上書きを行わない。


------------------------------------------------------------
[dimensions.runtime]  ← WDL 1.1.2以降
------------------------------------------------------------

Dimensionごとの上級Runtime設定です。

通常は省略、または:

[dimensions.runtime]
keep_loaded = false

のままで構いません。


keep_loaded = false

・通常のLazy Mountを使用
・必要になった時だけMount
・Auto-Unloadが有効なら未使用時にUnload可能

未記載の場合も false と同じです。


keep_loaded = true

・対象Dimensionを自動的にMount
・プレイヤーが0人でもLoaded状態を維持
・Auto-Unload / capacity evictionの対象外
・Hub / 拠点 / 常時稼働させたいWorld向け


例:

[dimensions.runtime]
keep_loaded = true


注意:

keep_loaded Dimensionも `max_loaded_dimensions` の枠を使用します。

例えば `max_loaded_dimensions = 4` の状態では、
5個以上のDimensionを同時に常駐させることはできません。

大量の外部Worldすべてにtrueを設定するのではなく、
Hubや拠点など少数のDimensionだけに使うことを推奨します。

設定変更後は:

/wdl scan

でRuntime設定を再評価できます。


------------------------------------------------------------
[dimensions.bed]  ← WDL 1.1.0以降
------------------------------------------------------------

allow_bed_respawn = false


【省略した場合も false】

これが非常に重要です。


未記載 / false:

・ベッドで睡眠可能
・そのWDL DimensionをBed Respawn先にはしない
・死亡時はWDLの通常Respawnルールへ


true:

・ベッドで睡眠可能
・そのWDL Dimensionのベッドを死亡Respawn地点として使用可能
・対象DimensionがUNLOADEDでも、必要ならLazy MountしてRespawnを試行


例:

[dimensions.bed]
allow_bed_respawn = true


Bed Respawn先が:

・削除済み
・破壊済み
・使用不能
・Dimension無効
・Mount不能

の場合は、安全のためOverworld側へFallbackします。


Dimensional Anchorは死亡Respawnには使用しません。

Anchor:
Gate到着地点

Bed:
許可時のみ死亡Respawn地点

として役割を分離しています。


------------------------------------------------------------
[dimensions.return_scroll]
------------------------------------------------------------

enabled = true

false:
そのDimensionでReturn Scroll使用不可


xp_level_cost = 5

Dimension専用XPレベルコスト。

省略時:
common.tomlのdefault_xp_level_cost


============================================================
8. Rarity / Weight / Random Gate
============================================================

デフォルトweight:

COMMON = 100
UNCOMMON = 60
RARE = 25
EPIC = 10
LEGENDARY = 3


数字が大きいほど抽選されやすくなります。

これは直接の%ではありません。


例:

World A:
COMMON → 100

World B:
RARE → 25

World C:
LEGENDARY → 3


合計:

128

なので、各Worldは128に対するweightで抽選されます。


------------------------------------------------------------
rarityだけでもOK
------------------------------------------------------------

例:

rarity = "RARE"

weightを省略すればRAREの標準weightを使用します。


------------------------------------------------------------
個別weight
------------------------------------------------------------

rarity = "LEGENDARY"
weight = 50

なら、抽選では50を使用します。


============================================================
9. gates.toml
============================================================

DIMENSION Gate例:


[[gates]]
id = "random_gate"
display_name = "Random Gate"
enabled = true
gate_type = "DIMENSION"

frame_block = "minecraft:obsidian"
corner_block = "minecraft:crying_obsidian"

min_inner_width = 2
min_inner_height = 3
max_inner_width = 8
max_inner_height = 8

allowed_igniters = []

selection_mode = "LIST"
dimensions = ["world_a", "world_b", "world_c"]

open_time_seconds = 10


------------------------------------------------------------
allowed_igniters
------------------------------------------------------------

空リスト:

allowed_igniters = []

なら通常の起動条件ではBasic / Advancedを許可します。
Creative Dimension IgniterはMaster Igniterとして暗黙的に使用可能です。


特定のIgniterだけ:

allowed_igniters = [
  "worlddimensionloader:advanced_dimension_igniter"
]


------------------------------------------------------------
selection_mode
------------------------------------------------------------

LIST:
dimensions = [...] の中から選択

ALL:
使用可能な全WDL Dimensionから選択


------------------------------------------------------------
ランダムGate
------------------------------------------------------------

Gateを開通するたびに再抽選されます。

例:

1回目:
world_a

Gateが閉じる

2回目:
world_c

という動作が可能です。


永久Gate:

open_time_seconds = -1

は、OPEN中は最初に選ばれたDestinationへ固定されます。

GateをCloseして再度開通すれば、再抽選されます。


------------------------------------------------------------
現在いるDimension自身は候補から除外
------------------------------------------------------------

現在:
world_a

候補:
world_a
world_b
world_c

実際:
world_b
world_c


現在Dimensionしか候補がない場合、
Gateは開きません。

この失敗では起動コストやIgniterを消費しません。


============================================================
10. 同じフレームに複数Gateを登録
============================================================

同じ物理フレームでも、
Igniterやサイズによって別のGate定義を使用できます。


例:

Basic Igniter
→ 普通のDimension Pool

Advanced Igniter
→ Rare Dimension Pool


WDLは:

・frame_block
・corner_block
・実際のGateサイズ
・使用したIgniter

からGate定義を解決します。


曖昧な設定は安全のため無効化されます。

ログ:

WDL GATE_CONFIG_AMBIGUOUS


Configの上に書いた方が勝つ、という挙動にはなりません。


============================================================
11. RETURN Gate
============================================================

例:


[[gates]]
id = "return_gate_default"
display_name = "Return Gate"
enabled = true
gate_type = "RETURN"

frame_block = "minecraft:stone_bricks"
corner_block = "minecraft:emerald_block"

min_inner_width = 2
min_inner_height = 3
max_inner_width = 32
max_inner_height = 32

allowed_igniters = []

open_time_seconds = -1

[[gates.costs]]
type = "ITEM"
item = "minecraft:emerald"
amount_mode = "FIXED"
amount = 1


WDL 1.1.2のデフォルトでは:

return_gate_uses_history = true

なので、Return Historyがある場合は
Overworld固定ではなく「来た道を戻る」Gateになります。

履歴がない場合はOverworldへFallbackします。


============================================================
12. Gate Cost
============================================================

対応:

ITEM
XP_LEVEL
XP_POINTS
HEALTH
HUNGER


例:

[[gates.costs]]
type = "XP_LEVEL"
amount = 5


複数Costも設定可能です。

WDLは最初に条件を検証し、
Gateが実際に開ける場合にまとめて消費します。


============================================================
13. Dimensional Anchor
============================================================

ID:

worlddimensionloader:dimensional_anchor


用途:

WDL DimensionへのGate到着地点を固定。


通常使用:
現在位置を登録

Shift + 使用:
解除


消費:
なし


到着優先順位:

1. Anchor
2. World Spawn
3. fallback


Anchorは死亡Respawn地点ではありません。


============================================================
14. Return Scroll
============================================================

ID:

worlddimensionloader:return_scroll


消費:
なし

XPコスト:
Configで設定


デフォルト:

return_scroll_uses_history = false


そのため通常は:

WDL Dimension
↓
Return Scroll
↓
Overworld

です。


History使用を有効にした場合:

return_scroll_uses_history = true

ならReturn Gateと同じように
直前の帰還履歴を1段戻ります。


============================================================
15. Bed Respawn  ← WDL 1.1.0以降
============================================================

WDL Dimensionごとに設定します。


デフォルト:

allow_bed_respawn = false


未記載でもfalseです。


false:

Bed
→ 睡眠できる
→ WDL DimensionへのRespawn pointにはしない


true:

Bed
→ 睡眠できる
→ そのWDL Dimensionで死亡Respawn可能


例:

[dimensions.bed]
allow_bed_respawn = true


注意:

以前trueだったDimensionを後からfalseに変更した場合も、
WDLは現在のConfigを再確認します。

古いPlayer Spawn情報だけを理由に、
falseのDimensionをRespawn目的で勝手にMountしません。


------------------------------------------------------------
Session Resume / WDL Dimension内で終了した場合
------------------------------------------------------------

WDL 1.1.1以降では、
Lazy MountされたWDL Dimension内でログアウトしても、
次回ログイン時に元のWDL Dimensionへ復帰できます。

基本動作:

WDL Dimension Aでログアウト
↓
WDLがDimension ID / 座標 / 向きをプレイヤーごとに保存
↓
Minecraft / Server再起動
↓
AがまだMountされていなければLazy Mount
↓
元のDimension / 元の位置へ復帰


Mountを待っている間は、
Overworldの古いWDL座標へ放置されないよう安全な待機位置を使用します。

Session ResumeはReturn Historyとは別の仕組みなので、
Session ResumeだけでReturn HistoryをPUSH / POP / CLEARしません。

対象DimensionがConfigから削除済み、disabled、READYではない、
またはMountできない場合は安全にOverworld側へFallbackします。


============================================================
16. Gate Lifecycle
============================================================

Gate OPEN中に:

・frameを破壊
・cornerを破壊
・Portal Blockを破壊 / 置換

すると:

Portal削除
→ Active Session解除
→ Gate Close

となります。


永久Gateでも同じです。


============================================================
17. Auto-Unload / 大量Dimension
============================================================

WDLは:

登録Dimension数

と

Live ServerLevel数

を分離しています。


例:

300World登録
max_loaded_dimensions = 4

なら、300WorldをCatalogへ登録しつつ、
同時Live数を4に制限できます。


例:

[runtime]
max_loaded_dimensions = 4
auto_unload = true
unload_delay_seconds = 300


============================================================
18. WDL標準アイテム / レシピ
============================================================

------------------------------------------------------------
Basic Dimension Igniter
------------------------------------------------------------

ID:
worlddimensionloader:basic_dimension_igniter

Gate成功時:
1個消費

Stack:
16


Recipe:

[ ][A][ ]
[E][F][E]
[ ][A][ ]

A = Amethyst Shard
E = Ender Pearl
F = Flint and Steel


------------------------------------------------------------
Advanced Dimension Igniter
------------------------------------------------------------

ID:
worlddimensionloader:advanced_dimension_igniter

耐久:
100

Gate成功時:
耐久1消費


Recipe:

[ ][D][ ]
[N][S][N]
[ ][D][ ]

D = Diamond
N = Nether Star
S = Basic Dimension Igniter


------------------------------------------------------------
Creative Dimension Igniter
------------------------------------------------------------

ID:
worlddimensionloader:creative_dimension_igniter

用途:
Creative / 管理 / テスト用のマスターIgniter。

Craft:
なし

使用:
無制限

WDL 1.1.2以降では、Gateの `allowed_igniters` に書かれていなくても
有効なGateを起動できます。

さらに、設定されたGate Costを支払いません。

ただし、壊れたGateや無効な接続まで強制するものではありません。

・Gateフレームが正しい
・Gateサイズが定義範囲内
・接続先Dimensionが利用可能
・current Dimension exclusionなどの安全条件を満たす
・same-frame複数Gateの場合、安全に1つへ解決できる

ことは引き続き必要です。

同じ物理フレームに複数Gate定義が一致し、
CreativeだけではどのGateを使うべきか決められない場合はfail-closedします。

その場合、選択させたいGateの `allowed_igniters` に
Creative Dimension Igniterを明示して識別できます。


------------------------------------------------------------
Dimensional Anchor
------------------------------------------------------------

消費:
なし


Recipe:

[ ][A][ ]
[E][C][E]
[ ][A][ ]

A = Amethyst Shard
E = Eye of Ender
C = Compass


------------------------------------------------------------
Return Scroll
------------------------------------------------------------

Shapeless:

Book x1
Emerald x1

本体:
消費なし


============================================================
19. コマンド
============================================================

主なWDLコマンドは権限レベル2以上が必要です。


/wdl scan
Config再読み込み + 外部ワールド再スキャン


/wdl list
Dimension一覧 / 状態


/wdl status
Catalog / READY / Loaded等の概要


/wdl anchors
Anchor一覧


/wdl loaded
Runtime状態


/wdl load <id>
Runtime準備


/wdl mount <id>
Dimension Mount


/wdl unload <id>
Unload


/wdl tp <id>
管理 / テスト用Teleport


/wdl probe <id>
診断情報


============================================================
20. よくあるトラブル
============================================================

------------------------------------------------------------
/wdl scan が 0件
------------------------------------------------------------

まずdimensions.tomlを確認してください。

特に:

weight =
fallback_x =

のような空欄はNGです。


また:

WDL_custom_dimensions/world/world/level.dat

の二重フォルダにも注意してください。


------------------------------------------------------------
Gateが開かない
------------------------------------------------------------

1. /wdl scan
2. /wdl list
3. READYか
4. frame / cornerが正しいか
5. サイズが範囲内か
6. Igniterが許可されているか
7. Costを払えるか
8. LISTのIDが正しいか
9. 現在Dimensionしか候補に残っていないか
10. latest.logにGATE_CONFIG_AMBIGUOUSがないか


------------------------------------------------------------
Return GateがOverworldへ戻る
------------------------------------------------------------

Return Historyが空、または有効な履歴がない場合は
OverworldへFallbackします。


------------------------------------------------------------
Bed Respawnできない
------------------------------------------------------------

dimensions.tomlで:

[dimensions.bed]
allow_bed_respawn = true

になっているか確認してください。

未記載はfalseです。


------------------------------------------------------------
keep_loaded=trueなのに常駐しない
------------------------------------------------------------

確認:

1. `/wdl list` で対象DimensionがREADYか
2. 対象Dimensionに:

   [dimensions.runtime]
   keep_loaded = true

   があるか
3. `/wdl scan` を実行したか
4. `/wdl loaded` で `keep_loaded=true` と表示されるか
5. `max_loaded_dimensions` が常駐Dimension数に対して小さすぎないか


------------------------------------------------------------
Configを変えたのに反映されない
------------------------------------------------------------

/wdl scan

を実行してください。

専用サーバーでは、
サーバー側Configを編集してください。


============================================================
21. 推奨初期設定
============================================================

[general]
strict_validation = true
debug_logging = false

[paths]
dimension_root_folder = "WDL_custom_dimensions"

[runtime]
storage_mode = "AUTO"
max_loaded_dimensions = 4
auto_unload = false
unload_delay_seconds = 300
vs_remount_cooldown_ticks = 100

[respawn]
mode = "OVERWORLD"
prefer_overworld_player_spawn = true
fallback_to_overworld_world_spawn = true

[return_history]
max_entries = 3
return_gate_uses_history = true
return_scroll_uses_history = false

[return_scroll]
default_xp_level_cost = 5

[rarity_weights]
COMMON = 100
UNCOMMON = 60
RARE = 25
EPIC = 10
LEGENDARY = 3


Dimension側の推奨初期値:

[dimensions.bed]
allow_bed_respawn = false


============================================================
22. WDL 1.1.3 重要仕様まとめ
============================================================

・外部ワールドは WDL_custom_dimensions に配置
・既存Configは削除不要で互換動作
・最新Configの新設定/コメントが必要なら、旧Configを退避して再生成後に設定内容だけコピー
・設定変更後は /wdl scan
・TOMLの値を空欄にしない
・weightは省略可能
・rarityだけでもランダム抽選可能
・allowed_igniters = [] は通常Basic / Advanced、CreativeはMaster Igniterとして常に使用可能
・LIST / ALL対応
・Gate開通ごとにランダム再抽選
・現在Dimension自身は抽選候補から除外
・同じ物理フレームに複数Gate定義を設定可能
・曖昧なGate定義は安全のため無効化
・Gate破壊 / Portal破壊でSessionも終了
・AnchorはGate到着地点
・Return Historyはプレイヤーごとに保存
・Return Gateは初期状態で来た道を戻る
・Return Scrollは初期状態でOverworldへ直接帰還
・Return Historyはループ圧縮される
・Return Historyはマルチプレイヤーで個別管理
・Bed RespawnはDimensionごとに許可可能
・allow_bed_respawn未記載はfalse
・falseでも睡眠は可能
・trueなら必要に応じてLazy MountしてBed Respawn
・登録数とLive ServerLevel数は別
・IMPORTが安定方式
・DIRECTは将来 / 実験用


============================================================
23. 最後に
============================================================

初めての方は、最初から全機能を使わなくても大丈夫です。

まず:

1 World
+
1 Gate

だけで動作確認してください。


慣れてきたら:

Random Gate
↓
Rarity / Weight
↓
Return Gate
↓
Return History
↓
Bed Respawn
↓
Auto-Unload

の順で追加すると理解しやすくなります。


困ったときは最初に:

/wdl scan
/wdl list
/wdl status
/wdl loaded

を確認してください。


World Dimension Loader (WDL) 1.1.3
End of Japanese README
