コンテンツにスキップ

クイックスタート

10 分で最初のプラグインを作ります。このプラグインは 2 つの機能を追加します。

種類名前役割
メニュー項目ツール › 선택 블록 세기 (選択ブロックを数える)選択ボックス内のブロック数を通知で表示します。
クイック追加「追加」 › プリセット › 3×3 기둥 (3×3 柱)マウスの下のマスに石レンガの柱 (3×3、高さ 6) を配置します。

必要なものは .NET 8 SDK とインストール済みの NP Editor です。先に 概要 の「必要なもの」の表を確認してください。

1 つのフォルダーに 3 つのファイルを作ります。

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=falseSDK dll を出力フォルダーにコピーしません。エディターが持つ SDK を使います。
ImplicitUsingsSystem.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 1 回 = 元に戻す 1 ステップ
{
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 が作成されます。

3. プラグインフォルダーに入れる

Section titled “3. プラグインフォルダーに入れる”
  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 を 1 回押すと、柱全体が消えます。

エディターは dll ファイルをロックしません。エディターを起動したまま再ビルドできます。

  1. コードを修正して再ビルドします。
  2. 新しい dll をプラグインフォルダーに上書きします。
  3. プラグインマネージャーでその行を選択し、「再読み込み (選択)」を押します。

コンソールで plugins と入力すると、プラグインの一覧と状態が表示されます。plugins reload はフォルダーを再スキャンします。