使用LiteLoaderBDS2.0编写MCBE插件-1

Share

一、什么是LiteLoader2.0?

LiteLoader是为基岩版官方服务端Bedrock Dedicated Server提供底层API支持的插件加载器,提供BDS底层海量的API接口、大量封装好的实用接口、丰富的事件系统和强大的底层接口支持。

通过使用C++、Golang等语言编写插件,开发者可以方便地对 BDS 进行功能拓展与特性定制,容易上手,并且具有极高的灵活性。

二、配置开发环境

1.安装Visual Studio

  • 进入安装界面,选择 使用C++的桌面开发 ,然后点击右下角安装即可。

2.下载开发模板

  • 本篇文章使用LiteLDev所提供的开发模板进行教学,前往Github下载(点我
  • 你可以直接下载ZIP,也可以克隆的本地(推荐使用GitHub Desktop
  • 解压压缩包,随后打开Template.sln,按箭头打开。
  • 完成上面所以步骤,恭喜你完成了开发环境的布置~

三、编写一个简单的插件(攻击生物控制台输出LOG)

1.添加玩家攻击监听

#include "pch.h"
#include <EventAPI.h>//监听API
#include <LoggerAPI.h>//日志API
#include <LLAPI.h>//LLAPI

Logger logger("AttackLog");//Log名称

void PluginInit()
{
	LL::registerPlugin("PluginName", "Introduction", LL::Version(1, 0, 0));//注册插件
    logger.info("Loaded");//加载提示
    Event::PlayerAttackEvent::subscribe([](const Event::PlayerAttackEvent& ev) {//监听PlayerAttackEvent(玩家攻击监听)
        return true;
        });
}

2.控制台输出

  • 由于我们需要监听玩家攻击的生物,但是现在我们缺少了生物和玩家的头文件,所以需要我们添加进去。
#include <MC/Player.hpp>//玩家相关API
#include <MC/Actor.hpp>//生物相关API
  • 随后我们从通过玩家攻击事件获取玩家与生物指针
Player* Player = ev.mPlayer;//获取触发监听的玩家
Actor* actor = ev.mTarget;//获取被玩家攻击的生物
  • Actor与Player的头文件包含了大量的API,现在我们来获取玩家的名字与被攻击生物的类型、坐标、维度。
string playerName = Player->getRealName();//获取玩家真实名称
string actorType = actor->getTypeName();//获取被攻击的生物类型
Vec3 pos = actor->getPos();//获取被攻击的生物的坐标
string posStr = pos.toString();//将Vec3转换为字符串
int dimId = actor->getDimensionId();//获取被攻击的生物的维度
  • 大功告成了,让我们输出到控制台吧,LL本体已封装了一套完整的Logger系统(Logger.h)
logger.info(u8"玩家:{} 攻击了 {} | 坐标 {} 维度 {}",playerName, actorType, posStr, dimId);//输出LOG
  • 下面是Plugin.cpp的完整代码
#include "pch.h"
#include <EventAPI.h>//监听API
#include <LoggerAPI.h>//日志API
#include <LLAPI.h>//LLAPI
#include <MC/Player.hpp>//玩家相关API
#include <MC/Actor.hpp>//生物相关API
Logger logger("AttackLog");//Log名称

void PluginInit()//初始化函数(可自定义函数名)
{
	LL::registerPlugin("PluginName", "Introduction", LL::Version(1, 0, 0));//注册插件
    logger.info("Loaded");//加载提示
    Event::PlayerAttackEvent::subscribe([](const Event::PlayerAttackEvent& ev) {//监听PlayerAttackEvent(玩家攻击监听)
        Player* Player = ev.mPlayer;//获取触发监听的玩家
        Actor* actor = ev.mTarget;//获取被玩家攻击的生物
        string playerName = Player->getRealName();//获取玩家真实名称
        string actorType = actor->getTypeName();//获取被攻击的生物类型
        Vec3 pos = actor->getPos();//获取被攻击的生物的坐标
        string posStr = pos.toString();//将Vec3转换为字符串
        int dimId = actor->getDimensionId();//获取被攻击的生物的维度
        logger.info(u8"玩家:{} 攻击了 {} | 坐标 {} 维度 {}",playerName, actorType, posStr, dimId);//输出LOG
        return true;//返回值 false为拦截,true反之。
        });
}
  • 是不是觉得这么简单的功能写了这么长,当你熟练后差不多就是下面的情况
#include "pch.h"
#include <EventAPI.h>//监听API
#include <LoggerAPI.h>//日志API
#include <LLAPI.h>//LLAPI
#include <MC/Player.hpp>//玩家相关API
#include <MC/Actor.hpp>//生物相关API
Logger logger("AttackLog");//Log名称

void PluginInit()//初始化函数(可自定义函数名)
{
	LL::registerPlugin("PluginName", "Introduction", LL::Version(1, 0, 0));//注册插件
    logger.info("Loaded");//加载提示
    Event::PlayerAttackEvent::subscribe([](const Event::PlayerAttackEvent& ev) {//监听PlayerAttackEvent(玩家攻击监听)
        Actor* actor = ev.mTarget;
        logger.info(u8"玩家:{} 攻击了 {} | 坐标 {} 维度 {}", ev.mPlayer->getRealName(), actor->getTypeName(), actor->getPos().toString(), std::to_string(actor->getDimensionId()));//输出LOG
        return true;//返回值 false为拦截,true反之。
        });
}

3.编译与使用插件

  • 右键项目,点击生成
  • 随后会弹出如下框
  • 根据提示选择你的BDS目录(安装了LiteLoaderBDS的)编译完成如下提示,并找到输出目录
  • 将生成的Template.dll移动到BDS目录下plugins文件夹中

三、测试插件

点击bedrock_server_mod.exe开服,出现箭头指示信息,证明加载成功!

  • 进入你的服务器,攻击一个生物,控制台如下

恭喜你,完成了你的第一个LiteLoader2.0插件~