选择分类
欢迎使用帮助中心
请从左侧选择一个文档开始阅读
正在加载文档,请稍候...
01-插件基础接口
插件基础
插件是什么?
插件是一个继承 ServerPlugin 类的 C# 程序,服务器启动时会自动加载 Plugins 文件夹中的插件。
最简单的插件
using Game.Server;
public class MyPlugin : ServerPlugin
{
public override string Name => "我的插件";
public override int Version => 1;
public byte FirstLevel => 0;
public override void Initialize()
{
Console.WriteLine("插件加载成功!");
}
public override void Load() { }
public override void Save() { }
}必须要写的成员
| 成员 | 类型 | 说明 |
|---|---|---|
Name |
string | 插件名称,显示在日志中 |
Version |
int | 版本号,整数 |
FirstLevel |
byte | 优先级,填 0 就行 |
Initialize() |
方法 | 插件加载时执行,用来注册事件 |
Load() |
方法 | 读取数据时调用 |
Save() |
方法 | 保存数据时调用 |
插件的生命周期
服务器启动
↓
Initialize() 被调用 ← 在这里注册事件监听
↓
Load() 被调用 ← 在这里读取配置文件
↓
插件运行中...
↓
Save() 被调用 ← 服务器关闭或自动保存时
↓
服务器关闭注册事件
在 Initialize() 中注册你想监听的事件:
using Game.Server;
using Game.Server.PlayerEvent;
public class MyPlugin : ServerPlugin, IPlayerEnterGameEventHandle
{
public override string Name => "MyPlugin";
public override int Version => 1;
public byte FirstLevel => 0;
public override void Initialize()
{
// 注册玩家进入/离开事件
PlayerEnterGameEventManager.AddObject(this);
}
// 玩家进入时调用
void IPlayerEnterGameEventHandle.PlayerEnter(PlayerData player)
{
Console.WriteLine($"欢迎 {player.Name}!");
}
// 玩家离开时调用
void IPlayerEnterGameEventHandle.PlayerLeave(PlayerData player)
{
Console.WriteLine($"{player.Name} 离开了");
}
public override void Load() { }
public override void Save() { }
}可用的事件接口
| 接口 | 说明 |
|---|---|
IPlayerEnterGameEventHandle |
玩家进入/离开 |
IPlayerMoveHandle |
玩家移动 |
IPlayerBreakAndPlaceHandle |
方块破坏/放置 |
IPlayerInteractEventHandle |
玩家交互(点击、攻击等) |
项目配置文件
创建 .csproj 文件:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<OutputType>Library</OutputType>
<AssemblyName>MyPlugin</AssemblyName>
</PropertyGroup>
<ItemGroup>
<Reference Include="Engine">
<HintPath>游戏目录\Engine.dll</HintPath>
</Reference>
<Reference Include="GameEntitySystem">
<HintPath>游戏目录\GameEntitySystem.dll</HintPath>
</Reference>
<Reference Include="LiteNetLib">
<HintPath>游戏目录\LiteNetLib.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json">
<HintPath>游戏目录\Newtonsoft.Json.dll</HintPath>
</Reference>
</ItemGroup>
</Project>小贴士
- 一个插件一个文件:简单插件可以写在一个
.cs文件里 - 命名要有意义:插件名最好能说明它的功能
- 版本号递增:每次更新后记得改版本号
- 测试再发布:先在本地测试没问题再放到服务器
常见问题
Q: 插件没加载?
A: 检查 .dll 是否在 Plugins 文件夹,检查是否有报错。
Q: 报错找不到类型?
A: 确认引用了正确的 dll 文件。
Q: 事件没触发?
A: 确认在 Initialize() 中调用了 EventManager.AddObject(this)。