Server Setup: Difference between revisions

From GT New Horizons
Content added Content deleted
(info on launching a server after upgrading from j8 to j17+)
(Update guide to reflect that ServerUtilities is now included in the base GTNH modpack)
 
(59 intermediate revisions by 13 users not shown)
Line 1: Line 1:
__TOC__
<div align="justify">
A '''server''' is a way of running Minecraft that separates the game into two parts. The ''server'' simulates the world, while a ''client'' displays and handles input/output from each player and rendering the world. The two communicate constantly to create the game; a breakdown of this communication can cause [[lag]]. Running GT:NH as a separate server is required for more than one player to access the same world, as [[Quest Book|BetterQuesting]] does not support LAN. A Minecraft license is not needed for the server, but each player connecting must have a valid Minecraft account. Servers also need to be online to authenticate joining players.
</div>


== Pros/Cons ==
Jump to:
<div align="justify">
*[[#Server Setup for Linux (Oracle Cloud)|Server Setup for Linux]]
Servers enable multiplayer fun, can improve TPS even in a single player (SP) world on the same machine, allow chunk-loaded areas to run 24/7 for passive resource production, and supports party progress in the [[Quest Book]]. There are also downsides to server play. Having machines running constantly can cause breakdowns if [[maintenance]] isn't automated or something unforeseen happens in-game. Servers are more complicated to set up than a SP instance of GT:NH and require regular technical support (restarts, backups, updates, lag-busting, etc.) An improperly secured server can leave its host machine vulnerable to DDoS attacks, becoming a bitcoin farming bot, or accessed by 3rd parties. Renting a remote hosting service is safer, but usually carries a monthly fee. If self-hosting, a second computer is usually used to run just the server which has its own cost.
*[[#Server Setup for Windows|Server Setup for Windows]]
</div>


== Versions ==
<div align="justify">
Servers can run either the Java8 or Java17+ build of GT:NH. '''JRE 17+ is strongly recommended''' unless a hybrid server setup is being deployed. Players connecting to the server can run either Java8 or Java17+ with their own launcher; it doesn't have to match the server's, nor do all players need to use the same launcher/Java to play. The ''version'' of GTNH (ex. 2.4.0) ''must'' match exactly between all clients and the server. If the server updates to a different version, all players will have to update as well to join again.
</div>


{{Box-round|title=Lost? | Any of these computer terms drawing a blank? Not sure what the difference is between a JDK, JRE or Java SE?
{{Box-round|title=Java9 Servers|Java9 servers should be fully configured as downloaded. For additional instructions consult https://github.com/GTNewHorizons/lwjgl3ify#server}}
* Check out the [[Modded Minecraft Basics#Lexicon|Lexicon]]}}
= Server Update (All Platforms)=
# [http://downloads.gtnewhorizons.com/ServerPacks/ Download] a new server version of GTNH.
# Backup your server folder.
# Delete the <code>config</code>, <code>mods</code>, <code>resources</code> and <code>scripts</code> folders from your server folder.
# Replace the deleted folders with the ones from the downloaded archive.
# Port over any customized config settings. Use your backup as a reference.
# Move over JourneymapServer\world.cfg. this file contains your world uuid. If this file is lost server would generate new map uuid and clients would lose their journeymap map data for your server.
If you are switching from Java 8 to Java 17+: the server gets launched differently. Use these files from the downloaded archive: <code>lwjgl3ify-forgePatches.jar</code>, <code>java9args.txt</code>, <code>startserver-java9.bat</code> and <code>startserver-java9.sh</code>.


== Hardware and Specs ==
= Server Setup for Linux (Oracle Cloud) =
Any computer that can run Java8+ can, in theory, be used as a modded Minecraft server. Re-purposing an old machine as a server is a common choice with practical benefits. The most important specs for decent performance will be [https://www.cpubenchmark.net/singleThread.html| single thread CPU frequency] (Minecraft does not take advantage of multi-core threading), sufficient RAM and lots of storage space. For residential remote hosts, internet connection upload speed will be the limiting factor as both upload and download are used equally for a server. The closer the client(s) and server are to each other, the lower the latency and generally the better the connection will be.
== Warnings ==
* In less than half a year, Oracle has changed the terms of the Always Free tier from 4 TPU cores and 24 GB ram to 3k OCPU hours and 18k GB RAM hours. They can change the rules again in the future. Be wary.
* Your Oracle account will be terminated if you connect to the instance through VPN, so don't.
* Backup your server periodically to a non-Oracle platform, so you don't suddenly discover that your account was terminated along with all data.


Recommended Minimum:
== Introduction ==
* i3/i5 or better processor
This Linux setup uses an Oracle [https://blogs.oracle.com/developers/post/how-to-set-up-and-run-a-really-powerful-free-minecraft-server-in-the-cloud blogpost] about how to set up a server on their platform.
* 6GB of RAM +0.5GB per extra player (early game)
* 6GB of RAM +1GB per extra player (~UV [[tier]]+)
* 20GB+ storage. Platter is feasible, SSD is preferred


==== CPUs ====
You will need a debit/credit card on the signup step. Oracle will withdraw 1 Euro and put it back to check that the card is valid.
You can generally compare CPUs that are on the same architecture (e.g. 13th gen Intels are all largely comparable) but you can't compare across platforms (12th gen and 13th gen are different). This topic also gets even more complicated now that Intel is adopting a mixed architecture on their newer CPUs. The single-threaded benchmark results are good enough for most comparisons, paired with the understanding that more cores does not equal better performance for Minecraft.
As of February 2023, you can have a free server with 4 OCPU cores, 24GB RAM, and 200 GB storage on the Oracle platform.


==== Storage ====
This setup was tested on the GTNH version 2.2.3.
Minimum storage needs depends on number of worlds, range of exploration and frequency of backups. Figure ~1-2GB for an early game world, more as other dimensions get explored, and another 1-2GB for the pack/server files. Each backup is going to be a similar size, so having too many of these will quickly balloon the storage requirements. A SSD is faster and will reduce load/save times for chunks and player inventories. Most of Minecraft runs in RAM and slower platter drives should still be usable if nothing better is available. The suggestions in [[Low End PCs]] can be used to help improve performance with lower end machines.


==== Connection Speed ====
The steps are as follows:
Connection speeds are rated in Mb / Mbps, or ''megabits per second''. This is not the same as MB, the more commonly known ''megabytes''. One megabit is only 1/8th of a megabyte. Be aware of this when comparing server packages, especially with paid hosts. Companies advertise maximum upload/download rates under ideal conditions, rarely actual values which will vary based on local infrastructure and location. Utilities like https://fast.com/ can be used to check real download/upload speed. Click "Show more info" for upload.
# Sign up for Oracle Cloud.
# Set up an instance.
# Set up a GTNH server.
# Install software that regularly backs up the server.


== Server Files ==
The only hurdle during the signup step is that the debit/plastic card is mandatory. It also takes roughly a minute for the system to create your account.
<div align="justify">
While the single player pack is hosted on many launchers, a repository of all releases is maintained on the gtnewhorizons.com domain. Server packs should only be downloaded from there or links in <code>#announcements</code> on the official [[Discord]].


There are two variations of the pack, both for the server and the client. <code> ..._Server.zip</code> is for Java 8, <code>_Server_Java_17_20.zip</code> is for Java 17+. Make sure to pick the .zip file that matches the Java version the server will be running, or it will fail.
You might encounter the "Out of capacity" error when you request an instance in some of the available regions. In that case if you really need an instance in this region, please try again after a while. Due to the popularity of the service, it can take up to two months until you are able to create an instance in this region.
''Unless you have a reason not to, you should use the Java 17+ version'' as it has better garbage collection & performance on modern hardware. The only major reason not to use Java 17+ for a server is Thermos compatibility - and if you know what Thermos is, you know how to setup your own server more likely than not.


* Download the server pack from here: http://downloads.gtnewhorizons.com/ServerPacks/
== Set up an instance ==
* Download the client pack from here: http://downloads.gtnewhorizons.com/Multi_mc_downloads/
=== Create an instance ===
** Need an older client? Archive links are available in the <code>#announcements</code> channel on the GT:NH [[Discord]]
This step is taken from the Oracle's [https://blogs.oracle.com/developers/post/how-to-set-up-and-run-a-really-powerful-free-minecraft-server-in-the-cloud manual], so check it out if you need more info. A concise version of it is given in this guide.
** Files marked MMC or Multi_mc are also compatible with Prism launcher
* (Optional) Download Prism launcher from here: https://prismlauncher.org/download/
* (Optional) Download Java 17+ from here: https://adoptium.net/
** Get the JRE (not JDK), and make sure it matches your OS / architecture


While Java 17 is the most widely tested with New Horizons, any Java build of 17 or later should suffice. Check if any versions of Java are already installed on your machine before downloading more. Oracle's closed source Java will also work with GT:NH, if preferred.
Go to "Create a VM instance". VM means Virtual Machine.
This action should be in Quick Actions or in the dropdown menu that is on the upper left.


''Even though the filenames for the Java 17+ server and client packs seem to imply they're only compatible with Java versions 17 through 20, Java version 21 is also officially supported.''
You will be presented with many fields. First is the server name. Choose whatever you see fit -- this name will not be shown anywhere on the GTNH server.
</div>


== Setup Guides ==
Compartment is just a way to organize machines, so you can leave it as it is.
<div align="center">
{|class="wikitable" align-center style="width: 85%; text-align: center;"
! style="background-color:#72c1d9" colspan="2" |Platform and Hosting
|-
! style="background-color:#b9e0ec"|<big>Windows</big> !! style="background-color:#b9e0ec"|<big>Linux</big>
|-
|
*[[Server Setup (Windows, Local Host)|'''Windows Local Hosting''']]
|
*[[Server Setup (Linux, Oracle Cloud)|'''Remote Hosting on Oracle Cloud''']]
*[[Server Setup (Linux)|'''Linux Remote Hosting''']]
|}
''Note: The Linux Remote Hosting Certain contains parts that are Hetzner Cloud specific, but most parts should work with other server hosts as well. Ask the GT:NH [[Discord]] for help if you have trouble installing.''


</div>
Availability Domain can be left defaults too, however do mind that you can accidentally choose something that is not in the Always Free price tier if you change it.


== Server Update ==
The important part is the Image and Shape section. That's where you select what Operating System (OS) and hardware your server is going to use.
<div align="justify">

# Choose a version. The latest stable will be highest version number linked below, and marked "stable" in the [[Discord]] <code>#annoucnements</code> channel.
In Image, this guide suggests to use the Oracle Linux Cloud Developer image because it requires less actions to set up at the cost of taking more space. Alternatively, you can use the Oracle Linux image to reduce the bloat, but you will need to install Java 8 on it by yourself.
# [http://downloads.gtnewhorizons.com/ServerPacks/ Download] a new server version of GTNH.

# Backup your ''entire'' server folder.
In Shape, select Ampere architecture. The current free tier allows 4 CPUs and 24GB RAM, so if you don't plan to host more servers, might as well use the full capacity that you are given (4 CPUs, 24 GB RAM). After you selected the Shape, check that you still have the Always Free Eligible tag near it. If you don't, you might have selected something wrong.
# Delete the <code>config</code> (folder JourneymapServer from config will be needed later), <code>libraries</code>, <code>mods</code>, <code>resources</code> (if present) and <code>scripts</code> (if present) folders from your server folder. e.g., on a Linux server, use the following commands: <syntaxhighlight lang="bash">

cd you_server_folder
Next up is the Networking part. Select "Create new cloud network" and "Create new public subnet" if it's your first instance, or use the already-existing nets if not.
rm -r config libraries mods resources scripts

Also select "Assign a public IPv4 address". You will use this address to connect to the server.

Next is the SSH part. You can google how it works -- this guide will describe one of the options without getting into details.
Select "Generate SSH key pair", then download the private key and save it -- you will need it every time you log into the instance.

Leave the Boot volume defaults and press Create. This will start the process of creating the instance.

You will see the yellow sign on the left that says "Provisioning". After a minute, it will change to green "Running". It means you can connect to the instance. Note the fields Username and Public IP Address -- you will need them.

=== Set up network rules ===
When your Instance Details turns green and Running, click on the Subnet link in the Primary VNIC section. Then in Security Lists click on the only one that is there, the default one, then click on Add Ingress Rules.

You need to add two rules, one for each IP protocol. One for TCP, and one for UDP. Here's what you need to put in:
* Stateless field unchecked.
* Source type: CIDR.
* Source CIDR: 0.0.0.0/0.
* IP protocol: first rule TCP, second rule UDP.
* Source port range: leave it empty.
* Destination port range: 25565.

When you filled out the two rules, press Add Ingress Rules.

=== Tweak the instance ===
In order to connect to the instance, you need a "shell" program. If you're on Windows, this guide suggests to install [https://git-scm.com/downloads Git Bash] for that.

When you launch Git Bash, use the following command to connect to the instance:
<syntaxhighlight lang="text">
ssh opc@instance_IP -i path_to_SSH_key
</syntaxhighlight>
A finished example can look like this:
<syntaxhighlight lang="text">
ssh opc@144.24.170.229 -i ~/ssh-key-2022-09-07.key
</syntaxhighlight>
* ssh is the name of the command,
* opc is the user name,
* @ can be read as "at",
* 144.24.170.229 is the IPv4 address of the instance,
* -i is the flag that tells ssh to use a file as a password,
* ~/ssh-key-2022-09-07.key is the path to the private key that you downloaded.

"~" is the shortcut to your user folder that is usually located at C:/Users/%Username%. It was given just as an example of how to circumvent the issues of linux-to-windows pathing in GitBash by placing your key somewhere in your user folder.

Okay, you connected to the instance, now what? The upside of the image Oracle Linux Cloud Developer that we chose during the installation is that we don't need to bother installing Java 8 because it's pre-installed -- we just need to choose it among other versions. Type in the following to start the choice:
<syntaxhighlight lang="text">
sudo alternatives --config java
</syntaxhighlight>
You will be given a list of numbers and names. Type in the number that corresponds to java-1.8.0-openjdk.aarch64.
<syntaxhighlight lang="text">
There are 8 programs which provide 'java'.
Selection Command
-----------------------------------------------
1 java-1.8.0-openjdk.aarch64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.332.b09-1.el8_5.aarch64/jre/bin/java)
2 java-11-openjdk.aarch64 (/usr/lib/jvm/java-11-openjdk-11.0.15.0.9-2.el8_5.aarch64/bin/java)
3 /usr/java/jre1.8.0_311-aarch64/bin/java
4 /usr/java/jdk1.8.0_311-aarch64/bin/java
* 5 /usr/java/jdk-17.0.1/bin/java
6 /usr/java/jdk-11.0.13/bin/java
7 /usr/lib64/graalvm/graalvm22-ee-java11/bin/java
+ 8 /usr/lib64/graalvm/graalvm22-ee-java17/bin/java

Enter to keep the current selection[+], or type selection number: 1
</syntaxhighlight>
Other options that use Java 8 (also called 1.8.0) might work but they were not tested.

If you have chosen the bare Image at the installation step, you would use "yum list jdk*" to see available java versions and then install java1.8 which is the screen name of Java 8.

The next step is to tell the instance firewall to let the connections through:
<syntaxhighlight lang="text">
sudo firewall-cmd --permanent --zone=public --add-port=25565/tcp
sudo firewall-cmd --permanent --zone=public --add-port=25565/udp
sudo firewall-cmd --reload
</syntaxhighlight>
</syntaxhighlight>
# Replace the deleted folders with the ones from the downloaded archive. Newer versions won't have <code>/resources/</code> or <code>/scripts/</code>, this is normal.
# Transfer any customized config settings. Use your backup as a reference. ''Do not just copy old <code>/configs/</code> folders over! Move your changes as necessary or you may miss out on new functionality.''
# Restore the JourneymapServer folder. This folder contains your world UUID inside a config file. If this file is lost, the server would generate a new map UUID and clients would lose their journeymap map data for your server.
# If you are using the Java 17+ version, then update and use these files from the downloaded archive to start the server: <code>lwjgl3ify-forgePatches.jar</code>, <code>java9args.txt</code>, <code>startserver-java9.bat</code> and <code>startserver-java9.sh</code>.


{{ombox|type= content|text= '''Servers on newer Java versions (17+)'''<div>Java 17+ servers should be fully configured as downloaded. For additional instructions consult https://github.com/GTNewHorizons/lwjgl3ify#server
== Set up a GTNH server ==
}}
1. Download the server zip from here: http://downloads.gtnewhorizons.com/ServerPacks/
</div>
<syntaxhighlight lang="text">
wget http://downloads.gtnewhorizons.com/ServerPacks/GT_New_Horizons_server_version_SERVER.zip
</syntaxhighlight>
2. Check that you have unzip installed with "yum list unzip*". Install it if you didn't have it on the server.


== Whitelisting Players ==
3. Unzip the server into a folder
<div align="justify">
<syntaxhighlight lang="text">
unzip server.zip -d destination
</syntaxhighlight>
The complete command might be like:
<syntaxhighlight lang="text">
unzip GTNH-1.7.10-2.1.2.3qf.zip -d ~/minecraft_server
</syntaxhighlight>
4. In the server folder, agree to Minecraft End User License Agreement (EULA):
<syntaxhighlight lang="text">
cd your_minecraft_server_folder
echo "eula=true" > eula.txt
</syntaxhighlight>
You should have eula.txt in your server folder after this command.

5. Launch the server to test that things work:
<syntaxhighlight lang="text">
bash startserver.sh
</syntaxhighlight>
It will take several minutes to launch. The last line will likely be from [FML] about unloading world 1.

6. Whitelist yourself to get on the server:
<syntaxhighlight lang="text">
whitelist add your_nick
</syntaxhighlight>
so it will look like
<syntaxhighlight lang="text">
whitelist add jonsnowwastaken
</syntaxhighlight>
7. Connect to your server:

In client, use the same IPv4 that you used to connect through SSH and the port 25565 -- the default one for minecraft servers.
<syntaxhighlight lang="text">
instance_IP:25565
</syntaxhighlight>

8. Stop the server. We're not done with setting things up:
<syntaxhighlight lang="text">
stop
</syntaxhighlight>
After shutting down, it will begin the countdown to reboot, so press Ctrl+C to stop it completely.

== Install a mod for backups ==
Two mods are needed to back up your server: FTB-Utilities and FTB-Library.
* FTB-Utilities is located here: https://github.com/GTNewHorizons/FTB-Utilities/releases
* FTB-Library is located here: https://github.com/GTNewHorizons/FTB-Library/releases

Below is an example of how the process can go. Check if it's the most recent version of the mods before proceeding.

It would be most convenient to download the mods directly through the "wget" command to the "mods" folder on the server:
<syntaxhighlight lang="text">
cd server_directory/mods
wget https://github.com/GTNewHorizons/FTB-Utilities/releases/download/1.0.18.7-GTNH/FTBUtilities-1.7.10-1.0.18.7-GTNH.jar
wget https://github.com/GTNewHorizons/FTB-Library/releases/download/1.0.18.5-GTNH/FTBLib-1.7.10-1.0.18.5-GTNH.jar
</syntaxhighlight>
If wget fails, we can download the mods directly.

Download the mods on your machine and copy them to the server through the scp command:
<syntaxhighlight lang="text">
scp -i path_to_private_SSH_key path_to_FTBUtilities_on_your_computer opc@instance_ip:server_folder/mods/FTBUtilities_full_name.jar
scp -i path_to_private_SSH_key path_to_FTBLib_on_your_computer opc@instance_ip:server_folder/mods/FTBLib_full_name.jar
</syntaxhighlight>
A finished example might look like this:
<syntaxhighlight lang="text">
scp -i ~/.ssh/ssh-key-2022-09-07.key ~/Downloads/FTBUtilities-1.7.10-1.0.18.7-GTNH.jar opc@144.24.170.228:~/minecraft-server/mods/FTBUtilities-1.7.10-1.0.18.7-GTNH.jar
scp -i ~/.ssh/ssh-key-2022-09-07.key ~/Downloads/FTBLib-1.7.10-1.0.18.5-GTNH.jar opc@144.24.170.228:~/minecraft-server/mods/FTBLib-1.7.10-1.0.18.5-GTNH.jar
</syntaxhighlight>
* scp is the comand that stands for "secure copy",
* -i is the flag that says to use the file to identify youself, like we did with ssh,
* ~/.ssh/ssh-key-2022-09-07.key is the example of the path to the key, ~ is the shortcut for you user folder,
* ~/Downloads/FTBLib.jar is the location of the mod jar on your computer,
* opc@144.24.170.228:~/minecraft-server/mods/FTBLib-1.7.10-1.0.18.5-GTNH.jar is the location of the resulting file on the server.

Now you can launch your server again to check if the backup works.

A backup should be visible in the log immediately after the server is done loading.

The default frequency of the backups is once every two hours. To make the backups more frequent, open the config file that is created after the server is launched for the first time with the backup mods.

<syntaxhighlight lang="text">
cd server_folder/local/ftbu
vim config.json
</syntaxhighlight>

# In Vim, press "i" to go into an -- INSERT -- mode. It should be shown at the bottom of the command line.
# The backup settings are located at the top of the file in the "backups" section.
# Locate the line "backup_timer". Its default value should be 2.0, which stands for two hours.
# If you want to make a backup every 30 minutes, change the value to 0.5.
# You might want to increase the value in the line "backups_to_keep" to keep more backups. When the number reaches the specified maximum, the oldest backup is deleted.
# You might also change the folder where the backups are saved by changing the address in the "folder" line. The default works too.
# To exit vim and save the changes, first press Escape to exit the insert mode, then press ":wq", which means Write and Quit.
# If you get an error on this step and can't write into the file, check the file permissions. Although if the error is about that you can't write into the file and that's your default user, that likely means that you launched the server as root before, which can lead to many complications later, so please don't launch a server as root.

After that, we come to the last step in this manual -- actually testing that the backup works:
# Stop the server.
# Locate the "backup/" folder. By default it's in your server folder.
# Copy your world folder that is usually called "World/" to a place outside the server folder just in case the backup is broken.
# Delete your world folder in the server folder.
# Unzip the backup in the place of a deleted folder.
# Launch the server again to see if the backup is fine.

It's suggested to keep your world folder named World to prevent further complications.

If you want to use a different option, like AromaBackup, please refer to the page [[Backups and Recovery]].

== Run the server ==
So, you can launch the server, but when you leave the ssh connection, the server closes. That happens because together your ssh connection keeps things running.

To make the server run without you being connected to the ssh, one of the solutions is to use the "screen" command.

<syntaxhighlight lang="text">
# Connect to the instance
ssh opc@instance_IP -i path_to_SSH_key

# Check that screen is installed
screen --version

# Initiate a screen
screen

# Start the server
cd server_folder
bash startserver.sh
</syntaxhighlight>

To detach from the screen without terminating it, use Ctrl+A and then Ctrl+D.

To reattach to the screen, use
<syntaxhighlight lang="text">
screen -r
</syntaxhighlight>

There are more options that you can use with this command, such as multiple named screens. You can check [https://linuxize.com/post/how-to-use-linux-screen/ this] manual for the instructions.

== Improvements ==
=== More Space ===
It's very likely that 50GB will not be enough for a lategame server. You will need more storage space.

You can create an additional volume to attach to your instance.

Oracle gives 200GB for free, and the default instance takes 47GB, so it's safe to create a 150GB block-volume, as Oracle calls it.

In short, you will do the following:
# Create a 150GB block-volume. Use [https://docs.oracle.com/en-us/iaas/Content/GSG/Tasks/addingstorage.htm this] manual. Make a 150GB volume instead of 50GB that is in the guide.
# Attach the block-volume to your instance on the site. Use the same manual.
# Attach the block-volume in the virtual machine. Use the same manual.
# Format the block-volume. [https://ittutorial.org/oracle-linux-disk-format-and-mount-steps/ This] tutorial likely has the right information, but it is not certain. Please check it in other sources before applying.
# Mount the block-volume. Same as the step above -- the info was forgotten, so please check what is written in the manual.
# Either move the whole server to the new block-volume or move only backups. Better to move the whole server in order to reduce the chance of error.
# Optionally, you can make the block-volume to mount automatically when the instance launches. Use [https://docs.oracle.com/en-us/iaas/Content/Block/References/fstaboptionsconsistentdevicepaths.htm#fstab_Options_for_Block_Volumes_Using_Consistent_Device_Paths this] manual. However, be very careful on this step. As written at the bottom of the manual, you can brick your instance if you make a mistake and would have to use the site-console to revert changes. However, the result is well worth it -- you won't have to remember how to mount a block-volume if you need to restart the instance.

=== Chunk Loading ===
The 16x16 pieces of the world are called chunks. When a player loads into the world, the server starts to simulate the chunks around them -- it loads these chunks. You want some chunks to remain loaded when you're away. For example, for the machines to continue working, or for the crops to grow.

To have the functionality to load chunks, you need to add two mods both to the client and server -- [https://github.com/GTNewHorizons/FTB-Utilities/releases FTB-Utilities] and [https://github.com/GTNewHorizons/FTB-Library/releases FTB-Library]. To add the mods, copy .jar files to the "mods" folders -- two jars in total. The exact commands for that are provided in the "mods for backups" chapter above.

After adding the mods, restart both the server and the client. After connecting to the server, you should see new icons to the left of the inventory. You can hide some of the icons through their settings. One of the icons opens a top-down map where you can manage the chunks. You can claim them and then select them again to load them -- a tooltip will indicate if a chunk is claimed or loaded when you hover over it. On FTBLib 1.0.18.5 and FTBUtilities 1.0.18.7, the LMB claims a chunk, Ctrl+LMB chunkloads a chunk, RMB unloads and unclaims a chunk.

If the described way to load chunks is not fitting, the Windows part of the manual describes the alternatives.

= Server Setup for Windows =
== Warnings ==
This part of the guide was last revised in November 2020 with version 2.0.9.0. The download links are compatible with each other.

If you follow this guide and try to connect, your launcher may have downloaded the latest client instead.

== Introduction ==
This structure of this guide is as follows:

* Downloading the Files
* Server Setup
* Starting and Stopping the Server
* Server Backups
* FAQ (Frequently Asked Questions)

== Downloading the Files ==
While our pack is hosted on many launchers we also maintain a repository of all of our releases. For the purpose of this guide we will be utilizing our hosted repositories as well as the MultiMC launcher.

# Download the server pack from here: http://downloads.gtnewhorizons.com/ServerPacks/
# Download MultiMC from here: https://files.multimc.org/downloads/mmc-stable-win32.zip
# Download the client pack from here: http://downloads.gtnewhorizons.com/Multi_mc_downloads/

''Note: Please reference this guide on how to setup and install our pack in MultiMC (this guide will only cover the server portion.): [[Installing and Migrating]]''[[File:Download Directory.png|alt=Download Directory Image|none|thumb|Your downloads folder should look like this.]]<br />
== Server Setup ==
=== Step 1: Extract the Server Files ===
[[File:Extract Server Files.png|alt=Extract Server Files Image|none|thumb|Right click on the server files ZIP archive and choose "Extract All..."]]
[[File:Extraction Destination.png|alt=Extraction Destination Image|none|thumb|Once you've chosen your name for the folder you can hit extract. Whether or not you uncheck the "Show extracted files when complete" checkbox is up to you.]]

=== Step 2: Preparing to Start the Server ===
[[File:Create EULA.txt File.png|alt=New File Image|none|thumb|Open up the folder you extracted the files into (in our case it is GTNH-2.0.9.0-Server). Right click in the empty space and choose:New > Text Document.]]
[[File:EULA.txt File.png|alt=Change Filename Image|none|thumb|Change the name of this TXT file to: eula.txt.]]
[[File:EULA.txt File Content.png|alt=File Content|none|thumb|Add the following text to the eula.txt file. Then save and close the file.]]
By setting the text of the EULA.txt file to true you are agreeing to the [https://account.mojang.com/documents/minecraft_eula following] EULA.

=== Step 3: Starting and Stopping the Server ===

Starting the server at this point is very straight forward. Simply double click:<syntaxhighlight lang="text">
startserver.bat
</syntaxhighlight>
[[File:Firewall Warning.png|alt=Firewall Prompt|none|thumb|If you get the following prompt while the server is starting you can hit Allow Access. It is recommended making sure you're only allowing access on Private Networks (this doesn't impact if you want to open your modem/router for friends to join but is just best practice).]]


''Note: It will take quite some time for the server to startup.''

<br />
[[File:Terminal Window.png|alt=Console Window Image|none|thumb|When your server is ready you will typically see what is boxed in by red at the bottom. At this point your server is running and you can connect to it!]]

In order to stop the server simply type "stop" and press Enter:<syntaxhighlight lang="text">
stop
</syntaxhighlight>The server will scroll some information by and then the window will close when it shuts down entirely.

DO NOT just close the command window instead of using stop. Doing so may corrupt your world data and your world will become unplayable.

<br />

=== Step 4: Whitelisting Players ===
In order to connect to the server yourself or allow other players to connect you must add them to the whitelist. To do this use the following command inside the server console window:<syntaxhighlight lang="text">
In order to connect to the server yourself or allow other players to connect you must add them to the whitelist. To do this use the following command inside the server console window:<syntaxhighlight lang="text">
Syntax: whitelist add <playername>
Syntax: whitelist add <playername>
Line 362: Line 97:
Example: whitelist add shawnbyday
Example: whitelist add shawnbyday
</syntaxhighlight>
</syntaxhighlight>
</div>


== Server Backups ==
== Server Backups ==
<div align="justify">
Go ahead and follow the above procedure to stop the server.
Go ahead and follow the above procedure to stop the server.


As of GT:NH 2.6.0, the server and client ship with ''[https://github.com/GTNewHorizons/ServerUtilities/releases Server Utilities]'', which is the updated GT:NH fork of FTB Utilities. Only if running an older version, you'll need to manually download the most recent release and the file that ends in {numbers}.jar (so 2.0.3.jar, not -dev.jar or -sources.jar). Place the file(s) in your mods directory on the server (and it is recommended to put it on your client, also, so you can get access to claims, chunkloading, etc. See [[Additional Mods]] for more details or the repository [https://github.com/GTNewHorizons/ServerUtilities#readme Readme].
In this step we are going to download and install AromaBackup (a simple backup mod). Running a server means you're responsible for everything on it. The best way to have your own back is to run a backup. We see many people coming into Discord asking for help and they don't have a backup. Backups are deliberate not magic. Don't just set it up but also take the time to ensure it is working. Better yet also take the time to validate the backup itself can be restored. That's what makes a good administrator.


At this point you can go ahead and start your server again. By default [[ServerUtilities]] will backup your server every 30 minutes. You can change this in the <code>serverutilities.cfg</code> configuration file which will be located in the <code>''your_instance''/serverutilities/</code> folder. Modifying configuration files is outside of the scope of this guide, however, it is recommended to set the backup interval to be equal to or less the amount of work you are willing to lose. The default rotation keeps the last 12 backups - so the last 6 hours of play. '''''Make sure you have enough space for the world and all its backups! If you run out of space you could corrupt your world save!'''''
''Note: You need AromaBackup and AromaCore.''
</div>


=== Chunk Loading ===
# Download AromaBackup here: https://www.curseforge.com/minecraft/mc-mods/aromabackup/download/2284754/file
<div align="justify">
# Download AromaCore here: https://www.curseforge.com/minecraft/mc-mods/aroma1997core/download/2257644/file<br />
The 16x16 pieces of the world are called chunks. When a player loads into the world, the server starts to simulate the chunks around them -- it loads these chunks. You want some chunks to remain loaded when you're away. For example, for the machines to continue working, or for the crops to grow.


To have the functionality to load chunks, you need to add ServerUtilities (as of 2.6.0, this is included by default) or FTBUtilities & Library. ServerUtilties is recommended since it's a fork of FTBU modified specifically for GTNH. Do not install both of these at once, only one is necessary.
[[File:Aroma Downloads.png|alt=Cut Image|none|thumb|Holding CTRL on your keyboard single left click on both: AromaBackup and AromaCore.
* [https://github.com/GTNewHorizons/ServerUtilities/releases Server Utilities]
* [https://github.com/GTNewHorizons/FTB-Utilities/releases FTB-Utilities] and [https://github.com/GTNewHorizons/FTB-Library/releases FTB-Library].


To add the mod(s) to a pre-2.6.0 server, upload .jar files to the "mods" folder. The exact commands (wget/scp) for that are provided in the "mods for backups" chapter above, make sure to remove old version the mods before upload the new version.


After adding the mods, restart both the server and the client. After connecting to the server, you should see new icons to the left of the inventory. You can hide some of the icons through their settings. One of the icons opens a top-down map where you can manage the chunks. You can claim them and then select them again to load them -- a tooltip will indicate if a chunk is claimed or loaded when you hover over it. On FTBLib 1.0.18.5 and FTBUtilities 1.0.18.7, the LMB claims a chunk, Ctrl+LMB chunkloads a chunk, RMB unloads and unclaims a chunk.
Right click on them and select "Cut". (Alternatively you can hold down CTRL and press X on your keyboard).]]
[[File:Paste Aroma Mods.png|alt=Paste Image|none|thumb|Next we need to go into our server folder. If you've been following along to this guide this will be located here:


If the described way to load chunks is not fitting, the Windows part of the manual describes the alternatives.
</div>


C:\Users\<username>\Downloads\GTNH-2.0.9.0-Server\mods


Right click on any empty space in this folder and choose "Paste". (Alternatively you can hold down CTRL and press V on your keyboard).]]


At this point you can go ahead and start your server again. By default AromaBackup will backup your server every 30 minutes. You can change this in the AromaBackup configuration file which will be located in: C:\Users\<username>\Downloads\GTNH-2.0.9.0-Server\config folder. Modifying configuration files is outside of the scope of this guide, however, it is recommended to set the backup interval to be equal to or less the amount of work you are willing to lose.
== FAQ (Frequently Asked Questions) ==
== FAQ (Frequently Asked Questions) ==
<div align="justify">
#How do I connect to my server?
##On the Multiplayer Game you need to add a server and the server address can be (note by default the server is set to use the default Minecraft port which is 25565):
###localhost
###127.0.0.1
#How do I let my friends connect?
##You will need to find out what your external IP address is (you can find this using Google).
##You then need to setup port forwarding on your modem/router (this is outside the scope of this guide and requires special attention to detail for privacy and security reasons - again Google is your friend here).
</div>


{{Template:Navbar GTNH}}
# How do I connect to my server?
[[Category: Guides]][[Category:Multiplayer]]
## On the Multiplayer Game you need to add a server and the server address can be (note by default the server is set to use the default Minecraft port which is 25565):
### localhost
### 127.0.0.1
# How do I let my friends connect?
## You will need to find out what your external IP address is (you can find this using Google).
## You then need to setup port forwarding on your modem/router (this is outside the scope of this guide and requires special attention to detail for privacy and security reasons - again Google is your friend here).

[[Category: Guides]]

Latest revision as of 20:57, 15 May 2024

A server is a way of running Minecraft that separates the game into two parts. The server simulates the world, while a client displays and handles input/output from each player and rendering the world. The two communicate constantly to create the game; a breakdown of this communication can cause lag. Running GT:NH as a separate server is required for more than one player to access the same world, as BetterQuesting does not support LAN. A Minecraft license is not needed for the server, but each player connecting must have a valid Minecraft account. Servers also need to be online to authenticate joining players.

Pros/Cons

Servers enable multiplayer fun, can improve TPS even in a single player (SP) world on the same machine, allow chunk-loaded areas to run 24/7 for passive resource production, and supports party progress in the Quest Book. There are also downsides to server play. Having machines running constantly can cause breakdowns if maintenance isn't automated or something unforeseen happens in-game. Servers are more complicated to set up than a SP instance of GT:NH and require regular technical support (restarts, backups, updates, lag-busting, etc.) An improperly secured server can leave its host machine vulnerable to DDoS attacks, becoming a bitcoin farming bot, or accessed by 3rd parties. Renting a remote hosting service is safer, but usually carries a monthly fee. If self-hosting, a second computer is usually used to run just the server which has its own cost.

Versions

Servers can run either the Java8 or Java17+ build of GT:NH. JRE 17+ is strongly recommended unless a hybrid server setup is being deployed. Players connecting to the server can run either Java8 or Java17+ with their own launcher; it doesn't have to match the server's, nor do all players need to use the same launcher/Java to play. The version of GTNH (ex. 2.4.0) must match exactly between all clients and the server. If the server updates to a different version, all players will have to update as well to join again.


edit 

Lost?

Any of these computer terms drawing a blank? Not sure what the difference is between a JDK, JRE or Java SE?


Hardware and Specs

Any computer that can run Java8+ can, in theory, be used as a modded Minecraft server. Re-purposing an old machine as a server is a common choice with practical benefits. The most important specs for decent performance will be single thread CPU frequency (Minecraft does not take advantage of multi-core threading), sufficient RAM and lots of storage space. For residential remote hosts, internet connection upload speed will be the limiting factor as both upload and download are used equally for a server. The closer the client(s) and server are to each other, the lower the latency and generally the better the connection will be.

Recommended Minimum:

  • i3/i5 or better processor
  • 6GB of RAM +0.5GB per extra player (early game)
  • 6GB of RAM +1GB per extra player (~UV tier+)
  • 20GB+ storage. Platter is feasible, SSD is preferred

CPUs

You can generally compare CPUs that are on the same architecture (e.g. 13th gen Intels are all largely comparable) but you can't compare across platforms (12th gen and 13th gen are different). This topic also gets even more complicated now that Intel is adopting a mixed architecture on their newer CPUs. The single-threaded benchmark results are good enough for most comparisons, paired with the understanding that more cores does not equal better performance for Minecraft.

Storage

Minimum storage needs depends on number of worlds, range of exploration and frequency of backups. Figure ~1-2GB for an early game world, more as other dimensions get explored, and another 1-2GB for the pack/server files. Each backup is going to be a similar size, so having too many of these will quickly balloon the storage requirements. A SSD is faster and will reduce load/save times for chunks and player inventories. Most of Minecraft runs in RAM and slower platter drives should still be usable if nothing better is available. The suggestions in Low End PCs can be used to help improve performance with lower end machines.

Connection Speed

Connection speeds are rated in Mb / Mbps, or megabits per second. This is not the same as MB, the more commonly known megabytes. One megabit is only 1/8th of a megabyte. Be aware of this when comparing server packages, especially with paid hosts. Companies advertise maximum upload/download rates under ideal conditions, rarely actual values which will vary based on local infrastructure and location. Utilities like https://fast.com/ can be used to check real download/upload speed. Click "Show more info" for upload.

Server Files

While the single player pack is hosted on many launchers, a repository of all releases is maintained on the gtnewhorizons.com domain. Server packs should only be downloaded from there or links in #announcements on the official Discord.

There are two variations of the pack, both for the server and the client. ..._Server.zip is for Java 8, _Server_Java_17_20.zip is for Java 17+. Make sure to pick the .zip file that matches the Java version the server will be running, or it will fail. Unless you have a reason not to, you should use the Java 17+ version as it has better garbage collection & performance on modern hardware. The only major reason not to use Java 17+ for a server is Thermos compatibility - and if you know what Thermos is, you know how to setup your own server more likely than not.

While Java 17 is the most widely tested with New Horizons, any Java build of 17 or later should suffice. Check if any versions of Java are already installed on your machine before downloading more. Oracle's closed source Java will also work with GT:NH, if preferred.

Even though the filenames for the Java 17+ server and client packs seem to imply they're only compatible with Java versions 17 through 20, Java version 21 is also officially supported.

Setup Guides

Platform and Hosting
Windows Linux

Note: The Linux Remote Hosting Certain contains parts that are Hetzner Cloud specific, but most parts should work with other server hosts as well. Ask the GT:NH Discord for help if you have trouble installing.

Server Update

  1. Choose a version. The latest stable will be highest version number linked below, and marked "stable" in the Discord #annoucnements channel.
  2. Download a new server version of GTNH.
  3. Backup your entire server folder.
  4. Delete the config (folder JourneymapServer from config will be needed later), libraries, mods, resources (if present) and scripts (if present) folders from your server folder. e.g., on a Linux server, use the following commands:
    cd you_server_folder
    rm -r config libraries mods resources scripts
    
  5. Replace the deleted folders with the ones from the downloaded archive. Newer versions won't have /resources/ or /scripts/, this is normal.
  6. Transfer any customized config settings. Use your backup as a reference. Do not just copy old /configs/ folders over! Move your changes as necessary or you may miss out on new functionality.
  7. Restore the JourneymapServer folder. This folder contains your world UUID inside a config file. If this file is lost, the server would generate a new map UUID and clients would lose their journeymap map data for your server.
  8. If you are using the Java 17+ version, then update and use these files from the downloaded archive to start the server: lwjgl3ify-forgePatches.jar, java9args.txt, startserver-java9.bat and startserver-java9.sh.

Whitelisting Players

In order to connect to the server yourself or allow other players to connect you must add them to the whitelist. To do this use the following command inside the server console window:
Syntax: whitelist add <playername>

Example: whitelist add shawnbyday

Server Backups

Go ahead and follow the above procedure to stop the server.

As of GT:NH 2.6.0, the server and client ship with Server Utilities, which is the updated GT:NH fork of FTB Utilities. Only if running an older version, you'll need to manually download the most recent release and the file that ends in {numbers}.jar (so 2.0.3.jar, not -dev.jar or -sources.jar). Place the file(s) in your mods directory on the server (and it is recommended to put it on your client, also, so you can get access to claims, chunkloading, etc. See Additional Mods for more details or the repository Readme.

At this point you can go ahead and start your server again. By default ServerUtilities will backup your server every 30 minutes. You can change this in the serverutilities.cfg configuration file which will be located in the your_instance/serverutilities/ folder. Modifying configuration files is outside of the scope of this guide, however, it is recommended to set the backup interval to be equal to or less the amount of work you are willing to lose. The default rotation keeps the last 12 backups - so the last 6 hours of play. Make sure you have enough space for the world and all its backups! If you run out of space you could corrupt your world save!

Chunk Loading

The 16x16 pieces of the world are called chunks. When a player loads into the world, the server starts to simulate the chunks around them -- it loads these chunks. You want some chunks to remain loaded when you're away. For example, for the machines to continue working, or for the crops to grow.

To have the functionality to load chunks, you need to add ServerUtilities (as of 2.6.0, this is included by default) or FTBUtilities & Library. ServerUtilties is recommended since it's a fork of FTBU modified specifically for GTNH. Do not install both of these at once, only one is necessary.

To add the mod(s) to a pre-2.6.0 server, upload .jar files to the "mods" folder. The exact commands (wget/scp) for that are provided in the "mods for backups" chapter above, make sure to remove old version the mods before upload the new version.

After adding the mods, restart both the server and the client. After connecting to the server, you should see new icons to the left of the inventory. You can hide some of the icons through their settings. One of the icons opens a top-down map where you can manage the chunks. You can claim them and then select them again to load them -- a tooltip will indicate if a chunk is claimed or loaded when you hover over it. On FTBLib 1.0.18.5 and FTBUtilities 1.0.18.7, the LMB claims a chunk, Ctrl+LMB chunkloads a chunk, RMB unloads and unclaims a chunk.

If the described way to load chunks is not fitting, the Windows part of the manual describes the alternatives.

FAQ (Frequently Asked Questions)

  1. How do I connect to my server?
    1. On the Multiplayer Game you need to add a server and the server address can be (note by default the server is set to use the default Minecraft port which is 25565):
      1. localhost
      2. 127.0.0.1
  2. How do I let my friends connect?
    1. You will need to find out what your external IP address is (you can find this using Google).
    2. You then need to setup port forwarding on your modem/router (this is outside the scope of this guide and requires special attention to detail for privacy and security reasons - again Google is your friend here).