먼저 도구 › 플러그인 관리자… 에서 상태 칸과 아래 상세 줄을 봅니다. 그다음 출력 로그에서 [플러그인 <id>] 줄을 찾습니다. 상태의 뜻은 불러오기와 수명에 있습니다.
| 증상 | 원인 | 해결 |
|---|
| 관리자 목록에 없음 | plugin.json 이 폴더 바로 아래에 없음(한 단계 더 들어가 있음) | plugins\<폴더>\plugin.json 꼴로 옮깁니다. |
| 관리자 목록에 없음 | 폴더를 넣은 뒤 다시 훑지 않음 | 「다시 훑기」를 누릅니다. |
| 관리자 목록에 없음 | 다른 폴더에 넣음 | 도구 › 플러그인 폴더 열기 로 연 폴더에 넣습니다. 관리자 창 머리에 읽는 폴더가 모두 나옵니다. |
| 「대기」에서 안 바뀜 | 첫 실행 경고에서 「이번엔 안 불러옴」을 누름 | 「켜기」 체크를 껐다 다시 켜면 경고가 다시 나옵니다. 에디터를 다시 켜도 나옵니다. 「믿을 수 있음 — 불러오기」를 누릅니다. |
「오류(파일)」 id 형식 틀림 | 대문자 · - · 숫자로 시작 | 소문자로 시작하고 소문자 · 숫자 · _ · . 만 씁니다. |
「오류(파일)」 version 형식 틀림 | 1.0 처럼 두 마디 | 1.0.0 처럼 세 마디로 씁니다. |
「오류(파일)」 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 를 여러 번 부름 | 한 동작을 Edit 한 번으로 묶습니다. |
| 새 월드에 앞 월드의 그림 · 상태가 남음 | WorldChanged 에서 비우지 않음 | host.WorldChanged += _ => { …Clear(); host.Draw.Clear(); }; |
| 편집할 때 에디터가 끊김 | Committed 처리기가 무거움 | 수만 세고 무거운 일은 나중에 합니다. |
| 패널을 열면 에디터가 끊김 | 살아 있는 글(Label(() => …))이 월드를 훑음 | 값을 필드에 담아 두고 글에서는 읽기만 합니다. |
| 패널 숫자 칸이 저장 값과 다름 | 패널은 켤 때 한 번 만들어짐 | Register 앞부분에서 Settings 를 먼저 읽습니다. |
SetCamera 가 false | 플레이 중이 아님 · 값이 NaN | host.View.Playing 을 먼저 봅니다. |
host.WorldChanged -= … 가 안 먹음 | 호스트 이벤트는 -= 를 지원하지 않음 | 처리기 안에서 플래그로 거릅니다. |
| 설정이 사라짐 | 설정 파일이 망가져 빈 설정으로 시작 | plugin_settings\<id>.json.bad 를 확인합니다. |
| 증상 | 원인 | 해결 |
|---|
| 다시 빌드한 것이 반영 안 됨 | 플러그인 폴더에 옛 dll 이 남음 · 다시 읽지 않음 | 새 dll 을 덮어쓰고 「다시 읽기(선택)」 |
| 「다시 훑기」로는 반영 안 됨 | 이미 켜진 플러그인은 다시 읽지 않음 | 「다시 읽기(선택)」를 씁니다. |
| 끈 뒤에도 메모리에서 안 내려감 | 정적 이벤트 · 타이머 · 스레드에 내 객체가 남음 | IDisposable.Dispose 에서 풉니다. |
| 끈 뒤에도 배경 작업이 돎 | Task.Run 작업을 멈추지 않음 | Dispose 에서 CancellationToken 으로 멈춥니다. |