Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

v0.8.2 #76

Merged
merged 7 commits into from
Oct 7, 2024
Merged
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
2 changes: 1 addition & 1 deletion plugin/gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ org.gradle.jvmargs = -Xmx4G
java_version = 17

# Plugin Properties
plugin_version = 0.8.1
plugin_version = 0.8.2
maven_group = group.aelysium.rustyconnector
archives_base_name = rustyconnector
config_version = 6
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
package group.aelysium.rustyconnector.toolkit.velocity.config;

import group.aelysium.rustyconnector.toolkit.velocity.whitelist.IWhitelistPlayerFilter;

import java.util.List;

public interface WhitelistConfig {
boolean getUse_players();
List<Object> getPlayers();
List<IWhitelistPlayerFilter> getPlayers();
boolean getUse_permission();
boolean getUse_country();
List<String> getCountries();
String getMessage();
boolean isStrict();
boolean isInverted();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ protected void register() throws IllegalStateException {
Tinder api = Tinder.get();
PluginLogger logger = api.logger();

WebhookEventManager.clear();

Boolean enabled = IYAML.getValue(this.data, "enabled", Boolean.class);
if(!enabled) return;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,23 +6,24 @@
import group.aelysium.rustyconnector.plugin.velocity.central.Tinder;
import group.aelysium.rustyconnector.plugin.velocity.lib.config.ConfigService;
import group.aelysium.rustyconnector.plugin.velocity.lib.lang.ProxyLang;
import group.aelysium.rustyconnector.plugin.velocity.lib.whitelist.WhitelistPlayerFilter;
import group.aelysium.rustyconnector.toolkit.core.config.IConfigService;
import group.aelysium.rustyconnector.toolkit.core.config.IYAML;
import group.aelysium.rustyconnector.toolkit.core.lang.LangFileMappings;
import group.aelysium.rustyconnector.toolkit.velocity.whitelist.IWhitelistPlayerFilter;
import net.kyori.adventure.text.format.NamedTextColor;
import org.spongepowered.configurate.serialize.SerializationException;

import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

public class WhitelistConfig extends YAML implements group.aelysium.rustyconnector.toolkit.velocity.config.WhitelistConfig {
private boolean use_players = false;
private List<Object> players = new ArrayList<>();
private final List<IWhitelistPlayerFilter> players = new ArrayList<>();

private boolean use_permission = false;

private boolean use_country = false;
private List<String> countries = new ArrayList<>();
private String message = "You aren't whitelisted on this server!";
private boolean strict = false;
private boolean inverted = false;
Expand All @@ -31,22 +32,14 @@ public boolean getUse_players() {
return use_players;
}

public List<Object> getPlayers() {
public List<IWhitelistPlayerFilter> getPlayers() {
return players;
}

public boolean getUse_permission() {
return use_permission;
}

public boolean getUse_country() {
return use_country;
}

public List<String> getCountries() {
return countries;
}

public String getMessage() {
return message;
}
Expand All @@ -71,20 +64,28 @@ protected void register() throws IllegalStateException {
PluginLogger logger = Tinder.get().logger();

this.use_players = IYAML.getValue(this.data,"use-players",Boolean.class);

try {
this.players = (IYAML.getValue(this.data,"players",List.class));
} catch (ClassCastException e) {
IYAML.get(this.data,"players").childrenList().forEach(e -> {
try {
String username = e.node("username").get(String.class);
String uuid = e.node("uuid").get(String.class);
String ip = e.node("ip").get(String.class);
new WhitelistPlayerFilter(
username,
uuid == null ? null : UUID.fromString(uuid),
ip
);
} catch (SerializationException ex) {
throw new RuntimeException(ex);
}
});
} catch (Exception e) {
throw new IllegalStateException("The node [players] in "+this.name()+" is invalid! Make sure you are using the correct type of data!");
}

this.use_permission = IYAML.getValue(this.data,"use-permission",Boolean.class);

this.use_country = IYAML.getValue(this.data,"use-country",Boolean.class);
if(this.use_country)
ProxyLang.BOXED_MESSAGE_COLORED.send(logger, "RustyConnector does not currently support country codes in whitelists. Setting `use-country` to false.", NamedTextColor.YELLOW);
this.use_country = false;
this.countries = new ArrayList<>();

this.message = IYAML.getValue(data,"message",String.class);
if(this.message.equalsIgnoreCase(""))
throw new IllegalStateException("Whitelist kick messages cannot be empty!");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import java.util.List;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;

import static group.aelysium.rustyconnector.toolkit.velocity.family.Metadata.SCALAR_FAMILY_META;
import static group.aelysium.rustyconnector.toolkit.velocity.util.DependencyInjector.inject;
Expand Down Expand Up @@ -134,7 +135,12 @@ public Request connect(IPlayer player) {
return request;
}

serverResponse = Optional.of(server.connect(player));
Request r = server.connect(player);
serverResponse = Optional.of(r);
try {
if (r.result().get(10, TimeUnit.SECONDS).connected()) break;
} catch (Exception ignore) {}

this.loadBalancer.forceIterate();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.concurrent.atomic.AtomicInteger;

public class MCLoader implements IMCLoader {
Expand Down Expand Up @@ -277,15 +278,25 @@ private PlayerConnectable.Request internalConnect(IPlayer player) {

ConnectionRequestBuilder connection = player.resolve().orElseThrow().createConnectionRequest(this.registeredServer());
try {
ConnectionRequestBuilder.Result connectionResult = connection.connect().orTimeout(5, TimeUnit.SECONDS).get();
ConnectionRequestBuilder.Result connectionResult = connection.connect().get(5, TimeUnit.SECONDS);

if (!connectionResult.isSuccessful()) throw new NoOutputException();
if (!connectionResult.isSuccessful()) {
result.complete(ConnectionResult.failed(connectionResult.getReasonComponent().orElse(Component.text("An internal error occurred while establishing this connection!"))));
return request;
}

this.playerCount.incrementAndGet();
result.complete(ConnectionResult.success(Component.text("You successfully connected to the server!"), this));
return request;
} catch (Exception ignore) {}
} catch (Exception ignore) {}
} catch (TimeoutException e) {
result.complete(ConnectionResult.failed(Component.text("The connection timed out.")));
return request;
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}

result.complete(ConnectionResult.failed(Component.text("Unable to connect you to the server!")));
return request;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,11 @@ public class WebhookEventManager {
private static Map<WebhookAlertFlag, List<DiscordWebhook>> proxyListeners = new HashMap<>();
private static Map<WebhookAlertFlag, Map<String, List<DiscordWebhook>>> familyListeners = new HashMap<>();

public static void clear() {
proxyListeners.clear();
familyListeners.clear();
}

/**
* Registers a webhook to the proxy.
* @param webhook The webhook to register.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import group.aelysium.rustyconnector.plugin.velocity.central.Tinder;
import group.aelysium.rustyconnector.plugin.velocity.lib.config.configs.WhitelistConfig;
import group.aelysium.rustyconnector.plugin.velocity.lib.Permission;
import group.aelysium.rustyconnector.toolkit.velocity.whitelist.IWhitelistPlayerFilter;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;

Expand All @@ -20,7 +21,7 @@ public class Whitelist implements IWhitelist {
private final String message;
private final String name;
private final String permission;
private final List<WhitelistPlayerFilter> playerFilters = new ArrayList<>();
private final List<IWhitelistPlayerFilter> playerFilters = new ArrayList<>();

private final boolean usePlayers;
private final boolean usePermission;
Expand Down Expand Up @@ -53,7 +54,7 @@ public boolean inverted() {
return this.inverted;
}

public List<WhitelistPlayerFilter> playerFilters() {
public List<IWhitelistPlayerFilter> playerFilters() {
return this.playerFilters;
}

Expand Down Expand Up @@ -125,16 +126,8 @@ public static Reference init(DependencyInjector.DI4<List<Component>, LangService
whitelistConfig.isStrict(),
whitelistConfig.isInverted()
);
if(whitelistConfig.getUse_players()) {
List<Object> players = whitelistConfig.getPlayers();
Gson gson = new Gson();
players.forEach(entry -> {
String json = gson.toJson(entry);
WhitelistPlayerFilter player = gson.fromJson(json, WhitelistPlayerFilter.class);

whitelist.playerFilters().add(player);
});
}
if(whitelistConfig.getUse_players())
whitelist.playerFilters.addAll(whitelistConfig.getPlayers());

bootOutput.add(Component.text(" | Registered whitelist: "+whitelistName, NamedTextColor.YELLOW));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public WhitelistPlayerFilter(String username, UUID uuid, String ip) {
}

public static boolean validate(Whitelist whitelist, IPlayer playerToValidate) {
WhitelistPlayerFilter player = whitelist.playerFilters().stream()
IWhitelistPlayerFilter player = whitelist.playerFilters().stream()
.filter(whitelistPlayerFilter -> whitelistPlayerFilter.username().equals(playerToValidate.username()))
.findAny().orElse(null);
if(player == null) return false;
Expand Down
Loading