빠른 시작
10분 만에 첫 플러그인을 만듭니다. 이 플러그인은 두 가지를 더합니다.
| 종류 | 이름 | 하는 일 |
|---|---|---|
| 메뉴 항목 | 도구 › 선택 블록 세기 | 선택 상자 안의 블록 수를 알림으로 보여 줍니다. |
| 빠른 추가 | 「추가」 › 프리셋 › 3×3 기둥 | 마우스 아래 칸에 돌벽돌 기둥(3×3, 높이 6)을 놓습니다. |
준비물은 .NET 8 SDK 와 설치된 NP Editor 입니다. 개요의 준비물 표를 먼저 확인합니다.
1. 프로젝트 만들기
섹션 제목: “1. 프로젝트 만들기”폴더 하나에 파일 세 개를 만듭니다.
my_first_plugin/├─ MyFirstPlugin.csproj├─ Plugin.cs└─ plugin.jsonMyFirstPlugin.csproj
섹션 제목: “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
섹션 제목: “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단계 { 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
섹션 제목: “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. 빌드
섹션 제목: “2. 빌드”dotnet build -c Release출력 폴더(bin\Release\net8.0\)에 MyFirstPlugin.dll 과 plugin.json 이 생깁니다.
3. 플러그인 폴더에 넣기
섹션 제목: “3. 플러그인 폴더에 넣기”- 에디터에서 도구 › 플러그인 폴더 열기 를 누릅니다.
%APPDATA%\NPEditor\plugins\가 열립니다. - 그 안에
my_first_plugin폴더를 만듭니다. MyFirstPlugin.dll과plugin.json을 복사합니다.NP.Editor.Sdk.dll은 넣지 않습니다.- 디버그하려면
MyFirstPlugin.pdb도 같이 넣습니다.
4. 켜기
섹션 제목: “4. 켜기”- 도구 › 플러그인 관리자… 를 엽니다.
- 「다시 훑기」를 누릅니다.
- 처음 한 번은 보안 경고가 나옵니다. 「믿을 수 있음 — 불러오기」를 누릅니다.
- 목록에 「내 첫 플러그인」이 「켜짐」으로 보이면 됩니다.
5. 확인
섹션 제목: “5. 확인”| 어디서 | 보여야 하는 것 |
|---|---|
| 출력 로그 | [my_first_plugin] 준비됨 |
| 플러그인 관리자 「등록」 칸 | 메뉴 1 · 빠른 추가 1 |
| 메뉴 막대 | 도구 › 선택 블록 세기 |
| 메인 툴바 「추가」 | 분류 「프리셋」 안의 「3×3 기둥」(검색 「기둥」) |
- 블록 몇 개를 놓고 영역을 고른 뒤 도구 › 선택 블록 세기 를 누릅니다. 블록 수 알림이 나옵니다.
- 「추가」 › 3×3 기둥 을 누릅니다. 기둥이 생깁니다.
- Ctrl+Z 한 번으로 기둥 전체가 사라집니다.
6. 고치고 다시 읽기
섹션 제목: “6. 고치고 다시 읽기”에디터는 dll 파일을 잠그지 않습니다. 에디터를 켠 채로 다시 빌드할 수 있습니다.
- 코드를 고치고 다시 빌드합니다.
- 새 dll 을 플러그인 폴더에 덮어씁니다.
- 플러그인 관리자에서 그 줄을 고르고 「다시 읽기(선택)」를 누릅니다.
콘솔에서
plugins를 입력하면 플러그인 목록과 상태가 나옵니다.plugins reload는 폴더를 다시 훑습니다.
다음 단계
섹션 제목: “다음 단계”- 더 많은 등록점: 등록점
- 설정 탭 · 단축키 · 3D 그리기가 있는 예제: 예제: hello_tool
- 켜지지 않을 때: 문제 해결