Some more changes

This commit is contained in:
Jaime Martínez Rincón 2017-09-13 15:51:53 +02:00
parent e707d82772
commit 5fadacb8f0
12 changed files with 115 additions and 83 deletions

View File

@ -24,7 +24,7 @@
</repository>
<repository>
<id>inventive-repo</id>
<url>http://repo.inventivetalent.org/content/groups/public/</url>
<url>https://repo.inventivetalent.org/content/groups/public/</url>
</repository>
<repository>
<id>xephi-repo</id>

View File

@ -25,6 +25,8 @@ import org.inventivetalent.update.bungee.BungeeUpdater;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.util.logging.Level;
public class PlayerBalancer extends Plugin {
@ -41,7 +43,6 @@ public class PlayerBalancer extends Plugin {
public void onEnable() {
Metrics metrics = new Metrics(this);
metrics.addCustomChart(new Metrics.SingleLineChart("configured_sections", () -> sectionManager.getSections().size()));
this.enable();
}
@ -53,21 +54,21 @@ public class PlayerBalancer extends Plugin {
if (loader == null) {
TypeSerializerCollection serializers = TypeSerializers.getDefaultSerializers().newChild();
//serializers.registerType(TypeToken.of(ServerSection.class), new SectionSerializer());
ConfigurationOptions options = ConfigurationOptions.defaults().setSerializers(serializers);
loader = HoconConfigurationLoader.builder().setFile(file).setDefaultOptions(options).build();
}
try {
CommentedConfigurationNode node = loader.load();
if (!file.exists()) {
mainSettings = new SettingsHolder(); //.__defaults(); todo load defaults from default config
node.setValue(TypeToken.of(SettingsHolder.class), mainSettings);
loader.save(node);
} else {
mainSettings = node.getValue(TypeToken.of(SettingsHolder.class));
try (InputStream in = getResourceAsStream("default.conf")) {
Files.copy(in, file.toPath());
} catch (IOException e) {
e.printStackTrace();
}
}
CommentedConfigurationNode node = loader.load();
mainSettings = node.getValue(TypeToken.of(SettingsHolder.class));
} catch (Exception e) {
e.printStackTrace();
}

View File

@ -4,6 +4,7 @@ import com.google.common.base.Strings;
import com.jaimemartz.playerbalancer.PlayerBalancer;
import com.jaimemartz.playerbalancer.connection.ConnectionIntent;
import com.jaimemartz.playerbalancer.ping.ServerStatus;
import com.jaimemartz.playerbalancer.section.SectionManager;
import com.jaimemartz.playerbalancer.section.ServerSection;
import com.jaimemartz.playerbalancer.utils.MessageUtils;
import net.md_5.bungee.api.ChatColor;
@ -60,7 +61,9 @@ public class ManageCommand extends Command {
case "info": {
if (args.length == 2) {
String input = args[1];
ServerSection section = plugin.getSectionManager().getByName(input);
SectionManager manager = plugin.getSectionManager();
ServerSection section = manager.getByName(input);
if (section != null) {
sender.sendMessage(new ComponentBuilder(Strings.repeat("-", 53)).strikethrough(true).color(ChatColor.GRAY).create());
@ -72,8 +75,8 @@ public class ManageCommand extends Command {
sender.sendMessage(new ComponentBuilder("Principal: ")
.color(ChatColor.GRAY)
.append(section.getProps().isPrincipal() ? "yes" : "no")
.color(section.getProps().isPrincipal() ? ChatColor.GREEN : ChatColor.RED)
.append(manager.isPrincipal(section) ? "yes" : "no")
.color(manager.isPrincipal(section) ? ChatColor.GREEN : ChatColor.RED)
.create());
if (section.getParent() != null) {
@ -110,8 +113,8 @@ public class ManageCommand extends Command {
sender.sendMessage(new ComponentBuilder("Dummy: ")
.color(ChatColor.GRAY)
.append(section.getProps().isDummy() ? "yes" : "no")
.color(section.getProps().isDummy() ? ChatColor.GREEN : ChatColor.RED)
.append(manager.isDummy(section) ? "yes" : "no")
.color(manager.isDummy(section) ? ChatColor.GREEN : ChatColor.RED)
.create()
);

View File

@ -69,7 +69,7 @@ public abstract class ConnectionIntent {
}
private ServerInfo fetchServer(PlayerBalancer plugin, ProxiedPlayer player, ServerSection section, ProviderType provider, List<ServerInfo> servers) {
if (plugin.getSettings().getGeneralProps().isAssignTargets()) {
if (plugin.getSectionManager().isReiterative(section)) {
if (ServerAssignRegistry.hasAssignedServer(player, section)) {
ServerInfo target = ServerAssignRegistry.getAssignedServer(player, section);
ServerStatus status = plugin.getStatusManager().getStatus(target);

View File

@ -21,9 +21,6 @@ public class PlayerDisconnectListener implements Listener {
ProxiedPlayer player = event.getPlayer();
PlayerLocker.unlock(player);
//Delete this if we want to keep assigned groups even when leaving
if (plugin.getSettings().getGeneralProps().isAssignTargets()) {
ServerAssignRegistry.clearAsssignedServers(player);
}
ServerAssignRegistry.clearAsssignedServers(player);
}
}

View File

@ -31,7 +31,7 @@ public class ServerConnectListener implements Listener {
new ConnectionIntent(plugin, player, section) {
@Override
public void connect(ServerInfo server, Callback<Boolean> callback) {
if (plugin.getSettings().getGeneralProps().isAssignTargets()) {
if (plugin.getSectionManager().isReiterative(section)) {
ServerAssignRegistry.assignTarget(player, section, server);
}
@ -52,7 +52,7 @@ public class ServerConnectListener implements Listener {
//Checks only for servers (not the section server)
if (section.getMappedServers().contains(target)) {
if (section.getProps().isDummy()) {
if (plugin.getSectionManager().isDummy(section)) {
return null;
}
@ -62,7 +62,7 @@ public class ServerConnectListener implements Listener {
}
if (player.getServer() != null && section.getMappedServers().contains(player.getServer().getInfo())) {
if (plugin.getSettings().getGeneralProps().isAssignTargets()) {
if (plugin.getSectionManager().isReiterative(section)) {
ServerAssignRegistry.assignTarget(player, section, target);
}
return null;

View File

@ -116,7 +116,7 @@ public class ServerKickListener implements Listener {
return null;
}
if (props.isRestricted()) {
if (props.isRestrictive()) {
if (current.getPosition() >= 0 && target.getPosition() < 0) {
return null;
}

View File

@ -7,7 +7,7 @@ import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.connection.ProxiedPlayer;
public class SectionCommand extends FallbackCommand {
protected final ServerSection section;
private final ServerSection section;
public SectionCommand(PlayerBalancer plugin, CommandProps props, ServerSection section) {
super(plugin, props);

View File

@ -1,6 +1,7 @@
package com.jaimemartz.playerbalancer.section;
import com.jaimemartz.playerbalancer.PlayerBalancer;
import com.jaimemartz.playerbalancer.settings.props.features.BalancerProps;
import net.md_5.bungee.api.config.ServerInfo;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.api.connection.Server;
@ -26,7 +27,7 @@ public class SectionManager {
plugin.getLogger().info("Loading sections from the config, this may take a while...");
long starting = System.currentTimeMillis();
plugin.getSettings().getSections().forEach((name, prop) -> {
plugin.getSettings().getBalancerProps().getSectionProps().forEach((name, prop) -> {
plugin.getLogger().info(String.format("Construction of section with name \"%s\"", name));
ServerSection object = new ServerSection(name, prop);
sections.put(name, object);
@ -70,7 +71,7 @@ public class SectionManager {
public void register(ServerInfo server, ServerSection section) {
if (servers.containsKey(server)) {
if (section.getProps().isDummy()) {
if (isDummy(section)) {
return;
}
@ -113,23 +114,18 @@ public class SectionManager {
return getByServer(server.getInfo());
}
public ServerSection getPrincipal() {
return principal;
}
/**
* Calculates the position of a section in relation to other sections
* This is supposed to be called on section construction
* @param section the section we want to get the position of
* @param principal the principal section
* @return the position of {@param section}
*/
private int calculatePosition(ServerSection section, ServerSection principal) {
private int calculatePosition(ServerSection section) {
//Calculate above principal
int iterations = 0;
ServerSection current = section;
while (current != null) {
if (current.getProps().isPrincipal()) {
if (current == principal) {
return iterations;
}
@ -154,6 +150,24 @@ public class SectionManager {
return iterations;
}
public ServerSection getPrincipal() {
return principal;
}
public boolean isPrincipal(ServerSection section) {
return section.equals(principal);
}
public boolean isDummy(ServerSection section) {
BalancerProps props = plugin.getSettings().getBalancerProps();
return props.getDummySectionNames().contains(section.getName());
}
public boolean isReiterative(ServerSection section) {
BalancerProps props = plugin.getSettings().getBalancerProps();
return props.getReiterativeSectionNames().contains(section.getName());
}
public Map<String, ServerSection> getSections() {
return sections;
}

View File

@ -21,7 +21,7 @@ public class KickHandlerProps {
private List<String> excludedSections;
@Setting
private boolean restricted;
private boolean restrictive;
@Setting(value = "force-principal")
private boolean forcePrincipal;
@ -64,12 +64,12 @@ public class KickHandlerProps {
this.excludedSections = excludedSections;
}
public boolean isRestricted() {
return restricted;
public boolean isRestrictive() {
return restrictive;
}
public void setRestricted(boolean restricted) {
this.restricted = restricted;
public void setRestrictive(boolean restrictive) {
this.restrictive = restrictive;
}
public boolean isForcePrincipal() {
@ -103,7 +103,7 @@ public class KickHandlerProps {
", inverted=" + inverted +
", reasons=" + reasons +
", excludedSections=" + excludedSections +
", restricted=" + restricted +
", restrictive=" + restrictive +
", forcePrincipal=" + forcePrincipal +
", rules=" + rules +
", debug=" + debug +

View File

@ -4,7 +4,6 @@ import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.chat.TextComponent;
import java.util.Optional;
import java.util.function.Function;
public final class MessageUtils {
@ -15,10 +14,6 @@ public final class MessageUtils {
}
}
public static void send(CommandSender sender, Optional<String> message) {
message.ifPresent(text -> send(sender, text));
}
public static void send(CommandSender sender, String text, Function<String, String> postProcess) {
if (text != null) {
text = postProcess.apply(text);
@ -26,8 +21,4 @@ public final class MessageUtils {
send(sender, text);
}
public static void send(CommandSender sender, Optional<String> message, Function<String, String> postProcess) {
message.ifPresent(text -> send(sender, text, postProcess));
}
}

View File

@ -39,22 +39,20 @@ messages {
features {
balancer {
# The principal section is very important for other features
# Normally set this to the section that has your main lobbies
principal-section=test
# When a player is not in any section, the player will go to the principal section
# This affects both the fallback command and kick handler features
fallback-principal=true
# Dummy sections can have servers from other non-dummy sections
# When a player connects to a dummy section, nothing will happen
dummy-sections=[]
# Reiterative sections remember the server the player connected to previously
# The plugin will keep connecting the player to that server until changes
reiterative-sections=[]
# Here you have an example of what you can do with the sections
# The plugin will print out info telling you if your config is right or not
# If a section does not have a provider it will be inherit from the parent
# The best way to understand this is to play around with it
# You can use regex to match a set of servers instead of adding each server
# Providers you can use:
# NONE: Returns no server
# DIRECT: Returns the only server in the list
# LOCALIZED: Returns the server that matches a region (testing)
# LOWEST: Returns the server with the least players online
# RANDOM: Returns a random server
# PROGRESSIVE: Returns the first server that is not full
# FILLER: Returns the server with the most players online that is not full
sections {
auth-lobbies {
provider=RANDOM
@ -100,12 +98,52 @@ features {
}
}
}
# The principal section is very important for other features
# Normally set this to the section that has your main lobbies
principal-section=test
# When a player is not in any section, the player will go to the principal section
# This affects both the fallback command and kick handler features
fallback-principal=true
# Dummy sections can have servers from other non-dummy sections
# When a player connects to a dummy section, nothing will happen
dummy-sections=[]
# Reiterative sections remember the server the player connected to previously
# The plugin will keep connecting the player to that server until changes
reiterative-sections=[]
}
# Pings servers to see if they are online or not and if they are accessible
server-checker {
enabled=true
# Use either CUSTOM or GENERIC, the first one generally works the best
tactic=CUSTOM
# The attempts before giving up on getting a server for a player
attempts=5
# The interval between every round of checks
interval=10000
# When true, the plugin will print useful info when a server gets checked
debug-info=false
# The descriptions that mark a server as non accessible
marker-descs=[
"Server is not accessible",
"Gamemode has already started"
]
}
# Connects a player to the parent of current section the player is connected to
fallback-command {
enabled=true
# Leave permission empty for no permission
command {
name=fallback
permission=""
@ -119,7 +157,7 @@ features {
# Add sections here where you do not want this feature to work
excluded-sections=[]
# When true, players will not be able to get to a section
# When true, players will not be able to get connected to sections that are parents of the principal section
restrictive=true
# You can override the behavior with rules, overriding the parent section
@ -129,37 +167,25 @@ features {
}
}
server-checker {
enabled=true
tactic=CUSTOM
attempts=5
debug-info=false
interval=10000
marker-descs=[
"Server is not accessible",
"Gamemode has already started"
]
}
# Connects a player to other section when kicked
kick-handler {
enabled=true
# When true, the reasons will work as a blacklist instead of a whitelist
# Blacklist: A player must be kicked with a reason that is NOT in the reasons
# Whitelist: A player must be kicked with a reason that is in the reasons
inverted=true
# The reasons that determine if a player is reconnected or not, supports regex
reasons=[]
# When true, players that are kicked while connecting to the proxy will be forced to reconnect to the principal section
force-principal=false
# Add sections here where you do not want this feature to work
excluded-sections=[]
# When true, players will not be able to get connected to sections that are parents of the principal section
restrictive=true
# When true, the plugin will print useful info when a player gets kicked