McLists一周年快乐
服务器已经添加了详细介绍信息板块
服主可以在管理后台来提交自己服务器介绍信息。
服务器介绍信息提交后,管理人员会进行审核
审核通过后会在服务器详细页面进行显示
提交服务器介绍信息会让新玩家更好的了解你的服务器哦~
添加图片信息,也会让百度等搜索引擎更好的收录您的服务器哦~
管理平台地址:传送门
[RD] LockLogin

[RD] LockLogin - LockLogin

一款为您的Spigot/Bungee服务器提供安全保护的插件,包含双重认证(2FA)等功能。
Bukkit / Spigot 作者 KarmaDev 支持版本 1.8 - 1.20
服务器使用量
未统计
服务玩家数
未统计
下载量
118,593
插件详细介绍

感谢以下贡献者

  • Watherfoxx
  • Bastaboii
  • RxF
  • ElGuerrero
  • Katana6951
  • El_PerroSandia

请注意:LockLogin 插件即将停止维护,请关注其后续版本 LockLogin2 以获取更多信息。

LockLogin 的 API 通常不直接对插件开放,但通过其独特的 API 卡片(或称 API 桥接卡片)系统,开发者可以在模块与插件之间建立安全的通信桥梁。本文档将详细介绍如何创建和使用这些卡片来实现双向数据交互。

核心概念

API 卡片(APICard)是 LockLogin 模块与外部插件之间进行安全通信的载体。模块负责创建并“发出”卡片,插件则负责“监听”并“消费”这些卡片,从而实现事件驱动的数据传递。

关键要点

  • 通信必须通过一个 LockLogin 模块 作为桥梁。
  • 插件不能直接访问 LockLogin 的核心 API。
  • 卡片通过事件队列机制传递,确保了线程安全与数据一致性。

创建 API 卡片(模块端)

要在模块中创建一个自定义的 API 卡片,你需要继承 APICard 类并实现其方法。

代码示例:TeleportCard

以下是一个名为 TeleportCard 的卡片示例,它用于传递玩家对象。

public class TeleportCard extends APICard<ModulePlayer> {
    private ModulePlayer player;

    /**
     * 初始化传送卡片
     *
     * @param module 拥有此卡片的模块
     * @param client 此卡片管理的客户端
     */
    public TeleportCard(final PluginModule module, final ModulePlayer client) {
        super(module, "teleport");
        player = client;
    }

    /**
     * 更新卡片对象
     *
     * @param update 更新值
     */
    @Override
    protected final void update(final ModulePlayer update) {
        if (CurrentPlatform.getServer().isValid(update)) {
            player = update;
        }
    }

    /**
     * 获取卡片值
     *
     * @return 卡片值
     */
    @Override
    public final ModulePlayer get() {
        return player;
    }
}

发送 API 卡片(模块端)

创建卡片后,你需要在模块的事件监听器中将其放入队列,以便插件接收。

代码示例:在事件中排队卡片

public final class Listener implements EventListener {
    private final PluginModule module;

    public Listener(final PluginModule owner) {
        module = owner;
    }

    public void onAuth(UserAuthenticateEvent e) {
        ModulePlayer player = e.getPlayer();
        TeleportCard card = new TeleportCard(module, player);
        module.queueCard(card); // 将卡片加入队列
    }
}

接收 API 卡片(插件端)

在你的插件中,你需要设置监听器来捕获并处理已排队的卡片。正确消费卡片至关重要,以避免内存泄漏和错误。

方法一:使用事件监听器(推荐)

这是最清晰的方式,通过监听 CardConsumedEvent 来处理已被消费的卡片。

public class Main extends JavaPlugin {
    @Override
    public void onEnable() {
        APICard.addCardListener(new CardAdapter() {
            /**
             * 当一张卡片被完全消费后触发
             *
             * @param event 卡片消费事件包装器
             */
            @Override
            public void cardPostQueued(CardConsumedEvent event) {
                PluginModule module = event.getModule(); // 卡片所有者模块
                PluginModule container = event.getContainer(); // 卡片存储容器(通常与所有者相同)
                String identifier = event.getIdentifier(); // 卡片标识符

                APICard<ModulePlayer> card = container.getCard(module, identifier);
                UUID id = card.get().getUUID();
                Player player = getServer().getPlayer(id);
                player.teleport(/* 目标地点 */);
            }
        });
    }
}

方法二:主动轮询消费

你也可以在异步任务中主动检查并消费特定标识符的卡片。

// 定义要监听的卡片标识符
String[] identifiers = new String[]{"teleport", "another_example"};

// 在异步任务中循环消费卡片
while (true) {
    for (String str : identifiers) {
        if (module.consumeCard(str)) { // 消费卡片并将其移出队列
            APICard<ModulePlayer> card = module.getCard(str);
            // 处理卡片数据...
        }
    }
}

重要注意事项

  • 必须消费卡片:使用 PluginModule#consumeCard(String) 方法将卡片从队列移至临时字段,然后通过 PluginModule#getCard(String) 获取。不这样做会导致卡片堆积,引发高内存使用和潜在错误。
  • 标识符匹配:发送和接收时使用的卡片标识符(如 "teleport")必须完全一致。
  • 模块依赖:整个通信流程依赖于一个正常工作的 LockLogin 模块(如 LockLoginManager)作为中介。
测试支持版本
1.8 1.9 1.10 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.20
版本分布
基本信息
插件名称 [RD] LockLogin
作者 KarmaDev
平台 Bukkit / Spigot
支持版本 1.8 - 1.20
点赞数 1
最近版本
暂无数据 -

友情链接: 网易我的世界 | 泰拉瑞亚 | ocent云计算 | 米饭Minecraft插件文档 | 友链合作

历史访问人次:3,028,301  |  今日访问人次:12,429  |  昨日访问人次:11,147

独立 IP:4,877  |  最近24小时有3,877人访问本站

Copyright © 2019-2026 我的世界服务器列表站. All rights reserved.

Powered by GermMC 京ICP备17023959号-6