Skip to content

Troubleshooting

First check the status column and the detail line below it in Tools › Plugin Manager…. Then look for [Plugin <id>] lines in the Output Log. The meaning of each state is in Loading and lifecycle.

SymptomCauseFix
Not in the manager listplugin.json is not directly in the folder (it is one level deeper)Move it so the layout is plugins\<folder>\plugin.json.
Not in the manager listThe folders were not rescanned after adding the folderClick Rescan.
Not in the manager listThe folder was put somewhere elsePut it in the folder opened by Tools › Open plugin folder. The top of the manager window lists every folder that is scanned.
Stays PendingDon’t load this time was clicked in the first-run warningClear and re-check the Enable checkbox to show the warning again. It also appears after restarting the editor. Click Trusted — load.
Error (file) Invalid id formatStarts with an uppercase letter · - · a digitStart with a lowercase letter and use only lowercase letters, digits, _ and ..
Error (file) Invalid version formatTwo parts, as in 1.0Write three parts, as in 1.0.0.
Error (file) Missing sdk … · Invalid sdk versionThe sdk field is missing or invalidWrite it in the form "^1.0".
Error (file) dll must be next to plugin.json ….. or an absolute path in dllWrite a path relative to plugin.json.
Error (file) dll not foundNot built, or a different nameMatch the dll field to the dll name in the build output.
Error (isolated) Load failed: … entry type not foundWrong namespace or class name in entryWrite the full Namespace.Class name, with matching case.
Error (isolated) Load failed: … No INpEditorPlugin implementationNo entry class, or it is abstract · lacks a public parameterless constructorGive public sealed class Plugin : INpEditorPlugin a parameterless constructor.
Error (isolated) Load failed: … is not an INpEditorPlugin (parameterless constructor)The entry class does not implement INpEditorPlugin or lacks a public parameterless constructorCheck the implementation and constructor.
Error (file) Id … already existsThe same id in another folderDelete one of them or change the id.
Version mismatch Requires SDK ^1.3 — this editor has 1.2.0The sdk range is higher than the editor SDKUpdate the editor, or lower sdk to match the features you use.
Version mismatch Load failed: MissingMethodException and similarBuilt with a newer SDK but sdk set too lowRaise sdk to the version of the features you actually use.
Error (isolated) Load failed: …Exception in RegisterFix the exception from the Output Log. See the “Registration” table below.
SymptomCauseFix
Error (isolated) … is empty right after enablingId · Name · Kind · shortcut name · key is an empty stringFill in the empty field.
Error (isolated) Can't parse shortcut keyKey strings such as "1~8" · "W/E/R" · "Ctrl++"Write it in the form "Ctrl+Alt+H". See the key table in Registration points.
Error (isolated) related to a scene event typeThe same Type already exists in the same role (built-in cinematic and so on)Prefix Type with your own name.
A console command does not appearA command with the same name already exists · the name contains spacesPrefix the name with your own name and remove the spaces.
A menu appears in the wrong placeTypo in the Menu name (a new menu is created)Use one of "파일" · "편집" · "창" · "도구" · "빌드" · "도움말".
The panel is not visiblePanels are created closedTurn the panel on in the Window menu.
The mode is not visible in the mode rowModes after the first 8 are in MoreOpen More at the end of the mode row.
Symbols in menu or tab names disappearPictographic characters are stripped on screenUse text only, and give icons as an icon name in the Icon field.
SymptomCauseFix
Error (isolated) during useException in a callback (menu · command · event · panel text · Simulate)Read Error → isolated — <where>: … in the Output Log, fix it, then click Reload (selected)
InvalidOperationException from World.EditAnother large edit (fill · terrain) is in progressTry again after it finishes. Catch the exception and turn it into a notification.
Blocks do not change · the return value is smallLocked cells (Co-building lock · locked actor · cell guard)Check with the return value (number of changed cells).
Blocks show a purple and black checkerboardTypo in the block state string · missing namespaceWrite it precisely, as in minecraft:stone_bricks.
Ctrl+Z must be pressed several times to revertEdit was called multiple timesWrap one operation in a single Edit.
Drawings or state from the previous world remain in a new worldNot cleared in WorldChangedhost.WorldChanged += _ => { …Clear(); host.Draw.Clear(); };
The editor stutters while editingThe Committed handler is heavyOnly count, and do heavy work later.
The editor stutters when the panel is openLive text (Label(() => …)) scans the worldKeep values in fields and only read them in the text.
A panel number field differs from the saved valueThe panel is built once on enableRead Settings first at the start of Register.
SetCamera returns falseNot in Play · the value is NaNCheck host.View.Playing first.
host.WorldChanged -= … has no effectHost events do not support -=Filter with a flag inside the handler.
Settings disappearedThe settings file was corrupt, so it started with empty settingsCheck plugin_settings\<id>.json.bad.
SymptomCauseFix
A rebuild is not reflectedThe old dll remains in the plugin folder · not reloadedOverwrite with the new dll and click Reload (selected)
Rescan does not reflect changesPlugins already on are not reloadedUse Reload (selected).
Not unloaded from memory after disablingYour objects remain in static events · timers · threadsRelease them in IDisposable.Dispose.
Background work keeps running after disablingTask.Run work was not stoppedStop it with a CancellationToken in Dispose.
  • plugin.json: id rules · three-part version · sdk = minimum version of the features used · dll · entry names are correct.
  • The folder does not contain NP.Editor.Sdk.dll (csproj Private=false).
  • It becomes On with Rescan when placed in a clean plugin folder.
  • No exception lines in the Output Log.
  • Menus, panels and modes are not duplicated or left behind after enable → disable → enable.
  • No previous state remains after a new world or opening another world (WorldChanged).
  • One use of a feature reverts with one Ctrl+Z.
  • No exceptions with no selection or an empty world.
  • Command names, world logic types and actor kinds start with your own name.
  • No emoji or pictographic characters in on-screen text.
  • Shortcuts do not collide with built-in keys (no red rows in Tools › Shortcuts…).
  • If you added world logic types, the server-side (NP Scene) handlers are ready too.
  • Dispose releases background work and static events.
  • No secret keys, tokens or personal paths in code or files.