2006Scape Changes

Remove Need For Server JSON
Remove "servers" Folder
Remove Some Unused Methods
This commit is contained in:
Dark98
2021-10-25 00:53:38 +01:00
parent 8b3b90d5e7
commit 9e7cfdc5c0
15 changed files with 49 additions and 590 deletions
+5 -5
View File
@@ -1,14 +1,17 @@
package org.parabot; package org.parabot;
import org.parabot.core.Configuration;
import org.parabot.core.Context; import org.parabot.core.Context;
import org.parabot.core.Core; import org.parabot.core.Core;
import org.parabot.core.Directories; import org.parabot.core.Directories;
import org.parabot.core.desc.ServerDescription;
import org.parabot.core.network.NetworkInterface; import org.parabot.core.network.NetworkInterface;
import org.parabot.core.network.proxy.ProxySocket; import org.parabot.core.network.proxy.ProxySocket;
import org.parabot.core.network.proxy.ProxyType; import org.parabot.core.network.proxy.ProxyType;
import org.parabot.core.ui.BotUI; import org.parabot.core.ui.BotUI;
import org.parabot.core.ui.ServerSelector; import org.parabot.core.ui.ServerSelector;
import org.parabot.core.ui.utils.UILog; import org.parabot.core.ui.utils.UILog;
import org.parabot.environment.Environment;
import java.io.File; import java.io.File;
@@ -45,9 +48,9 @@ public final class Landing {
t.printStackTrace(); t.printStackTrace();
} }
Core.verbose("Starting 2006Scape..."); Core.verbose("Starting " + Configuration.serverName + "...");
ServerSelector.initServer = "2006Scape";
new BotUI(); new BotUI();
} }
private static void parseArgs(String... args) { private static void parseArgs(String... args) {
@@ -70,9 +73,6 @@ public final class Landing {
case "-scriptsbin": case "-scriptsbin":
Directories.setScriptCompiledDirectory(new File(args[++i])); Directories.setScriptCompiledDirectory(new File(args[++i]));
break; break;
case "-serversbin":
Directories.setServerCompiledDirectory(new File(args[++i]));
break;
case "-clearcache": case "-clearcache":
Directories.clearCache(); Directories.clearCache();
break; break;
@@ -39,7 +39,6 @@ public class Directories {
cached.put("Compiled", new File(cached.get("Root"), "/2006Scape/scripts/compiled/")); cached.put("Compiled", new File(cached.get("Root"), "/2006Scape/scripts/compiled/"));
cached.put("Resources", new File(cached.get("Root"), "/2006Scape/scripts/resources/")); cached.put("Resources", new File(cached.get("Root"), "/2006Scape/scripts/resources/"));
cached.put("Settings", new File(cached.get("Root"), "/2006Scape/settings/")); cached.put("Settings", new File(cached.get("Root"), "/2006Scape/settings/"));
cached.put("Servers", new File(cached.get("Root"), "/2006Scape/servers/"));
cached.put("Cache", new File(cached.get("Root"), "/2006Scape/cache/")); cached.put("Cache", new File(cached.get("Root"), "/2006Scape/cache/"));
cached.put("Screenshots", new File(cached.get("Root"), "/2006Scape/screenshots/")); cached.put("Screenshots", new File(cached.get("Root"), "/2006Scape/screenshots/"));
Verboser.verbose("Directories cached."); Verboser.verbose("Directories cached.");
@@ -59,18 +58,6 @@ public class Directories {
cached.put("Compiled", f); cached.put("Compiled", f);
} }
/**
* Set server bin folder
*
* @param f
*/
public static void setServerCompiledDirectory(File f) {
if (!f.isDirectory()) {
throw new IllegalArgumentException(f + "is not a directory.");
}
cached.put("Servers", f);
}
/** /**
* Returns the root directory outside of the main Parabot folder. * Returns the root directory outside of the main Parabot folder.
* *
@@ -125,15 +112,6 @@ public class Directories {
return cached.get("Settings"); return cached.get("Settings");
} }
/**
* Returns the Parabot servers folder.
*
* @return
*/
public static File getServerPath() {
return cached.get("Servers");
}
/** /**
* Returns the Parabot cache folder. * Returns the Parabot cache folder.
* *
@@ -19,4 +19,12 @@ public class Configuration extends org.parabot.api.Configuration {
public static final String ITEM_API = DATA_API + "items/"; public static final String ITEM_API = DATA_API + "items/";
public static final Version BOT_VERSION = ProjectProperties.getProjectVersion(); public static final Version BOT_VERSION = ProjectProperties.getProjectVersion();
public static final String serverName = "2006Scape";
public static final String clientJar = "https://2006scape.org/Downloads/client.jar";
public static final String hooksFile = "https://2006scape.org/Downloads/bot/2006Scape_hooks.xml";
public static final String providerJar = "https://2006scape.org/Downloads/bot/Provider.jar";
public static final String clientClass = "Game";
public static final Double clientVersion = 1.0;
} }
@@ -286,9 +286,7 @@ public class ClassPath {
/** /**
* Dumps a resource from a input stream * Dumps a resource from a input stream
* *
* @param classPath
* @param name * @param name
* @param inputstream
* *
* @throws IOException * @throws IOException
*/ */
@@ -1,5 +1,7 @@
package org.parabot.core.desc; package org.parabot.core.desc;
import org.parabot.core.Configuration;
/** /**
* Holds information about a server * Holds information about a server
* *
@@ -11,11 +13,10 @@ public class ServerDescription implements Comparable<ServerDescription> {
private final double revision; private final double revision;
public int uuid; public int uuid;
public ServerDescription(final String serverName, final String author, public ServerDescription() {
final double revision) { this.serverName = Configuration.serverName;
this.serverName = serverName; this.author = Configuration.serverName;
this.author = author; this.revision = Configuration.clientVersion;
this.revision = revision;
} }
public String getServerName() { public String getServerName() {
@@ -1,13 +1,9 @@
package org.parabot.core.desc; package org.parabot.core.desc;
import org.json.simple.JSONObject; import org.json.simple.JSONObject;
import org.json.simple.parser.ParseException;
import org.parabot.core.Configuration; import org.parabot.core.Configuration;
import org.parabot.core.Core;
import org.parabot.environment.api.utils.WebUtil; import org.parabot.environment.api.utils.WebUtil;
import java.io.BufferedReader;
import java.io.IOException;
import java.net.MalformedURLException; import java.net.MalformedURLException;
import java.net.URL; import java.net.URL;
import java.util.HashMap; import java.util.HashMap;
@@ -22,74 +18,9 @@ import java.util.zip.CRC32;
*/ */
public class ServerProviderInfo { public class ServerProviderInfo {
private final HashMap<String, Integer> settings;
private final Properties properties;
public ServerProviderInfo(URL providerInfo, String username, String password) {
this.properties = new Properties();
this.settings = new HashMap<>();
try {
Core.verbose("Reading info: " + providerInfo);
BufferedReader br = WebUtil.getReader(new URL(providerInfo.toString()), username, password);
JSONObject jsonObject = (JSONObject) WebUtil.getJsonParser().parse(br);
for (Object o : jsonObject.entrySet()) {
Map.Entry<?, ?> pairs = (Map.Entry<?, ?>) o;
if (String.valueOf(pairs.getKey()).equalsIgnoreCase("settings")) {
JSONObject object = (JSONObject) pairs.getValue();
parseSettings(object);
} else {
properties.put(String.valueOf(pairs.getKey()), String.valueOf(pairs.getValue()));
}
}
if (br != null) {
br.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Initialize configuration with data provided by {@link org.parabot.core.parsers.servers.LocalServers} from a {@code /2006Scape/servers/config.json} file.
*
* @param clientJar Name of the client jar file
* @param hooks Name of the hooks file
* @param name Server name
* @param clientClass Entry class within the client jar
* @param bankTabs Bank tabs - only relevant for certain servers. Default 0
*/
public ServerProviderInfo(String clientJar, String hooks, String name, String clientClass, int bankTabs) {
this(clientJar, hooks, name, clientClass, bankTabs, null);
}
/**
* Initialize configuration with data provided by {@link org.parabot.core.parsers.servers.LocalServers} from a {@code /2006Scape/servers/config.json} file.
*
* @param clientJar Name of the client jar file
* @param hooks Name of the hooks file
* @param name Server name
* @param clientClass Entry class within the client jar
* @param bankTabs Bank tabs - only relevant for certain servers. Default 0
* @param randoms A URL to an endpoint where the Randoms are located. Can be Null, in which case getRandoms() will fallback to the default BDN Randoms URL.
*/
public ServerProviderInfo(String clientJar, String hooks, String name, String clientClass, int bankTabs, String randoms) {
this.properties = new Properties();
this.settings = new HashMap<>();
this.properties.setProperty("client_jar", clientJar);
this.properties.setProperty("hooks", hooks);
this.properties.setProperty("name", name);
this.properties.setProperty("client_class", clientClass);
this.properties.setProperty("provider_crc32", String.valueOf(getCRC32(name, "provider")));
this.properties.setProperty("client_crc32", String.valueOf(getCRC32(name, "client")));
this.properties.setProperty("bank_tabs", String.valueOf(bankTabs));
this.properties.setProperty("randoms_jar", randoms);
}
public URL getClient() { public URL getClient() {
try { try {
return new URL(properties.getProperty("client_jar")); return new URL(Configuration.clientJar);
} catch (MalformedURLException e) { } catch (MalformedURLException e) {
e.printStackTrace(); e.printStackTrace();
} }
@@ -98,7 +29,7 @@ public class ServerProviderInfo {
public URL getExtendedHookFile() { public URL getExtendedHookFile() {
try { try {
return new URL(properties.getProperty("hooks") /*+ "&extended=true"*/); return new URL(Configuration.hooksFile /*+ "&extended=true"*/);
} catch (MalformedURLException e) { } catch (MalformedURLException e) {
e.printStackTrace(); e.printStackTrace();
return getHookFile(); return getHookFile();
@@ -107,7 +38,7 @@ public class ServerProviderInfo {
public URL getHookFile() { public URL getHookFile() {
try { try {
return new URL(properties.getProperty("hooks")); return new URL(Configuration.hooksFile);
} catch (MalformedURLException e) { } catch (MalformedURLException e) {
e.printStackTrace(); e.printStackTrace();
} }
@@ -115,31 +46,19 @@ public class ServerProviderInfo {
} }
public String getClientClass() { public String getClientClass() {
return properties.getProperty("client_class"); return Configuration.clientClass;
} }
public String getServerName() { public String getServerName() {
return properties.getProperty("name"); return Configuration.serverName;
} }
public long getCRC32() { public long getCRC32() {
return Long.parseLong(properties.getProperty("provider_crc32")); return Long.parseLong(String.valueOf(getCRC32(Configuration.serverName, "provider")));
} }
public long getClientCRC32() { public long getClientCRC32() {
return Long.parseLong(properties.getProperty("client_crc32")); return Long.parseLong(String.valueOf(getCRC32(Configuration.serverName, "client")));
}
public int getBankTabs() {
return Integer.parseInt(properties.getProperty("bank_tabs"));
}
public Properties getProperties() {
return this.properties;
}
public HashMap<String, Integer> getSettings() {
return settings;
} }
/** /**
@@ -149,16 +68,11 @@ public class ServerProviderInfo {
*/ */
public URL getRandoms() { public URL getRandoms() {
try { try {
String randomsUrl = properties.getProperty("randoms_jar"); String randomsUrl = Configuration.GET_RANDOMS;
if (randomsUrl == null || randomsUrl.length() == 0) {
// Fallback to default BDN URL if there is no 'randoms' specified in the server JSON configuration.
randomsUrl = Configuration.GET_RANDOMS;
}
return new URL(randomsUrl); return new URL(randomsUrl);
} catch (MalformedURLException e) { } catch (MalformedURLException e) {
e.printStackTrace(); e.printStackTrace();
} }
// Will never return null, unless the BDN URL is changed. It shouldn't be.
return null; return null;
} }
@@ -168,7 +82,7 @@ public class ServerProviderInfo {
* @return provider version * @return provider version
*/ */
public String getProviderVersion() { public String getProviderVersion() {
String providerType = WebUtil.getJsonValue(String.format(Configuration.GET_SERVER_PROVIDER_TYPE, properties.getProperty("name")), "type"); String providerType = WebUtil.getJsonValue(String.format(Configuration.GET_SERVER_PROVIDER_TYPE, Configuration.serverName), "type");
if (providerType != null) { if (providerType != null) {
String providerInfo = String.format(Configuration.SERVER_PROVIDER_INFO, providerType); String providerInfo = String.format(Configuration.SERVER_PROVIDER_INFO, providerType);
return WebUtil.getJsonValue(providerInfo, "version"); return WebUtil.getJsonValue(providerInfo, "version");
@@ -183,13 +97,4 @@ public class ServerProviderInfo {
crc.update(name.getBytes()); crc.update(name.getBytes());
return crc.getValue(); return crc.getValue();
} }
private void parseSettings(JSONObject object) {
for (Object settingObject : object.entrySet()) {
Map.Entry<?, ?> settingValue = (Map.Entry<?, ?>) settingObject;
String key = (String) settingValue.getKey();
long value = (Long) settingValue.getValue();
settings.put(key, (int) value);
}
}
} }
@@ -1,7 +1,8 @@
package org.parabot.core.parsers.servers; package org.parabot.core.parsers;
import org.parabot.core.Core; import org.parabot.core.Core;
import org.parabot.core.desc.ServerDescription; import org.parabot.core.desc.ServerDescription;
import org.parabot.environment.servers.executers.LocalPublicServerExecuter;
import org.parabot.environment.servers.executers.ServerExecuter; import org.parabot.environment.servers.executers.ServerExecuter;
import java.util.ArrayList; import java.util.ArrayList;
@@ -19,20 +20,8 @@ public abstract class ServerParser {
public static final ServerDescription[] getDescriptions() { public static final ServerDescription[] getDescriptions() {
SERVER_CACHE.clear(); SERVER_CACHE.clear();
final ArrayList<ServerParser> parsers = new ArrayList<>(); ServerDescription desc = new ServerDescription();
parsers.add(new LocalServers()); SERVER_CACHE.put(desc, new LocalPublicServerExecuter());
Core.verbose("Parsing server providers...");
for (final ServerParser parser : parsers) {
parser.execute();
}
if (Core.inVerboseMode()) {
for (final ServerDescription desc : SERVER_CACHE.keySet()) {
Core.verbose(desc.toString());
}
Core.verbose("Server providers parsed.");
}
Map<ServerDescription, ServerExecuter> SORTED_SERVER_CACHE = new TreeMap<ServerDescription, ServerExecuter>(SERVER_CACHE); Map<ServerDescription, ServerExecuter> SORTED_SERVER_CACHE = new TreeMap<ServerDescription, ServerExecuter>(SERVER_CACHE);
@@ -1,118 +0,0 @@
package org.parabot.core.parsers.servers;
import org.json.simple.JSONObject;
import org.json.simple.parser.ParseException;
import org.parabot.core.Configuration;
import org.parabot.core.Core;
import org.parabot.core.Directories;
import org.parabot.core.classpath.ClassPath;
import org.parabot.core.desc.ServerDescription;
import org.parabot.core.desc.ServerProviderInfo;
import org.parabot.environment.api.utils.WebUtil;
import org.parabot.environment.servers.ServerManifest;
import org.parabot.environment.servers.executers.LocalPublicServerExecuter;
import org.parabot.environment.servers.executers.LocalServerExecuter;
import org.parabot.environment.servers.loader.ServerLoader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.lang.reflect.Constructor;
import java.util.ArrayList;
/**
* Parses local server providers located in the servers directory
*
* @author Everel, JKetelaar
*/
public class LocalServers extends ServerParser {
@Override
public void execute() {
// parse classes in server directories
final ClassPath basePath = new ClassPath();
basePath.parseJarFiles(false);
basePath.addClasses(Directories.getServerPath());
final ArrayList<ClassPath> classPaths = new ArrayList<>();
classPaths.add(basePath);
for (final ClassPath classPath : basePath.getJarFiles()) {
classPaths.add(classPath);
}
for (final ClassPath path : classPaths) {
// init the server loader
final ServerLoader loader = new ServerLoader(path);
// loop through all classes which extends the 'ServerProvider' class
for (final String className : loader.getServerClassNames()) {
try {
// get class
final Class<?> serverProviderClass = loader
.loadClass(className);
// get annotation
final Object annotation = serverProviderClass
.getAnnotation(ServerManifest.class);
if (annotation == null) {
throw new RuntimeException("Missing manifest at "
+ className);
}
// cast object annotation to server manifest annotation
final ServerManifest manifest = (ServerManifest) annotation;
// get constructor
final Constructor<?> con = serverProviderClass
.getConstructor();
SERVER_CACHE.put(
new ServerDescription(manifest.name(), manifest
.author(), manifest.version()),
new LocalServerExecuter(con, path,
manifest.name()));
} catch (Throwable t) {
t.printStackTrace();
}
}
}
for (File file : Directories.listJSONFiles(Directories.getServerPath())) {
Core.verbose("[Local server in]: " + file.getName());
try {
JSONObject object = (JSONObject) WebUtil.getJsonParser().parse(new FileReader(file));
String name = (String) object.get("name");
String author = (String) object.get("author");
double version = (Double) object.get("version");
String clientClass = (String) object.get("client-class");
Object bank;
int bankTabs = 0;
if ((bank = object.get("bank")) != null) {
bankTabs = (int) bank;
}
String uuidStr = (String) object.get("uuid"); // optional
JSONObject locations = (JSONObject) object.get("locations");
String server = (String) locations.get("server");
String provider = (String) locations.get("provider");
String hooks = (String) locations.get("hooks");
String randoms = (String) locations.get("randoms");
if (randoms == null) {
randoms = Configuration.GET_RANDOMS;
}
Core.verbose("[LocalServers]: Parsed server: " + name);
ServerProviderInfo serverProviderInfo = new ServerProviderInfo(server, hooks, name, clientClass, bankTabs, randoms);
ServerDescription desc = new ServerDescription(name, author, version);
if (uuidStr != null && uuidStr.length() > 0) {
desc.uuid = Integer.parseInt(uuidStr);
}
SERVER_CACHE.put(desc, new LocalPublicServerExecuter(name, serverProviderInfo, server, provider));
} catch (IOException | ParseException e) {
e.printStackTrace();
}
}
}
}
@@ -1,8 +1,9 @@
package org.parabot.core.ui; package org.parabot.core.ui;
import org.parabot.core.Configuration;
import org.parabot.core.Core; import org.parabot.core.Core;
import org.parabot.core.desc.ServerDescription; import org.parabot.core.desc.ServerDescription;
import org.parabot.core.parsers.servers.ServerParser; import org.parabot.core.parsers.ServerParser;
import org.parabot.core.ui.components.ServerComponent; import org.parabot.core.ui.components.ServerComponent;
import org.parabot.environment.Environment; import org.parabot.environment.Environment;
@@ -22,7 +23,7 @@ import javax.swing.JScrollPane;
public class ServerSelector extends JPanel { public class ServerSelector extends JPanel {
private static final long serialVersionUID = 5238720307271493899L; private static final long serialVersionUID = 5238720307271493899L;
public static String initServer; public static String initServer = Configuration.serverName;
private static ServerSelector instance; private static ServerSelector instance;
public ServerSelector() { public ServerSelector() {
@@ -1,41 +1,24 @@
package org.parabot.core.ui.components; package org.parabot.core.ui.components;
import org.parabot.core.desc.ServerDescription; import org.parabot.core.desc.ServerDescription;
import org.parabot.core.ui.fonts.Fonts;
import org.parabot.environment.Environment; import org.parabot.environment.Environment;
import java.awt.Color; import javax.swing.*;
import java.awt.Cursor;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.JPanel;
/** /**
* A neat looking server component * A neat looking server component
* *
* @author Everel * @author Everel
*/ */
public class ServerComponent extends JPanel implements MouseListener, public class ServerComponent extends JPanel {
MouseMotionListener {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
private final String name; private final String name;
public ServerDescription desc; public ServerDescription desc;
private boolean hovered;
public ServerComponent(final ServerDescription desc) { public ServerComponent(final ServerDescription desc) {
this.desc = desc; this.desc = desc;
setLayout(null); setLayout(null);
this.name = desc.getServerName().replaceAll(" ", ""); this.name = desc.getServerName().replaceAll(" ", "");
addMouseListener(this);
addMouseMotionListener(this);
setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
} }
@Override @Override
@@ -43,41 +26,8 @@ public class ServerComponent extends JPanel implements MouseListener,
return name; return name;
} }
@Override
public void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
setOpaque(false);
super.paintComponent(g);
setOpaque(true);
int w = getWidth();
int h = getHeight();
Color bgColor = Color.LIGHT_GRAY;
if (hovered) {
bgColor = Color.GRAY;
}
g2d.setColor(bgColor);
g2d.fillRect(0, 0, w, h);
g.setColor(Color.black);
Font title = Fonts.getResource("leelawadee.ttf", 16);
g.setFont(title);
String serverName = desc.getServerName();
int sw = g.getFontMetrics().stringWidth(serverName);
g.drawString(serverName, (w / 2) - (sw / 2), 30);
Font normal = Fonts.getResource("leelawadee.ttf");
g.setFont(normal);
FontMetrics fm = g.getFontMetrics();
String author = "Author: " + desc.getAuthor();
String revision = "Revision: " + desc.getRevision();
g.drawString(author, (w / 2) - (fm.stringWidth(author) / 2), 55);
g.drawString(revision, (w / 2) - (fm.stringWidth(revision) / 2), 70);
}
public void load(final ServerDescription desc) { public void load(final ServerDescription desc) {
VerboseLoader.get().switchState(VerboseLoader.STATE_LOADING);
new Thread(new Runnable() { new Thread(new Runnable() {
@Override @Override
public void run() { public void run() {
@@ -86,44 +36,4 @@ public class ServerComponent extends JPanel implements MouseListener,
} }
}).start(); }).start();
} }
@Override
public void mouseMoved(MouseEvent e) {
if (!hovered) {
hovered = true;
this.repaint();
}
}
@Override
public void mouseExited(MouseEvent e) {
if (hovered) {
hovered = false;
this.repaint();
}
}
@Override
public void mousePressed(MouseEvent e) {
if (hovered) {
load(desc);
}
}
@Override
public void mouseDragged(MouseEvent e) {
}
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
} }
@@ -1,90 +1,44 @@
package org.parabot.core.ui.components; package org.parabot.core.ui.components;
import org.parabot.core.Configuration; import org.parabot.core.Configuration;
import org.parabot.core.Core;
import org.parabot.core.io.ProgressListener; import org.parabot.core.io.ProgressListener;
import org.parabot.core.ui.ServerSelector; import org.parabot.core.ui.ServerSelector;
import org.parabot.core.ui.fonts.Fonts; import org.parabot.core.ui.fonts.Fonts;
import org.parabot.core.ui.images.Images; import org.parabot.core.ui.images.Images;
import org.parabot.core.ui.utils.UILog;
import java.awt.BasicStroke; import javax.swing.*;
import java.awt.Color; import java.awt.*;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Line2D; import java.awt.geom.Line2D;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.awt.image.RescaleOp; import java.awt.image.RescaleOp;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
/** /**
* An informative JPanel which tells the user what bot is doing * An informative JPanel which tells the user what bot is doing
* *
* @author Everel, EmmaStone * @author Everel, EmmaStone
*/ */
public class VerboseLoader extends JPanel implements ProgressListener { public class VerboseLoader extends JPanel implements ProgressListener {
public static final int STATE_LOADING = 1;
private static final long serialVersionUID = 7412412644921803896L; private static final long serialVersionUID = 7412412644921803896L;
private static final int STATE_AUTHENTICATION = 0;
private static final int STATE_SERVER_SELECT = 2;
private static VerboseLoader current; private static VerboseLoader current;
private static String state = "Initializing loader...";
private final BufferedImage background; private final BufferedImage background;
private final BufferedImage banner; private final BufferedImage banner;
private final BufferedImage loginBox;
private final ProgressBar progressBar; private final ProgressBar progressBar;
private int currentState;
private FontMetrics fontMetrics; private FontMetrics fontMetrics;
private JPanel loginPanel;
private VerboseLoader(String username, String password) { private VerboseLoader() {
if (current != null) { if (current != null) {
throw new IllegalStateException("MainScreenComponent already made."); throw new IllegalStateException("MainScreenComponent already made.");
} }
current = this; current = this;
this.background = Images.getResource("/storage/images/background.png"); this.background = Images.getResource("/storage/images/background.png");
this.banner = Images.getResource("/storage/images/logo.png"); this.banner = Images.getResource("/storage/images/logo.png");
this.loginBox = Images.getResource("/storage/images/login.png");
this.progressBar = new ProgressBar(400, 20); this.progressBar = new ProgressBar(400, 20);
setLayout(new GridBagLayout()); setLayout(new GridBagLayout());
setSize(775, 510); setSize(775, 510);
setPreferredSize(new Dimension(775, 510)); setPreferredSize(new Dimension(775, 510));
setDoubleBuffered(true); setDoubleBuffered(true);
setOpaque(false); setOpaque(false);
ServerSelector.getInstance();
currentState = STATE_SERVER_SELECT; //Force Server Select
if (currentState == STATE_AUTHENTICATION) {
addLoginPanel();
} else if (currentState == STATE_SERVER_SELECT) {
addServerPanel();
}
}
/**
* Gets instance of this panel
*
* @return instance of this panel
*/
public static VerboseLoader get(String username, String password) {
return current == null ? new VerboseLoader(username, password) : current;
} }
/** /**
@@ -93,7 +47,7 @@ public class VerboseLoader extends JPanel implements ProgressListener {
* @return instance of this panel * @return instance of this panel
*/ */
public static VerboseLoader get() { public static VerboseLoader get() {
return current == null ? new VerboseLoader(null, null) : current; return current == null ? new VerboseLoader() : current;
} }
/** /**
@@ -102,101 +56,9 @@ public class VerboseLoader extends JPanel implements ProgressListener {
* @param message * @param message
*/ */
public static void setState(final String message) { public static void setState(final String message) {
state = message;
current.repaint(); current.repaint();
} }
public void addServerPanel() {
JPanel servers = ServerSelector.getInstance();
GridBagLayout bagLayout = (GridBagLayout) getLayout();
GridBagConstraints c = new GridBagConstraints();
c.weightx = 1;
c.weighty = 1;
c.gridx = 0;
c.gridy = 0;
c.anchor = GridBagConstraints.SOUTH;
c.insets = new Insets(0, 0, 25, 0);
bagLayout.setConstraints(servers, c);
add(servers);
}
public void addLoginPanel() {
loginPanel = new JPanel();
loginPanel.setOpaque(false);
loginPanel.setLayout(new BoxLayout(loginPanel, BoxLayout.Y_AXIS));
Font labelFont = Fonts.getResource("leelawadee.ttf");
JLabel usernameLabel = new JLabel("Username");
usernameLabel.setFont(labelFont);
usernameLabel.setAlignmentX(Box.CENTER_ALIGNMENT);
usernameLabel.setForeground(Color.white);
final JTextField userInput = new JTextField(20);
final JTextField passInput = new JPasswordField(20);
userInput.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
passInput.requestFocus();
}
});
userInput.setFont(labelFont);
userInput.setAlignmentX(Box.CENTER_ALIGNMENT);
userInput.setMaximumSize(userInput.getPreferredSize());
final JButton login = new JButton("Login");
passInput.setAlignmentX(Box.CENTER_ALIGNMENT);
passInput.setMaximumSize(userInput.getPreferredSize());
passInput.setPreferredSize(new Dimension(userInput.getWidth(), 20));
passInput.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
login.doClick();
}
});
JLabel passwordLabel = new JLabel("Password");
passwordLabel.setFont(labelFont);
passwordLabel.setAlignmentX(Box.CENTER_ALIGNMENT);
passwordLabel.setForeground(Color.white);
login.setAlignmentX(Box.CENTER_ALIGNMENT);
login.setOpaque(false);
loginPanel.add(Box.createRigidArea(new Dimension(0, 8)));
loginPanel.add(usernameLabel);
loginPanel.add(Box.createRigidArea(new Dimension(0, 4)));
loginPanel.add(userInput);
loginPanel.add(Box.createRigidArea(new Dimension(0, 4)));
loginPanel.add(passwordLabel);
loginPanel.add(Box.createRigidArea(new Dimension(0, 4)));
loginPanel.add(passInput);
loginPanel.add(Box.createRigidArea(new Dimension(0, 2)));
loginPanel.add(login);
loginPanel.add(Box.createRigidArea(new Dimension(0, 4)));
add(loginPanel, new GridBagConstraints());
}
public void switchState(int state) {
removeAll();
if (state == STATE_AUTHENTICATION) {
addLoginPanel();
} else if (state == STATE_SERVER_SELECT) {
addServerPanel();
}
this.currentState = state;
revalidate();
}
/** /**
* Paints on this panel * Paints on this panel
*/ */
@@ -237,19 +99,8 @@ public class VerboseLoader extends JPanel implements ProgressListener {
fontMetrics = g.getFontMetrics(); fontMetrics = g.getFontMetrics();
} }
if (currentState == STATE_AUTHENTICATION) {
g.drawImage(loginBox, loginPanel.getX() - 30, loginPanel.getY() - 22, null);
}
g.setColor(Color.white); g.setColor(Color.white);
if (currentState == STATE_LOADING) {
progressBar.draw(g, (getWidth() / 2) - 200, 220);
g.setFont(Fonts.getResource("leelawadee.ttf"));
int x = (getWidth() / 2) - (fontMetrics.stringWidth(state) / 2);
g.drawString(state, x, 200);
}
g.setFont(Fonts.getResource("leelawadee.ttf")); g.setFont(Fonts.getResource("leelawadee.ttf"));
final String version = Configuration.BOT_VERSION.get(); final String version = Configuration.BOT_VERSION.get();
g.drawString(version, g.drawString(version,
@@ -4,7 +4,7 @@ import org.parabot.core.Core;
import org.parabot.core.desc.ServerDescription; import org.parabot.core.desc.ServerDescription;
import org.parabot.core.lib.Library; import org.parabot.core.lib.Library;
import org.parabot.core.lib.javafx.JavaFX; import org.parabot.core.lib.javafx.JavaFX;
import org.parabot.core.parsers.servers.ServerParser; import org.parabot.core.parsers.ServerParser;
import org.parabot.core.ui.components.VerboseLoader; import org.parabot.core.ui.components.VerboseLoader;
import org.parabot.environment.api.utils.WebUtil; import org.parabot.environment.api.utils.WebUtil;
@@ -1,13 +1,9 @@
package org.parabot.environment.servers; package org.parabot.environment.servers;
import org.parabot.core.Core; import org.parabot.core.Core;
import org.parabot.core.Directories;
import org.parabot.core.build.BuildPath;
import org.parabot.core.classpath.ClassPath; import org.parabot.core.classpath.ClassPath;
import org.parabot.environment.servers.executers.ServerExecuter; import org.parabot.environment.servers.executers.ServerExecuter;
import java.net.MalformedURLException;
/** /**
* Loads locally stored server providers * Loads locally stored server providers
* *
@@ -34,14 +30,6 @@ public class LocalServerExecuter extends ServerExecuter {
Core.verbose("Adding server provider jar to buildpath: " Core.verbose("Adding server provider jar to buildpath: "
+ this.classPath.lastParsed.toString()); + this.classPath.lastParsed.toString());
this.classPath.addToBuildPath(); this.classPath.addToBuildPath();
} else {
Core.verbose("Adding server providers directory to buildpath: "
+ Directories.getServerPath().getPath());
try {
BuildPath.add(Directories.getServerPath().toURI().toURL());
} catch (MalformedURLException e) {
e.printStackTrace();
}
} }
// finalize // finalize
super.finalize(this.serverProvider, this.serverName); super.finalize(this.serverProvider, this.serverName);
@@ -1,5 +1,6 @@
package org.parabot.environment.servers.executers; package org.parabot.environment.servers.executers;
import org.parabot.core.Configuration;
import org.parabot.core.Context; import org.parabot.core.Context;
import org.parabot.core.Core; import org.parabot.core.Core;
import org.parabot.core.Directories; import org.parabot.core.Directories;
@@ -30,11 +31,11 @@ public class LocalPublicServerExecuter extends ServerExecuter {
private final String providerUrl; private final String providerUrl;
private final ServerProviderInfo serverProviderInfo; private final ServerProviderInfo serverProviderInfo;
public LocalPublicServerExecuter(final String serverName, final ServerProviderInfo serverProviderInfo, String serverUrl, String providerUrl) { public LocalPublicServerExecuter() {
this.serverName = serverName; this.serverName = Configuration.serverName;
this.serverUrl = serverUrl; this.serverUrl = Configuration.clientJar;
this.providerUrl = providerUrl; this.providerUrl = Configuration.providerJar;
this.serverProviderInfo = serverProviderInfo; this.serverProviderInfo = new ServerProviderInfo();
} }
@Override @Override
@@ -1,53 +0,0 @@
package org.parabot.environment.servers.executers;
import org.parabot.core.Core;
import org.parabot.core.Directories;
import org.parabot.core.build.BuildPath;
import org.parabot.core.classpath.ClassPath;
import org.parabot.environment.servers.ServerProvider;
import java.lang.reflect.Constructor;
import java.net.MalformedURLException;
/**
* Loads locally stored server providers
*
* @author Everel
*/
public class LocalServerExecuter extends ServerExecuter {
private final Constructor<?> serverProviderConstructor;
private final ClassPath classPath;
private final String serverName;
public LocalServerExecuter(Constructor<?> serverProviderConstructor,
ClassPath classPath, final String serverName) {
this.serverProviderConstructor = serverProviderConstructor;
this.classPath = classPath;
this.serverName = serverName;
}
@Override
public void run() {
// add jar or directory to buildpath.
if (this.classPath.isJar()) {
Core.verbose("Adding server provider jar to buildpath: "
+ this.classPath.lastParsed.toString());
this.classPath.addToBuildPath();
} else {
Core.verbose("Adding server providers directory to buildpath: "
+ Directories.getServerPath().getPath());
try {
BuildPath.add(Directories.getServerPath().toURI().toURL());
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
// finalize
try {
super.finalize((ServerProvider) serverProviderConstructor.newInstance(), this.serverName);
} catch (Throwable t) {
t.printStackTrace();
}
}
}