• 欢迎!在发帖前请阅读每个板块置顶的版块须知。论坛 QQ 群:931748551
    鼓励大家多多发帖,这里有问必答。论坛左下角可切换明亮 / 黑暗模式哦。

Part 1.编写你的第一个插件

  • 查看 查看: 159
  • 最后更新 最后更新:
  • Part 1.编写你的第一个插件​

    本章你将学到:
    • 使用Visual Studio创建插件项目
    • 使用Nuget程序包管理器添加插件依赖项
    • 初步了解编写一个插件的流程

    1.创建新项目​

    1. 选择类库选项,然后下一步。
    注: 一定要看清楚是C#、.NET、库。
    1692979794386.png
    1. 项目名称填写插件名,位置建议默认,具体可以参考下图配置
    注:
    一般来讲,项目名只由字母(A-Z,a-z),数字(0-9),下划线(_)组成,并且项目名具有实际意义
    不要使用中文!不要使用中文!不要使用中文!(引自棱镜)
    解决方案中可以包含多个插件项目。使用同一个解决方案存放多个插件项目可以方便管理多个插件代码,并且方便项目之间互相引用。
    1692979804434.png
    1. 此处一定要选择.NET 6.0,否则可能会导致一些插件兼容问题
    1692979959693.png

    2.进入VS项目​

    • 我相信有C#基础的你一定对VS的界面十分熟悉,所以不做过多介绍,但请你熟记下图的代码区域
    1692977890417.png
    • 重命名(非必要)
      在解决方案资源管理器找到如图.cs文件可以对其右键进行重命名
      当然同样要遵循命名规范,不随意使用中文
    1692979970648.png

    3.添加TShock插件依赖项​

    TShock插件依赖许多相关程序集,好消息是你可以通过NuGet程序包快速引用他们
    1. 在解决方案资源管理器右键依赖项,点击管理NuGet程序包
    1692979979044.png
    1. 根据下图步骤安装TShock的NuGet程序包
    1692979993620.png
    1. 弹出提示点击确定、接受即可

    4.开始编写代码​

    • 显然你现在并不会写,但是你可以先复制下面的TShock插件模板
    C#:
    //代码来源:https://github.com/chi-rei-den/PluginTemplate/blob/master/src/PluginTemplate/Program.cs
    //恋恋的TShock插件模板,有改动(为了配合章节名)
    //来自棱镜的插件教程

    using System;
    using System.Collections.Generic;
    using System.Reflection;
    using Terraria;
    using TerrariaApi.Server;
    using TShockAPI;

    namespace Plugin
    {
    [ApiVersion(2, 1)]
    public class Plugin : TerrariaPlugin
    {
    //定义插件的作者名称
    public override string Author => "插件的作者";

    //插件的一句话描述
    public override string Description => "插件的描述";

    //插件的名称
    public override string Name => "插件的名字";

    //插件的版本
    public override Version Version => Assembly.GetExecutingAssembly().GetName().Version;

    //插件的构造器
    public Plugin(Main game) : base(game)
    {
    }

    //插件加载时执行的代码
    public override void Initialize()
    {
    //恋恋给出的模板代码中展示了如何为TShock添加一个指令
    Commands.ChatCommands.Add(new Command(
    permissions: new List<string> { "plugin.permission1", "plugin.permission2", },
    cmd: this.Cmd,
    "helloworld", "hw"));
    }

    //插件卸载时执行的代码

    protected override void Dispose(bool disposing)
    {
    if (disposing)
    {
    //移除所有由本插件添加的所有指令

    var asm = Assembly.GetExecutingAssembly();
    Commands.ChatCommands.RemoveAll(c => c.CommandDelegate.Method?.DeclaringType?.Assembly == asm);
    }
    base.Dispose(disposing);
    }

    //执行指令时对指令进行处理的方法
    private void Cmd(CommandArgs args)
    {
    args.Player.SendSuccessMessage("Hello world!");
    }
    }
    }
    • 相信你看到这串代码大概是一脸懵逼的,但是没关系,你只要知道它的功能是添加命令/helloworld,执行此命令会向执行命令的人发送一个绿色的HelloWorld!
    1692979826411.png
    • 粘贴代码后,当你发现代码编辑区左下角的错误数已经变成0之后,恭喜你可以开始编译插件了
    1692979003458.png
    注:如果有错误存在,可能是你复制漏了某些地方。

    5.编译生成你的插件​

    1. 点击工具栏处的绿色小三角(或者快捷键Ctrl+B)即可开始编译
    1692978964620.png
    1. 开始编译后,输出区会打印编译的一些日志,最后打印编译结果
    2. 当出现"1 成功"的字样,说明插件代码已经成功编译了
    1692980007910.png

    6.找到并安装你的插件​

    1. 在解决方案资源管理器右键当前项目(HelloWorld),点击在文件资源管理器中打开文件夹
    1692980015118.png
    1692980023342.png
    1. 此时会蹦出一个文件夹,按照下图目录找到net6.0文件夹
    1692979833858.png
    1. 将图示两个文件移动或复制到TShock目录中的ServerPlugins文件夹中
    1692979842755.png

    7.测试你的插件​

    1. 启动TShock,可以发现你的插件已经被TShock成功识别并安装了
    1692980077372.png
    1. 使用/help命令查看命令列表,可以发现插件添加的命令已经在命令列表中显示
    2. 执行/helloworld,控制台打印出绿色Hello world! 说明插件功能正常
    1692975430672.png
  • 正在加载……