Added aliases, permission router, and progress for custom commands

This commit is contained in:
Jaime Martínez Rincón 2018-01-07 19:52:47 +01:00
parent c582c05eaa
commit f3c10291b8
20 changed files with 174 additions and 54 deletions

View File

@ -1,14 +1,12 @@
package com.jaimemartz.playerbalancer;
import com.google.common.reflect.TypeToken;
import com.jaimemartz.playerbalancer.commands.FallbackCommand;
import com.jaimemartz.playerbalancer.commands.MainCommand;
import com.jaimemartz.playerbalancer.commands.ManageCommand;
import com.jaimemartz.playerbalancer.commands.*;
import com.jaimemartz.playerbalancer.connection.ServerAssignRegistry;
import com.jaimemartz.playerbalancer.helper.NetworkManager;
import com.jaimemartz.playerbalancer.helper.PasteHelper;
import com.jaimemartz.playerbalancer.helper.PlayerLocker;
import com.jaimemartz.playerbalancer.listeners.*;
import com.jaimemartz.playerbalancer.manager.NetworkManager;
import com.jaimemartz.playerbalancer.manager.PasteHelper;
import com.jaimemartz.playerbalancer.manager.PlayerLocker;
import com.jaimemartz.playerbalancer.ping.StatusManager;
import com.jaimemartz.playerbalancer.section.SectionManager;
import com.jaimemartz.playerbalancer.settings.SettingsHolder;
@ -41,7 +39,7 @@ public class PlayerBalancer extends Plugin {
private final StringBuilder logsBuilder = new StringBuilder();
private FallbackCommand fallbackCommand;
private Command mainCommand, manageCommand;
private Command mainCommand, manageCommand, findCommand, listCommand, serverCommand;
private Listener connectListener, kickListener, reloadListener, pluginMessageListener;
@Override
@ -181,23 +179,27 @@ public class PlayerBalancer extends Plugin {
getProxy().getPluginManager().registerListener(this, kickListener);
}
//After the modules have loaded (hopefully?)
getProxy().getScheduler().schedule(this, () -> {
if (settings.getFeaturesProps().getCustomFindCommandProps().isEnabled()) {
Plugin plugin = getProxy().getPluginManager().getPlugin("cmd_find");
if (plugin != null) {
getProxy().getPluginManager().unregisterCommands(plugin);
getLogger().info("Unregistered commands of the plugin: " + plugin.getDescription().getName());
}
tryUnregisterCommands("cmd_find");
findCommand = new CustomFindCommand(this);
getProxy().getPluginManager().registerCommand(this, findCommand);
}
if (settings.getFeaturesProps().getCustomListCommandProps().isEnabled()) {
Plugin plugin = getProxy().getPluginManager().getPlugin("cmd_list");
if (plugin != null) {
getProxy().getPluginManager().unregisterCommands(plugin);
getLogger().info("Unregistered commands of the plugin: " + plugin.getDescription().getName());
}
tryUnregisterCommands("cmd_list");
listCommand = new CustomListCommand(this);
getProxy().getPluginManager().registerCommand(this, listCommand);
}
}, 1L, TimeUnit.SECONDS);
if (settings.getFeaturesProps().getCustomServerCommandProps().isEnabled()) {
tryUnregisterCommands("cmd_server");
serverCommand = new CustomServerCommand(this);
getProxy().getPluginManager().registerCommand(this, serverCommand);
}
}, 5L, TimeUnit.SECONDS);
PasteHelper.reset();
getLogger().info("The plugin has finished loading without any problems");
@ -214,6 +216,16 @@ public class PlayerBalancer extends Plugin {
}
}
private void tryUnregisterCommands(String pluginName) {
Plugin plugin = getProxy().getPluginManager().getPlugin(pluginName);
if (plugin != null) {
getProxy().getPluginManager().unregisterCommands(plugin);
getLogger().info("Unregistered all commands of the plugin: " + pluginName);
} else {
getLogger().warning("Could not find the plugin: " + pluginName);
}
}
private void execStop() {
if (mainCommand != null) {
getProxy().getPluginManager().unregisterCommand(mainCommand);
@ -269,6 +281,27 @@ public class PlayerBalancer extends Plugin {
manageCommand = null;
}
if (settings.getFeaturesProps().getCustomFindCommandProps().isEnabled()) {
if (findCommand != null) {
getProxy().getPluginManager().unregisterCommand(findCommand);
findCommand = null;
}
}
if (settings.getFeaturesProps().getCustomListCommandProps().isEnabled()) {
if (listCommand != null) {
getProxy().getPluginManager().unregisterCommand(listCommand);
listCommand = null;
}
}
if (settings.getFeaturesProps().getCustomServerCommandProps().isEnabled()) {
if (serverCommand != null) {
getProxy().getPluginManager().unregisterCommand(serverCommand);
serverCommand = null;
}
}
if (sectionManager != null) {
sectionManager.flush();
}

View File

@ -1,4 +1,4 @@
package com.jaimemartz.playerbalancer.commands.custom;
package com.jaimemartz.playerbalancer.commands;
import com.jaimemartz.playerbalancer.PlayerBalancer;
import com.jaimemartz.playerbalancer.settings.props.features.CustomFindCommandProps;

View File

@ -1,4 +1,4 @@
package com.jaimemartz.playerbalancer.commands.custom;
package com.jaimemartz.playerbalancer.commands;
import com.jaimemartz.playerbalancer.PlayerBalancer;
import com.jaimemartz.playerbalancer.settings.props.features.CustomListCommandProps;

View File

@ -1,4 +1,4 @@
package com.jaimemartz.playerbalancer.commands.custom;
package com.jaimemartz.playerbalancer.commands;
import com.jaimemartz.playerbalancer.PlayerBalancer;
import com.jaimemartz.playerbalancer.settings.props.features.CustomServerCommandProps;

View File

@ -87,8 +87,16 @@ public class FallbackCommand extends Command {
return null;
}
ServerSection target = plugin.getSectionManager().getBind(props.getRules(), current)
.orElse(current.getParent());
ServerSection target = current.getParent();
String bindName = props.getRules().get(current.getName());
if (bindName != null) {
ServerSection bind = plugin.getSectionManager().getByName(bindName);
if (bind != null) {
target = bind;
}
}
if (target == null) {
MessageUtils.send(player, messages.getUnavailableServerMessage());
return null;

View File

@ -2,7 +2,7 @@ package com.jaimemartz.playerbalancer.commands;
import com.google.common.base.Strings;
import com.jaimemartz.playerbalancer.PlayerBalancer;
import com.jaimemartz.playerbalancer.manager.PasteHelper;
import com.jaimemartz.playerbalancer.helper.PasteHelper;
import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.chat.ClickEvent;

View File

@ -109,6 +109,13 @@ public class ManageCommand extends Command {
.create());
}
sender.sendMessage(new ComponentBuilder("Alias: ")
.color(ChatColor.GRAY)
.append(String.valueOf(section.getProps().getAlias()))
.color(ChatColor.AQUA)
.create()
);
sender.sendMessage(new ComponentBuilder("Position: ")
.color(ChatColor.GRAY)
.append(String.valueOf(section.getPosition()))

View File

@ -1,7 +1,7 @@
package com.jaimemartz.playerbalancer.connection;
import com.jaimemartz.playerbalancer.PlayerBalancer;
import com.jaimemartz.playerbalancer.manager.PlayerLocker;
import com.jaimemartz.playerbalancer.helper.PlayerLocker;
import com.jaimemartz.playerbalancer.section.ServerSection;
import com.jaimemartz.playerbalancer.utils.MessageUtils;
import net.md_5.bungee.api.Callback;
@ -26,6 +26,7 @@ public abstract class ConnectionIntent {
MessageUtils.send(player, plugin.getSettings().getMessagesProps().getConnectingMessage(),
(str) -> str.replace("{section}", section.getName())
.replace("{alias}", section.getProps().getAlias())
);
//Prevents removing servers from the section
@ -46,6 +47,8 @@ public abstract class ConnectionIntent {
if (response) { //only if the connect has been executed correctly
MessageUtils.send(player, plugin.getSettings().getMessagesProps().getConnectedMessage(),
(str) -> str.replace("{server}", target.getName())
.replace("{section}", section.getName())
.replace("{alias}", section.getProps().getAlias())
);
}
});

View File

@ -1,4 +1,4 @@
package com.jaimemartz.playerbalancer.manager;
package com.jaimemartz.playerbalancer.helper;
import com.imaginarycode.minecraft.redisbungee.RedisBungee;
import com.jaimemartz.playerbalancer.PlayerBalancer;

View File

@ -1,4 +1,4 @@
package com.jaimemartz.playerbalancer.manager;
package com.jaimemartz.playerbalancer.helper;
import com.google.common.io.CharStreams;
import com.jaimemartz.playerbalancer.PlayerBalancer;

View File

@ -1,4 +1,4 @@
package com.jaimemartz.playerbalancer.manager;
package com.jaimemartz.playerbalancer.helper;
import net.md_5.bungee.api.connection.ProxiedPlayer;

View File

@ -2,7 +2,7 @@ package com.jaimemartz.playerbalancer.listeners;
import com.jaimemartz.playerbalancer.PlayerBalancer;
import com.jaimemartz.playerbalancer.connection.ServerAssignRegistry;
import com.jaimemartz.playerbalancer.manager.PlayerLocker;
import com.jaimemartz.playerbalancer.helper.PlayerLocker;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.api.event.PlayerDisconnectEvent;
import net.md_5.bungee.api.plugin.Listener;

View File

@ -7,7 +7,7 @@ import com.google.gson.GsonBuilder;
import com.google.gson.JsonSerializer;
import com.jaimemartz.playerbalancer.PlayerBalancer;
import com.jaimemartz.playerbalancer.connection.ConnectionIntent;
import com.jaimemartz.playerbalancer.manager.PlayerLocker;
import com.jaimemartz.playerbalancer.helper.PlayerLocker;
import com.jaimemartz.playerbalancer.ping.ServerStatus;
import com.jaimemartz.playerbalancer.section.ServerSection;
import net.md_5.bungee.api.config.ServerInfo;

View File

@ -3,8 +3,9 @@ package com.jaimemartz.playerbalancer.listeners;
import com.jaimemartz.playerbalancer.PlayerBalancer;
import com.jaimemartz.playerbalancer.connection.ConnectionIntent;
import com.jaimemartz.playerbalancer.connection.ServerAssignRegistry;
import com.jaimemartz.playerbalancer.manager.PlayerLocker;
import com.jaimemartz.playerbalancer.helper.PlayerLocker;
import com.jaimemartz.playerbalancer.section.ServerSection;
import com.jaimemartz.playerbalancer.settings.props.features.PermissionRouterProps;
import com.jaimemartz.playerbalancer.utils.MessageUtils;
import net.md_5.bungee.api.Callback;
import net.md_5.bungee.api.config.ServerInfo;
@ -14,11 +15,17 @@ import net.md_5.bungee.api.plugin.Listener;
import net.md_5.bungee.event.EventHandler;
import net.md_5.bungee.event.EventPriority;
import java.util.Optional;
public class ServerConnectListener implements Listener {
private final PlayerBalancer plugin;
private final PermissionRouterProps permissionRouterProps;
public ServerConnectListener(PlayerBalancer plugin) {
this.plugin = plugin;
this.permissionRouterProps = plugin.getSettings().getFeaturesProps().getPermissionRouterProps();
}
@EventHandler(priority = EventPriority.HIGHEST)
@ -26,6 +33,9 @@ public class ServerConnectListener implements Listener {
ProxiedPlayer player = event.getPlayer();
ServerInfo target = event.getTarget();
if (PlayerLocker.isLocked(player))
return;
ServerSection section = getSection(player, target);
if (section == null)
@ -53,8 +63,14 @@ public class ServerConnectListener implements Listener {
ServerSection section = plugin.getSectionManager().getByServer(target);
if (section != null) {
if (PlayerLocker.isLocked(player)) {
return null;
if (permissionRouterProps.isEnabled()) {
Optional<String> bindName = permissionRouterProps.getRouteBind(player, section);
if (bindName.isPresent()) {
ServerSection bind = plugin.getSectionManager().getByName(bindName.get());
if (bind != null) {
return bind;
}
}
}
//Checks only for servers (not the section server)

View File

@ -2,7 +2,7 @@ package com.jaimemartz.playerbalancer.listeners;
import com.jaimemartz.playerbalancer.PlayerBalancer;
import com.jaimemartz.playerbalancer.connection.ConnectionIntent;
import com.jaimemartz.playerbalancer.manager.PlayerLocker;
import com.jaimemartz.playerbalancer.helper.PlayerLocker;
import com.jaimemartz.playerbalancer.section.ServerSection;
import com.jaimemartz.playerbalancer.settings.props.MessagesProps;
import com.jaimemartz.playerbalancer.settings.props.features.KickHandlerProps;
@ -111,8 +111,16 @@ public class ServerKickListener implements Listener {
}
if (current != null) {
ServerSection target = plugin.getSectionManager().getBind(props.getRules(), current)
.orElse(current.getParent());
ServerSection target = current.getParent();
String bindName = props.getRules().get(current.getName());
if (bindName != null) {
ServerSection bind = plugin.getSectionManager().getByName(bindName);
if (bind != null) {
target = bind;
}
}
if (target == null) {
MessageUtils.send(player, messages.getUnavailableServerMessage());
return null;

View File

@ -349,12 +349,6 @@ public class SectionManager {
return reiterativeSections.contains(section.getName());
}
public Optional<ServerSection> getBind(Map<String, String> rules, ServerSection section) {
String bind = rules.get(section.getName());
ServerSection res = this.getByName(bind);
return Optional.ofNullable(res);
}
public Map<String, ServerSection> getSections() {
return sections;
}

View File

@ -31,4 +31,7 @@ public class FeaturesProps {
@Setting(value = "custom-server-command")
private CustomServerCommandProps customServerCommandProps;
@Setting(value = "permission-router")
private PermissionRouterProps permissionRouterProps;
}

View File

@ -0,0 +1,34 @@
package com.jaimemartz.playerbalancer.settings.props.features;
import com.jaimemartz.playerbalancer.section.ServerSection;
import lombok.Data;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import ninja.leaping.configurate.objectmapping.Setting;
import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable;
import java.util.Map;
import java.util.Optional;
@ConfigSerializable
@Data
public class PermissionRouterProps {
@Setting
private boolean enabled;
@Setting
private Map<String, Map<String, String>> rules;
public Optional<String> getRouteBind(ProxiedPlayer player, ServerSection section) {
Map<String, String> routes = rules.get(section.getName());
if (routes != null) {
for (Map.Entry<String, String> route : routes.entrySet()) {
if (player.hasPermission(route.getKey())) {
return Optional.of(route.getValue());
}
}
}
return Optional.empty();
}
}

View File

@ -13,6 +13,9 @@ public class SectionProps {
@Setting
private ProviderType provider;
@Setting
private String alias;
@Setting(value = "parent")
private String parentName;

View File

@ -28,8 +28,8 @@ general {
# Effectively remove (i.e comment) a message to disable it
# Supported variables are shown in the default messages
messages {
# connecting-server="&aConnecting to a {section} server" # this message is disabled by default!
connected-server="&aConnected to {server}"
# connecting-server="&aConnecting to an {section} ({alias}) server" # this message is disabled by default!
connected-server="&aConnected to {server} (an {alias} server)"
invalid-input="&cThis is an invalid input type for this command"
misc-failure="&cCould not find a server to get connected to"
player-bypass="&cYou have not been moved because you have the playerbalancer.bypass permission"
@ -70,6 +70,7 @@ features {
general-lobbies {
parent="auth-lobbies"
alias="General Lobbies"
servers=[
"Lobby[1-3]"
]
@ -141,8 +142,8 @@ features {
# When the description of a server matches these, it will be set as non accessible
# Be aware of colors, it is recommended to use the "contains" rule below or some others
marker-descs=[
"(?i).*maintenance*" # match if contains (regex)
"Game in progress", # match if exactly equal
"(?i).*maintenance*", # match if contains (regex)
"Game in progress" # match if exactly equal
]
}
@ -237,12 +238,12 @@ features {
}
custom-list-command {
enabled = false
enabled=false
command {
name = glist
permission = ""
aliases = []
name=glist
permission=""
aliases=[]
}
formats {
@ -252,16 +253,26 @@ features {
}
custom-server-command {
enabled = false
enabled=false
command {
name = glist
permission = ""
aliases = []
name=server
permission=""
aliases=[]
}
formats {
# Nothing yet
}
}
permission-router {
enabled=false
routes {
general-lobbies {
special.permission=other-lobby-section,
}
}
}
}