DREAMFIRE Docs ← Back to site
Loading...
Searching...
No Matches
DreamPluginMessage.java
Go to the documentation of this file.
1/*
2 * MIT License
3 *
4 * Copyright (c) 2025 Dreamfire Studio
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to deal
8 * in the Software without restriction, including without limitation the rights
9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 * copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in all
14 * copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 * SOFTWARE.
23 */
24package com.dreamfirestudios.dreamcore.DreamMessagingChannel;
25
26import com.google.common.io.ByteArrayDataOutput;
27import com.google.common.io.ByteStreams;
28import org.bukkit.Bukkit;
29import org.bukkit.entity.Player;
30import org.bukkit.plugin.java.JavaPlugin;
31
32import java.util.Objects;
33import java.util.logging.Level;
34
46public final class DreamPluginMessage {
47
48 private DreamPluginMessage() {}
49
51 public static final String BUNGEE_CHANNEL = "BungeeCord";
52
53 // Subcommands
54 public static final String SUB_CONNECT = "Connect";
55 public static final String SUB_PLAYER_COUNT = "PlayerCount";
56 public static final String SUB_FORWARD = "Forward";
57 public static final String SUB_FORWARD_TO_PLAYER = "ForwardToPlayer";
58
69 public static void register(JavaPlugin plugin, PluginMessageLibrary listener) {
70 Objects.requireNonNull(plugin, "plugin");
71 Objects.requireNonNull(listener, "listener");
72 Bukkit.getMessenger().registerOutgoingPluginChannel(plugin, BUNGEE_CHANNEL);
73 Bukkit.getMessenger().registerIncomingPluginChannel(plugin, BUNGEE_CHANNEL, listener);
74 plugin.getLogger().log(Level.INFO, "Registered BungeeCord plugin messaging channels.");
75 }
76
81 public static void unregister(JavaPlugin plugin) {
82 Objects.requireNonNull(plugin, "plugin");
83 Bukkit.getMessenger().unregisterOutgoingPluginChannel(plugin);
84 Bukkit.getMessenger().unregisterIncomingPluginChannel(plugin);
85 plugin.getLogger().log(Level.INFO, "Unregistered all plugin messaging channels.");
86 }
87
99 public static void connect(JavaPlugin plugin, Player player, String serverName) {
100 if (!preflight(plugin, player)) return;
101 ByteArrayDataOutput out = ByteStreams.newDataOutput();
102 out.writeUTF(SUB_CONNECT);
103 out.writeUTF(serverName);
104 player.sendPluginMessage(plugin, BUNGEE_CHANNEL, out.toByteArray());
105 }
106
116 public static void requestPlayerCount(JavaPlugin plugin, Player player, String serverName) {
117 if (!preflight(plugin, player)) return;
118 ByteArrayDataOutput out = ByteStreams.newDataOutput();
119 out.writeUTF(SUB_PLAYER_COUNT);
120 out.writeUTF(serverName);
121 player.sendPluginMessage(plugin, BUNGEE_CHANNEL, out.toByteArray());
122 }
123
132 public static void forward(JavaPlugin plugin, Player player, String targetServer, String subChannel, byte[] payload) {
133 if (!preflight(plugin, player)) return;
134 ByteArrayDataOutput out = ByteStreams.newDataOutput();
135 out.writeUTF(SUB_FORWARD);
136 out.writeUTF(targetServer);
137 out.writeUTF(subChannel);
138 out.writeShort(payload.length);
139 out.write(payload);
140 player.sendPluginMessage(plugin, BUNGEE_CHANNEL, out.toByteArray());
141 }
142
156 public static void forwardUtf(JavaPlugin plugin, Player player, String targetServer, String subChannel, String message) {
157 if (!preflight(plugin, player)) return;
158 ByteArrayDataOutput msg = ByteStreams.newDataOutput();
159 msg.writeUTF(message == null ? "" : message);
160 forward(plugin, player, targetServer, subChannel, msg.toByteArray());
161 }
162
169 private static boolean preflight(JavaPlugin plugin, Player player) {
170 if (plugin == null) {
171 Bukkit.getLogger().log(Level.SEVERE, "DreamPluginMessage: plugin is null.");
172 return false;
173 }
174 if (player == null) {
175 plugin.getLogger().log(Level.WARNING, "DreamPluginMessage: player is null.");
176 return false;
177 }
178 if (!Bukkit.getMessenger().isOutgoingChannelRegistered(plugin, BUNGEE_CHANNEL)) {
179 plugin.getLogger().log(Level.WARNING, "Outgoing channel '" + BUNGEE_CHANNEL + "' not registered for this plugin.");
180 return false;
181 }
182 return true;
183 }
184}
Utility class for handling BungeeCord plugin messaging channels in Paper/Spigot.
static void connect(JavaPlugin plugin, Player player, String serverName)
Connects a player to another BungeeCord server.
static void unregister(JavaPlugin plugin)
Unregisters all plugin messaging channels for this plugin.
static void register(JavaPlugin plugin, PluginMessageLibrary listener)
Registers this plugin to listen and send on the BungeeCord channel.
static void requestPlayerCount(JavaPlugin plugin, Player player, String serverName)
Requests player count of a target server.
static final String BUNGEE_CHANNEL
Outer Bungee channel name (constant).
static void forward(JavaPlugin plugin, Player player, String targetServer, String subChannel, byte[] payload)
Forwards raw payload to another server or ALL servers.
static void forwardUtf(JavaPlugin plugin, Player player, String targetServer, String subChannel, String message)
Forwards a single UTF string to another server.
Base listener for BungeeCord plugin messages (channel: "BungeeCord").