sofe/infoapi

2.0.0-beta.1 2023-08-15 15:29 UTC

This package is auto-updated.

Last update: 2024-08-30 01:23:35 UTC


README

为 PocketMine 插件提供可扩展的模板。

简而言之,InfoAPI 提供了一个简单的 API 来在插件之间注册占位符。但它的功能远不止于此

  • 面向对象的占位符表达式
  • 当变量更改时,持续更新模板
  • 参数化信息 - 对信息表达式进行数学运算

开发者指南:模板化

如果您允许用户在配置中自定义消息,您可以考虑使用 InfoAPI 来格式化消息。

将配置消息传递给 InfoAPI

use SOFe\InfoAPI;

// $this is the plugin main
$player->sendMessage(InfoAPI::render($this, $this->getConfig()->get("format"), [
    "arg" => $arg,
], $player));
  • "message" 是消息模板的配置键
  • args 数组是模板的基本变量。变量的类型必须是默认类型之一或通过 InfoAPI::addKind 由另一个插件提供的。
  • $player 是可选的。它告诉 InfoAPI 如何更好地本地化消息,例如通过为玩家的语言进行格式化。

高级:持续模板化

您可以使用 renderContinuous API 创建模板并监视更改

use SOFe\AwaitGenerator\Await;
use SOFe\InfoAPI;

Await::f2c(function() use($player) {
    $traverser = InfoAPI::renderContinuous($this, $this->getConfig()->get("format"), [
        "arg" => $arg,
    ], $player);

    while(yield from $traverser->next($message)) {
        $player->sendPopup($message);
    }
});

开发者指南:注册映射

映射将一个信息转换为另一个信息,例如 money 将玩家转换为 {player money} 中的金额。您可以注册自己的映射,以便您的插件以及其他使用 InfoAPI 的插件可以使用模板中的此信息。

例如,为了提供在线玩家的金额

InfoAPI::addMapping(
    $this, "myplugin.money",
    fn(Player $player) : ?int => $this->getMoney($player),
);

源和返回类型必须是默认类型或 InfoAPI::addKind 类型。

高级:注册持续映射

您还可以提供 watchChanges 闭包,它返回一个 遍历器,当检测到更改时产生值。 pmevent 库可以帮助从事件构建遍历器

InfoAPI::addMapping(
    $this, "myplugin.money",
    fn(Player $player) : ?int => $this->getMoney($player),
    watchChanges: fn(Player $player) => Events::watch(
        $this, MoneyChangeEvent::class, $player->getName(),
        fn(MoneyChangeEvent $event) => $event->getPlayer()->getName(),
    )->asGenerator(),
);

开发者指南:安装 InfoAPI

如果您不是在开发插件,您 不需要 自己安装 InfoAPI。插件应在其 phar 发布中包含 InfoAPI。

InfoAPI v2 是一个使用 virion 3.1 的病毒库。virion 3.1 使用 composer 安装库

  1. 通过在您的 composer.json 中添加 sof3/infoapi 来包含 InfoAPI
{
  "require": {
    "sof3/infoapi": "^2"
  }
}

您可以将此文件放在您的 plugin.yml 旁边。建议安装 composer,但不是必需的。

  1. 使用 pharynx 使用 InfoAPI 病毒库构建您的插件。您可以在 pharynx 提供的 custom start.cmd/start.sh 服务器上测试它。

  2. 使用 pharynx GitHub 动作 与 Poggit 集成。请记住,忽略您的 vendor 目录,以便不要将其推送到 GitHub。

用户指南:编写模板

InfoAPI 用变量替换 {} 内的表达式。例如,如果聊天插件提供了两个变量

  • sender: 发送聊天的玩家(SOFe)
  • message: 聊天消息。如果插件为模板提供了 sendermessage ("Hello world"),以下内容将变成类似 <SOFe> Hello world 的样子
<{sender}> {message}

颜色代码是默认变量。您可以用 &1 &b 等代替写 §1 §b 等

{aqua}<{sender}> {white}{message}

您可以为变量获取更多详细信息。例如,要获取玩家的坐标 player

{player} is at ({player x}, {player y}, {player z}).

直接编写 { 将会导致错误,如果没有匹配的 }。如果您想编写一个不作为表达式一部分的 {/},请重复编写两次

hello {{world}}.

这将变为

hello {world}.