Compare commits
4 Commits
86f64ab019
...
1e7f474a09
Author | SHA1 | Date |
---|---|---|
mohammed jasem alaajel | 1e7f474a09 | |
mohammed jasem alaajel | 19064e0a60 | |
mohammed jasem alaajel | e76f0d0a00 | |
mohammed jasem alaajel | 40c542a50a |
|
@ -19,7 +19,6 @@ dependencies {
|
|||
api(libs.adventure.legacy)
|
||||
api(libs.adventure.plain)
|
||||
api(libs.adventure.miniMessage)
|
||||
implementation(libs.acf.core)
|
||||
}
|
||||
|
||||
description = "RedisBungee interfaces"
|
||||
|
|
|
@ -0,0 +1,56 @@
|
|||
/*
|
||||
* Copyright (c) 2013-present RedisBungee contributors
|
||||
*
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
*
|
||||
* http://www.eclipse.org/legal/epl-v10.html
|
||||
*/
|
||||
|
||||
package com.imaginarycode.minecraft.redisbungee.api.tasks;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.RedisBungeePlugin;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.util.uuid.CachedUUIDEntry;
|
||||
import redis.clients.jedis.UnifiedJedis;
|
||||
import redis.clients.jedis.exceptions.JedisException;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
|
||||
public class UUIDCleanupTask extends RedisTask<Void>{
|
||||
|
||||
private final Gson gson = new Gson();
|
||||
private final RedisBungeePlugin<?> plugin;
|
||||
|
||||
public UUIDCleanupTask(RedisBungeePlugin<?> plugin) {
|
||||
super(plugin);
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
// this code is inspired from https://github.com/minecrafter/redisbungeeclean
|
||||
@Override
|
||||
public Void unifiedJedisTask(UnifiedJedis unifiedJedis) {
|
||||
try {
|
||||
final long number = unifiedJedis.hlen("uuid-cache");
|
||||
plugin.logInfo("Found {} entries", number);
|
||||
ArrayList<String> fieldsToRemove = new ArrayList<>();
|
||||
unifiedJedis.hgetAll("uuid-cache").forEach((field, data) -> {
|
||||
CachedUUIDEntry cachedUUIDEntry = gson.fromJson(data, CachedUUIDEntry.class);
|
||||
if (cachedUUIDEntry.expired()) {
|
||||
fieldsToRemove.add(field);
|
||||
}
|
||||
});
|
||||
if (!fieldsToRemove.isEmpty()) {
|
||||
unifiedJedis.hdel("uuid-cache", fieldsToRemove.toArray(new String[0]));
|
||||
}
|
||||
plugin.logInfo("deleted {} entries", fieldsToRemove.size());
|
||||
} catch (JedisException e) {
|
||||
plugin.logFatal("There was an error fetching information", e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -15,6 +15,7 @@ dependencies {
|
|||
implementation(libs.adventure.platforms.bungeecord)
|
||||
implementation(libs.adventure.gson)
|
||||
implementation(libs.acf.bungeecord)
|
||||
implementation(project(":RedisBungee-Commands"))
|
||||
}
|
||||
|
||||
description = "RedisBungee Bungeecord implementation"
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
package com.imaginarycode.minecraft.redisbungee;
|
||||
|
||||
import co.aikar.commands.BungeeCommandIssuer;
|
||||
import co.aikar.commands.CommandIssuer;
|
||||
import com.imaginarycode.minecraft.redisbungee.commands.utils.CommandPlatformHelper;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.serializer.bungeecord.BungeeComponentSerializer;
|
||||
|
||||
public class BungeeCommandPlatformHelper extends CommandPlatformHelper {
|
||||
|
||||
@Override
|
||||
public void sendMessage(CommandIssuer issuer, Component component) {
|
||||
BungeeCommandIssuer bIssuer = (BungeeCommandIssuer) issuer;
|
||||
bIssuer.getIssuer().sendMessage(BungeeComponentSerializer.get().serialize(component));
|
||||
}
|
||||
|
||||
}
|
|
@ -10,6 +10,7 @@
|
|||
|
||||
package com.imaginarycode.minecraft.redisbungee;
|
||||
|
||||
import co.aikar.commands.BungeeCommandManager;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.PlayerDataManager;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.ProxyDataManager;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.RedisBungeeMode;
|
||||
|
@ -27,6 +28,8 @@ import com.imaginarycode.minecraft.redisbungee.api.util.InitialUtils;
|
|||
import com.imaginarycode.minecraft.redisbungee.api.util.uuid.NameFetcher;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.util.uuid.UUIDFetcher;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.util.uuid.UUIDTranslator;
|
||||
import com.imaginarycode.minecraft.redisbungee.commands.CommandLoader;
|
||||
import com.imaginarycode.minecraft.redisbungee.commands.utils.CommandPlatformHelper;
|
||||
import com.imaginarycode.minecraft.redisbungee.events.PlayerChangedServerNetworkEvent;
|
||||
import com.imaginarycode.minecraft.redisbungee.events.PlayerJoinedNetworkEvent;
|
||||
import com.imaginarycode.minecraft.redisbungee.events.PlayerLeftNetworkEvent;
|
||||
|
@ -70,6 +73,7 @@ public class RedisBungee extends Plugin implements RedisBungeePlugin<ProxiedPlay
|
|||
private RedisBungeeConfiguration configuration;
|
||||
private LangConfiguration langConfiguration;
|
||||
private OkHttpClient httpClient;
|
||||
private BungeeCommandManager commandManager;
|
||||
|
||||
private final Logger logger = LoggerFactory.getLogger("RedisBungee");
|
||||
|
||||
|
@ -254,6 +258,11 @@ public class RedisBungee extends Plugin implements RedisBungeePlugin<ProxiedPlay
|
|||
this.api = new RedisBungeeAPI(this);
|
||||
apiStatic = (RedisBungeeAPI) this.api;
|
||||
|
||||
// commands
|
||||
CommandPlatformHelper.init(new BungeeCommandPlatformHelper());
|
||||
this.commandManager = new BungeeCommandManager(this);
|
||||
CommandLoader.initCommands(this.commandManager, this);
|
||||
|
||||
logInfo("RedisBungee initialized successfully ");
|
||||
}
|
||||
|
||||
|
@ -278,6 +287,9 @@ public class RedisBungee extends Plugin implements RedisBungeePlugin<ProxiedPlay
|
|||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
if (this.commandManager != null) {
|
||||
this.commandManager.unregisterCommands();
|
||||
}
|
||||
logInfo("RedisBungee shutdown successfully");
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
plugins {
|
||||
`java-library`
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(project(":RedisBungee-API"))
|
||||
implementation(libs.acf.core)
|
||||
}
|
||||
|
||||
description = "RedisBungee common commands"
|
||||
|
||||
|
||||
tasks {
|
||||
compileJava {
|
||||
options.encoding = Charsets.UTF_8.name()
|
||||
options.release.set(17)
|
||||
}
|
||||
javadoc {
|
||||
options.encoding = Charsets.UTF_8.name()
|
||||
}
|
||||
processResources {
|
||||
filteringCharset = Charsets.UTF_8.name()
|
||||
}
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
/*
|
||||
* Copyright (c) 2013-present RedisBungee contributors
|
||||
*
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
*
|
||||
* http://www.eclipse.org/legal/epl-v10.html
|
||||
*/
|
||||
|
||||
package com.imaginarycode.minecraft.redisbungee.commands;
|
||||
|
||||
import co.aikar.commands.CommandManager;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.RedisBungeePlugin;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.config.RedisBungeeConfiguration;
|
||||
|
||||
public class CommandLoader {
|
||||
|
||||
public static void initCommands(CommandManager<?, ?, ?, ?, ?, ?> commandManager, RedisBungeePlugin<?> plugin) {
|
||||
commandManager.registerCommand(new CommandRedisBungee(plugin));
|
||||
// todo: config options to disable each command
|
||||
commandManager.registerCommand(new LegacyRedisBungeeCommands(plugin));
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,89 @@
|
|||
/*
|
||||
* Copyright (c) 2013-present RedisBungee contributors
|
||||
*
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
*
|
||||
* http://www.eclipse.org/legal/epl-v10.html
|
||||
*/
|
||||
|
||||
package com.imaginarycode.minecraft.redisbungee.commands;
|
||||
|
||||
import co.aikar.commands.CommandIssuer;
|
||||
import co.aikar.commands.annotation.*;
|
||||
import com.imaginarycode.minecraft.redisbungee.Constants;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.RedisBungeePlugin;
|
||||
import com.imaginarycode.minecraft.redisbungee.commands.utils.AdventureBaseCommand;
|
||||
import com.imaginarycode.minecraft.redisbungee.commands.utils.StopperUUIDCleanupTask;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.event.ClickEvent;
|
||||
import net.kyori.adventure.text.event.HoverEvent;
|
||||
import net.kyori.adventure.text.format.NamedTextColor;
|
||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
@CommandAlias("rb|redisbungee")
|
||||
@CommandPermission("redisbungee.use")
|
||||
public class CommandRedisBungee extends AdventureBaseCommand {
|
||||
|
||||
private final RedisBungeePlugin<?> plugin;
|
||||
|
||||
public CommandRedisBungee(RedisBungeePlugin<?> plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@Default
|
||||
@Subcommand("info|version|git")
|
||||
public void info(CommandIssuer issuer) {
|
||||
final String message = """
|
||||
<color:aqua>This proxy is running RedisBungee Limework's fork
|
||||
<color:yellow>========================================
|
||||
<color:aqua>RedisBungee version: <color:green><version>
|
||||
<color:aqua>Build date: <color:green><build-date>
|
||||
<color:aqua>Commit: <color:green><commit>
|
||||
<color:yellow>========================================
|
||||
<color:yellow>run /rb help for more commands""";
|
||||
sendMessage(
|
||||
issuer,
|
||||
MiniMessage.miniMessage()
|
||||
.deserialize(
|
||||
message,
|
||||
Placeholder.component("version", Component.text(Constants.VERSION)),
|
||||
Placeholder.component("build-date", Component.text( new Date(Constants.BUILD_DATE * 1000).toString() )),
|
||||
Placeholder.component(
|
||||
"commit",
|
||||
Component.text(Constants.GIT_COMMIT.substring(0, 8))
|
||||
.clickEvent(ClickEvent.clickEvent(ClickEvent.Action.OPEN_URL, Constants.getGithubCommitLink()))
|
||||
.hoverEvent(HoverEvent.showText(Component.text("Click me to open: " + Constants.getGithubCommitLink())))
|
||||
)));
|
||||
}
|
||||
// <color:aqua>......: <color:green>......
|
||||
@HelpCommand
|
||||
public void help(CommandIssuer issuer) {
|
||||
final String message = """
|
||||
<color:yellow>========================================
|
||||
<color:aqua>/rb info: <color:green>shows info of this version.
|
||||
<color:aqua>/rb help: <color:green>shows this page.
|
||||
<color:aqua>/rb clean: <color:green>cleans up the uuid cache
|
||||
<color:red><bold>WARNING...</bold> <color:white>command above could cause performance issues
|
||||
<color:yellow>========================================
|
||||
<color:yellow>run /rb help for more commands""";
|
||||
sendMessage(issuer, MiniMessage.miniMessage().deserialize(message));
|
||||
}
|
||||
@Subcommand("clean")
|
||||
@Private
|
||||
public void cleanUp(CommandIssuer issuer) {
|
||||
if (StopperUUIDCleanupTask.isRunning) {
|
||||
sendMessage(issuer,
|
||||
Component.text("cleanup is currently running!").color(NamedTextColor.RED));
|
||||
return;
|
||||
}
|
||||
sendMessage(issuer,
|
||||
Component.text("cleanup is Starting, you should see the output status in the proxy console").color(NamedTextColor.GOLD));
|
||||
plugin.executeAsync(new StopperUUIDCleanupTask(plugin));
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,107 @@
|
|||
package com.imaginarycode.minecraft.redisbungee.commands;
|
||||
|
||||
import co.aikar.commands.CommandIssuer;
|
||||
import co.aikar.commands.annotation.CommandAlias;
|
||||
import co.aikar.commands.annotation.CommandPermission;
|
||||
import co.aikar.commands.annotation.Subcommand;
|
||||
import com.google.common.base.Joiner;
|
||||
import com.google.common.collect.HashMultimap;
|
||||
import com.google.common.collect.Multimap;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.RedisBungeePlugin;
|
||||
import com.imaginarycode.minecraft.redisbungee.commands.utils.AdventureBaseCommand;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.format.NamedTextColor;
|
||||
|
||||
import java.util.TreeSet;
|
||||
import java.util.UUID;
|
||||
|
||||
@CommandAlias("rbl|redisbungeeleagacy")
|
||||
@CommandPermission("redisbungee.leagacy.use")
|
||||
public class LegacyRedisBungeeCommands extends AdventureBaseCommand {
|
||||
|
||||
|
||||
private final RedisBungeePlugin<?> plugin;
|
||||
|
||||
public LegacyRedisBungeeCommands(RedisBungeePlugin<?> plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
private static final Component NO_PLAYER_SPECIFIED =
|
||||
Component.text("You must specify a player name.", NamedTextColor.RED);
|
||||
private static final Component PLAYER_NOT_FOUND =
|
||||
Component.text("No such player found.", NamedTextColor.RED);
|
||||
private static final Component NO_COMMAND_SPECIFIED =
|
||||
Component.text("You must specify a command to be run.", NamedTextColor.RED);
|
||||
|
||||
private static String playerPlural(int num) {
|
||||
return num == 1 ? num + " player is" : num + " players are";
|
||||
}
|
||||
|
||||
@Subcommand("serverid")
|
||||
@CommandAlias("serverid")
|
||||
@CommandPermission("redisbungee.command.serverid")
|
||||
public void serverId(CommandIssuer issuer) {
|
||||
sendMessage(issuer, Component.text("You are on " + plugin.getAbstractRedisBungeeApi().getProxyId() + ".", NamedTextColor.YELLOW));
|
||||
}
|
||||
@Subcommand("serverids")
|
||||
@CommandAlias("serverids")
|
||||
@CommandPermission("redisbungee.command.serverids")
|
||||
public void serverIds(CommandIssuer issuer) {
|
||||
sendMessage(issuer, Component.text("All server IDs: " + Joiner.on(", ").join(plugin.getAbstractRedisBungeeApi().getAllProxies()), NamedTextColor.YELLOW));
|
||||
}
|
||||
|
||||
@Subcommand("glist|rglist")
|
||||
@CommandAlias("glist|rglist")
|
||||
@CommandPermission("redisbungee.command.glist")
|
||||
public void gList(CommandIssuer issuer, String[] args) {
|
||||
plugin.executeAsync(() -> {
|
||||
int count = plugin.getAbstractRedisBungeeApi().getPlayerCount();
|
||||
Component playersOnline = Component.text(playerPlural(count) + " currently online.", NamedTextColor.YELLOW);
|
||||
if (args.length > 0 && args[0].equals("showall")) {
|
||||
Multimap<String, UUID> serverToPlayers = plugin.getAbstractRedisBungeeApi().getServerToPlayers();
|
||||
Multimap<String, String> human = HashMultimap.create();
|
||||
serverToPlayers.forEach((key, value) -> {
|
||||
// if for any reason UUID translation fails just return the uuid as name, to make command finish executing.
|
||||
String playerName = plugin.getUuidTranslator().getNameFromUuid(value, false);
|
||||
human.put(key, playerName != null ? playerName : value.toString());
|
||||
});
|
||||
for (String server : new TreeSet<>(serverToPlayers.keySet())) {
|
||||
Component serverName = Component.text("[" + server + "] ", NamedTextColor.GREEN);
|
||||
Component serverCount = Component.text("(" + serverToPlayers.get(server).size() + "): ", NamedTextColor.YELLOW);
|
||||
Component serverPlayers = Component.text(Joiner.on(", ").join(human.get(server)), NamedTextColor.WHITE);
|
||||
sendMessage(issuer, Component.textOfChildren(serverName, serverCount, serverPlayers));
|
||||
}
|
||||
sendMessage(issuer, playersOnline);
|
||||
} else {
|
||||
sendMessage(issuer, playersOnline);
|
||||
sendMessage(issuer, Component.text("To see all players online, use /glist showall.", NamedTextColor.YELLOW));
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
@Subcommand("find")
|
||||
@CommandAlias("find")
|
||||
@CommandPermission("redisbungee.command.find")
|
||||
public void find(CommandIssuer issuer, String[] args) {
|
||||
plugin.executeAsync(() -> {
|
||||
if (args.length > 0) {
|
||||
UUID uuid = plugin.getUuidTranslator().getTranslatedUuid(args[0], true);
|
||||
if (uuid == null) {
|
||||
sendMessage(issuer, PLAYER_NOT_FOUND);
|
||||
return;
|
||||
}
|
||||
String proxyId = plugin.playerDataManager().getProxyFor(uuid);
|
||||
if (proxyId != null) {
|
||||
String serverId = plugin.playerDataManager().getServerFor(uuid);
|
||||
Component message = Component.text(args[0] + " is on proxy " + proxyId + " on server " + serverId +".", NamedTextColor.BLUE);
|
||||
sendMessage(issuer, message);
|
||||
} else {
|
||||
sendMessage(issuer, PLAYER_NOT_FOUND);
|
||||
}
|
||||
} else {
|
||||
sendMessage(issuer, NO_PLAYER_SPECIFIED);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
/*
|
||||
* Copyright (c) 2013-present RedisBungee contributors
|
||||
*
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
*
|
||||
* http://www.eclipse.org/legal/epl-v10.html
|
||||
*/
|
||||
|
||||
package com.imaginarycode.minecraft.redisbungee.commands.utils;
|
||||
|
||||
import co.aikar.commands.BaseCommand;
|
||||
import co.aikar.commands.CommandIssuer;
|
||||
import net.kyori.adventure.text.Component;
|
||||
|
||||
/**
|
||||
* this just dumb class that wraps the adventure stuff into base command
|
||||
*/
|
||||
public abstract class AdventureBaseCommand extends BaseCommand {
|
||||
|
||||
public static void sendMessage(CommandIssuer issuer, Component component) {
|
||||
CommandPlatformHelper.getPlatformHelper().sendMessage(issuer, component);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
/*
|
||||
* Copyright (c) 2013-present RedisBungee contributors
|
||||
*
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
*
|
||||
* http://www.eclipse.org/legal/epl-v10.html
|
||||
*/
|
||||
|
||||
package com.imaginarycode.minecraft.redisbungee.commands.utils;
|
||||
|
||||
import co.aikar.commands.CommandIssuer;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.RedisBungeePlugin;
|
||||
import net.kyori.adventure.text.Component;
|
||||
|
||||
|
||||
public abstract class CommandPlatformHelper {
|
||||
|
||||
private static CommandPlatformHelper SINGLETON;
|
||||
|
||||
public abstract void sendMessage(CommandIssuer issuer, Component component);
|
||||
|
||||
public static void init(CommandPlatformHelper platformHelper) {
|
||||
if (SINGLETON != null) {
|
||||
throw new IllegalStateException("tried to re init Platform Helper");
|
||||
}
|
||||
SINGLETON = platformHelper;
|
||||
}
|
||||
|
||||
|
||||
public static CommandPlatformHelper getPlatformHelper() {
|
||||
return SINGLETON;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
package com.imaginarycode.minecraft.redisbungee.commands.utils;
|
||||
|
||||
import com.imaginarycode.minecraft.redisbungee.api.RedisBungeePlugin;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.tasks.UUIDCleanupTask;
|
||||
import redis.clients.jedis.UnifiedJedis;
|
||||
|
||||
public class StopperUUIDCleanupTask extends UUIDCleanupTask {
|
||||
|
||||
public static boolean isRunning = false;
|
||||
|
||||
public StopperUUIDCleanupTask(RedisBungeePlugin<?> plugin) {
|
||||
super(plugin);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Void unifiedJedisTask(UnifiedJedis unifiedJedis) {
|
||||
isRunning = true;
|
||||
try {
|
||||
super.unifiedJedisTask(unifiedJedis);
|
||||
} catch (Exception ignored) {}
|
||||
isRunning = false;
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -22,6 +22,7 @@ dependencies {
|
|||
}
|
||||
compileOnly(libs.platform.velocity)
|
||||
annotationProcessor(libs.platform.velocity)
|
||||
implementation(project(":RedisBungee-Commands"))
|
||||
implementation(libs.acf.velocity)
|
||||
|
||||
}
|
||||
|
|
|
@ -10,11 +10,14 @@
|
|||
|
||||
package com.imaginarycode.minecraft.redisbungee;
|
||||
|
||||
import co.aikar.commands.VelocityCommandManager;
|
||||
import com.google.inject.Inject;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.PlayerDataManager;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.ProxyDataManager;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.RedisBungeeMode;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.RedisBungeePlugin;
|
||||
import com.imaginarycode.minecraft.redisbungee.commands.CommandLoader;
|
||||
import com.imaginarycode.minecraft.redisbungee.commands.utils.CommandPlatformHelper;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.config.LangConfiguration;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.config.loaders.ConfigLoader;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.config.RedisBungeeConfiguration;
|
||||
|
@ -91,6 +94,8 @@ public class RedisBungeeVelocityPlugin implements RedisBungeePlugin<Player>, Con
|
|||
new LegacyChannelIdentifier("legacy:redisbungee")
|
||||
);
|
||||
|
||||
private VelocityCommandManager commandManager;
|
||||
|
||||
@Inject
|
||||
public RedisBungeeVelocityPlugin(ProxyServer server, Logger logger, @DataDirectory Path dataDirectory) {
|
||||
this.server = server;
|
||||
|
@ -264,7 +269,6 @@ public class RedisBungeeVelocityPlugin implements RedisBungeePlugin<Player>, Con
|
|||
@Override
|
||||
public void initialize() {
|
||||
logInfo("Initializing RedisBungee.....");
|
||||
;
|
||||
// start heartbeat task
|
||||
// heartbeat and clean up
|
||||
this.heartbeatTask = server.getScheduler().buildTask(this, this.proxyDataManager::publishHeartbeat).repeat(Duration.ofSeconds(1)).schedule();
|
||||
|
@ -279,6 +283,11 @@ public class RedisBungeeVelocityPlugin implements RedisBungeePlugin<Player>, Con
|
|||
// register plugin messages
|
||||
IDENTIFIERS.forEach(getProxy().getChannelRegistrar()::register);
|
||||
|
||||
// load commands
|
||||
CommandPlatformHelper.init(new VelocityCommandPlatformHelper());
|
||||
this.commandManager = new VelocityCommandManager(this.getProxy(), this);
|
||||
CommandLoader.initCommands(this.commandManager, this);
|
||||
|
||||
logInfo("RedisBungee initialized successfully ");
|
||||
}
|
||||
|
||||
|
@ -308,6 +317,7 @@ public class RedisBungeeVelocityPlugin implements RedisBungeePlugin<Player>, Con
|
|||
} catch (InterruptedException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
if (commandManager != null) commandManager.unregisterCommands();
|
||||
logInfo("RedisBungee shutdown complete");
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
/*
|
||||
* Copyright (c) 2013-present RedisBungee contributors
|
||||
*
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
*
|
||||
* http://www.eclipse.org/legal/epl-v10.html
|
||||
*/
|
||||
|
||||
package com.imaginarycode.minecraft.redisbungee;
|
||||
|
||||
import co.aikar.commands.CommandIssuer;
|
||||
import co.aikar.commands.VelocityCommandIssuer;
|
||||
import com.imaginarycode.minecraft.redisbungee.commands.utils.CommandPlatformHelper;
|
||||
import net.kyori.adventure.text.Component;
|
||||
|
||||
public class VelocityCommandPlatformHelper extends CommandPlatformHelper {
|
||||
|
||||
@Override
|
||||
public void sendMessage(CommandIssuer issuer, Component component) {
|
||||
VelocityCommandIssuer vIssuer = (VelocityCommandIssuer) issuer;
|
||||
vIssuer.getIssuer().sendMessage(component);
|
||||
}
|
||||
|
||||
}
|
|
@ -7,6 +7,7 @@ pluginManagement {
|
|||
rootProject.name = "RedisBungee-Parent"
|
||||
|
||||
include(":RedisBungee-Velocity")
|
||||
include(":RedisBungee-Commands")
|
||||
include(":RedisBungee-Bungee")
|
||||
include(":RedisBungee-API")
|
||||
|
||||
|
|
Loading…
Reference in New Issue