Pretty close to compiling for the first time in ages. It wont be anywhere near working though.
This commit is contained in:
@@ -8,6 +8,7 @@ import java.io.InputStreamReader;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.Socket;
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Timer;
|
||||
@@ -16,6 +17,7 @@ import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
@@ -24,15 +26,14 @@ import net.md_5.bungee.api.ProxyServer;
|
||||
import net.md_5.bungee.api.ReconnectHandler;
|
||||
import net.md_5.bungee.api.TabListHandler;
|
||||
import net.md_5.bungee.api.config.ConfigurationAdapter;
|
||||
import net.md_5.bungee.api.config.ListenerInfo;
|
||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||
import net.md_5.bungee.api.connection.Server;
|
||||
import net.md_5.bungee.api.plugin.Plugin;
|
||||
import net.md_5.bungee.api.plugin.PluginManager;
|
||||
import net.md_5.bungee.command.*;
|
||||
import net.md_5.bungee.config.YamlConfig;
|
||||
import net.md_5.bungee.packet.DefinedPacket;
|
||||
import net.md_5.bungee.tablist.GlobalPingTabList;
|
||||
import net.md_5.bungee.tablist.GlobalTabList;
|
||||
import net.md_5.bungee.tablist.ServerUniqueTabList;
|
||||
|
||||
/**
|
||||
* Main BungeeCord proxy class.
|
||||
@@ -67,7 +68,7 @@ public class BungeeCord extends ProxyServer
|
||||
/**
|
||||
* Server socket listener.
|
||||
*/
|
||||
private ListenThread listener;
|
||||
private Collection<ListenThread> listeners = new HashSet<>();
|
||||
/**
|
||||
* Fully qualified connections.
|
||||
*/
|
||||
@@ -87,17 +88,18 @@ public class BungeeCord extends ProxyServer
|
||||
@Getter
|
||||
@Setter
|
||||
private ReconnectHandler reconnectHandler;
|
||||
@Getter
|
||||
@Setter
|
||||
private ConfigurationAdapter configurationAdapter = new YamlConfig();
|
||||
|
||||
|
||||
{
|
||||
getPluginManager().registerCommand(new CommandReload());
|
||||
getPluginManager().registerCommand(new CommandReload());
|
||||
getPluginManager().registerCommand(new CommandEnd());
|
||||
getPluginManager().registerCommand(new CommandList());
|
||||
getPluginManager().registerCommand(new CommandServer());
|
||||
getPluginManager().registerCommand(new CommandIP());
|
||||
getPluginManager().registerCommand(new CommandAlert());
|
||||
getPluginManager().registerCommand(new CommandMotd());
|
||||
getPluginManager().registerCommand(new CommandBungee());
|
||||
}
|
||||
|
||||
@@ -125,7 +127,7 @@ public class BungeeCord extends ProxyServer
|
||||
String line = br.readLine();
|
||||
if (line != null)
|
||||
{
|
||||
boolean handled = getInstance().getPluginManager().dispatchCommand(ConsoleCommandSender.instance, line);
|
||||
boolean handled = getInstance().getPluginManager().dispatchCommand(ConsoleCommandSender.getInstance(), line);
|
||||
if (!handled)
|
||||
{
|
||||
System.err.println("Command not found");
|
||||
@@ -149,24 +151,15 @@ public class BungeeCord extends ProxyServer
|
||||
plugins.mkdir();
|
||||
pluginManager.loadPlugins(plugins);
|
||||
|
||||
switch (config.tabList)
|
||||
for (ListenerInfo info : config.getListeners())
|
||||
{
|
||||
default:
|
||||
case 1:
|
||||
tabListHandler = new GlobalPingTabList();
|
||||
break;
|
||||
case 2:
|
||||
tabListHandler = new GlobalTabList();
|
||||
break;
|
||||
case 3:
|
||||
tabListHandler = new ServerUniqueTabList();
|
||||
break;
|
||||
InetSocketAddress addr = info.getHost();
|
||||
$().info("Listening on " + addr);
|
||||
ListenThread listener = new ListenThread(addr);
|
||||
listener.start();
|
||||
listeners.add(listener);
|
||||
}
|
||||
|
||||
InetSocketAddress addr = Util.getAddr(config.bindHost);
|
||||
listener = new ListenThread(addr);
|
||||
listener.start();
|
||||
|
||||
saveThread.scheduleAtFixedRate(new TimerTask()
|
||||
{
|
||||
@Override
|
||||
@@ -175,18 +168,11 @@ public class BungeeCord extends ProxyServer
|
||||
getReconnectHandler().save();
|
||||
}
|
||||
}, 0, TimeUnit.MINUTES.toMillis(5));
|
||||
$().info("Listening on " + addr);
|
||||
|
||||
if (config.metricsEnabled)
|
||||
{
|
||||
new Metrics().start();
|
||||
}
|
||||
new Metrics().start();
|
||||
}
|
||||
|
||||
/**
|
||||
* Destroy this proxy instance cleanly by kicking all users, saving the
|
||||
* configuration and closing all sockets.
|
||||
*/
|
||||
@Override
|
||||
public void stop()
|
||||
{
|
||||
this.isRunning = false;
|
||||
@@ -196,14 +182,17 @@ public class BungeeCord extends ProxyServer
|
||||
plugin.onDisable();
|
||||
}
|
||||
|
||||
$().info("Closing listen thread");
|
||||
try
|
||||
for (ListenThread listener : listeners)
|
||||
{
|
||||
listener.socket.close();
|
||||
listener.join();
|
||||
} catch (InterruptedException | IOException ex)
|
||||
{
|
||||
$().severe("Could not close listen thread");
|
||||
$().log(Level.INFO, "Closing listen thread {0}", listener.socket);
|
||||
try
|
||||
{
|
||||
listener.socket.close();
|
||||
listener.join();
|
||||
} catch (InterruptedException | IOException ex)
|
||||
{
|
||||
$().severe("Could not close listen thread");
|
||||
}
|
||||
}
|
||||
|
||||
$().info("Closing pending connections");
|
||||
@@ -216,6 +205,7 @@ public class BungeeCord extends ProxyServer
|
||||
}
|
||||
|
||||
$().info("Saving reconnect locations");
|
||||
reconnectHandler.save();
|
||||
saveThread.cancel();
|
||||
|
||||
$().info("Thank you and goodbye");
|
||||
@@ -231,7 +221,7 @@ public class BungeeCord extends ProxyServer
|
||||
*/
|
||||
public void setSocketOptions(Socket socket) throws IOException
|
||||
{
|
||||
socket.setSoTimeout(config.timeout);
|
||||
socket.setSoTimeout(config.getTimeout());
|
||||
socket.setTrafficClass(0x18);
|
||||
socket.setTcpNoDelay(true);
|
||||
}
|
||||
@@ -283,18 +273,7 @@ public class BungeeCord extends ProxyServer
|
||||
@Override
|
||||
public Server getServer(String name)
|
||||
{
|
||||
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<Server> getServers()
|
||||
{
|
||||
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setConfigurationAdapter(ConfigurationAdapter adapter)
|
||||
{
|
||||
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||
List<UserConnection> users = connectionsByServer.get(name);
|
||||
return (users != null && !users.isEmpty()) ? users.get(0).getServer() : null;
|
||||
}
|
||||
}
|
||||
|
@@ -18,8 +18,8 @@ import java.util.concurrent.ConcurrentLinkedQueue;
|
||||
import lombok.Getter;
|
||||
import lombok.Synchronized;
|
||||
import net.md_5.bungee.api.ProxyServer;
|
||||
import net.md_5.bungee.api.config.ServerInfo;
|
||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||
import net.md_5.bungee.api.connection.Server;
|
||||
import net.md_5.bungee.api.event.ChatEvent;
|
||||
import net.md_5.bungee.api.event.PluginMessageEvent;
|
||||
import net.md_5.bungee.api.event.ServerConnectEvent;
|
||||
@@ -56,8 +56,6 @@ public class UserConnection extends GenericConnection implements ProxiedPlayer
|
||||
name = handshake.username;
|
||||
displayName = handshake.username;
|
||||
this.loginPackets = loginPackets;
|
||||
BungeeCord.instance.connections.put(name, this);
|
||||
BungeeCord.instance.tabListHandler.onJoin(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -68,17 +66,21 @@ public class UserConnection extends GenericConnection implements ProxiedPlayer
|
||||
ProxyServer.getInstance().getTabListHandler().onConnect(this);
|
||||
}
|
||||
|
||||
public void connect(Server server)
|
||||
@Override
|
||||
public void connect(ServerInfo target)
|
||||
{
|
||||
ServerConnectEvent event = new ServerConnectEvent(this, server);
|
||||
BungeeCord.getInstance().getPluginManager().callEvent(event);
|
||||
InetSocketAddress addr = BungeeCord.instance.config.getServer(event.getNewServer());
|
||||
connect(server, addr);
|
||||
}
|
||||
if (server == null)
|
||||
{
|
||||
// First join
|
||||
ProxyServer.getInstance().getPlayers().add(this);
|
||||
ProxyServer.getInstance().getTabListHandler().onConnect(this);
|
||||
}
|
||||
|
||||
private void connect(String name, InetSocketAddress serverAddr)
|
||||
{
|
||||
BungeeCord.instance.tabListHandler.onServerChange(this);
|
||||
ServerConnectEvent event = new ServerConnectEvent(this, target);
|
||||
BungeeCord.getInstance().getPluginManager().callEvent(event);
|
||||
target = event.getTarget(); // Update in case the event changed target
|
||||
|
||||
ProxyServer.getInstance().getTabListHandler().onServerChange(this);
|
||||
try
|
||||
{
|
||||
reconnecting = true;
|
||||
@@ -89,9 +91,10 @@ public class UserConnection extends GenericConnection implements ProxiedPlayer
|
||||
out.write(new Packet9Respawn((byte) -1, (byte) 0, (byte) 0, (short) 256, "DEFAULT").getPacket());
|
||||
}
|
||||
|
||||
ServerConnection newServer = ServerConnection.connect(this, name, serverAddr, handshake, true);
|
||||
ServerConnection newServer = ServerConnection.connect(this, name, target.getAddress(), handshake, true);
|
||||
if (server == null)
|
||||
{
|
||||
// Once again, first connection
|
||||
clientEntityId = newServer.loginPacket.entityId;
|
||||
serverEntityId = newServer.loginPacket.entityId;
|
||||
out.write(newServer.loginPacket.getPacket());
|
||||
@@ -113,27 +116,18 @@ public class UserConnection extends GenericConnection implements ProxiedPlayer
|
||||
serverEntityId = login.entityId;
|
||||
out.write(new Packet9Respawn(login.dimension, login.difficulty, login.gameMode, (short) 256, login.levelType).getPacket());
|
||||
}
|
||||
|
||||
// Reconnect process has finished, lets get the player moving again
|
||||
reconnecting = false;
|
||||
downBridge = new DownstreamBridge();
|
||||
if (server != null)
|
||||
{
|
||||
List<UserConnection> conns = BungeeCord.instance.connectionsByServer.get(server.name);
|
||||
if (conns != null)
|
||||
{
|
||||
conns.remove(this);
|
||||
}
|
||||
}
|
||||
|
||||
// Remove from the old by server list
|
||||
server.getInfo().removePlayer(this);
|
||||
// Add to new
|
||||
target.addPlayer(this);
|
||||
|
||||
// Start the bridges and move on
|
||||
server = newServer;
|
||||
List<UserConnection> conns = BungeeCord.instance.connectionsByServer.get(server.name);
|
||||
if (conns == null)
|
||||
{
|
||||
conns = new ArrayList<>();
|
||||
BungeeCord.instance.connectionsByServer.put(server.name, conns);
|
||||
}
|
||||
if (!conns.contains(this))
|
||||
{
|
||||
conns.add(this);
|
||||
}
|
||||
downBridge = new DownstreamBridge();
|
||||
downBridge.start();
|
||||
} catch (KickException ex)
|
||||
{
|
||||
@@ -147,18 +141,9 @@ public class UserConnection extends GenericConnection implements ProxiedPlayer
|
||||
|
||||
private void destroySelf(String reason)
|
||||
{
|
||||
if (BungeeCord.instance.isRunning)
|
||||
{
|
||||
BungeeCord.instance.connections.remove(name);
|
||||
if (server != null)
|
||||
{
|
||||
List<UserConnection> conns = BungeeCord.instance.connectionsByServer.get(server.name);
|
||||
if (conns != null)
|
||||
{
|
||||
conns.remove(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
server.getInfo().removePlayer(this);
|
||||
ProxyServer.getInstance().getPlayers().remove(this);
|
||||
|
||||
disconnect(reason);
|
||||
if (server != null)
|
||||
{
|
||||
@@ -193,14 +178,14 @@ public class UserConnection extends GenericConnection implements ProxiedPlayer
|
||||
}
|
||||
|
||||
@Override
|
||||
@Synchronized(value = "permMutex")
|
||||
@Synchronized("permMutex")
|
||||
public Collection<String> getGroups()
|
||||
{
|
||||
return Collections.unmodifiableCollection(groups);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Synchronized(value = "permMutex")
|
||||
@Synchronized("permMutex")
|
||||
public void addGroups(String... groups)
|
||||
{
|
||||
for (String group : groups)
|
||||
@@ -214,7 +199,7 @@ public class UserConnection extends GenericConnection implements ProxiedPlayer
|
||||
}
|
||||
|
||||
@Override
|
||||
@Synchronized(value = "permMutex")
|
||||
@Synchronized( "permMutex")
|
||||
public void removeGroups(String... groups)
|
||||
{
|
||||
for (String group : groups)
|
||||
@@ -228,7 +213,7 @@ public class UserConnection extends GenericConnection implements ProxiedPlayer
|
||||
}
|
||||
|
||||
@Override
|
||||
@Synchronized(value = "permMutex")
|
||||
@Synchronized("permMutex")
|
||||
public boolean hasPermission(String permission)
|
||||
{
|
||||
Boolean val = permissions.get(permission);
|
||||
@@ -236,7 +221,7 @@ public class UserConnection extends GenericConnection implements ProxiedPlayer
|
||||
}
|
||||
|
||||
@Override
|
||||
@Synchronized(value = "permMutex")
|
||||
@Synchronized( "permMutex")
|
||||
public void setPermission(String permission, boolean value)
|
||||
{
|
||||
permissions.put(permission, value);
|
||||
@@ -387,7 +372,7 @@ public class UserConnection extends GenericConnection implements ProxiedPlayer
|
||||
in.readFully(data);
|
||||
break;
|
||||
case "BungeeCord::Connect":
|
||||
Server server = ProxyServer.getInstance().getServer(in.readUTF());
|
||||
ServerInfo server = ProxyServer.getInstance().getConfigurationAdapter().getServers().get(in.readUTF());
|
||||
if (server != null)
|
||||
{
|
||||
connect(server);
|
||||
|
@@ -1,9 +1,10 @@
|
||||
package net.md_5.bungee.command;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
import net.md_5.bungee.api.ChatColor;
|
||||
import net.md_5.bungee.api.CommandSender;
|
||||
import net.md_5.bungee.api.ProxyServer;
|
||||
import net.md_5.bungee.api.config.ServerInfo;
|
||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||
import net.md_5.bungee.api.connection.Server;
|
||||
import net.md_5.bungee.api.plugin.Command;
|
||||
@@ -27,20 +28,20 @@ public class CommandServer extends Command
|
||||
return;
|
||||
}
|
||||
ProxiedPlayer player = (ProxiedPlayer) sender;
|
||||
Collection<Server> servers = ProxyServer.getInstance().getServers();
|
||||
Map<String, ServerInfo> servers = ProxyServer.getInstance().getConfigurationAdapter().getServers();
|
||||
if (args.length == 0)
|
||||
{
|
||||
StringBuilder serverList = new StringBuilder();
|
||||
for (Server server : servers)
|
||||
for (String server : servers.keySet())
|
||||
{
|
||||
serverList.append(server.getInfo().getName());
|
||||
serverList.append(server);
|
||||
serverList.append(", ");
|
||||
}
|
||||
serverList.setLength(serverList.length() - 2);
|
||||
player.sendMessage(ChatColor.GOLD + "You may connect to the following servers at this time: " + serverList.toString());
|
||||
} else
|
||||
{
|
||||
Server server = ProxyServer.getInstance().getServer(args[0]);
|
||||
ServerInfo server = servers.get(args[0]);
|
||||
if (server == null)
|
||||
{
|
||||
player.sendMessage(ChatColor.RED + "The specified server does not exist");
|
||||
|
Reference in New Issue
Block a user