当前位置: 首页 > 知识库问答 >
问题:

布基特插件消息传递

帅颖逸
2023-03-14

我正在尝试使用buckecord/Bukkit插件消息通道来接收关于玩家的数据(特别是他们在哪个聊天通道),首先从buk kit发送一个插件消息-

我在这里使用了教程,但服务器只是崩溃了,因为当从Bungee服务器接收到插件消息时,onPluginMessageReceived不会触发,所以notifyAll不会触发。

以下是请求信息的代码:

public synchronized Object get(Player p, String... data) {
        sendToBungeeCord(p,"get",data);

        try {
            this.wait();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        return obj.get(p);
    }

下面是收到的插件消息的代码:

@Override
    public synchronized void onPluginMessageReceived(String channel, Player player, byte[] message) {
        player.sendMessage("return");
        if (channel.equals("BungeeCord")) {
            ByteArrayDataInput in = ByteStreams.newDataInput(message);
            String action = in.readUTF();
            if (action.equals("get")) {
                String dataType = in.readUTF();
                String id = in.readUTF();
                if (dataType.equals("channel")) {
                    obj.put(player,id); 
                    this.notifyAll();
                }
            } else if (action.equals("test")) {
                player.sendMessage(in.readUTF());
            }
        }
    }

如果有一种方法可以做到这一点,而不需要wait等待服务器的其余部分(插件的其余部分可以在等待响应时运行),请帮助我理解我是如何做到的。

共有1个答案

王宏深
2023-03-14

您不应该阻塞主服务器线程,而应该让它在等待BungeeCord回答时继续做其他事情。

在使用此通信通道时,您也不应该使用任何异步内容,因为 Spigot API 旨在仅在主服务器线程上工作。如果您尝试从其他线程使用它,那么服务器上可能会出现许多错误/副作用,在某些情况下甚至可能导致玩家数据丢失甚至服务器崩溃。

因此,您的问题的解决方案如下:

  1. 在等待蹦极线答案时不要阻止服务器
  2. 在得到答案时处理答案的结果
  3. ,而不是在您请求时处理答案的结果
 类似资料:
  • 当我测试我的插件时,以下异常被抛出: 插件可以工作,但事件“AdventureModel”不可以,这是代码: 我没有任何其他具有相同类的插件,并且测试服务器目录是空的。 错误

  • 在for循环中,我的目标是破坏其他没有被破坏的玩家。所以,我做了一个新的事件,它的原因是自杀,这样当它破坏玩家时,这个方法就不会被再次调用,最终杀死玩家。我做了我的研究,发现了调用一个新的实体损坏事件来损坏玩家,但它似乎不起作用。我需要一种替代的方法来损坏我的玩家,但不要一次又一次地调用这个事件。 <code>p.Damage(event.getDamage)放置在内部时,事件循环。 注释代码有效

  • 本文向大家介绍纯JavaScript基于notie.js插件实现消息提示特效,包括了纯JavaScript基于notie.js插件实现消息提示特效的使用技巧和注意事项,需要的朋友参考一下 本文实例介绍了纯JavaScript实现消息提示特效是一款基于notie.js插件实现的可以制作Alert提示框,确认框和带输入的消息框,分享给大家供大家参考,具体内容如下 效果图: 实现的代码: html代码:

  • 本文向大家介绍基于jQuery Tipso插件实现消息提示框特效,包括了基于jQuery Tipso插件实现消息提示框特效的使用技巧和注意事项,需要的朋友参考一下 基于jQuery Tipso插件实现消息提示框的特点是可以定义提示框的显示位置,以及动态改变提示框的提示内容,应该说是一款相当灵活的jQuery消息提示框插件,分享给大家供大家参考,具体内容如下 在线演示 源码下载 实现的代码: js代

  • 我想知道是否有一种方法可以使插件具有当用户在我的网站上执行操作时触发的事件。我想这样做来制作一个定制商店,因为我不喜欢 Enjin 或 Buycraft,因为它们不是很可定制。

  • 由于内容脚本在网页而不是扩展程序的上下文中运行,因此它们通常需要某种与扩展程序其余部分进行通信的方式。例如,RSS 阅读器扩展程序可以使用内容脚本来检测页面上 RSS 摘要的存在,然后通知后台页面以显示该页面的操作图标。 扩展及其内容脚本之间的通信使用消息传递来实现。任何一方都可以监听从另一端发送的消息,并在同一通道上进行响应。消息可以包含任何有效的 JSON 对象(空,布尔值,数字,字符串,数组