快速开始
用 10 分钟制作第一个插件。这个插件添加两项功能。
| 类型 | 名称 | 作用 |
|---|---|---|
| 菜单项 | 工具 › 선택 블록 세기 | 以通知显示选择框内的方块数量。 |
| 快速添加 | 「添加」 › 预设 › 3×3 기둥 | 在鼠标下方的格子放置一根石砖柱(3×3,高 6)。 |
准备工作是 .NET 8 SDK 和已安装的 NP Editor。请先确认概述中的准备工作表。
1. 创建项目
Section titled “1. 创建项目”在一个文件夹中创建三个文件。
my_first_plugin/├─ MyFirstPlugin.csproj├─ Plugin.cs└─ plugin.jsonMyFirstPlugin.csproj
Section titled “MyFirstPlugin.csproj”<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net8.0</TargetFramework> <EnableDynamicLoading>true</EnableDynamicLoading> <Nullable>enable</Nullable> <ImplicitUsings>enable</ImplicitUsings> </PropertyGroup> <ItemGroup> <!-- 引用编辑器安装文件夹中的 SDK dll。若更改过安装文件夹,也要修改此路径。 --> <Reference Include="NP.Editor.Sdk"> <HintPath>$(LOCALAPPDATA)\Programs\NP Editor\data_NPEditor_windows_x86_64\NP.Editor.Sdk.dll</HintPath> <Private>false</Private> </Reference> </ItemGroup> <ItemGroup> <None Include="plugin.json" CopyToOutputDirectory="PreserveNewest" /> </ItemGroup></Project>| 设置 | 原因 |
|---|---|
EnableDynamicLoading | 使插件在禁用时可以从内存中卸载。 |
Private=false | 不将 SDK dll 复制到输出文件夹,而使用编辑器自带的 SDK。 |
ImplicitUsings | 自动加入 System.Linq · System.IO 等基本 using。 |
复制 plugin.json | 构建输出文件夹中会一并生成 plugin.json。 |
Plugin.cs
Section titled “Plugin.cs”using NP.Editor.Sdk;
namespace MyFirstPlugin;
public sealed class Plugin : INpEditorPlugin{ public void Register(INpEditorHost host) { // 工具 › 선택 블록 세기 host.AddMenuItem(new NpMenuItem("count", "도구", "선택 블록 세기", () => { if (host.World.Selection is not { } box) { host.Message("먼저 영역을 고르세요"); return; } int n = host.World.Blocks(box).Count(); host.Message($"선택 안 블록 {n:N0}개"); }));
// 添加 › 预设 › 3×3 기둥(放在鼠标下方的格子) host.AddQuickAddItem(new NpQuickAdd("pillar", "3×3 기둥", "프리셋", ctx => ctx.World.Edit("3×3 기둥", e => // 一次 Edit = 一步撤销 { for (int y = 0; y < 6; y++) for (int x = 0; x < 3; x++) for (int z = 0; z < 3; z++) e.Set(ctx.Place.X + x, ctx.Place.Y + y, ctx.Place.Z + z, "minecraft:stone_bricks"); }), Keywords: "pillar column 기둥", Icon: "prefab", IconState: "minecraft:stone_bricks"));
host.Log("준비됨"); }}- 入口类实现
INpEditorPlugin。必须有一个无参数的public构造函数。 - 在
Register中通过host.Add…挂接功能。 - 若
Register中发生异常,则不会注册任何内容,插件被禁用。
plugin.json
Section titled “plugin.json”{ "id": "my_first_plugin", "name": "내 첫 플러그인", "version": "0.1.0", "sdk": "^1.0", "dll": "MyFirstPlugin.dll", "entry": "MyFirstPlugin.Plugin", "description": "선택 블록 세기 + 3×3 기둥", "author": "내 이름"}此插件只使用 SDK 1.0 的功能,所以写 "sdk": "^1.0"。字段说明见 plugin.json。
dotnet build -c Release输出文件夹(bin\Release\net8.0\)中会生成 MyFirstPlugin.dll 和 plugin.json。
3. 放入插件文件夹
Section titled “3. 放入插件文件夹”- 在编辑器中点击「工具 › 打开插件文件夹」。将打开
%APPDATA%\NPEditor\plugins\。 - 在其中创建
my_first_plugin文件夹。 - 复制
MyFirstPlugin.dll和plugin.json。不要放入NP.Editor.Sdk.dll。 - 若要调试,请一并放入
MyFirstPlugin.pdb。
- 打开「工具 › 插件管理器…」。
- 点击「重新扫描」。
- 第一次会出现安全警告。点击「可信 — 加载」。
- 列表中「내 첫 플러그인」显示为「已启用」即可。
| 位置 | 应显示的内容 |
|---|---|
| 输出日志 | [my_first_plugin] 준비됨 |
| 插件管理器「注册」列 | 메뉴 1 · 빠른 추가 1 |
| 菜单栏 | 工具 › 선택 블록 세기 |
| 主工具栏「添加」 | 分类「预设」中的「3×3 기둥」(搜索「기둥」) |
- 放置几个方块并选择区域后,点击「工具 › 선택 블록 세기」。会出现方块数量的通知。
- 点击「添加」 › 3×3 기둥。柱子随即生成。
- 按一次 Ctrl+Z,整根柱子消失。
6. 修改并重新加载
Section titled “6. 修改并重新加载”编辑器不会锁定 dll 文件。可以在编辑器运行时重新构建。
- 修改代码并重新构建。
- 用新的 dll 覆盖插件文件夹中的文件。
- 在插件管理器中选中该行,点击「重新加载 (所选)」。
在控制台输入
plugins会显示插件列表和状态。plugins reload会重新扫描文件夹。
- 更多注册点:注册点
- 包含设置标签页 · 快捷键 · 3D 绘制的示例:示例: hello_tool
- 无法启用时:故障排除