まず ツール › プラグインマネージャー… で、状態列とその下の詳細行を確認します。次に、出力ログで [プラグイン <id>] の行を探します。状態の意味は 読み込みとライフサイクル にあります。
| 症状 | 原因 | 解決 |
|---|
| マネージャーの一覧にない | plugin.json がフォルダーの直下にない (1 階層深くなっている) | plugins\<フォルダー>\plugin.json の形に移動します。 |
| マネージャーの一覧にない | フォルダーを入れた後に再スキャンしていない | 「再スキャン」を押します。 |
| マネージャーの一覧にない | 別のフォルダーに入れた | ツール › プラグインフォルダーを開く で開いたフォルダーに入れます。マネージャーウィンドウの上部に、読み込むフォルダーがすべて表示されます。 |
| 「待機」から変わらない | 初回実行の警告で「今回は読み込まない」を押した | 「有効」のチェックを外して付け直すと、警告が再表示されます。エディターを再起動しても表示されます。「信頼できる — 読み込む」を押します。 |
「エラー (ファイル)」 id の形式が不正 | 大文字・- ・数字で始まる | 小文字で始め、小文字・数字・_ ・ . だけを使います。 |
「エラー (ファイル)」 version の形式が不正 | 1.0 のような 2 区切り | 1.0.0 のように 3 区切りで書きます。 |
「エラー (ファイル)」 sdk … がありません ・ sdk バージョンが不正 | sdk 項目がない、または誤り | "^1.0" の形で書きます。 |
「エラー (ファイル)」 dll は plugin.json と同じ場所… | dll に .. や絶対パス | plugin.json からの相対パスで書きます。 |
「エラー (ファイル)」 dll がありません | ビルドしていない、または名前が違う | ビルド出力の dll 名と dll 項目を合わせます。 |
「エラー (隔離済み)」 読み込みに失敗: … entry の型がありません | entry の名前空間・クラス名が誤り | 名前空間.クラス の完全名を書きます。大文字・小文字も合わせます。 |
「エラー (隔離済み)」 読み込みに失敗: … INpEditorPlugin の実装がありません | エントリークラスがない、または abstract ・引数なしの public コンストラクターがない | public sealed class Plugin : INpEditorPlugin に引数なしのコンストラクターを置きます。 |
「エラー (隔離済み)」 読み込みに失敗: … は INpEditorPlugin (引数なしコンストラクター) ではありません | entry のクラスが INpEditorPlugin を実装していない、または引数なしの public コンストラクターがない | 実装とコンストラクターを確認します。 |
「エラー (ファイル)」 同じ id … が既にあります | 別のフォルダーに同じ id | 一方を削除するか、id を変更します。 |
「バージョン不一致」 SDK ^1.3 が必要 — このエディターは 1.2.0 | sdk 範囲がエディターの SDK より高い | エディターを更新するか、使う機能に合わせて sdk を下げます。 |
「バージョン不一致」 読み込みに失敗: MissingMethodException など | 新しい SDK でビルドしたのに sdk を低く書いた | sdk を実際に使う機能のバージョンに上げます。 |
「エラー (隔離済み)」 読み込みに失敗: … | Register で例外 | 出力ログの例外を修正します。下の「登録」の表を参照してください。 |
| 症状 | 原因 | 解決 |
|---|
有効にした直後に「エラー (隔離済み)」 … が空です | Id ・ Name ・ Kind ・ショートカット名・キーが空文字列 | 空の項目を埋めます。 |
「エラー (隔離済み)」 ショートカットキーを読み取れません | "1~8" ・ "W/E/R" ・ "Ctrl++" のようなキー文字列 | "Ctrl+Alt+H" の形で書きます。登録ポイント のキーの表を参照してください。 |
| 「エラー (隔離済み)」 シーンイベント type 関連 | 同じ役割に同じ Type が既にある (内蔵の cinematic など) | Type の前に自分の名前を付けます。 |
| コンソールコマンドが作成されない | 同じ名前のコマンドが既にある・名前に空白 | 名前の前に自分の名前を付け、空白を取り除きます。 |
| メニューが思わぬ場所にできる | Menu 名の誤字 (新しいメニューができる) | "파일" ・ "편집" ・ "창" ・ "도구" ・ "빌드" ・ "도움말" のいずれかを使います。 |
| パネルが表示されない | パネルは閉じた状態で作成される | ウィンドウメニューでそのパネルをオンにします。 |
| モードがモード列に表示されない | 先頭 8 個より後ろのモードは「その他」にある | モード列の末尾にある「その他」を開きます。 |
| メニュー・タブ名の記号が消える | 絵文字記号は画面から取り除かれる | 文字だけを使い、アイコンは Icon 項目にアイコン名で指定します。 |
| 症状 | 原因 | 解決 |
|---|
| 使用中に「エラー (隔離済み)」 | コールバック (メニュー・コマンド・イベント・パネルの文字列・Simulate) で例外 | 出力ログの エラー → 隔離 — <場所>: … を見て修正した後、「再読み込み (選択)」 |
World.Edit で InvalidOperationException | 他の大きな編集処理 (塗りつぶし・地形) が進行中 | 処理が終わってから再実行します。例外を捕捉して通知に変えます。 |
| ブロックが変わらない・戻り値が少ない | ロックされたマス (共同建築のロック・ロックされたアクター・セルガード) | 戻り値 (変更されたマスの数) で確認します。 |
| ブロックが紫・黒のチェック模様になる | ブロックステートの文字列の誤字・名前空間の欠落 | minecraft:stone_bricks のように正確に書きます。 |
| Ctrl+Z を何度も押さないと戻らない | Edit を複数回呼び出している | 1 つの操作を Edit 1 回にまとめます。 |
| 新しいワールドに前のワールドの描画・状態が残る | WorldChanged でクリアしていない | host.WorldChanged += _ => { …Clear(); host.Draw.Clear(); }; |
| 編集時にエディターがカクつく | Committed ハンドラーが重い | 数を数えるだけにし、重い処理は後で行います。 |
| パネルを開くとエディターがカクつく | ライブテキスト (Label(() => …)) がワールドをスキャンしている | 値をフィールドに保持しておき、文字列では読むだけにします。 |
| パネルの数値欄が保存値と違う | パネルは有効化時に 1 回だけ作成される | Register の冒頭で先に Settings を読み込みます。 |
SetCamera が false | プレイ中ではない・値が NaN | 先に host.View.Playing を確認します。 |
host.WorldChanged -= … が効かない | ホストイベントは -= をサポートしない | ハンドラー内でフラグを使って除外します。 |
| 設定が消えた | 設定ファイルが壊れていて、空の設定で開始した | plugin_settings\<id>.json.bad を確認します。 |
| 症状 | 原因 | 解決 |
|---|
| 再ビルドした内容が反映されない | プラグインフォルダーに古い dll が残っている・再読み込みしていない | 新しい dll を上書きして「再読み込み (選択)」 |
| 「再スキャン」では反映されない | 既に有効なプラグインは再読み込みしない | 「再読み込み (選択)」を使います。 |
| 無効にした後もメモリからアンロードされない | 静的イベント・タイマー・スレッドに自分のオブジェクトが残っている | IDisposable.Dispose で解除します。 |
| 無効にした後もバックグラウンド処理が動いている | Task.Run の処理を停止していない | Dispose で CancellationToken を使って停止します。 |