Merge The File&Game Servers Into One Module (#519)

* Merge The File&Game Servers Into One Module

* Make SettingsLoader A GameConstants ConfigLoader
If A Config File Isn't Used, The Server Will Fall Back To The Defaults Set In GameConstants.java

Config Files Can Be Loaded With The "-c/-config configfilelocation.json"
Added A Default Prefilled ServerConfig.json

* Update ConfigLoader

* Bring Back Independant "Secrets" Loader For External Password Stuff
* Added A Bunch More Vars To The ConfigLoader
* Included A Sample "Server Config"
* Also Updated README.md As Parabot Is No Longer Maintained & We No Longer Have A FileServer Module

* Bundle FileServer with Server (docker)

* Remove /udp and http port

* Update .gitignore

* Move FileServer from `org.apollo.jagcached` → `org/apollo/jagcached`

* Tidy GameConstants & Add More Vars To ConfigLoader

* Organised Up GameConstants A Little To Separate ConfigLoader Vars From The Rest
* Added Some More Variables To Be Loaded Through The ConfigLoader

* Fix A Derp Caused By Laziness

* Add -c/-config arg to README.md

* Enable FileServer By Default

Co-authored-by: Danial <admin@redsparr0w.com>
This commit is contained in:
Josh Shippam
2021-11-23 00:29:25 +00:00
committed by GitHub
parent ba7f84fc45
commit 1c5b400f00
59 changed files with 213 additions and 236 deletions
+3
View File
@@ -12,3 +12,6 @@
2006Scape Client/bin/ 2006Scape Client/bin/
*.prefs *.prefs
*.classpath *.classpath
# Ignore any json files in the server root (should only be config files, the sample file should still be updated)
2006Scape Server/*.json
+20
View File
@@ -0,0 +1,20 @@
{
"server_name": "2006Scape",
"website_link": "https://2006Scape.org",
"server_debug": false,
"file_server": true,
"world_id": 1,
"members_only": false,
"tutorial_island_enabled": false,
"party_room_enabled": true,
"clues_enabled": true,
"admin_can_trade": false,
"admin_can_sell": false,
"respawn_x": 3222,
"respawn_y": 3218,
"save_timer": 120,
"timeout": 60,
"item_requirements": true,
"xp_rate": 1.0,
"max_players": 200
}
+6
View File
@@ -160,6 +160,12 @@
<artifactId>google-collections</artifactId> <artifactId>google-collections</artifactId>
<version>1.0</version> <version>1.0</version>
</dependency> </dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty</artifactId>
<version>3.6.6.Final</version>
<scope>compile</scope>
</dependency>
</dependencies> </dependencies>
<build> <build>
@@ -0,0 +1,97 @@
package com.rs2;
import com.rs2.integrations.PlayersOnlineWebsite;
import com.rs2.integrations.RegisteredAccsWebsite;
import com.rs2.integrations.discord.JavaCord;
import org.json.JSONObject;
import java.io.*;
import java.util.stream.Collectors;
public class ConfigLoader {
public static void loadSettings(String config) throws IOException {
BufferedReader br = new BufferedReader(new FileReader(config));
String out = br.lines().collect(Collectors.joining("\n"));
JSONObject obj = new JSONObject(out);
if(obj.has("server_name"))
GameConstants.SERVER_NAME = obj.getString("server_name");
if(obj.has("website_link"))
GameConstants.WEBSITE_LINK = obj.getString("website_link");
if(obj.has("debug"))
GameConstants.SERVER_DEBUG = obj.getBoolean("debug");
if(obj.has("file_server"))
GameConstants.FILE_SERVER = obj.getBoolean("file_server");
if(obj.has("world_id"))
GameConstants.WORLD = obj.getInt("world_id");
if(obj.has("members_only"))
GameConstants.MEMBERS_ONLY = obj.getBoolean("members_only");
if(obj.has("tutorial_island_enabled"))
GameConstants.TUTORIAL_ISLAND = obj.getBoolean("tutorial_island_enabled");
if(obj.has("party_room_enabled"))
GameConstants.PARTY_ROOM_DISABLED = !obj.getBoolean("party_room_enabled");
if(obj.has("clues_enabled"))
GameConstants.CLUES_ENABLED = obj.getBoolean("clues_enabled");
if(obj.has("admin_can_trade"))
GameConstants.ADMIN_CAN_TRADE = obj.getBoolean("admin_can_trade");
if(obj.has("admin_can_drop_items"))
GameConstants.ADMIN_DROP_ITEMS = obj.getBoolean("admin_can_drop_items");
if(obj.has("admin_can_sell"))
GameConstants.ADMIN_CAN_SELL_ITEMS = obj.getBoolean("admin_can_sell");
if(obj.has("respawn_x"))
GameConstants.RESPAWN_X = obj.getInt("respawn_x");
if(obj.has("respawn_y"))
GameConstants.RESPAWN_Y = obj.getInt("respawn_y");
if(obj.has("save_timer"))
GameConstants.SAVE_TIMER = obj.getInt("save_timer");
if(obj.has("timeout"))
GameConstants.TIMEOUT = obj.getInt("timeout");
if(obj.has("item_requirements"))
GameConstants.ITEM_REQUIREMENTS = obj.getBoolean("item_requirements");
if(obj.has("xp_rate"))
GameConstants.XP_RATE = obj.getDouble("xp_rate");
if(obj.has("max_players"))
GameConstants.MAX_PLAYERS = obj.getInt("max_players");
}
private static void initialize() {
JSONObject main = new JSONObject();
main
.put("bot-token", "")
.put("websitepass", "")
.put("erssecret", "");
try {
BufferedWriter br = new BufferedWriter(new FileWriter("data/secrets.json"));
br.write(main.toString());
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void loadSecrets() throws IOException {
if (!new File("data/Secrets.json").exists()) {
initialize();
System.out.println("Please open \"data/secrets.json\" file and enter your discord token bot there!");
System.out.println("Please open \"data/secrets.json\" file and enter your Website Password there!");
} else {
BufferedReader br = new BufferedReader(new FileReader("data/secrets.json"));
String out = br.lines().collect(Collectors.joining("\n"));
JSONObject obj = new JSONObject(out);
/*
* Sets External Services Vars
*/
if(obj.has("bot-token"))
JavaCord.token = obj.getString("bot-token");
if(obj.has("websitepass"))
PlayersOnlineWebsite.password = obj.getString("websitepass");
RegisteredAccsWebsite.password = obj.getString("websitepass");
if(obj.has("erssecret"))
GameEngine.ersSecret = obj.getString("erssecret");
}
}
}
@@ -2,43 +2,60 @@ package com.rs2;
public class GameConstants { public class GameConstants {
public final static boolean SERVER_DEBUG = false; /**
* The Variables Below Can Be Also Changed On Server Startup By Using The ConfigLoader
*
* SERVER_NAME Sets The Name The Server Will Use
* WEBSITE_LINK Defines The Server Website Links
* WORLD Sets The Servers World ID
* MAX_PLAYERS Sets The Maximum Amount Of Players Allow To Be Logged In At Once
* TIMEOUT Sets The Amount Of Time Before A Player Timeouts From A Bad Connection
* SAVE_TIMER Sets In Seconds How Often The Server Shouls Auto-Save All Characters
* RESPAWN_X Sets The X Coordinate That You Will Respawn At After Death
* RESPAWN_Y Sets The Y Coordinate That You Will Respawn At After Death
* FILE_SERVER Sets Whether The FileServer Should Run With The Server
* SERVER_DEBUG Sets Whether The Server Should Start In Debug Mode
* MEMBERS_ONLY Sets Whether The World Is Members Only
* TUTORIAL_ISLAND Sets Enables/Disables Tutorial Island For Players On First Login
* PARTY_ROOM_DISABLED Enables/Disables The Party Room Should Be Disabled
* CLUES_ENABLED Enables/Disables Clue Scrolls
* ITEM_REQUIREMENTS Enables/Disables Item Requirements for All Players
* ADMIN_CAN_TRADE Defines Whether Admins Can Trade
* ADMIN_DROP_ITEMS Defines Whether Admins Can Drop Items
* ADMIN_CAN_SELL_ITEMS Defines Whether Admins Can Sell Items
* XP_RATE Sets The XP Rate Multiplier For All Players/Skills
*/
public static String SERVER_NAME = "2006Scape", WEBSITE_LINK = "https://2006Scape.org";
public static int WORLD = 1, MAX_PLAYERS = 200, TIMEOUT = 60, SAVE_TIMER = 120,
RESPAWN_X = 3222, RESPAWN_Y = 3218;
public static boolean FILE_SERVER = true, SERVER_DEBUG = false, MEMBERS_ONLY = false, TUTORIAL_ISLAND = false,
PARTY_ROOM_DISABLED = false, CLUES_ENABLED = true, ITEM_REQUIREMENTS = true,
ADMIN_CAN_TRADE = false, ADMIN_DROP_ITEMS = false, ADMIN_CAN_SELL_ITEMS = false;
public static double XP_RATE = 1;
public final static String SERVER_NAME = "2006Scape", SERVER_VERSION = "Server Stage v " + GameConstants.TEST_VERSION + ".";
/**
public final static String WEBSITE_LINK = "https://2006Scape.org"; * The Variables Below Should Only Be Changed If You Understand What You Are Doing
*/
public final static String SERVER_VERSION = "Server Stage v " + GameConstants.TEST_VERSION + ".";
public final static boolean WEBSITE_TOTAL_CHARACTERS_INTEGRATION = false; public final static boolean WEBSITE_TOTAL_CHARACTERS_INTEGRATION = false;
public final static double TEST_VERSION = 2.3; public final static double TEST_VERSION = 2.3;
public final static int ITEM_LIMIT = 15000, MAXITEM_AMOUNT = Integer.MAX_VALUE, CLIENT_VERSION = 999999, public final static int ITEM_LIMIT = 15000, MAXITEM_AMOUNT = Integer.MAX_VALUE, CLIENT_VERSION = 999999,
WORLD = 1, IPS_ALLOWED = 250, CONNECTION_DELAY = 100, IPS_ALLOWED = 250, CONNECTION_DELAY = 100,
MESSAGE_DELAY = 6000, MAX_PLAYERS = 200, REQ_AMOUNT = 150; MESSAGE_DELAY = 6000, REQ_AMOUNT = 150;
public final static boolean SOUND = true, public final static boolean sendServerPackets = false, SOUND = true, GUILDS = true,
GUILDS = true,
PARTY_ROOM_DISABLED = false,
PRINT_OBJECT_ID = false, EXPERIMENTS = false; PRINT_OBJECT_ID = false, EXPERIMENTS = false;
public static int[] SIDEBARS = { 2423, 3917, 638, 3213, 1644, 5608, 1151, public static int[] SIDEBARS = { 2423, 3917, 638, 3213, 1644, 5608, 1151,
18128, 5065, 5715, 2449, 904, 147, 962 }; 18128, 5065, 5715, 2449, 904, 147, 962 };
public static boolean TUTORIAL_ISLAND = false,
MEMBERS_ONLY = false, sendServerPackets = false,
CLUES_ENABLED = true;
public final static int[] FUN_WEAPONS = { 2460, 2461, 2462, 2463, 2464, public final static int[] FUN_WEAPONS = { 2460, 2461, 2462, 2463, 2464,
2465, 2466, 2467, 2468, 2469, 2470, 2471, 2471, 2473, 2474, 2475, 2465, 2466, 2467, 2468, 2469, 2470, 2471, 2471, 2473, 2474, 2475,
2476, 2477 }; // fun weapons for dueling 2476, 2477 }; // fun weapons for dueling
public static boolean ADMIN_CAN_TRADE = false; // can admins trade?
public final static boolean ADMIN_DROP_ITEMS = false;
public final static boolean ADMIN_CAN_SELL_ITEMS = false;
public final static int RESPAWN_X = 3222; // when dead respawn here
public final static int RESPAWN_Y = 3218;
public final static int DUELING_RESPAWN_X = 3362; public final static int DUELING_RESPAWN_X = 3362;
@@ -46,16 +63,10 @@ public class GameConstants {
public final static int NO_TELEPORT_WILD_LEVEL = 20; public final static int NO_TELEPORT_WILD_LEVEL = 20;
public final static boolean ITEM_REQUIREMENTS = true;
public final static int CASTLE_WARS_X = 2439; public final static int CASTLE_WARS_X = 2439;
public final static int CASTLE_WARS_Y = 3087; public final static int CASTLE_WARS_Y = 3087;
public static double XP_RATE = 1;
public final static int SAVE_TIMER = 120; // save every x seconds
public final static int NPC_RANDOM_WALK_DISTANCE = 5; public final static int NPC_RANDOM_WALK_DISTANCE = 5;
public final static int NPC_FOLLOW_DISTANCE = 10; public final static int NPC_FOLLOW_DISTANCE = 10;
@@ -69,8 +80,6 @@ public class GameConstants {
"skorge", "tortured soul", "undead chicken", "undead cow", "undead one", "undead troll", "zombie", "zombie rat", "zogre" "skorge", "tortured soul", "undead chicken", "undead cow", "undead one", "undead troll", "zombie", "zombie rat", "zogre"
}; };
public final static int TIMEOUT = 60;
public final static int CYCLE_TIME = 600; public final static int CYCLE_TIME = 600;
public final static int BUFFER_SIZE = 10000; public final static int BUFFER_SIZE = 10000;
@@ -35,7 +35,6 @@ import com.rs2.game.players.PlayerSave;
import com.rs2.game.shops.ShopHandler; import com.rs2.game.shops.ShopHandler;
import com.rs2.integrations.PlayersOnlineWebsite; import com.rs2.integrations.PlayersOnlineWebsite;
import com.rs2.integrations.RegisteredAccsWebsite; import com.rs2.integrations.RegisteredAccsWebsite;
import com.rs2.integrations.SettingsLoader;
import com.rs2.integrations.discord.DiscordActivity; import com.rs2.integrations.discord.DiscordActivity;
import com.rs2.integrations.discord.JavaCord; import com.rs2.integrations.discord.JavaCord;
import com.rs2.net.ConnectionHandler; import com.rs2.net.ConnectionHandler;
@@ -49,6 +48,7 @@ import com.rs2.world.ObjectHandler;
import com.rs2.world.ObjectManager; import com.rs2.world.ObjectManager;
import com.rs2.world.clip.ObjectDefinition; import com.rs2.world.clip.ObjectDefinition;
import com.rs2.world.clip.RegionFactory; import com.rs2.world.clip.RegionFactory;
import org.apollo.jagcached.FileServer;
/** /**
* Server.java * Server.java
@@ -141,6 +141,24 @@ public class GameEngine {
public static void main(java.lang.String[] args) public static void main(java.lang.String[] args)
throws NullPointerException, IOException { throws NullPointerException, IOException {
for (int i = 0; i < args.length; i++) {
if (args[i].startsWith("-") && (i + 1) < args.length && !args[i + 1].startsWith("-")) {
switch(args[i]) {
case "-c":
case "-config":
try {
//TODO Load A Default Config File When Arg Not Used
System.out.println("Loading External Config..");
ConfigLoader.loadSettings(args[++i]);
System.out.println("Loaded Config File " + args[i]);
} catch (IOException e) {
System.out.println("Config File Not Found");
}
break;
}
}
}
System.out.println("Starting game engine.."); System.out.println("Starting game engine..");
if (GameConstants.SERVER_DEBUG) { if (GameConstants.SERVER_DEBUG) {
System.out.println("@@@@ DEBUG MODE IS ENABLED @@@@"); System.out.println("@@@@ DEBUG MODE IS ENABLED @@@@");
@@ -163,12 +181,24 @@ public class GameEngine {
/** /**
* Starting Up Server * Starting Up Server
*/ */
System.out.println("Launching " + GameConstants.SERVER_NAME + "..."); System.out.println("Launching " + GameConstants.SERVER_NAME + " World: " + GameConstants.WORLD + "...");
/**
* Starts The File Server If Enabled In GameConstants
*/
if(GameConstants.FILE_SERVER) {
FileServer fs = new FileServer();
try {
fs.start();
} catch (Exception e) {
e.printStackTrace();
}
}
/** /**
* Start Integration Services * Start Integration Services
**/ **/
SettingsLoader.loadSettings(); ConfigLoader.loadSecrets();
JavaCord.init(); JavaCord.init();
/** /**
@@ -8,7 +8,7 @@ import com.rs2.game.players.PlayerHandler;
public class PlayersOnlineWebsite { public class PlayersOnlineWebsite {
static String password; public static String password;
private static boolean hasntwared = true; private static boolean hasntwared = true;
private static void setWebsitePlayersOnline(int amount) throws IOException { private static void setWebsitePlayersOnline(int amount) throws IOException {
@@ -7,7 +7,7 @@ import java.net.URL;
import com.rs2.GameConstants; import com.rs2.GameConstants;
public class RegisteredAccsWebsite { public class RegisteredAccsWebsite {
static String password; public static String password;
private static boolean hasntwarned = true; private static boolean hasntwarned = true;
private static void setAccountsRegistered(int amount) throws IOException { private static void setAccountsRegistered(int amount) throws IOException {
@@ -1,45 +0,0 @@
package com.rs2.integrations;
import org.json.JSONObject;
import com.rs2.GameEngine;
import com.rs2.integrations.discord.JavaCord;
import java.io.*;
import java.util.stream.Collectors;
public class SettingsLoader {
private static void initialize() {
JSONObject main = new JSONObject();
main
.put("bot-token", "")
.put("websitepass", "")
.put("erssecret", "");
try {
BufferedWriter br = new BufferedWriter(new FileWriter("data/secrets.json"));
br.write(main.toString());
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void loadSettings() throws IOException {
if (!new File("data/secrets.json").exists()) {
initialize();
System.out.println("Please open \"data/secrets.json\" file and enter your discord token bot there!");
System.out.println("Please open \"data/secrets.json\" file and enter your Website Password there!");
} else {
BufferedReader br = new BufferedReader(new FileReader("data/secrets.json"));
String out = br.lines().collect(Collectors.joining("\n"));
JSONObject obj = new JSONObject(out);
JavaCord.token = obj.getString("bot-token");
PlayersOnlineWebsite.password = obj.getString("websitepass");
RegisteredAccsWebsite.password = obj.getString("websitepass");
GameEngine.ersSecret = obj.getString("erssecret");
}
}
}
@@ -14,7 +14,7 @@ public final class Constants {
/** /**
* The directory of the file system. * The directory of the file system.
*/ */
public static final String FILE_SYSTEM_DIR = "./cache/"; public static final String FILE_SYSTEM_DIR = "./data/cache/";
/** /**
* Default private constructor to prevent instantiation. * Default private constructor to prevent instantiation.
@@ -69,14 +69,15 @@ public final class FileServer {
* @throws Exception if an error occurs. * @throws Exception if an error occurs.
*/ */
public void start() throws Exception { public void start() throws Exception {
if (!new File("cache").exists()) if (!new File(Constants.FILE_SYSTEM_DIR).exists())
{ {
System.out.println("Working Directory = " + System.getProperty("user.dir"));
System.out.println("************************************"); System.out.println("************************************");
System.out.println("************************************"); System.out.println("************************************");
System.out.println("************************************"); System.out.println("************************************");
System.out.println("WARNING: I could not find the /cache folder. You are LIKELY running this in the wrong directory!"); System.out.println("WARNING: I could not find the data/cache folder. You are LIKELY running this in the wrong directory!");
System.out.println("In IntelliJ, fix it by clicking \"FileServer\" > Edit Configurations at the top of your screen"); System.out.println("In IntelliJ, fix it by clicking \"GameEngine\" > Edit Configurations at the top of your screen");
System.out.println("Then changing the \"Working Directory\" to be in \"2006Scape/2006Scape file_server\", instead of just \"2006Scape\""); System.out.println("Then changing the \"Working Directory\" to be in \"2006Scape/2006Scape Server\", instead of just \"2006Scape\"");
System.out.println("************************************"); System.out.println("************************************");
System.out.println("************************************"); System.out.println("************************************");
System.out.println("************************************"); System.out.println("************************************");
-4
View File
@@ -1,4 +0,0 @@
/bin/
*.iml
/target/
file_server-1.0-jar-with-dependencies.jar
Binary file not shown.
Binary file not shown.
Binary file not shown.
-118
View File
@@ -1,118 +0,0 @@
<?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">
<parent>
<artifactId>2006Scape</artifactId>
<groupId>com.rs2</groupId>
<version>1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>file_server</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<repositories>
<repository>
<id>libs-local</id>
<name>libs</name>
<url>file://${project.basedir}/libs</url>
</repository>
</repositories>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.mina/mina-core -->
<dependency>
<groupId>org.apache.mina</groupId>
<artifactId>mina-core</artifactId>
<version>1.1.7</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.netty/netty -->
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty</artifactId>
<version>3.6.6.Final</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.5.8</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-nop -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-nop</artifactId>
<version>1.5.8</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/com.thoughtworks.xstream/xstream -->
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.17</version>
</dependency>
<dependency>
<groupId>javac</groupId>
<artifactId>javac</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/libs/javac++.jar</systemPath>
</dependency>
<dependency>
<groupId>org.xmlpull.v1</groupId>
<artifactId>xpp3</artifactId>
<version>1.1.4c</version>
<scope>system</scope>
<systemPath>${project.basedir}/libs/xpp3-1.1.4c.jar</systemPath>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>org.apollo.jagcached.FileServer</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
-6
View File
@@ -1,6 +0,0 @@
echo This is meant to be run by the live server admin! You probably don\'t want to do this!
for i in {0..50}
do
cp target/file_server-1.0-jar-with-dependencies.jar ./fserver.jar
java -jar fserver.jar
done
+4 -7
View File
@@ -4,8 +4,7 @@
## How to Play ## How to Play
### Client (non-bottable download): https://github.com/2006-Scape/2006Scape/releases/ ### Client/Launcher Download: https://2006Scape.org/
### Parabot client (recommended): https://www.parabot.org/community/
### Rune-Server project thread: [Project thread](https://www.rune-server.ee/runescape-development/rs2-server/projects/686444-2006rebotted-remake-server-will-allow-supply-creatable-bots.html) ### Rune-Server project thread: [Project thread](https://www.rune-server.ee/runescape-development/rs2-server/projects/686444-2006rebotted-remake-server-will-allow-supply-creatable-bots.html)
# Installation + Running (Developers) # Installation + Running (Developers)
@@ -14,17 +13,16 @@
2. Hit File > Project Settings > Set SDK to Java 8 (Download [Java 8 SDK](https://adoptopenjdk.net/?variant=openjdk8) if you don't have one already) 2. Hit File > Project Settings > Set SDK to Java 8 (Download [Java 8 SDK](https://adoptopenjdk.net/?variant=openjdk8) if you don't have one already)
2. Navigate to `2006Scape file_server` > `src` > `main` > `java` > `org.apollo.jagcached`, right click FileServer and hit Run [Image](https://i.imgur.com/tsg9q1Z.png)
3. Navigate to `2006Scape Server` > `src` > `main` > `java` > `com.rs2`, right click GameEngine and hit Run [Image](https://i.imgur.com/HHooeVu.png) 3. Navigate to `2006Scape Server` > `src` > `main` > `java` > `com.rs2`, right click GameEngine and hit Run [Image](https://i.imgur.com/HHooeVu.png)
4. Navigate to `2006Scape Client` > `src` > `main` > `java`, right click Client and hit Run [Image](https://i.imgur.com/gSmqGLn.png) [(You Can Also Run The Server With The -c/-config Argument)](https://wiki.2006scape.org/books/getting-setup/page/server-arguments)
5. Navigate to `2006Scape Client` > `src` > `main` > `java`, right click Client and hit Run [Image](https://i.imgur.com/gSmqGLn.png)
*Advanced* *Advanced*
To compile any module from the command line, run `mvn clean install` To compile any module from the command line, run `mvn clean install`
## Using Parabot with your local server: ## Using Parabot with your local server: (OUTDATED)
- **1:** Download the latest `localhost_2006Scape.jar` from [here](https://github.com/2006-Scape/2006Scape/releases) (or, if testing server changes, compile it yourself like [this](https://i.imgur.com/uDrF0gl.png)) - **1:** Download the latest `localhost_2006Scape.jar` from [here](https://github.com/2006-Scape/2006Scape/releases) (or, if testing server changes, compile it yourself like [this](https://i.imgur.com/uDrF0gl.png))
- **2:** Download the latest `Provider-version.jar` file from [here](http://v3.bdn.parabot.org/api/bot/download/default-provider?nightly=false) - **2:** Download the latest `Provider-version.jar` file from [here](http://v3.bdn.parabot.org/api/bot/download/default-provider?nightly=false)
- **3:** Create a file called `localhost.json` in `{user}\Documents\Parabot\servers` - **3:** Create a file called `localhost.json` in `{user}\Documents\Parabot\servers`
@@ -55,7 +53,6 @@ java -jar Client-2.8.1.jar -login username password -loadlocal -v -clearcache
- `2006Scape Server` contains all the server code; mark `src` as the Sources directory - `2006Scape Server` contains all the server code; mark `src` as the Sources directory
- `2006Scape Client` contains all the client code; likewise mark `src` - `2006Scape Client` contains all the client code; likewise mark `src`
- If more than 2 arguments are passed in (can be anything), the client runs locally - If more than 2 arguments are passed in (can be anything), the client runs locally
- `2006Scape file_server` contains the file server code that is *required* to be running before a client can connect to a server. It must be running locally before a client can connect. `src` is the Sources directory
## Building from command line ## Building from command line
+3 -15
View File
@@ -10,26 +10,14 @@ services:
working_dir: /usr/src/2006scape working_dir: /usr/src/2006scape
restart: "no" restart: "no"
rsps-2006scape-file-server:
image: openjdk:8-alpine
container_name: rsps-2006scape-file-server
command: ["java", "-jar", "target/file_server-1.0-jar-with-dependencies.jar"]
volumes:
- ./2006Scape file_server:/usr/src/fileserver
working_dir: /usr/src/fileserver
ports:
- 8080:8080 # web panel
- 43595-43596:43595-43596 # File Server
restart: unless-stopped
rsps-2006scape-server: rsps-2006scape-server:
image: openjdk:8-alpine image: openjdk:8-alpine
container_name: rsps-2006scape-server container_name: rsps-2006scape-server
command: ["java", "-jar", "target/server-1.0-jar-with-dependencies.jar"] command: ["java", "-jar", "target/server-1.0-jar-with-dependencies.jar", "-c", "ServerConfig.json"]
volumes: volumes:
- ./2006Scape Server:/usr/src/server - ./2006Scape Server:/usr/src/server
working_dir: /usr/src/server working_dir: /usr/src/server
ports: ports: # You will need to open other ports if your world ID is not 1 (43597 for world 2)
- 43594:43594 # Server - 43594:43594 # Server
- 43594:43594/udp # Server - 43595-43596:43595-43596 # File Server
restart: unless-stopped restart: unless-stopped
-1
View File
@@ -11,7 +11,6 @@
<modules> <modules>
<module>2006Scape Client</module> <module>2006Scape Client</module>
<module>2006Scape file_server</module>
<module>2006Scape Server</module> <module>2006Scape Server</module>
</modules> </modules>