sof3/infoapi

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

This package is auto-updated.

Last update: 2024-08-30 01:20:33 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 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提供的自定义start.cmd/start.sh在服务器上测试它。

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

用户指南:编写模板

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

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

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

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

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

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

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

hello {{world}}.

这将变成

hello {world}.