package net.ME1312.SubServers.Proxy; import net.ME1312.SubServers.Proxy.Host.Server; import net.ME1312.SubServers.Proxy.Host.Host; import net.ME1312.SubServers.Proxy.Host.SubServer; import net.ME1312.SubServers.Proxy.Libraries.UniversalFile; import net.ME1312.SubServers.Proxy.Libraries.Version.Version; import net.ME1312.SubServers.Proxy.Network.NetworkManager; import java.util.Map; import java.util.TreeMap; /** * SubAPI Class * * @author ME1312 */ public final class SubAPI { private SubPlugin plugin; private static SubAPI api; protected SubAPI(SubPlugin plugin) { this.plugin = plugin; api = this; } /** * Gets the SubAPI Methods * * @return SubAPI */ public static SubAPI getInstance() { return api; } /** * Gets the SubServers Internals * * @deprecated Use SubAPI Methods when available * @return SubPlugin Internals */ @Deprecated public SubPlugin getInternals() { return plugin; } /** * Gets the SubData Network Manager * * @return SubData Network Manager */ public NetworkManager getSubDataNetwork() { return plugin.subdata; } /** * Adds a Driver for Hosts * * @param driver Driver to add * @param handle Handle to Bind */ public void addHostDriver(Class driver, String handle) { if (plugin.hostDrivers.keySet().contains(handle.toLowerCase())) throw new IllegalStateException("Driver already exists: " + handle); plugin.hostDrivers.put(handle, driver); } /** * Gets the Hosts * * @return Host Map */ public Map getHosts() { return new TreeMap<>(plugin.hosts); } /** * Gets a Host * * @param name Host name * @return a Host */ public Host getHost(String name) { return getHosts().get(name.toLowerCase()); } /** * Gets the Servers (including SubServers) * * @return Server Map */ public Map getServers() { TreeMap servers = new TreeMap(); servers.putAll(plugin.exServers); for (Host host : plugin.hosts.values()) { servers.putAll(host.getSubServers()); } return servers; } /** * Gets a Server * * @param name Server name * @return a Server */ public Server getServer(String name) { return getServers().get(name.toLowerCase()); } /** * Gets the SubServers * * @return SubServer Map */ public Map getSubServers() { TreeMap servers = new TreeMap(); for (Host host : plugin.hosts.values()) { servers.putAll(host.getSubServers()); } return servers; } /** * Gets a SubServer * * @param name SubServer name * @return a SubServer */ public SubServer getSubServer(String name) { return getSubServers().get(name.toLowerCase()); } /** * Gets the Runtime Directory * * @return Directory */ public UniversalFile getRuntimeDirectory() { return plugin.dir; } /** * Gets the SubServers Version * * @return SubServers Version */ public Version getWrapperVersion() { return plugin.version; } }