{"id":20898658,"url":"https://github.com/leonardosnt/bungeechannelapi","last_synced_at":"2025-05-13T01:31:06.087Z","repository":{"id":81293563,"uuid":"84010874","full_name":"leonardosnt/BungeeChannelApi","owner":"leonardosnt","description":"An easy way to work with the \"BungeeCord Plugin Messaging Channel\" (https://www.spigotmc.org/wiki/bukkit-bungee-plugin-messaging-channel/)","archived":false,"fork":false,"pushed_at":"2018-09-03T16:52:39.000Z","size":52,"stargazers_count":44,"open_issues_count":1,"forks_count":6,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-01T14:56:08.807Z","etag":null,"topics":["api","bungeecord","channel"],"latest_commit_sha":null,"homepage":"https://leonardosnt.github.io/BungeeChannelApi/io/github/leonardosnt/bungeechannelapi/BungeeChannelApi.html","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/leonardosnt.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-03-05T23:39:00.000Z","updated_at":"2023-12-20T01:58:45.000Z","dependencies_parsed_at":null,"dependency_job_id":"fb9bae9d-76c7-4609-b33a-9ec29551064e","html_url":"https://github.com/leonardosnt/BungeeChannelApi","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leonardosnt%2FBungeeChannelApi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leonardosnt%2FBungeeChannelApi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leonardosnt%2FBungeeChannelApi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leonardosnt%2FBungeeChannelApi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/leonardosnt","download_url":"https://codeload.github.com/leonardosnt/BungeeChannelApi/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253853735,"owners_count":21974162,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","bungeecord","channel"],"created_at":"2024-11-18T11:11:37.663Z","updated_at":"2025-05-13T01:31:06.078Z","avatar_url":"https://github.com/leonardosnt.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# BungeeChannelApi\n\n[Javadocs](https://ci.codemc.org/job/leonardosnt/job/BungeeChannelApi/javadoc)\n\n##### Development builds:\n\n[![Build Status](https://ci.codemc.org/buildStatus/icon?job=leonardosnt/BungeeChannelApi)](https://ci.codemc.org/job/leonardosnt/job/BungeeChannelApi)\n\n##### Maven dependency:\n\nHow to include BungeeChannelApi into your maven project:\n\n```xml\n    \u003crepositories\u003e\n        \u003crepository\u003e\n            \u003cid\u003ecodemc-repo\u003c/id\u003e\n            \u003curl\u003ehttps://repo.codemc.org/repository/maven-public/\u003c/url\u003e\n        \u003c/repository\u003e\n    \u003c/repositories\u003e\n\n    \u003cdependencies\u003e\n        \u003cdependency\u003e\n            \u003cgroupId\u003eio.github.leonardosnt\u003c/groupId\u003e\n            \u003cartifactId\u003ebungeechannelapi\u003c/artifactId\u003e\n            \u003cversion\u003e1.0.0-SNAPSHOT\u003c/version\u003e\n        \u003c/dependency\u003e\n    \u003c/dependencies\u003e\n```\n\nRemember to include/relocate the library into your final jar, example:\n\n```xml\n    \u003cbuild\u003e\n        \u003cplugins\u003e\n            \u003cplugin\u003e\n                \u003cgroupId\u003eorg.apache.maven.plugins\u003c/groupId\u003e\n                \u003cartifactId\u003emaven-shade-plugin\u003c/artifactId\u003e\n                \u003cversion\u003e3.1.1\u003c/version\u003e\n                \u003cexecutions\u003e\n                    \u003cexecution\u003e\n                        \u003cphase\u003epackage\u003c/phase\u003e\n                        \u003cgoals\u003e\n                            \u003cgoal\u003eshade\u003c/goal\u003e\n                        \u003c/goals\u003e\n                    \u003c/execution\u003e\n                \u003c/executions\u003e\n                \u003cconfiguration\u003e\n                    \u003crelocations\u003e\n                        \u003crelocation\u003e\n                            \u003cpattern\u003eio.github.leonardosnt.bungeechannelapi\u003c/pattern\u003e\n                            \u003cshadedPattern\u003eYOUR.PLUGIN.PACKAGE.libs.bungeechannelapi\u003c/shadedPattern\u003e\n                        \u003c/relocation\u003e\n                    \u003c/relocations\u003e\n                \u003c/configuration\u003e\n            \u003c/plugin\u003e\n        \u003c/plugins\u003e\n    \u003c/build\u003e\n```\n\n##### Some examples:\n\nBungeeChannelApi uses [CompletableFuture](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html)'s, so make sure you know how it works before using this.\n\nInstantiate:\n```java\n// Create new instance for this plugin.\n// Same of \"new BungeeChannelApi(this);\"\nBungeeChannelApi api = BungeeChannelApi.of(this); // this = Plugin instance.\n```\n\nGet online player count:\n```java\napi.getPlayerCount(\"ALL\")\n  .whenComplete((result, error) -\u003e {\n    sender.sendMessage(\"§aThere are \" + result + \" players online on all servers.\");\n  });\n```\n\nGet a list of players connected on a certain server, or on ALL the servers:\n```java\napi.getPlayerList(\"ALL\")\n  .whenComplete((result, error) -\u003e {\n    sender.sendMessage(\"§aPlayers online: \" + result.stream().collect(Collectors.joining(\", \")));\n  });\n```\n\nSend a message to a player:\n```java\napi.sendMessage(\"leonardosnt\", \"§cHello world\");\n```\n\n#### Custom subchannels/messages using [Forward](https://www.spigotmc.org/wiki/bukkit-bungee-plugin-messaging-channel/#forward) \n\nSend:\n```java\nbyte[] ourData = \"Hello World\".getBytes();\napi.forward(\"serverName\", \"example\", ourData);\n```\n\nListen:\n```java\n// global listener (for all subchannels) \napi.registerForwardListener((channelName, player, data) -\u003e {\n  Bukkit.broadcastMessage(channelName + \" -\u003e \" + Arrays.toString(data));\n});\n\n// specific channel\napi.registerForwardListener(\"example\", (channelName, player, data) -\u003e {\n  // in this case channelName is \"example\"\n  Bukkit.broadcastMessage(\"Message sent using forward: \" + new String(data));\n});\n```\n\n##### Comparison (without BungeeChannelApi)\nThis code does the same thing that the first example.\n```java\n\npublic class Test extends JavaPlugin implements PluginMessageListener {\n\n    @Override\n    public void onEnable() {\n      this.getServer().getMessenger().registerOutgoingPluginChannel(this, \"BungeeCord\");\n      this.getServer().getMessenger().registerIncomingPluginChannel(this, \"BungeeCord\", this);\n    }\n\n    // Send a message requesting player count\n    public void requestPlayerCount() {\n      ByteArrayDataOutput out = ByteStreams.newDataOutput();\n      out.writeUTF(\"PlayerCount\");\n      out.writeUTF(\"ALL\"); // all servers\n\n      Player player = Iterables.getFirst(Bukkit.getOnlinePlayers(), null);\n\n      player.sendPluginMessage(this, \"BungeeCord\", out.toByteArray());\n    }\n    \n    @Override\n    public void onPluginMessageReceived(String channel, Player player, byte[] message) {\n      if (!channel.equals(\"BungeeCord\")) return;\n      \n      ByteArrayDataInput in = ByteStreams.newDataInput(message);\n      String subchannel = in.readUTF();\n      \n      if (subchannel.equals(\"PlayerCount\")) {\n        String server = in.readUTF();\n        int count = in.readInt();\n        \n        // do something with 'count'\n      }\n    }\n\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fleonardosnt%2Fbungeechannelapi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fleonardosnt%2Fbungeechannelapi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fleonardosnt%2Fbungeechannelapi/lists"}