Release v2.2.0

This commit is contained in:
Fazri Gading
2026-01-31 04:04:34 +08:00
parent f1d01ac78c
commit a09b082152
9 changed files with 180 additions and 192 deletions

View File

@@ -2,7 +2,7 @@
# Maintainer: Fazri Gading <fazrigading@gmail.com> # Maintainer: Fazri Gading <fazrigading@gmail.com>
# This PKGBUILD is for Github Releases # This PKGBUILD is for Github Releases
pkgname=Hytale-F2P pkgname=Hytale-F2P
pkgver=2.1.2 pkgver=2.2.0
pkgrel=1 pkgrel=1
pkgdesc="Hytale-F2P - unofficial Hytale Launcher for free to play with multiplayer support" pkgdesc="Hytale-F2P - unofficial Hytale Launcher for free to play with multiplayer support"
arch=('x86_64') arch=('x86_64')

View File

@@ -8,7 +8,7 @@
</header> </header>
![GitHub Downloads](https://img.shields.io/github/downloads/amiayweb/Hytale-F2P/total?style=for-the-badge) ![GitHub Downloads](https://img.shields.io/github/downloads/amiayweb/Hytale-F2P/total?style=for-the-badge)
![Version](https://img.shields.io/badge/Version-2.1.2-green?style=for-the-badge) ![Version](https://img.shields.io/badge/Version-2.2.0-green?style=for-the-badge)
![Platform](https://img.shields.io/badge/Platform-Windows%20%7C%20macOS%20%7C%20Linux-orange?style=for-the-badge) ![Platform](https://img.shields.io/badge/Platform-Windows%20%7C%20macOS%20%7C%20Linux-orange?style=for-the-badge)
![License](https://img.shields.io/badge/License-Educational-blue?style=for-the-badge) ![License](https://img.shields.io/badge/License-Educational-blue?style=for-the-badge)
@@ -218,7 +218,7 @@
# Fedora/RHEL-based # Fedora/RHEL-based
sudo dnf install hytale-f2p-launcher.rpm sudo dnf install hytale-f2p-launcher.rpm
# Debian/Ubuntu # Debian/Ubuntu
sudo apt install -y libasound2 libpng16-16 libpng-dev libicu76 sudo apt install -y libasound2 libpng16-16 libpng-dev libicu76 # Not needed in v2.2.0+
sudo dpkg -i hytale-f2p-launcher.deb sudo dpkg -i hytale-f2p-launcher.deb
``` ```
* **Arch Linux (pacman):** Install the package using: * **Arch Linux (pacman):** Install the package using:
@@ -237,11 +237,6 @@
> [!NOTE] > [!NOTE]
> Make sure to adjust the filename correctly with the version and the architecture type. TIP: Use `cd` command to the package location. > Make sure to adjust the filename correctly with the version and the architecture type. TIP: Use `cd` command to the package location.
4. **Troubleshooting:**
* **FUSE:** If the AppImage fails to launch on newer distributions, ensure `libfuse2` (or `fuse2` on Arch/Fedora) is installed.
* **Desktop Entry:** After installing via `.rpm`, `.deb`, or `.pkg.tar.zst`, the launcher should automatically appear in your App Library/Grid.
* Missing libxcrypt.so.1: Install `libxcrypt-compat` using your package manager
### 🍎 macOS Installation ### 🍎 macOS Installation
> [!NOTE] > [!NOTE]
@@ -256,7 +251,7 @@
* Look for the message regarding "Hytale F2P Launcher" and click **Open Anyway**. * Look for the message regarding "Hytale F2P Launcher" and click **Open Anyway**.
* Authenticate with your password and click **Open**. * Authenticate with your password and click **Open**.
#### **Advanced: Manual Installation (.zip)** #### **Advanced macOS: Manual Installation (.zip)**
The `.zip` version is useful for users who prefer a portable installation or need to bypass specific permission issues. The `.zip` version is useful for users who prefer a portable installation or need to bypass specific permission issues.
1. **Extract:** Download and unzip the file to your desired location (e.g., `~/Applications`). 1. **Extract:** Download and unzip the file to your desired location (e.g., `~/Applications`).
@@ -278,18 +273,19 @@ The `.zip` version is useful for users who prefer a portable installation or nee
1. Open your Singleplayer World 1. Open your Singleplayer World
2. Pause the game (Esc) > select Online Play > Turn on `Allow Other Players to Join` > Set password if needed > Press `Save`. 2. Pause the game (Esc) > select Online Play > Turn on `Allow Other Players to Join` > Set password if needed > Press `Save`.
3. Check the status `Connected via STUN` or `Connected via UPnP`. 3. Check the status `Connected via UPnP`.
4. If your friends can't connect to your hosted Online-Play feature, please follow **Local Dedicated Server** tutorial.
## 🖧 Host a Dedicated Server ## 🖧 Host a Dedicated Server
> [!NOTE] > [!NOTE]
> If you already have the patched `HytaleServer.jar` in `HytaleF2P/{release/pre-release}/package/game/latest/Server`, you can use it to host local dedicated server. > If you already have the patched `HytaleServer.jar` in `HytaleF2P/{release/pre-release}/package/game/latest/Server`, you can use it to host local dedicated server. Put the `.bat`/`.sh` script from our Discord server inside your `.../latest/Server` folder.
> [!TIP] > [!TIP]
> Use services like Playit.gg, Tailscale, Radmin VPN to share UDP connection if setting up router as an admin is not possible. > Use services like Playit.gg, Tailscale, Radmin VPN to share UDP connection if setting up router as an admin is not possible.
> [!WARNING] > [!WARNING]
> `Hytale-F2P-Server.rar` file is needed to set up a server on non-playing hardware (such as VPS/server hosting). Linux ARM64 is supported for server only. > `Hytale-F2P-Server.rar` file is needed to set up a server on non-playing hardware (such as VPS/server hosting). Additional: **Linux ARM64** is supported for server only, not client.
> [!IMPORTANT] > [!IMPORTANT]
> See detailed information of setting up a server here: [SERVER.md](SERVER.md). Download the latest patched JAR, the patched RAR, or the SH/BAT scripts from channel `#open-public-server` in our Discord Server. > See detailed information of setting up a server here: [SERVER.md](SERVER.md). Download the latest patched JAR, the patched RAR, or the SH/BAT scripts from channel `#open-public-server` in our Discord Server.
@@ -310,12 +306,19 @@ See [BUILD.md](docs/BUILD.md) for comprehensive build instructions.
## 📋 Changelog ## 📋 Changelog
### 🆕 v2.1.2 ### 🆕 v2.2.0
- - 🔃 **Game Patches Auto-Update Improvement:** No need to install 1.5GB for every updates! Game updates now reduced to almost **~90%** (Hytale Game Update 3 to 4 only take ~150MB).
- 🌎 **New Translation**: New France 🇲🇫, German 🇩🇪, Indonesian 🇮🇩, Russia 🇷🇺, and Swedish 🇸🇪 Translation added to the Launcher. - 🔗 **Fix Mods Manager Issue:** Mods now can be downloaded seamlessly from the launcher, use Profiles to install your preferred mod. It will also automatically copy from selected `Profile/<profilename>` to the `Mods` folder.
- 💾 **New User Data Location:** UserData Migration to Centralized Location. User data now preserves in `HytaleSaves` located beside `HytaleF2P` folder.
- 🎮 **SteamDeck and Ubuntu/Debian-based Library Fix:** Replace bundled `libzstd.so` with system version to fix `glibc 2.41+` crash.
- 🍎 **Launcher auto-update Improvement for macOS:** Fix auto-install fails on unsigned app. Added option to download the new launcher version on Github website.
- 🌎 **New Translations**: Added France 🇲🇫, German 🇩🇪, Indonesian 🇮🇩, Russia 🇷🇺, and Swedish 🇸🇪 translations to the launcher.
- 🔐 **Fixes Tar Vulnerability:** Updates `tar` from version `6.2.1` to `7.5.7` for vulnerability issue.
- ⭐ **Added Features Servers:** Don't know which one to play? Join our Featured Servers!
- 💬 **Removed Chat Pane and Add Discord Feature:** Useless chat feature, we got Discord. Join it, NOW. Also added Discord RPC features to Github and our Discord Server. SHOW OFF TO YOUR FRIENDS.
- 🔍 **Investigation on Avatar Not Saving Bug:** We are currently investigating this issue.
<details> <details><summary>Click here to see older Changelogs</summary>
<summary>Click here to see older Changelogs</summary>
### 🔄 v2.1.1 ### 🔄 v2.1.1
- 🛠️ **Fix Bug EPERM**: EPERM or Error Permission in creating/removing process in reinstalling is now fixed. - 🛠️ **Fix Bug EPERM**: EPERM or Error Permission in creating/removing process in reinstalling is now fixed.
@@ -390,6 +393,7 @@ See [BUILD.md](docs/BUILD.md) for comprehensive build instructions.
- 🎨 **Modern Interface** - Clean, intuitive design - 🎨 **Modern Interface** - Clean, intuitive design
- 🌟 **First Release** - Core launcher functionality - 🌟 **First Release** - Core launcher functionality
</details> </details>
--- ---
## 👥 Contributors ## 👥 Contributors
@@ -403,20 +407,30 @@ See [BUILD.md](docs/BUILD.md) for comprehensive build instructions.
</div> </div>
### 🏆 Project Creator ### 🏆 Project Creator
- [**@amiayweb**](https://github.com/amiayweb) - *Lead Developer & Project Creator | Windows* - [**@amiayweb**](https://github.com/amiayweb) - *Lead Developer & Project Creator*
- [**@Relyz1993**](https://github.com/Relyz1993) - *Server Helper & Second Developer & Project Creator* - [**@Relyz1993**](https://github.com/Relyz1993) - *Server Helper & Second Developer & Project Creator*
### 🌟 Contributors ### 🌟 Main Contributors
- [**@sanasol**](https://github.com/sanasol) - *Main Issues fixer | Multiplayer Patcher* - [**@sanasol**](https://github.com/sanasol) - *Main Issues fixer | Multiplayer Patcher*
- [**@Terromur**](https://github.com/Terromur) - *Main Issues fixer | Beta tester* - [**@Terromur**](https://github.com/Terromur) - *Main Issues fixer | Beta tester*
- [**@fazrigading**](https://github.com/fazrigading) - *Main Issues fixer | Beta tester* - [**@fazrigading**](https://github.com/fazrigading) - *Main Issues fixer | Beta tester | Github Release Maintainer*
- [**@ericiskoolbeans**](https://github.com/ericiskoolbeans) - *Beta Tester* - [**@ericiskoolbeans**](https://github.com/ericiskoolbeans) - *Beta Tester*
- [**@chasem-dev**](https://github.com/chasem-dev) - *Issues fixer* - [**@chasem-dev**](https://github.com/chasem-dev) - *Issues fixer*
- [**@crimera**](https://github.com/crimera) - *Issues fixer*
- [**@Citeli-py**](https://github.com/Citeli-py) - *Issues fixer*
- [**@Rahul-Sahani04**](https://github.com/Rahul-Sahani04) - *Issues fixer* - [**@Rahul-Sahani04**](https://github.com/Rahul-Sahani04) - *Issues fixer*
- [**@xSamiVS**](https://github.com/xSamiVS) - *Language Translator* - [**@xSamiVS**](https://github.com/xSamiVS) - *Issues fixer | Language Translator*
- [**@BlackSystemCoder**](https://github.com/BlackSystemCoder) - *Language Translator*
#### 🎟️ Fresh Contributors
- [**@GreenKod**](https://github.com/GreenKod) - *Code refractor*
- [**@Citeli-py**](https://github.com/Citeli-py) - *Linux fix & packages version in early release*
- [**@crimera**](https://github.com/crimera) - *Generate new UUID for new username string feature*
- [**@letha11**](https://github.com/letha11) - *CSS filename typo fix*
- [**@colbster937**](https://github.com/colbster937) - *Icon upscaler*
- [**@ArnavSingh77**](https://github.com/ArnavSingh77) - *Close game launcher on start feature, improve app termination behavior*
- [**@TalesAmaral**](https://github.com/TalesAmaral) - *BUILD.md link fix in README.md*
#### 🌐 Language Translators
- [**@BlackSystemCoder**](https://github.com/BlackSystemCoder) - *Russian Language Translator*
- [**@walti0**](https://github.com/walti0) - *Polish Language Translator*
--- ---

280
SERVER.md
View File

@@ -6,18 +6,35 @@ Play with friends online! This guide covers both easy in-game hosting and advanc
**Table of Contents** **Table of Contents**
* [A. Host your Singleplayer World](SERVER.md#1-host-your-singleplayer-world-to-your-friends-online-play-feature) * ["Server" Term and Definition](#server-term-and-definiton)
* [1. Using In-Game Invite Code / Online Play Feature]() * [Server Directory Location](#server-directory-location)
* [Common Issues (UPnP/NAT/STUN) on Online Play](SERVER.md#common-issues-upnpnatstun-on-online-play) * [A. Online Play Feature](#a-online-play-feature)
* [2. Using Playit.gg \[Recommended\]]() * [1. Host Your Singleplayer World using In-Game Invite Code](#1-host-your-singleplayer-world-using-in-game-invite-code)
* [3. Using Radmin VPN]() * [Common Issues (UPnP/NAT/STUN) on Online Play](#common-issues-upnpnatstun-on-online-play)
* [B. Dedicated Server] * [2. Host Your Singleplayer World using Tailscale](#2-host-your-singleplayer-world-using-tailscale)
* [1. ] * [B. Local Dedicated Server](#b-local-dedicated-server)
* [1. Using Playit.gg (Recommended) ✅](#1-using-playitgg-recommended-)
* [2. Using Radmin VPN](#2-using-radmin-vpn)
* [C. 24/7 Dedicated Server (Advanced)](#c-247-dedicated-server-advanced)
* [Step 1: Get the Files Ready](#step-1-get-the-files-ready)
* [Step 2: Place HytaleServer.jar in the Server directory](#step-2-place-hytaleserverjar-in-the-server-directory)
* [Step 3: Run the Server](#step-3-run-the-server)
* [D. Tinkering Guides](#d-tinkering-guides)
* [1. Network Setup](#1-network-setup)
* [2. Configuration](#2-configuration)
* [3. RAM Allocation Guide](#3-ram-allocation-guide)
* [4. Server Commands](#4-server-commands)
* [5. Command Line Options](#5-command-line-options)
* [6. File Structure](#6-file-structure)
* [7. Backups](#7-backups)
* [8. Troubleshooting](#8-troubleshooting)
* [9. Docker Deployment (Advanced)](#9-docker-deployment-advanced)
* [10. Getting Help](#10-getting-help)
--- ---
### "Server" Term and Definiton ### "Server" Term and Definiton
"HytaleServer.jar", which called as "Server", functions as the place of authentication of the client that supposed to go to Hytale Official Authentication System but we managed our way to redirect it on our service (sanasol.ws), handling approximately thousands of users to play this game for free to worldwide players. "HytaleServer.jar", which called as "Server", functions as the place of authentication of the client that supposed to go to Hytale Official Authentication System but we managed our way to redirect it on our service (Thanks to Sanasol), handling approximately thousands of players worldwide to play this game for free.
Kindly support us via [our Buy Me a Coffee link](https://buymeacoffee.com/hf2p) if you think our launcher took a big part of developing this Hytale community for the love of the game itself. Kindly support us via [our Buy Me a Coffee link](https://buymeacoffee.com/hf2p) if you think our launcher took a big part of developing this Hytale community for the love of the game itself.
**We will always advertise, always pushing, and always asking, to every users of this launcher to purchase the original game to help the official development of Hytale**. **We will always advertise, always pushing, and always asking, to every users of this launcher to purchase the original game to help the official development of Hytale**.
@@ -39,9 +56,12 @@ Here are the directory locations of Server folder if you have installed
--- ---
# Host # A. Host Your Singleplayer World
## 1 - Host your Singleplayer World to your friends (Online Play Feature) This feature is perfect for 1-5 players that want to just play instantly with friends.
Terms and conditions applies.
## 1. Using Online-Play Feature / In-Game Invite Code
The easiest way to play with friends - no manual server setup required! The easiest way to play with friends - no manual server setup required!
*The game automatically handles networking using UPnP/STUN/NAT traversal.* *The game automatically handles networking using UPnP/STUN/NAT traversal.*
@@ -53,7 +73,7 @@ The easiest way to play with friends - no manual server setup required!
> [!TIP] > [!TIP]
> Hoster need to make sure that the router can use UPnP: read router docs, wiki, or watch Youtube tutorials. > Hoster need to make sure that the router can use UPnP: read router docs, wiki, or watch Youtube tutorials.
> >
> If you encounter any problem, check Common Issues section below > If you encounter any problem, check Common Issues section below!
1. Press **Worlds** on the Main Menu. 1. Press **Worlds** on the Main Menu.
2. Select which world you want to play with your friend. 2. Select which world you want to play with your friend.
@@ -73,7 +93,7 @@ The easiest way to play with friends - no manual server setup required!
### Common Issues (UPnP/NAT/STUN) on Online Play ### Common Issues (UPnP/NAT/STUN) on Online Play
<details><summary><b>1) "NAT Type: Carrier-Grade NAT (CGNAT)" Warning</b></summary> <details><summary><b>a. "NAT Type: Carrier-Grade NAT (CGNAT)" Warning</b></summary>
If you see this message: If you see this message:
``` ```
@@ -91,7 +111,7 @@ Warning: Your network configuration may prevent other players from connecting.
4. **Have a friend with public IP host instead** 4. **Have a friend with public IP host instead**
</details> </details>
<details><summary><b>2) "UPnP Failed" or "Port Mapping Failed" Warning</b></summary> <details><summary><b>b. "UPnP Failed" or "Port Mapping Failed" Warning</b></summary>
**Check your router:** **Check your router:**
1. Log into router admin panel (usually `192.168.1.1` or `192.168.0.1`) 1. Log into router admin panel (usually `192.168.1.1` or `192.168.0.1`)
2. Find UPnP settings (often under "Advanced" or "NAT") 2. Find UPnP settings (often under "Advanced" or "NAT")
@@ -103,7 +123,7 @@ Warning: Your network configuration may prevent other players from connecting.
- See "Port Forwarding" or "Workarounds or NAT/CGNAT" sections below - See "Port Forwarding" or "Workarounds or NAT/CGNAT" sections below
</details> </details>
<details><summary><b>3) "Strict NAT" or "Symmetric NAT" Warning</b></summary> <details><summary><b>c. "Strict NAT" or "Symmetric NAT" Warning</b></summary>
Some routers have restrictive NAT that blocks peer connections. Some routers have restrictive NAT that blocks peer connections.
**Try:** **Try:**
@@ -112,9 +132,29 @@ Some routers have restrictive NAT that blocks peer connections.
3. Use Playit.gg / Tailscale / Radmin VPN as workaround 3. Use Playit.gg / Tailscale / Radmin VPN as workaround
</details> </details>
### Workarounds for NAT/CGNAT Issues ## 2. Using Tailscale
Tailscale creates mesh VPN service that streamlines connecting devices and services securely across different networks. And **works crossplatform!!**
#### Option 1: Playit.gg (Recommended) ✔️ 1. All members are required to download [Tailscale](https://tailscale.com/download) on your device.
[Once installed, Tailscale starts and live inside your hidden icon section in Windows, Mac and Linux]
2. Create a **common Tailscale** account which will shared among your friends to log in.
3. Ask your **host to login in to thier Tailscale client first**, then the other members.
* Host
* Open your singleplayer world
* Go to Online Play settings
* Re-save your settings to generate a new share code
* Friends
* Ensure Tailscale is connected
* Use the new share code to connect
* To test your connection, ping the host's ipv4 mentioned in Tailscale
---
# B. Local Dedicated Server
This option is perfect for any players size. From small to high.
## 1. Using Playit.gg (Recommended) ✅
Free tunneling service - only the host needs to install it: Free tunneling service - only the host needs to install it:
@@ -124,119 +164,94 @@ Free tunneling service - only the host needs to install it:
4. Go to https://playit.gg/download : `Installer` (Windows) or `x86-64` (Linux) or follow `Debian Install Script` (Debian-based only) 4. Go to https://playit.gg/download : `Installer` (Windows) or `x86-64` (Linux) or follow `Debian Install Script` (Debian-based only)
* Windows: Install the `playit-windows.msi` * Windows: Install the `playit-windows.msi`
* Linux: * Linux:
* Right-click file > Properties > Turn on 'Executable as a Program' | or just do `chmod +x playit-linux-amd64` on terminal * Right-click file > Properties > Turn on 'Executable as a Program' | or `chmod +x playit-linux-amd64` on terminal
* Run by double-clicking the file or `./playit-linux-amd64` via terminal * Run by double-clicking the file or `./playit-linux-amd64` via terminal
5. Open Playit.gg > Copy (select the URL, then Right-Click | `Ctrl+Shift+C` for Linux) > Paste the prompted URL into your browser to link your created account 5. Open the URL/link by `Ctrl+Click` it. If unable, select the URL, then Right-Click to Copy (`Ctrl+Shift+C` for Linux) then Paste the URL into your browser to link it with your created account.
6. **WARNING: Do not close the terminal if you are still playing or hosting the server** 6. **WARNING: Do not close the terminal if you are still playing or hosting the server**
7. 7. Once it done, download the `run_server_with_tokens` script file (`.BAT` for Windows, `.SH` for Linux) from our Discord server > channel `#open-public-server`
8. Now you can use the public address that written in the playit.gg exe/you can check via browser [look at step 3] 8. Put the script file to the `Server` folder in `HytaleF2P` directory (`%localappdata%\HytaleF2P\release\package\game\latest\Server`)
9. Download the `run_server_with_tokens` script file (`.BAT` for Windows, `.SH` for Linux) from our Discord server > channel `#open-public-server` 9. Copy the `Assets.zip` from the `%localappdata%\HytaleF2P\release\package\game\latest\` folder to the `Server\` folder. (TIP: You can use Symlink of that file to reduce disk usage!)
10. Put the script file to the `Server` folder in `HytaleF2P` directory (`%localappdata%\HytaleF2P\release\package\game\latest\Server`) 10. Double-click the .BAT file to host your server, wait until it shows:
11. Copy the `Assets.zip` from the `%localappdata%\HytaleF2P\release\package\game\latest\` folder to the `Server\` folder
12. double-click the .BAT file to host your server, wait until it shows like
``` ```
=================================================== ===================================================
Hytale Server Booted! [Multiplayer, Fresh Universe] Hytale Server Booted! [Multiplayer, Fresh Universe]
=================================================== ===================================================
``` ```
12. You connect to the server by go to `Servers` in your game client, and add server, type `localhost` in the address box, use any name for your server, `my server` for example. 11. Connect to the server by go to `Servers` in your game client, press `Add Server`, type `localhost` in the address box, use any name for your server.
13. Send the public address in step 3 to your friends, use `add server` also. 12. Send the public address in Step 3 to your friends.
14. enjoy :smile:
1. **Download [playit.gg](https://playit.gg/)** and run it - Connect your account from the terminal (do not close it when playing on the server) ## 2. Using Radmin VPN
2. **Add a tunnel** - Select "UDP", tunnel description of "Hytale Server", port count `1`, and local port `5520`
3. **Start the tunnel** - You'll get a public address like `xx-xx.gl.at.ply.gg:5520`
4. **Share the address** - Friends connect directly using this address
Works with both Online Play and dedicated servers. No software needed for players joining.
#### Option 2: Radmin VPN
Creates a virtual LAN - all players need to install it: Creates a virtual LAN - all players need to install it:
1. **Download [Radmin VPN](https://www.radmin-vpn.com/)** - All players install it 1. Download [Radmin VPN](https://www.radmin-vpn.com/) - All players install it
2. **Create a network** - One person creates, others join with network name/password 2. One person create a room/network, others join with network name/password
3. **Host via Online Play** - Use your Radmin VPN IP instead 3. Host joined the world, others will connect to it.
4. **Friends connect** - They'll see you on the virtual LAN 4. Open Hytale Game > Servers > Add Servers > Direct Connect > Type IP Address of the Host from Radmin.
Both options bypass all NAT/CGNAT issues. But for **Windows machines only!** These options bypass all NAT/CGNAT issues. But for **Windows machines only!**
#### Option 3: Tailscale
It creates mesh VPN service that streamlines connecting devices and services securely across different networks. And **works crossplatform!!**
1. All member's are required to download [Tailscale](https://tailscale.com/download) on your device.
[Once installed, Tailwind starts and live inside your hidden icon section in Windows, Mac and Linux]
2. Create a **common tailscale** account which will shared among your friends to log in.
3. Ask your **host to login in to thier tailscale client first**, then the other members.
* Host
* Open your singleplayer world
* Go to Online Play settings
* Re-save your settings to generate a new share code
* Friends
* Ensure Tailscale is connected
* Use the new share code to connect
[To test your connection, ping the host's ipv4 mentioned in tailwind]
--- ---
## Part 2: Dedicated Server (Advanced) # C. 24/7 Dedicated Server (Advanced)
For 24/7 servers, custom configurations, or hosting on a VPS/dedicated machine. For 24/7 servers, custom configurations, or hosting on a VPS/dedicated machine.
### Quick Start ## Step 1: Get the Files Ready
#### Step 1: Get the Server JAR ### Prequisites
The server scripts will automatically download the pre-patched server JAR if it's not present. 1. `HytaleServer.jar` (pre-patched for F2P players; dual-auth soon for Official + F2P play)
2. `Assets.zip`
3. `run_scripts_with_token.bat` for Windows or `run_scripts_with_token.sh` for macOS/Linux
**Option A:** Let the scripts download automatically (requires `HYTALE_SERVER_URL` to be configured) > [!NOTE]
> The `HytaleServer.rar` available on our Discord Server (`#open-public-server` channel; typo on the Discord, not `zip`) includes all of the prequisites.
> Unfortunately, the JAR inside the RAR isn't updated so you'll need to download the JAR from the link on Discord.
**Option B:** Manually place `HytaleServer.jar` (pre-patched for F2P) in the Server directory: > [!TIP]
> You can copy `Assets.zip` generated from the launcher to be used for the dedicated server. It's located in `HytaleF2P/release/package/game/latest`.
- **Windows:** `%localappdata%\HytaleF2P\release\package\game\latest\Server`
- **macOS:** `~/Library/Application Support/HytaleF2P/release/package/game/latest/Server`
- **Linux:** `~/.hytalef2p/release/package/game/latest/Server`
If you have a custom install path, the Server folder is inside your custom location under `HytaleF2P/release/package/game/latest/Server`. ## Step 2: Place `HytaleServer.jar` in the `Server` directory
#### Step 2: Run the Server * Windows
* `%localappdata%\HytaleF2P\release\package\game\latest\Server`
* macOS
* `~/Library/Application Support/HytaleF2P/release/package/game/latest/Server`
* Linux
* `~/.hytalef2p/release/package/game/latest/Server`
* If you have a custom install path, the Server folder is inside your custom location under
* `HytaleF2P/release/package/game/latest/Server`.
## Step 3: Run the Server
**Windows:** **Windows:**
```batch ```batch
cd scripts
run_server.bat run_server.bat
``` ```
**macOS / Linux:** **macOS / Linux:**
```bash ```bash
cd scripts
./run_server.sh ./run_server.sh
``` ```
The scripts will:
1. Find your game installation automatically
2. Download the pre-patched server JAR if needed
3. Fetch session tokens from the auth server
4. Start the server
#### Step 3: Connect Players
Share your server IP address with players. They connect via the F2P Launcher's server browser or direct connect.
--- ---
## Network Setup (Dedicated Server) # D. Tinkering Guides
### Local Network (LAN) ## 1. Network Setup
### a. Local Network (LAN)
If all players are on the same network: If all players are on the same network:
1. Find your local IP: `ipconfig` (Windows) or `ifconfig` (Mac/Linux) 1. Find your local IP: `ipconfig` (Windows) or `ifconfig` (Mac/Linux)
2. Share this IP with players on your network 2. Share this IP with players on your network
3. Default port is `5520` 3. Default port is `5520`
### Port Forwarding (Internet Play) ### b. Port Forwarding (Internet Play)
To allow direct internet connections: To allow direct internet connections:
1. Forward **port 5520 (UDP)** in your router 1. Forward **port 5520 (UDP)** in your router
2. Find your public IP at [whatismyip.com](https://whatismyip.com) 2. Find your public IP at [whatismyip.com](https://whatismyip.com)
3. Share your public IP with players 3. Share your public IP with players
@@ -249,36 +264,35 @@ netsh advfirewall firewall add rule name="Hytale Server" dir=in action=allow pro
--- ---
## Configuration ## 2. Configuration
### Environment Variables ### a. Environment Variables
Set these before running to customize your server: Write this in the script file `.BAT`/`.SH` or set these manually in command before running to customize your server:
| Variable | Default | Description | | Variable | Default | Description |
|----------|---------|-------------| |----------|---------|-------------|
| `HYTALE_SERVER_URL` | (placeholder) | URL to download pre-patched server JAR |
| `HYTALE_AUTH_DOMAIN` | `auth.sanasol.ws` | Auth server domain (4-16 chars) | | `HYTALE_AUTH_DOMAIN` | `auth.sanasol.ws` | Auth server domain (4-16 chars) |
| `HYTALE_BIND` | `0.0.0.0:5520` | Server IP and port | | `BIND_ADRESS` | `0.0.0.0:5520` | Server IP and port |
| `HYTALE_AUTH_MODE` | `authenticated` | Auth mode (see below) | | `AUTH_MODE` | `authenticated` | Auth mode (see below) |
| `HYTALE_SERVER_NAME` | `My Hytale Server` | Server display name | | `SERVER_NAME` | `My Hytale Server` | Server display name |
| `HYTALE_GAME_PATH` | (auto-detected) | Override game location | | `ASSETS_PATH` | `./Assets.zip` | Assets file location |
| `JVM_XMS` | `2G` | Minimum Java memory | | `JVM_XMS` | `2G` | Minimum Java memory |
| `JVM_XMX` | `4G` | Maximum Java memory | | `JVM_XMX` | `4G` | Maximum Java memory |
**Example (Windows):** **Example (Windows):**
```batch ```batch
set HYTALE_SERVER_NAME=My Awesome Server set SERVER_NAME=My Awesome Server
set JVM_XMX=8G set JVM_XMX=8G
run_server.bat run_server.bat
``` ```
**Example (Linux/macOS):** **Example (Linux/macOS):**
```bash ```bash
HYTALE_SERVER_NAME="My Awesome Server" JVM_XMX=8G ./run_server.sh SERVER_NAME="My Awesome Server" JVM_XMX=8G ./run_server.sh
``` ```
### Authentication Modes ### b. Authentication Modes
| Mode | Description | Use Case | | Mode | Description | Use Case |
|------|-------------|----------| |------|-------------|----------|
@@ -288,7 +302,7 @@ HYTALE_SERVER_NAME="My Awesome Server" JVM_XMX=8G ./run_server.sh
--- ---
## RAM Allocation Guide ## 3. RAM Allocation Guide
Adjust memory based on your system: Adjust memory based on your system:
@@ -312,7 +326,7 @@ JVM_XMS=4G JVM_XMX=12G ./run_server.sh
--- ---
## Server Commands ## 4. Server Commands
Once running, use these commands in the console: Once running, use these commands in the console:
@@ -329,9 +343,12 @@ Once running, use these commands in the console:
| `unban <player>` | Unban a player | | `unban <player>` | Unban a player |
| `tp <player> <x> <y> <z>` | Teleport player | | `tp <player> <x> <y> <z>` | Teleport player |
Use `/` slash for these commands.
--- ---
## Command Line Options ## 5. Command Line Options
Pass these when starting the server: Pass these when starting the server:
@@ -360,7 +377,7 @@ Pass these when starting the server:
--- ---
## File Structure ## 6. File Structure
``` ```
<game_path>/ <game_path>/
@@ -378,21 +395,21 @@ Pass these when starting the server:
--- ---
## Backups ## 7. Backups
### Automatic Backups ### a. Automatic Backups
```bash ```bash
./run_server.sh --backup --backup-dir ./backups --backup-frequency 30 ./run_server.sh --backup --backup-dir ./backups --backup-frequency 30
``` ```
### Manual Backup ### b. Manual Backup
1. Use `save` command or stop the server 1. Use `save` command or stop the server
2. Copy the `universe/` folder 2. Copy the `universe/` folder
3. Store in a safe location 3. Store in a safe location
### Restore ### c. Restore
1. Stop the server 1. Stop the server
2. Delete/rename current `universe/` 2. Delete/rename current `universe/`
@@ -401,9 +418,9 @@ Pass these when starting the server:
--- ---
## Troubleshooting ## 8. Troubleshooting
### "Java not found" or "Java version too old" ### a. "Java not found" or "Java version too old"
**Java 21 is REQUIRED** (the server uses class file version 65.0). **Java 21 is REQUIRED** (the server uses class file version 65.0).
@@ -422,30 +439,20 @@ export PATH="$JAVA_HOME/bin:$PATH"
``` ```
Add these lines to `~/.zshrc` or `~/.bash_profile` to make permanent. Add these lines to `~/.zshrc` or `~/.bash_profile` to make permanent.
### "Game directory not found" ### b. "Port already in use"
- Download game via F2P Launcher first
- Or set `HYTALE_GAME_PATH` environment variable
- Check custom install path in launcher settings
### "Assets.zip not found"
Game files incomplete. Re-download via the launcher.
### "Port already in use"
```bash ```bash
./run_server.sh --bind 0.0.0.0:5521 ./run_server.sh --bind 0.0.0.0:5521
``` ```
### "Out of memory" ### c. "Out of memory"
Increase JVM_XMX: Increase JVM_XMX:
```bash ```bash
JVM_XMX=6G ./run_server.sh JVM_XMX=6G ./run_server.sh
``` ```
### Players can't connect ### d. Players can't connect
1. Server shows "Server Ready"? 1. Server shows "Server Ready"?
2. Using F2P Launcher (not official)? 2. Using F2P Launcher (not official)?
@@ -453,7 +460,7 @@ JVM_XMX=6G ./run_server.sh
4. Port forwarding configured (for internet)? 4. Port forwarding configured (for internet)?
5. Try `--auth-mode unauthenticated` for testing 5. Try `--auth-mode unauthenticated` for testing
### "Authentication failed" ### e. "Authentication failed"
- Ensure players use F2P Launcher - Ensure players use F2P Launcher
- Auth server may be temporarily down - Auth server may be temporarily down
@@ -461,7 +468,7 @@ JVM_XMX=6G ./run_server.sh
--- ---
## Docker Deployment (Advanced) ## 9. Docker Deployment (Advanced)
For production servers, use Docker: For production servers, use Docker:
@@ -480,40 +487,7 @@ See [Docker documentation](https://github.com/Hybrowse/hytale-server-docker) for
--- ---
## Server Settings Summary ## 10. Getting Help
### Minimal Setup
```bash
./run_server.sh
```
### Custom Memory
```bash
JVM_XMS=2G JVM_XMX=8G ./run_server.sh
```
### Custom Port
```bash
HYTALE_BIND=0.0.0.0:25565 ./run_server.sh
```
### LAN Party (No Auth)
```bash
./run_server.sh --auth-mode unauthenticated
```
### Full Custom Setup
```bash
HYTALE_SERVER_NAME="Epic Server" \
HYTALE_BIND=0.0.0.0:5520 \
JVM_XMS=2G \
JVM_XMX=8G \
./run_server.sh --backup --backup-frequency 15 --allow-op
```
---
## Getting Help
- Check server console logs for errors - Check server console logs for errors
- Test with `--auth-mode unauthenticated` first - Test with `--auth-mode unauthenticated` first
@@ -522,7 +496,7 @@ JVM_XMX=8G \
--- ---
## Credits # Credits
- Hytale F2P Project - Hytale F2P Project
- [Hybrowse Docker Image](https://github.com/Hybrowse/hytale-server-docker) - [Hybrowse Docker Image](https://github.com/Hybrowse/hytale-server-docker)

View File

@@ -15,7 +15,7 @@ function getAppDir() {
} }
/** /**
* Get centralized UserData saves directory (NEW in 2.1.2) * Get centralized UserData saves directory (NEW in 2.2.0)
* UserData is now stored separately from game installation * UserData is now stored separately from game installation
*/ */
function getHytaleSavesDir() { function getHytaleSavesDir() {
@@ -233,7 +233,7 @@ async function getModsPath(customInstallPath = null) {
function getProfilesDir(customInstallPath = null) { function getProfilesDir(customInstallPath = null) {
try { try {
// NEW 2.1.2: Use centralized UserData location // NEW 2.2.0: Use centralized UserData location
const userDataPath = getHytaleSavesDir(); const userDataPath = getHytaleSavesDir();
const profilesDir = path.join(userDataPath, 'Profiles'); const profilesDir = path.join(userDataPath, 'Profiles');

View File

@@ -118,7 +118,7 @@ async function launchGame(playerName = 'Player', progressCallback, javaPathOverr
const customGameDir = path.join(customAppDir, branch, 'package', 'game', 'latest'); const customGameDir = path.join(customAppDir, branch, 'package', 'game', 'latest');
const customJreDir = path.join(customAppDir, branch, 'package', 'jre', 'latest'); const customJreDir = path.join(customAppDir, branch, 'package', 'jre', 'latest');
// NEW 2.1.2: Use centralized UserData location // NEW 2.2.0: Use centralized UserData location
const userDataDir = getUserDataPath(); const userDataDir = getUserDataPath();
const gameLatest = customGameDir; const gameLatest = customGameDir;

View File

@@ -327,7 +327,7 @@ async function updateGameFiles(newVersion, progressCallback, gameDir = GAME_DIR,
console.log(`[UpdateGameFiles] Switching from ${oldBranch} to ${branch}`); console.log(`[UpdateGameFiles] Switching from ${oldBranch} to ${branch}`);
try { try {
// NEW 2.1.2: Ensure UserData migration to centralized location // NEW 2.2.0: Ensure UserData migration to centralized location
try { try {
console.log('[UpdateGameFiles] Ensuring UserData migration...'); console.log('[UpdateGameFiles] Ensuring UserData migration...');
const migrationResult = await migrateUserDataToCentralized(); const migrationResult = await migrateUserDataToCentralized();
@@ -403,7 +403,7 @@ async function updateGameFiles(newVersion, progressCallback, gameDir = GAME_DIR,
const logoResult = await downloadAndReplaceLogo(gameDir, progressCallback); const logoResult = await downloadAndReplaceLogo(gameDir, progressCallback);
console.log('Logo@2x.png update result after update:', logoResult); console.log('Logo@2x.png update result after update:', logoResult);
// NEW 2.1.2: No longer create UserData in game installation // NEW 2.2.0: No longer create UserData in game installation
// UserData is now in centralized location (getUserDataPath()) // UserData is now in centralized location (getUserDataPath())
console.log('[UpdateGameFiles] UserData is managed in centralized location'); console.log('[UpdateGameFiles] UserData is managed in centralized location');
@@ -453,7 +453,7 @@ async function installGame(playerName = 'Player', progressCallback, javaPathOver
const customGameDir = path.join(customAppDir, branch, 'package', 'game', 'latest'); const customGameDir = path.join(customAppDir, branch, 'package', 'game', 'latest');
const customJreDir = path.join(customAppDir, branch, 'package', 'jre', 'latest'); const customJreDir = path.join(customAppDir, branch, 'package', 'jre', 'latest');
// NEW 2.1.2: Ensure UserData migration to centralized location // NEW 2.2.0: Ensure UserData migration to centralized location
try { try {
console.log('[InstallGame] Ensuring UserData migration...'); console.log('[InstallGame] Ensuring UserData migration...');
const migrationResult = await migrateUserDataToCentralized(); const migrationResult = await migrateUserDataToCentralized();
@@ -565,7 +565,7 @@ async function installGame(playerName = 'Player', progressCallback, javaPathOver
const logoResult = await downloadAndReplaceLogo(customGameDir, progressCallback); const logoResult = await downloadAndReplaceLogo(customGameDir, progressCallback);
console.log('Logo@2x.png update result after installation:', logoResult); console.log('Logo@2x.png update result after installation:', logoResult);
// NEW 2.1.2: No longer create UserData in game installation // NEW 2.2.0: No longer create UserData in game installation
// UserData is managed in centralized location (getUserDataPath()) // UserData is managed in centralized location (getUserDataPath())
console.log('[InstallGame] UserData is managed in centralized location'); console.log('[InstallGame] UserData is managed in centralized location');

View File

@@ -4,7 +4,7 @@ const { getHytaleSavesDir, getResolvedAppDir } = require('../core/paths');
const { loadConfig, saveConfig } = require('../core/config'); const { loadConfig, saveConfig } = require('../core/config');
/** /**
* NEW SYSTEM (2.1.2+): UserData Migration to Centralized Location * NEW SYSTEM (2.2.0+): UserData Migration to Centralized Location
* *
* UserData is now stored in a centralized location instead of inside game installation: * UserData is now stored in a centralized location instead of inside game installation:
* - Windows: %LOCALAPPDATA%\HytaleSaves\ * - Windows: %LOCALAPPDATA%\HytaleSaves\
@@ -31,7 +31,7 @@ function markMigrationCompleted() {
} }
/** /**
* Find old UserData location (pre-2.1.2) * Find old UserData location (pre-2.2.0)
* Searches in: installPath/branch/package/game/latest/Client/UserData * Searches in: installPath/branch/package/game/latest/Client/UserData
*/ */
function findOldUserDataPath() { function findOldUserDataPath() {
@@ -77,7 +77,7 @@ function findOldUserDataPath() {
/** /**
* Migrate UserData from old location to new centralized location * Migrate UserData from old location to new centralized location
* One-time operation when upgrading to 2.1.2 * One-time operation when upgrading to 2.2.0
*/ */
async function migrateUserDataToCentralized() { async function migrateUserDataToCentralized() {
// Check if already migrated // Check if already migrated
@@ -149,7 +149,7 @@ async function migrateUserDataToCentralized() {
} }
/** /**
* Get the centralized UserData path (always use this in 2.1.2+) * Get the centralized UserData path (always use this in 2.2.0+)
* Ensures directory exists * Ensures directory exists
*/ */
function getUserDataPath() { function getUserDataPath() {

4
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{ {
"name": "hytale-f2p-launcher", "name": "hytale-f2p-launcher",
"version": "2.1.2", "version": "2.2.0",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "hytale-f2p-launcher", "name": "hytale-f2p-launcher",
"version": "2.1.2", "version": "2.2.0",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"adm-zip": "^0.5.10", "adm-zip": "^0.5.10",

View File

@@ -1,6 +1,6 @@
{ {
"name": "hytale-f2p-launcher", "name": "hytale-f2p-launcher",
"version": "2.1.2", "version": "2.2.0",
"description": "A modern, cross-platform launcher for Hytale with automatic updates and multi-client support", "description": "A modern, cross-platform launcher for Hytale with automatic updates and multi-client support",
"homepage": "https://github.com/amiayweb/Hytale-F2P", "homepage": "https://github.com/amiayweb/Hytale-F2P",
"main": "main.js", "main": "main.js",