Eswlnk Blog Eswlnk Blog
  • 资源
    • 精彩视频
    • 破解专区
      • WHMCS
      • WordPress主题
      • WordPress插件
    • 其他分享
    • 极惠VPS
    • PDF资源
  • 关于我
    • 论文阅读
    • 关于本站
    • 通知
    • 左邻右舍
    • 玩物志趣
    • 日志
    • 专题
  • 热议话题
    • 游戏资讯
  • 红黑
    • 渗透分析
    • 攻防对抗
    • 代码发布
  • 自主研发
    • 知识库
    • 插件
      • ToolBox
      • HotSpot AI 热点创作
    • 区块
    • 快乐屋
    • 卡密
  • 乱步
    • 文章榜单
    • 热门标签
  • 问答中心反馈
  • 注册
  • 登录
首页 › 代码发布 › 「代码发布」QQ群与Minecraft服务器互联 (IOTQQ插件)

「代码发布」QQ群与Minecraft服务器互联 (IOTQQ插件)

Eswlnk的头像
Eswlnk
2022-08-22 14:38:13
「代码发布」QQ群与Minecraft服务器互联 (IOTQQ插件)-Eswlnk Blog
智能摘要 AI
本文介绍了如何通过IOTQQ插件实现Minecraft服务器与QQ群的互联,并支持远程执行服务器指令。插件使用Eclipse开发,依赖于Java IDE、互联网连接和IOTQQ环境。关键步骤包括引入必要的库(如socket.io-client、fastjson、spigot-api)并编写插件代码,监听QQ群的消息并根据内容执行相应操作,如广播消息、执行服务器命令或管理聊天状态。插件还处理了表情、文本、图片和@消息的不同类型,并确保连接成功后与IOTQQ服务器通信。

介绍

  1. 通过本插件可以实现Minecraft服务器聊天窗口与QQ群的互联
  2. 远程执行Minecraft服务器的指令
「代码发布」QQ群与Minecraft服务器互联 (IOTQQ插件)-Eswlnk Blog
QQ群与Minecraft服务器互联 (IOTQQ插件)

编写教程

环境要求

  1. Eclipse ( java IDE )
  2. 可以连接互联网( 废话 )
  3. IOTQQ环境

第一步 依赖引用

    
        io.socket
        socket.io-client
        0.8.3
    
    
    
        com.alibaba
        fastjson
        1.2.62
    
    
    
        org.spigotmc
        spigot-api
        1.12-R0.1-SNAPSHOT
        provided
    

这里IOTQQ环境搭建就不介绍了,详细请看Github!

第二步 开始编写插件

@Override
public void onEnable() {
    // new JavaSocketDemo();
    API.registerModule("mcoo", (Module)new WebServerModule());
    API.registerModule("player", (Module)new WebServerModule1());
    API.registerModule("Inv", (Module)new WebServerModule2());
    LanguageRegistry.INSTANCE.registerEntry(EnumLang.ZH_CN, "item.swordGold.name", "Excalibur");
    if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) {
        /*
         * We register the EventListeneres here, when PlaceholderAPI is installed. Since
         * all events are in the main class (this class), we simply use "this"
         */
        Bukkit.getPluginManager().registerEvents(new listen(), this);
        getLogger().info("MCOO插件成功启用!正在连接IOTQQ服务器...");
 
        Thread t = new Thread(new Runnable() {
            @Override
            public void run() {
                // TODO 自动生成的方法存根
                String url = "http://i.mcenjoy.cn:8888";
                String qq = "2629326992";
                try {
                    IO.Options options = new IO.Options();
                    options.transports = new String[] { "websocket" };
                    // 失败重试次数
                    options.reconnectionAttempts = 10;
                    // 失败重连的时间间隔
                    options.reconnectionDelay = 1000;
                    // 连接超时时间(ms)
                    options.timeout = 500;
                    final Socket socket = IO.socket(url, options);
                    socket.emit("GetWebConn", qq, new Ack() {
                        @Override
                        public void call(Object... objects) {
                            System.out.println(qq + ":" + Arrays.toString(objects));
                        }
                    });
                    // 统一事件管理如好友进群事件 好友请求事件 退群等事件集合
                    socket.on("OnEvents", objects -> System.out.println(Arrays.toString(objects)));
                    // 收到好友消息的回调事件
                    socket.on("OnFriendMsgs", objects -> System.out.println(Arrays.toString(objects)));
                    // 收到群消息的回调事件
                    socket.on("OnGroupMsgs", objects -> {
                        String tmpString = String.valueOf(objects[0]);
                        // System.out.println(tmpString);
                        // tmpString = getSubString(tmpString, "[", "]");
                        // tmpString = tmpString.replace("\\", "");
                        // System.out.println(tmpString);
                        Map stringToMap = JSONObject.parseObject(tmpString);
                        Map stringToMap1 = JSONObject.parseObject(stringToMap.get("CurrentPacket").toString());
                        Map stringToMap2 = JSONObject.parseObject(stringToMap1.get("Data").toString());
 
                        // Map stMap = stringToMap["CurrentPacket"];
                        // getLogger().info();
                        String qqG = stringToMap2.get("FromGroupId").toString();
                        String FromQQ = stringToMap2.get("FromUserId").toString();
                        String Msg = stringToMap2.get("Content").toString();
                        // System.out.println(Msg);
                        // System.out.println(qqG);
                        // System.out.println(qqG == "237962582");
                        // System.out.println(qqG.equals(237962582));
                        // SmallFaceMsg
                        String[] cm = Msg.split("\\s+",2);
                        // 表情信息处理
 
                        if (qqG.equals("237962582")
                                && !stringToMap2.get("FromUserId").toString().equals("2629326992")
                                && stringToMap2.get("MsgType").equals("SmallFaceMsg")) {
                            Map emojiMap = JSONObject.parseObject(Msg);
                            Bukkit.broadcastMessage("§f[§aQQ群§f] <" + stringToMap2.get("FromNickName").toString()
                                    + "> " + emojiMap.get("Content").toString());
                            return;
                        }
 
                        // 文本信息处理
                        if (qqG.equals("237962582")
                                && !stringToMap2.get("FromUserId").toString().equals("2629326992")
                                && stringToMap2.get("MsgType").equals("TextMsg")) {
 
                            if (Msg.equals("刷新机器人连接")) {
                                Map parameters = new HashMap();
                                parameters.put("qq", "2629326992");
                                String string1 = listen.sendGet("http://****.cn:88088/v1/RefreshKeys", parameters);
                                try {
                                    listen.send(Long.parseLong(qqG), 2, "TextMsg", "执行刷新成功!返回"+string1,
                                            Long.parseLong(stringToMap2.get("FromUserId").toString()));
                                } catch (Exception e) {
                                    // TODO Auto-generated catch block
                                    e.printStackTrace();
                                }
                            }
                            if (cm[0].equals("聊天状态"))
                            {
                                try {
                                    if (chat) {
                                        listen.send(Long.parseLong(qqG), 2, "TextMsg", "已连接服务器聊天窗口",
                                                Long.parseLong(stringToMap2.get("FromUserId").toString()));
                                    }else{
                                        listen.send(Long.parseLong(qqG), 2, "TextMsg", "未连接服务器聊天窗口",
                                                Long.parseLong(stringToMap2.get("FromUserId").toString()));
                                    }
                                } catch (Exception e) {
                                    // TODO Auto-generated catch block
                                    e.printStackTrace();
                                    }
                                }
                            if (FromQQ.equals("2435932516") && cm[0].equals("关闭聊天"))
                            {
                                chat = false;
                                try {
                                    listen.send(Long.parseLong(qqG), 2, "TextMsg", "关闭聊天成功!",
                                            Long.parseLong(stringToMap2.get("FromUserId").toString()));
                                } catch (Exception e) {
                                    // TODO Auto-generated catch block
                                    e.printStackTrace();
                                }
 
                            }
                            if (FromQQ.equals("2435932516") && cm[0].equals("开启聊天"))
                            {
                                chat = true;
                                try {
                                    listen.send(Long.parseLong(qqG), 2, "TextMsg", "开启聊天成功!",
                                            Long.parseLong(stringToMap2.get("FromUserId").toString()));
                                } catch (Exception e) {
                                    // TODO Auto-generated catch block
                                    e.printStackTrace();
                                }
 
                            }
                            if (cm.length>1)
                            {
 
                                if (FromQQ.equals("2435932516") && cm[0].equals("执行"))
                                {
                                    try {
                                        listen.send(Long.parseLong(qqG), 2, "TextMsg", "执行命令成功!",
                                                Long.parseLong(stringToMap2.get("FromUserId").toString()));
                                    } catch (NumberFormatException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                    } catch (Exception e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                    }
                                    CommandSender se= Bukkit.getConsoleSender();
                                    Bukkit.dispatchCommand(se,cm[1]);
                                    return;
                                }
 
                            }
                            if (FromQQ.equals("2435932516") && Msg.equals("重启服务器")) {
                                Bukkit.broadcastMessage("[MCOO服务器官方] 服务器即将重启...");
                                try {
                                    listen.send(Long.parseLong(qqG), 2, "TextMsg", "执行重启命令成功!",
                                            Long.parseLong(stringToMap2.get("FromUserId").toString()));
                                } catch (NumberFormatException e) {
                                    // TODO Auto-generated catch block
                                    e.printStackTrace();
                                } catch (Exception e) {
                                    // TODO Auto-generated catch block
                                    e.printStackTrace();
                                }
                                Bukkit.dispatchCommand(Bukkit.getConsoleSender(),"stop");
                                return;
                            }
                            if (FromQQ.equals("2435932516") && Msg.equals("服务器人数")) {
                                String msg = "服务器当前人数:";
                                try {
                                    Collection tmp = Bukkit.getOnlinePlayers();
                                    msg += String.valueOf(tmp.size()) + "\n";
                                    for (Player i : tmp) {
                                        msg += i.getName() + "\n";
                                    }
 
                                    System.out.println(listen.send(Long.parseLong(qqG), 2, "TextMsg", msg,
                                            Long.parseLong(stringToMap2.get("FromUserId").toString())));
                                } catch (Exception e) {
                                    // TODO Auto-generated catch block
                                    e.printStackTrace();
                                }
                                return;
                            }
                            Bukkit.broadcastMessage("§f[§aQQ群§f] <" + stringToMap2.get("FromNickName").toString()
                                    + "> " + stringToMap2.get("Content").toString());
                        }
                        //图片消息处理
                        if (qqG.equals("237962582")
                                && !stringToMap2.get("FromUserId").toString().equals("2629326992")
                                && stringToMap2.get("MsgType").equals("PicMsg")) {
                            Bukkit.broadcastMessage("§f[§aQQ群§f] <" + stringToMap2.get("FromNickName").toString()
                                    + "> " + "[图片消息](请前往官方群查看!)");
                        }
                        //AT消息处理
                        if (qqG.equals("237962582")
                                && !stringToMap2.get("FromUserId").toString().equals("2629326992")
                                && stringToMap2.get("MsgType").equals("AtMsg")) {
                            Map stringToMap3 = JSONObject.parseObject(stringToMap2.get("Content").toString());
                            Bukkit.broadcastMessage("§f[§aQQ群§f] <" + stringToMap2.get("FromNickName").toString()
                                    + "> " + stringToMap3.get("Content").toString());
                        }
                        // System.out.println(stringToMap2.get("MsgType"));
                        // System.out.println(stringToMap2.get("FromNickName").toString()+" :
                        // "+stringToMap2.get("Content").toString());
                        // Bukkit.broadcastMessage("[QQ群] [" +
                        // stringToMap2.get("FromNickName").toString() + "] "+
                        // stringToMap2.get("Content").toString());
 
                    });
                    socket.on(Socket.EVENT_CONNECT, objects -> {
                        System.out.println("client: " + "连接成功");
 
                    });
                    socket.connect();
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
 
            }
        }
 
        );
 
        t.start();
 
    } else {
        throw new RuntimeException("缺少PlaceholderAPI前置!");
    }
 
    // getServer().getPluginManager().registerEvents(this, this);
}
本站默认网盘访问密码:1166
本站默认网盘访问密码:1166
javaqqstring大学编程
0
0
Eswlnk的头像
Eswlnk
一个有点倒霉的研究牲站长
赞赏
「代码发布」使用Python制作IOTQQ管理插件
上一篇
「脚本分享」宝塔 Linux 面板 7.9.0 开心版脚本
下一篇

评论 (0)

请登录以参与评论
现在登录
    发表评论

猜你喜欢

  • 「攻防对抗」利用 fastjson 原生反序列化与动态代理突破安全限制
  • 「日志记录」逆向必应翻译网页版API实现免费调用
  • 「代码分享」第三方平台VIP视频解析API接口
  • 「至臻原创」某系统网站登录功能监测
  • 「JAVA教程」Spring Boot 中使用 JSON Schema 来校验复杂JSON数据
Eswlnk的头像

Eswlnk

一个有点倒霉的研究牲站长
1108
文章
319
评论
679
获赞

随便看看

Go语言错误处理为什么更推荐使用pkg/errors 三方库?
2022-06-27 13:39:45
「主题改造」Typecho使用highlight.js代码高亮实现代码行号
2024-04-04 17:03:41
Java安全中JEP290在RMI的实现及绕过低版本JDK限制
2022-12-22 14:01:37

文章目录

专题展示

WordPress53

工程实践37

热门标签

360 AI API CDN java linux Nginx PDF PHP python SEO Windows WordPress 云服务器 云服务器知识 代码 免费 安全 安卓 工具 开发日志 微信 微软 手机 插件 攻防 攻防对抗 教程 日志 渗透分析 源码 漏洞 电脑 破解 系统 编程 网站优化 网络 网络安全 脚本 苹果 谷歌 软件 运维 逆向
  • 首页
  • 知识库
  • 地图
Copyright © 2023-2025 Eswlnk Blog. Designed by XiaoWu.
本站CDN由 壹盾安全 提供高防CDN安全防护服务
蜀ICP备20002650号-10
页面生成用时 0.875 秒   |  SQL查询 49 次
本站勉强运行:
友情链接: Eswlnk Blog 网站渗透 倦意博客 特资啦!个人资源分享站 祭夜博客 iBAAO壹宝头条
  • WordPress142
  • 网络安全64
  • 漏洞52
  • 软件52
  • 安全48
现在登录
  • 资源
    • 精彩视频
    • 破解专区
      • WHMCS
      • WordPress主题
      • WordPress插件
    • 其他分享
    • 极惠VPS
    • PDF资源
  • 关于我
    • 论文阅读
    • 关于本站
    • 通知
    • 左邻右舍
    • 玩物志趣
    • 日志
    • 专题
  • 热议话题
    • 游戏资讯
  • 红黑
    • 渗透分析
    • 攻防对抗
    • 代码发布
  • 自主研发
    • 知识库
    • 插件
      • ToolBox
      • HotSpot AI 热点创作
    • 区块
    • 快乐屋
    • 卡密
  • 乱步
    • 文章榜单
    • 热门标签
  • 问答中心反馈