Skip to content

Commit

Permalink
fix: Improved SendMode handling
Browse files Browse the repository at this point in the history
fixes #4
  • Loading branch information
4drian3d committed Jul 1, 2022
1 parent f1c49e4 commit 77e10a8
Show file tree
Hide file tree
Showing 5 changed files with 99 additions and 72 deletions.
62 changes: 59 additions & 3 deletions src/main/java/me/dreamerzero/kickredirect/enums/SendMode.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,63 @@
package me.dreamerzero.kickredirect.enums;

import java.util.Optional;
import java.util.Random;

import com.velocitypowered.api.proxy.server.RegisteredServer;

import me.dreamerzero.kickredirect.KickRedirect;

public enum SendMode {
TO_FIRST,
TO_EMPTIEST_SERVER,
RANDOM;
TO_FIRST {
@Override
public RegisteredServer server(KickRedirect plugin) {
for (final String st : plugin.config().get().getServersToRedirect()) {
final Optional<RegisteredServer> sv = plugin.getProxy().getServer(st);
if(sv.isPresent()) return sv.get();
}
return null;
}
},
TO_EMPTIEST_SERVER {
@Override
public RegisteredServer server(KickRedirect plugin) {
RegisteredServer emptiest = null;
for (final String st : plugin.config().get().getServersToRedirect()) {
final Optional<RegisteredServer> sv = plugin.getProxy().getServer(st);
if (sv.isPresent()) {
RegisteredServer actualsv = sv.get();
if (actualsv.getPlayersConnected().isEmpty())
return actualsv;
if (emptiest == null) {
emptiest = actualsv;
} else {
if(actualsv.getPlayersConnected().size() < emptiest.getPlayersConnected().size()){
emptiest = actualsv;
}
}
}
}
return emptiest;
}
},
RANDOM {
@Override
public RegisteredServer server(KickRedirect plugin) {
final String[] servers = plugin.config().get().getServersToRedirect();
Optional<RegisteredServer> server;
for (int i = 0; i < plugin.config().get().getRandomAttempts(); i++) {
if (servers.length == 1) {
server = plugin.getProxy().getServer(servers[0]);
} else {
int value = rm.nextInt(servers.length);
server = plugin.getProxy().getServer(servers[value]);
}
if (server.isPresent()) return server.get();
}
return null;
}
};
private static final Random rm = new Random();

public abstract RegisteredServer server(KickRedirect plugin);
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
import me.dreamerzero.kickredirect.KickRedirect;
import me.dreamerzero.kickredirect.enums.CheckMode;
import me.dreamerzero.kickredirect.utils.DebugInfo;
import me.dreamerzero.kickredirect.utils.ServerUtils;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
Expand All @@ -29,7 +28,7 @@ public KickListener(final KickRedirect plugin){
public void onKickFromServer(final KickedFromServerEvent event, final Continuation continuation){

if (reasonCheck(event)) {
final RegisteredServer server = ServerUtils.getConfigServer(plugin);
final RegisteredServer server = plugin.config().get().getSendMode().server(plugin);
if (server == null) {
plugin.getProxy().getConsoleCommandSource().sendMessage(
plugin.formatter().format(
Expand Down
61 changes: 0 additions & 61 deletions src/main/java/me/dreamerzero/kickredirect/utils/ServerUtils.java

This file was deleted.

8 changes: 7 additions & 1 deletion src/test/java/me/dreamerzero/kickredirect/EventBundle.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public final class EventBundle {
private final KickRedirect plugin;

private EventBundle(final Builder builder) {
this.proxyServer = new TestProxyServer();
this.proxyServer = builder.proxy == null ? new TestProxyServer() : builder.proxy;
this.plugin = new KickRedirect(
this.proxyServer,
Path.of("build", "reports", "tests", "test"),
Expand Down Expand Up @@ -82,6 +82,7 @@ public static class Builder implements AbstractBuilder<EventBundle> {
private Player player;
private KickedFromServerEvent event;
private boolean debug;
private ProxyServer proxy;

private Builder() {}

Expand All @@ -100,6 +101,11 @@ public Builder debug(boolean debug) {
return this;
}

public Builder server(ProxyServer server) {
this.proxy = server;
return this;
}

@Override
public @NotNull EventBundle build() {
return new EventBundle(this);
Expand Down
37 changes: 32 additions & 5 deletions src/test/java/me/dreamerzero/kickredirect/ServerUtilsTest.java
Original file line number Diff line number Diff line change
@@ -1,23 +1,30 @@
package me.dreamerzero.kickredirect;

import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertNotNull;

import java.util.Collection;
import java.util.Collections;
import java.util.Optional;

import static org.assertj.core.api.Assertions.assertThat;

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

import com.velocitypowered.api.proxy.server.RegisteredServer;

import me.dreamerzero.kickredirect.utils.ServerUtils;
import me.dreamerzero.kickredirect.enums.SendMode;
import me.dreamerzero.kickredirect.listener.objects.TestProxyServer;
import me.dreamerzero.kickredirect.listener.objects.TestRegisteredServer;

class ServerUtilsTest {
@Test
@DisplayName("ServerUtils Test")
void configSendMode() {
EventBundle bundle = EventBundle.builder().build();

var server = ServerUtils.getConfigServer(bundle.getPlugin());
var server = bundle.getPlugin().config().get().getSendMode().server(bundle.getPlugin());
assertThat(bundle.getProxyServer().getServer("lobby1"))
.isPresent()
.contains(server);
Expand All @@ -27,7 +34,7 @@ void configSendMode() {
void randomSendMode() {
EventBundle bundle = EventBundle.builder().build();

assertThat(ServerUtils.getRandomServer(bundle.getPlugin()))
assertThat(SendMode.RANDOM.server(bundle.getPlugin()))
.isNotNull()
.isIn(bundle.getProxyServer().getAllServers());
}
Expand All @@ -36,7 +43,7 @@ void randomSendMode() {
void firstServer() {
EventBundle bundle = EventBundle.builder().build();

var server = ServerUtils.getFirstServer(bundle.getPlugin());
var server = SendMode.TO_FIRST.server(bundle.getPlugin());

assertThat(server).isNotNull();

Expand All @@ -49,10 +56,30 @@ void firstServer() {
void emptiestServer() {
EventBundle bundle = EventBundle.builder().build();

RegisteredServer server = ServerUtils.getEmptiestServer(bundle.getPlugin());
RegisteredServer server = SendMode.TO_EMPTIEST_SERVER.server(bundle.getPlugin());
assertNotNull(server);
assertThat(bundle.getProxyServer().getServer("lobby2"))
.isPresent()
.contains(server);
}

@Test
void issue4() {
RegisteredServer server = new TestRegisteredServer(5);
EventBundle bundle = EventBundle.builder()
.server(new TestProxyServer() {
@Override
public Collection<RegisteredServer> getAllServers() {
return Collections.singleton(server);
}
@Override
public Optional<RegisteredServer> getServer(String arg) {
return Optional.of(server);
}
})
.build();
SendMode sendMode = SendMode.RANDOM;

assertDoesNotThrow(() -> sendMode.server(bundle.getPlugin()));
}
}

0 comments on commit 77e10a8

Please sign in to comment.