Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ public interface ServerHandler<P, S> {
*
* @return The limbo servers
*/
Collection<S> getLimboServers();
Multimap<String, S> getLimboServers();

/**
* Registers a new lobby server.
Expand All @@ -97,7 +97,8 @@ default void registerLobbyServer(S server) {
* Registers a new limbo server.
*
* @param server The server to register
* @param forcedHost The forced host
*/
void registerLimboServer(S server);
void registerLimboServer(S server, String forcedHost);

}
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ public void onServerConnect(ServerConnectEvent event) {
if (!authorizationProvider.isAuthorized(event.getPlayer()) && event.getReason() != ServerConnectEvent.Reason.JOIN_PROXY) {
event.setCancelled(true);
} else if (authorizationProvider.isAwaiting2FA(event.getPlayer())) {
if (!configuration.get(LIMBO).contains(event.getTarget().getName())) {
if (!configuration.get(LIMBO).containsValue(event.getTarget().getName())) {
event.setCancelled(true);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ public ProxyData getProxyData() {
.add("main", plugin.getDescription().getMain())
.toString()
).toList(),
plugin.getServerHandler().getLimboServers().stream().map(this::fromServer).toList(),
plugin.getServerHandler().getLimboServers().values().stream().map(this::fromServer).toList(),
plugin.getServerHandler().getLobbyServers().values().stream().map(this::fromServer).toList()
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,9 @@ protected void enable() {
}

if (platformHandle.getPlatformIdentifier().equals("paper")) {
LIMBO.setDefault(List.of("limbo"));
var limbo = HashMultimap.<String, String>create();
limbo.put("root", "limbo");
LIMBO.setDefault(limbo);

var lobby = HashMultimap.<String, String>create();
lobby.put("root", "world");
Expand Down Expand Up @@ -442,7 +444,7 @@ private void loadConfigs() {
var lobby = configuration.get(LOBBY);

for (String value : lobby.values()) {
if (limbos.contains(value)) {
if (limbos.containsValue(value)) {
throw new CorruptedConfigurationException("Lobby server/world %s is also a limbo server/world, this is not allowed".formatted(value));
}
}
Expand Down Expand Up @@ -791,7 +793,7 @@ public void onExit(P player) {
var server = platformHandle.getPlayersServerName(player);
if (server == null) return;
var user = databaseProvider.getByUUID(platformHandle.getUUIDForPlayer(player));
if (user != null && !getConfiguration().get(LIMBO).contains(server)) {
if (user != null && !getConfiguration().get(LIMBO).containsValue(server)) {
user.setLastServer(server);
databaseProvider.updateUser(user);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,13 +36,19 @@ public class ConfigurationKeys {
ConfigurateHelper::getStringList
);

public static final ConfigurationKey<List<String>> LIMBO = new ConfigurationKey<>(
public static final Multimap<String, String> LIMBO_DEFAULT = HashMultimap.create();
public static final ConfigurationKey<Multimap<String, String>> LIMBO = new ConfigurationKey<>(
"limbo",
List.of("limbo0", "limbo1"),
LIMBO_DEFAULT,
"The authentication servers/worlds, players should be sent to, when not authenticated. On Paper, players will be spawned on the world spawn. THIS SERVERS MUST BE REGISTERED IN THE PROXY CONFIG. IN CASE OF PAPER, THE WORLDS MUST EXIST.",
ConfigurateHelper::getStringList
ConfigurateHelper::getServerMap
);

static {
LIMBO_DEFAULT.put("root", "limbo0");
LIMBO_DEFAULT.put("root", "limbo1");
}

public static final Multimap<String, String> LOBBY_DEFAULT = HashMultimap.create();
public static final ConfigurationKey<Multimap<String, String>> LOBBY = new ConfigurationKey<>(
"lobby",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,14 +31,14 @@ public class AuthenticServerHandler<P, S> implements ServerHandler<P, S> {

private final LoadingCache<S, Optional<ServerPing>> pingCache;
private final AuthenticLibreLogin<P, S> plugin;
private final Collection<S> limboServers;
private final Multimap<String, S> limboServers;
private final Multimap<String, S> lobbyServers;

public AuthenticServerHandler(AuthenticLibreLogin<P, S> plugin) {
this.plugin = plugin;

this.lobbyServers = HashMultimap.create();
this.limboServers = new ArrayList<>();
this.limboServers = HashMultimap.create();

this.pingCache = Caffeine.newBuilder()
.build(server -> {
Expand All @@ -59,14 +59,14 @@ public AuthenticServerHandler(AuthenticLibreLogin<P, S> plugin) {
if (plugin.getConfiguration().get(ConfigurationKeys.PING_SERVERS))
plugin.getLogger().info("Pinging servers...");

for (String limbo : plugin.getConfiguration().get(LIMBO)) {
var server = handle.getServer(limbo, true);
if (server != null) {
registerLimboServer(server);
plugin.getConfiguration().get(ConfigurationKeys.LIMBO).forEach((forced, server) -> {
var s = handle.getServer(server, true);
if (s != null) {
registerLimboServer(s, forced);
} else {
plugin.getLogger().warn("Limbo server/world " + limbo + " not found!");
plugin.getLogger().warn("Limbo server/world " + server + " not found!");
}
}
});

plugin.getConfiguration().get(ConfigurationKeys.LOBBY).forEach((forced, server) -> {
var s = handle.getServer(server, false);
Expand Down Expand Up @@ -143,15 +143,22 @@ public S chooseLobbyServer(@Nullable User user, P player, boolean remember) {
return chooseLobbyServerInternal(user, player, remember, null);
}

@Override
public S chooseLimboServer(User user, P player) {
public S chooseLimboServerInternal(@Nullable User user, P player) {
var event = new AuthenticLimboServerChooseEvent<>(user, player, plugin);

plugin.getEventProvider().fire(plugin.getEventTypes().limboServerChoose, event);

if (event.getServer() != null) return event.getServer();

return limboServers.stream()
var virtual = plugin.getPlatformHandle().getPlayersVirtualHost(player);

plugin.getLogger().debug("Virtual host for player " + plugin.getPlatformHandle().getUsernameForPlayer(player) + ": " + virtual);

var servers = virtual == null ? limboServers.get("root") : limboServers.get(virtual);

if (servers.isEmpty()) servers = limboServers.get("root");

return servers.stream()
.filter(server -> {
var ping = getLatestPing(server);

Expand All @@ -161,13 +168,18 @@ public S chooseLimboServer(User user, P player) {
.orElse(null);
}

@Override
public S chooseLimboServer(User user, P player) {
return chooseLimboServerInternal(user, player);
}

@Override
public Multimap<String, S> getLobbyServers() {
return lobbyServers;
}

@Override
public Collection<S> getLimboServers() {
public Multimap<String, S> getLimboServers() {
return limboServers;
}

Expand All @@ -178,8 +190,8 @@ public void registerLobbyServer(S server, String forcedHost) {
}

@Override
public void registerLimboServer(S server) {
public void registerLimboServer(S server, String forcedHost) {
getLatestPing(server);
limboServers.add(server);
limboServers.put(forcedHost, server);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ public void onTeleport(PlayerTeleportEvent event) {
if (inLimbo(event.getPlayer())) {
event.setCancelled(true);
} else {
if (serverHandler.getLimboServers().contains(event.getTo().getWorld()) && !event.getPlayer().hasPermission("librelogin.limbo.access")) {
if (serverHandler.getLimboServers().containsValue(event.getTo().getWorld()) && !event.getPlayer().hasPermission("librelogin.limbo.access")) {
event.setCancelled(true);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -155,8 +155,8 @@ public void chooseWorld(PlayerSpawnLocationEvent event) {
event.setSpawnLocation(bed == null ? world.value().getSpawnLocation() : bed);
}
//This is terrible, but should work
if (event.getPlayer().hasPlayedBefore() && !plugin.getConfiguration().get(ConfigurationKeys.LIMBO).contains(event.getSpawnLocation().getWorld().getName())) {
if (plugin.getConfiguration().get(ConfigurationKeys.LIMBO).contains(world.value().getName())) {
if (event.getPlayer().hasPlayedBefore() && !plugin.getConfiguration().get(ConfigurationKeys.LIMBO).containsValue(event.getSpawnLocation().getWorld().getName())) {
if (plugin.getConfiguration().get(ConfigurationKeys.LIMBO).containsValue(world.value().getName())) {
spawnLocationCache.put(event.getPlayer(), event.getSpawnLocation());
} else {
return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ public ProxyData getProxyData() {
.add("authors", plugin.getDescription().getAuthors())
.toString()
).toList(),
plugin.getServerHandler().getLimboServers().stream().map(this::fromWorld).toList(),
plugin.getServerHandler().getLimboServers().values().stream().map(this::fromWorld).toList(),
plugin.getServerHandler().getLobbyServers().values().stream().map(this::fromWorld).toList()
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ public void onCommand(CommandExecuteEvent event) {
@Subscribe(order = PostOrder.FIRST)
public void onServerConnect(ServerPreConnectEvent event) {
if (authorizationProvider.isAwaiting2FA(event.getPlayer())) {
if (!configuration.get(ConfigurationKeys.LIMBO).contains(event.getOriginalServer().getServerInfo().getName())) {
if (!configuration.get(ConfigurationKeys.LIMBO).containsValue(event.getOriginalServer().getServerInfo().getName())) {
event.setResult(ServerPreConnectEvent.ServerResult.denied());
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ public ProxyData getProxyData() {
.add("desc", plugin.getDescription().toString())
.toString()
).toList(),
plugin.getServerHandler().getLimboServers().stream().map(Object::toString).toList(),
plugin.getServerHandler().getLimboServers().values().stream().map(Object::toString).toList(),
plugin.getServerHandler().getLobbyServers().values().stream().map(Object::toString).toList()
);
}
Expand Down