Skip to content

Commit

Permalink
BungeeCommon API
Browse files Browse the repository at this point in the history
  • Loading branch information
ME1312 committed Nov 14, 2020
1 parent 96a3cf7 commit 34b406e
Show file tree
Hide file tree
Showing 42 changed files with 442 additions and 795 deletions.
67 changes: 67 additions & 0 deletions SubServers.Bungee/common/pom.xml
@@ -0,0 +1,67 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>net.ME1312.SubServers</groupId>
<artifactId>SubServers.Bungee.Common</artifactId>
<version>-PLACEHOLDER</version>
<packaging>jar</packaging>

<repositories>
<repository>
<id>md_5-repo</id>
<url>http://repo.md-5.net/content/repositories/snapshots/</url>
</repository>
<repository>
<id>me1312-repo</id>
<url>https://dev.me1312.net/maven</url>
</repository>
</repositories>

<dependencies>
<dependency>
<groupId>net.md_5</groupId>
<artifactId>bungeecord-internal</artifactId>
<version>1.15-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>net.ME1312.Galaxi</groupId>
<artifactId>GalaxiUtil</artifactId>
<version>20w33a</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>net.ME1312.Galaxi</groupId>
<artifactId>GalaxiEngine</artifactId>
<version>20w33a</version>
<scope>provided</scope>
</dependency>
</dependencies>

<build>
<directory>../../out/compile/target/SubServers.Bungee.Common</directory>
<sourceDirectory>src</sourceDirectory>
<resources>
<resource>
<directory>src</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
@@ -0,0 +1,126 @@
package net.ME1312.SubServers.Bungee;

import net.ME1312.Galaxi.Library.UniversalFile;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.Galaxi.Library.Version.Version;
import net.ME1312.SubServers.Bungee.Library.Compatibility.RemotePlayer;
import net.md_5.bungee.api.ProxyServer;

import java.util.*;

/**
* SubAPI BungeeCord Common Class
*/
public interface BungeeAPI {

/**
* Gets the SubAPI BungeeCord Common Methods
*
* @return SubAPI BungeeCord Common
*/
static BungeeAPI getInstance() {
return ((BungeeCommon) ProxyServer.getInstance()).api.run();
}

/**
* Adds a SubAPI Listener
*
* @param enable An Event that will be called when SubAPI is ready
* @param disable An Event that will be called before SubAPI is disabled (your plugin should reset it's values in case this is a hard-reset instead of a shutdown)
*/
void addListener(Runnable enable, Runnable disable);

/**
* Get the number of players on this network across all known proxies
*
* @return Remote Player Collection
*/
default int getRemotePlayerCount() {
return getGlobalPlayers().size();
}

/**
* Get players on this network across all known proxies
*
* @return Remote Player Collection
*/
Map<UUID, ? extends RemotePlayer> getGlobalPlayers();

/**
* Get a player on this network by searching across all known proxies
*
* @param name Player name
* @return Remote Player
*/
RemotePlayer getGlobalPlayer(String name);

/**
* Get a player on this network by searching across all known proxies
*
* @param id Player UUID
* @return Remote Player
*/
RemotePlayer getGlobalPlayer(UUID id);

/**
* Gets the current SubServers Lang Channels
*
* @return SubServers Lang Channel list
*/
Collection<String> getLangChannels();

/**
* Gets values from the SubServers Lang
*
* @param channel Lang Channel
* @return Lang Value
*/
Map<String, String> getLang(String channel);

/**
* Gets a value from the SubServers Lang
*
* @param channel Lang Channel
* @param key Key
* @return Lang Values
*/
default String getLang(String channel, String key) {
if (Util.isNull(channel, key)) throw new NullPointerException();
return getLang(channel).get(key);
}

/**
* Gets the Runtime Directory
*
* @return Directory
*/
UniversalFile getRuntimeDirectory();

/**
* Gets the SubServers Version
*
* @return SubServers Version
*/
Version getWrapperVersion();

/**
* Gets the SubServers Build Signature
*
* @return SubServers Build Signature (or null if unsigned)
*/
Version getWrapperBuild();

/**
* Gets the BungeeCord Version
*
* @return BungeeCord Version
*/
Version getProxyVersion();

/**
* Get an array of compatible Minecraft Versions
*
* @return Minecraft Versions
*/
Version[] getGameVersion();
}
@@ -0,0 +1,33 @@
package net.ME1312.SubServers.Bungee;

import net.ME1312.Galaxi.Library.Callback.ReturnRunnable;
import net.md_5.bungee.BungeeCord;
import net.md_5.bungee.api.config.ServerInfo;

import java.io.IOException;
import java.util.Map;

/**
* BungeeCord Common Layout Class
*/
public abstract class BungeeCommon extends BungeeCord {
final ReturnRunnable<BungeeAPI> api;

protected BungeeCommon(ReturnRunnable<BungeeAPI> api) throws IOException {
this.api = api;
}

/**
* Get the name from BungeeCord's original signature (for determining which fork is being used)
*
* @return BungeeCord Software Name
*/
public abstract String getBungeeName();

/**
* Waterfall's getServersCopy()
*
* @return Server Map Copy
*/
public abstract Map<String, ServerInfo> getServersCopy();
}
@@ -1,7 +1,7 @@
package net.ME1312.SubServers.Bungee.Library.Compatibility;

import net.ME1312.Galaxi.Library.Util;
import net.ME1312.SubServers.Bungee.SubProxy;
import net.md_5.bungee.api.ProxyServer;

import java.util.HashMap;
import java.util.logging.Handler;
Expand All @@ -12,7 +12,6 @@
*/
public class Logger {
private static final HashMap<String, java.util.logging.Logger> existing = new HashMap<String, java.util.logging.Logger>();
private static SubProxy plugin;

/**
* Get a logger
Expand All @@ -35,7 +34,7 @@ public static java.util.logging.Logger get(String prefix) {
@Override
public void publish(LogRecord record) {
if (open)
plugin.getLogger().log(record.getLevel(), prefix + " > " + record.getMessage(), record.getParameters());
ProxyServer.getInstance().getLogger().log(record.getLevel(), prefix + " > " + record.getMessage(), record.getParameters());
}

@Override
Expand Down
@@ -0,0 +1,45 @@
package net.ME1312.SubServers.Bungee.Library.Compatibility;

import java.net.InetSocketAddress;
import java.util.UUID;

/**
* RemotePlayer Layout Class
*/
public interface RemotePlayer {

/**
* Get the UUID of this player.
*
* @return the UUID
*/
UUID getUniqueId();

/**
* Get the unique name of this player.
*
* @return the players username
*/
String getName();

/**
* Gets the remote address of this connection.
*
* @return the remote address
*/
InetSocketAddress getAddress();

/**
* Gets the name of the proxy this player is connected to.
*
* @return the name of the proxy this player is connected to
*/
String getProxyName();

/**
* Gets the name of the server this player is connected to.
*
* @return the name of the server this player is connected to
*/
String getServerName();
}
Expand Up @@ -2,10 +2,7 @@

import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.SubServers.Bungee.Host.Server;
import net.ME1312.SubServers.Bungee.Host.SubServer;
import net.ME1312.SubServers.Bungee.SubAPI;
import net.ME1312.SubServers.Bungee.SubProxy;
import net.ME1312.SubServers.Bungee.BungeeCommon;
import net.md_5.bungee.UserConnection;
import net.md_5.bungee.api.AbstractReconnectHandler;
import net.md_5.bungee.api.ProxyServer;
Expand All @@ -25,9 +22,11 @@
public class SmartFallback implements ReconnectHandler {
private static List<FallbackInspector> inspectors = new CopyOnWriteArrayList<FallbackInspector>();
private static ReconnectHandler reconnect;
public static boolean dns_forward = false;

public SmartFallback(SubProxy proxy) {
if (reconnect == null && proxy.config.get().getMap("Settings").getMap("Smart-Fallback", new ObjectMap<>()).getBoolean("Reconnect", false))
public SmartFallback(ObjectMap<String> settings) {
dns_forward = settings.getBoolean("DNS-Forward", false);
if (reconnect == null && settings.getBoolean("Reconnect", false))
reconnect = Util.getDespiteException(() -> Util.reflect(ProxyServer.getInstance().getPluginManager().getPlugin("reconnect_yaml").getClass().getClassLoader().loadClass("net.md_5.bungee.module.reconnect.yaml.YamlReconnectHandler").getConstructor()), null);
}

Expand Down Expand Up @@ -81,12 +80,12 @@ public static ServerInfo getForcedHost(PendingConnection connection) {
* @return DNS Forward Server
*/
public static ServerInfo getDNS(PendingConnection connection) {
if (connection.getVirtualHost() == null || !((SubProxy) ProxyServer.getInstance()).config.get().getMap("Settings").getMap("Smart-Fallback", new ObjectMap<>()).getBoolean("DNS-Forward", false)) {
if (connection.getVirtualHost() == null || !dns_forward) {
return null;
} else {
Map.Entry<String, ServerInfo> server = null;
String dns = connection.getVirtualHost().getHostString().toLowerCase();
for (Map.Entry<String, ServerInfo> s : ((SubProxy) ProxyServer.getInstance()).getServersCopy().entrySet()) {
for (Map.Entry<String, ServerInfo> s : ((BungeeCommon) ProxyServer.getInstance()).getServersCopy().entrySet()) {
if (dns.startsWith(s.getKey().toLowerCase() + '.'))
if (server == null || server.getKey().length() < s.getKey().length())
server = s;
Expand Down Expand Up @@ -133,22 +132,10 @@ public static Map<String, ServerInfo> getFallbackServers(ListenerInfo listener)
public static Map<String, ServerInfo> getFallbackServers(ListenerInfo listener, ProxiedPlayer player) {
TreeMap<Double, List<ServerInfo>> score = new TreeMap<Double, List<ServerInfo>>(Collections.reverseOrder());
for (String name : listener.getServerPriority()) {
ServerInfo server = SubAPI.getInstance().getServer(name.toLowerCase());
if (server == null) server = ProxyServer.getInstance().getServerInfo(name);
ServerInfo server = ProxyServer.getInstance().getServerInfo(name);
if (server != null) {
boolean valid = true;
double confidence = 0;
if (server instanceof Server) {
if (!((Server) server).isHidden()) confidence++;
if (!((Server) server).isRestricted()) confidence++;
if (((Server) server).getSubData()[0] != null) confidence++;

if (player != null) {
if (((Server) server).canAccess(player)) confidence++;
}
} if (server instanceof SubServer) {
if (!((SubServer) server).isRunning()) valid = false;
}

List<FallbackInspector> inspectors = new ArrayList<FallbackInspector>();
inspectors.addAll(SmartFallback.inspectors);
Expand Down
13 changes: 12 additions & 1 deletion SubServers.Bungee/pom.xml
Expand Up @@ -40,10 +40,17 @@
<version>20w33a</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>net.ME1312.SubServers</groupId>
<artifactId>SubServers.Bungee.Common</artifactId>
<version>-PLACEHOLDER</version>
<scope>compile</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>net.ME1312.SubData</groupId>
<artifactId>Server</artifactId>
<version>20w46a</version>
<version>20w46b</version>
<scope>compile</scope>
<optional>true</optional>
</dependency>
Expand Down Expand Up @@ -166,6 +173,10 @@
<link>https://dev.me1312.net/jenkins/job/SubData/javadoc/Server/</link>
<link>https://ci.md-5.net/job/BungeeCord/ws/api/target/apidocs/</link>
</links>
<includeDependencySources>true</includeDependencySources>
<dependencySourceIncludes>
<dependencySourceInclude>net.ME1312.SubServers:SubServers.Bungee.Common:*</dependencySourceInclude>
</dependencySourceIncludes>
</configuration>
</execution>
</executions>
Expand Down

0 comments on commit 34b406e

Please sign in to comment.