クイックスタート
10 分で最初のプラグインを作ります。このプラグインは 2 つの機能を追加します。
| 種類 | 名前 | 役割 |
|---|---|---|
| メニュー項目 | ツール › 선택 블록 세기 (選択ブロックを数える) | 選択ボックス内のブロック数を通知で表示します。 |
| クイック追加 | 「追加」 › プリセット › 3×3 기둥 (3×3 柱) | マウスの下のマスに石レンガの柱 (3×3、高さ 6) を配置します。 |
必要なものは .NET 8 SDK とインストール済みの NP Editor です。先に 概要 の「必要なもの」の表を確認してください。
1. プロジェクトを作る
Section titled “1. プロジェクトを作る”1 つのフォルダーに 3 つのファイルを作ります。
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 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で例外が発生すると何も登録されず、プラグインは無効になります。
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 にあります。
2. ビルド
Section titled “2. ビルド”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も一緒に入れます。
4. 有効にする
Section titled “4. 有効にする”- ツール › プラグインマネージャー… を開きます。
- 「再スキャン」を押します。
- 初回だけセキュリティ警告が表示されます。「信頼できる — 読み込む」を押します。
- 一覧に「내 첫 플러그인」(私の最初のプラグイン) が「オン」と表示されれば完了です。
| 場所 | 表示されるべきもの |
|---|---|
| 出力ログ | [my_first_plugin] 준비됨 |
| プラグインマネージャーの「登録」列 | 메뉴 1 · 빠른 추가 1 |
| メニューバー | ツール › 선택 블록 세기 |
| メインツールバー「追加」 | 分類「プリセット」の中の「3×3 기둥」(기둥 で検索) |
- ブロックをいくつか配置して範囲を選択し、ツール › 선택 블록 세기 を押します。ブロック数の通知が表示されます。
- 「追加」 › 3×3 기둥 を押します。柱ができます。
- Ctrl+Z を 1 回押すと、柱全体が消えます。
6. 修正して再読み込みする
Section titled “6. 修正して再読み込みする”エディターは dll ファイルをロックしません。エディターを起動したまま再ビルドできます。
- コードを修正して再ビルドします。
- 新しい dll をプラグインフォルダーに上書きします。
- プラグインマネージャーでその行を選択し、「再読み込み (選択)」を押します。
コンソールで
pluginsと入力すると、プラグインの一覧と状態が表示されます。plugins reloadはフォルダーを再スキャンします。
次のステップ
Section titled “次のステップ”- その他の登録ポイント: 登録ポイント
- 設定タブ・ショートカット・3D 描画を含むサンプル: サンプル: hello_tool
- 有効にならないとき: トラブルシューティング