feat: Add server switch broadcast messages

LoVelocity:
- Track server switches (player moving between servers)
- Send plugin messages to hub about switches
- Log server switches

LoHub:
- Receive server switch messages via plugin messaging
- Broadcast to hub chat when player switches servers
- Configurable server display names
- Message format: 'Player connected to Server'

Config:
- server_switch_messages.enabled
- server_switch_messages.switch_message
- server_switch_messages.server_names (hub, grief, survival, etc)

Example: 'Player connected to Grief' when switching from hub to grief server
This commit is contained in:
loki5512344 2026-02-24 14:03:49 +01:00
parent 3ba41c18e7
commit 6e99cf9390
4 changed files with 135 additions and 4 deletions

View file

@ -55,6 +55,7 @@ public class LoHub extends JavaPlugin {
registerListeners();
registerCommands();
registerPluginChannels();
regionManager.createHubRegion();
@ -90,6 +91,15 @@ public class LoHub extends JavaPlugin {
getCommand("chatlock").setExecutor(new com.loki.lohub.commands.ChatLockCommand(this));
}
private void registerPluginChannels() {
getServer().getMessenger().registerIncomingPluginChannel(
this,
com.loki.lohub.listeners.ServerSwitchMessageListener.getChannel(),
new com.loki.lohub.listeners.ServerSwitchMessageListener(this)
);
getLogger().info("Plugin messaging channels registered");
}
public ConfigManager getConfigManager() {
return configManager;
}

View file

@ -0,0 +1,65 @@
package com.loki.lohub.listeners;
import com.google.common.io.ByteArrayDataInput;
import com.google.common.io.ByteStreams;
import com.loki.lohub.LoHub;
import com.loki.lohub.utils.TextUtil;
import net.kyori.adventure.text.Component;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.plugin.messaging.PluginMessageListener;
import org.jetbrains.annotations.NotNull;
public class ServerSwitchMessageListener implements PluginMessageListener {
private final LoHub plugin;
private static final String CHANNEL = "lohub:switch";
public ServerSwitchMessageListener(LoHub plugin) {
this.plugin = plugin;
}
@Override
public void onPluginMessageReceived(@NotNull String channel, @NotNull Player player, byte @NotNull [] message) {
if (!channel.equals(CHANNEL)) {
return;
}
ByteArrayDataInput in = ByteStreams.newDataInput(message);
String subChannel = in.readUTF();
if (subChannel.equals("ServerSwitch")) {
String playerName = in.readUTF();
String fromServer = in.readUTF();
String toServer = in.readUTF();
handleServerSwitch(playerName, fromServer, toServer);
}
}
private void handleServerSwitch(String playerName, String fromServer, String toServer) {
if (!plugin.getConfig().getBoolean("server_switch_messages.enabled", true)) {
return;
}
String messageTemplate = plugin.getConfig().getString("server_switch_messages.switch_message",
"&#FFD700%player% &#AAAAAA connected to &#6BCB77%server%");
String serverDisplayName = getServerDisplayName(toServer);
String formattedMessage = messageTemplate
.replace("%player%", playerName)
.replace("%server%", serverDisplayName);
Component component = Component.text(TextUtil.colorize(formattedMessage));
Bukkit.broadcast(component);
}
private String getServerDisplayName(String serverName) {
String path = "server_switch_messages.server_names." + serverName;
return plugin.getConfig().getString(path, serverName);
}
public static String getChannel() {
return CHANNEL;
}
}

View file

@ -166,6 +166,28 @@ join_leave_messages:
# Сообщение при выходе с сервера (не при переключении на другой сервер)
quit_message: "&#FF6B6B- &#FFD700%player% &#AAAAAAвышел"
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
# | SERVER SWITCH MESSAGES |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
server_switch_messages:
# Показывать сообщения о переключении между серверами
enabled: true
# Шаблон сообщения при переключении
# %player% - имя игрока
# %server% - название сервера
switch_message: "&#FFD700%player% &#AAAAAAподключился к &#6BCB77%server%"
# Отображаемые названия серверов
# Если сервер не указан, будет использовано его техническое имя
server_names:
hub: "Хабу"
grief: "Грифу"
survival: "Выживанию"
creative: "Креативу"
minigames: "Мини-играм"
join_events:
- "[MESSAGE] &#FFD700╔═══════════════════════════════╗"
- "[MESSAGE] &r"