跳转到内容

快速开始

用 10 分钟制作第一个插件。这个插件添加两项功能。

类型名称作用
菜单项工具 › 선택 블록 세기以通知显示选择框内的方块数量。
快速添加「添加」 › 预设 › 3×3 기둥在鼠标下方的格子放置一根石砖柱(3×3,高 6)。

准备工作是 .NET 8 SDK 和已安装的 NP Editor。请先确认概述中的准备工作表。

在一个文件夹中创建三个文件。

my_first_plugin/
├─ MyFirstPlugin.csproj
├─ Plugin.cs
└─ plugin.json
<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。
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 中发生异常,则不会注册任何内容,插件被禁用。
{
"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。

  1. 在编辑器中点击「工具 › 打开插件文件夹」。将打开 %APPDATA%\NPEditor\plugins\。
  2. 在其中创建 my_first_plugin 文件夹。
  3. 复制 MyFirstPlugin.dll 和 plugin.json。不要放入 NP.Editor.Sdk.dll。
  4. 若要调试,请一并放入 MyFirstPlugin.pdb。
  1. 打开「工具 › 插件管理器…」。
  2. 点击「重新扫描」。
  3. 第一次会出现安全警告。点击「可信 — 加载」。
  4. 列表中「내 첫 플러그인」显示为「已启用」即可。
位置应显示的内容
输出日志[my_first_plugin] 준비됨
插件管理器「注册」列메뉴 1 · 빠른 추가 1
菜单栏工具 › 선택 블록 세기
主工具栏「添加」分类「预设」中的「3×3 기둥」(搜索「기둥」)
  1. 放置几个方块并选择区域后,点击「工具 › 선택 블록 세기」。会出现方块数量的通知。
  2. 点击「添加」 › 3×3 기둥。柱子随即生成。
  3. 按一次 Ctrl+Z,整根柱子消失。

编辑器不会锁定 dll 文件。可以在编辑器运行时重新构建。

  1. 修改代码并重新构建。
  2. 用新的 dll 覆盖插件文件夹中的文件。
  3. 在插件管理器中选中该行,点击「重新加载 (所选)」。

在控制台输入 plugins 会显示插件列表和状态。plugins reload 会重新扫描文件夹。