-
Notifications
You must be signed in to change notification settings - Fork 161
Added Hytale #349
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: v3
Are you sure you want to change the base?
Added Hytale #349
Conversation
Added a README file with setup instructions for Hytale server template.
|
Just a heads up you're using python to extract the file and not every device has python3 installed by default, i suggest replacing it with "unzip" as its built into all major Linux distros by default. And avoids unnecessary installations of python while ensuring compatibility. |
zephiowl
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix: Updated extraction method
Migrated from python to unzip to ensure ease of compatibility and minimal installs.
Did you get it to work? I tried using unzip, and I'm not sure why, but I did not get it to work. |
Me and 2 other people tested it and it worked perfectly fine. Its why i made the comment. |
zephiowl
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Tested, working change. Nice work :>
Added requirements for binaries and OS.
|
instead of booting with |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
-snip-
(posting as a code suggestion for easy acceptance)
I didn't actually catch that one, nice call out :> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
-Snip-
(i'm still learning sorry, see next comment)
zephiowl
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Here you go, a request to change as per @Toon2400 and their suggestion.
I'm still a bit new when it comes to requesting changes as i normally make my own PRs, not help with others. Sorry for the extra bit of spam on the pr still trying to figure out the specifics. Just trying to help :> and make your day easier.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
-snip-
zephiowl
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think i got the review feature working now. sorry about that.
Hytale/Hytale.json
Outdated
| "type": "command" | ||
| }, | ||
| { | ||
| "target": "start.sh", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| "target": "start.sh", |
Hytale/Hytale.json
Outdated
| }, | ||
| { | ||
| "target": "start.sh", | ||
| "text": "#!/bin/bash\n\nJAVA_BIN=\"./local_java/bin/java\"\n\necho \"--- LAUNCHING WITH LOCAL JAVA ---\"\n\nif [ ! -f \"$JAVA_BIN\" ]; then\n echo \"CRITICAL ERROR: local Java missing!\"\n exit 1\nfi\n\n$JAVA_BIN -version\n\ncd Server\n\n../$JAVA_BIN -Xms1G -Xmx${ram}G -jar HytaleServer.jar --assets ../Assets.zip --disable-sentry --auth-mode authenticated --bind 0.0.0.0:${port} --backup --backup-dir ../Backups --backup-frequency 30", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| "text": "#!/bin/bash\n\nJAVA_BIN=\"./local_java/bin/java\"\n\necho \"--- LAUNCHING WITH LOCAL JAVA ---\"\n\nif [ ! -f \"$JAVA_BIN\" ]; then\n echo \"CRITICAL ERROR: local Java missing!\"\n exit 1\nfi\n\n$JAVA_BIN -version\n\ncd Server\n\n../$JAVA_BIN -Xms1G -Xmx${ram}G -jar HytaleServer.jar --assets ../Assets.zip --disable-sentry --auth-mode authenticated --bind 0.0.0.0:${port} --backup --backup-dir ../Backups --backup-frequency 30", |
Hytale/Hytale.json
Outdated
| "target": "start.sh", | ||
| "text": "#!/bin/bash\n\nJAVA_BIN=\"./local_java/bin/java\"\n\necho \"--- LAUNCHING WITH LOCAL JAVA ---\"\n\nif [ ! -f \"$JAVA_BIN\" ]; then\n echo \"CRITICAL ERROR: local Java missing!\"\n exit 1\nfi\n\n$JAVA_BIN -version\n\ncd Server\n\n../$JAVA_BIN -Xms1G -Xmx${ram}G -jar HytaleServer.jar --assets ../Assets.zip --disable-sentry --auth-mode authenticated --bind 0.0.0.0:${port} --backup --backup-dir ../Backups --backup-frequency 30", | ||
| "type": "writefile" | ||
| }, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| }, |
Hytale/Hytale.json
Outdated
| }, | ||
| { | ||
| "commands": [ | ||
| "chmod +x start.sh" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| "chmod +x start.sh" |
Hytale/Hytale.json
Outdated
| { | ||
| "commands": [ | ||
| "chmod +x start.sh" | ||
| ], |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| ], |
Hytale/Hytale.json
Outdated
| "chmod +x start.sh" | ||
| ], | ||
| "type": "command" | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| } |
Hytale/Hytale.json
Outdated
| ], | ||
| "run": { | ||
| "stop": "/stop", | ||
| "command": "./start.sh", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| "command": "./start.sh", | |
| "command": "../local_java/bin/java -Xms1G -Xmx${ram}G -jar HytaleServer.jar --assets ../Assets.zip --disable-sentry --auth-mode authenticated --bind 0.0.0.0:${port} --backup --backup-dir ../Backups --backup-frequency 30", |
Co-authored-by: Zephira <zephira58@protonmail.com>
Co-authored-by: Zephira <zephira58@protonmail.com>
i have tried applying, i dont know why, but it wont. Im not very used to github. |
Here i'll just send you the josn to copy and paste :> I haven't tested it yet so make sure you do when you can before accepting. {
"name": "Hytale",
"display": "Hytale Server",
"type": "none",
"install": [
{
"commands": [
"echo '--- MANUAL INSTALL START ---'",
"echo '1. Downloading Hytale Downloader...'",
"curl -L -o hytale-downloader.zip https://downloader.hytale.com/hytale-downloader.zip",
"unzip -o hytale-downloader.zip",
"chmod +x hytale-downloader-linux-amd64",
"mv hytale-downloader-linux-amd64 hytale-downloader",
"rm hytale-downloader.zip",
"echo '2. Downloading Game Files...'",
"./hytale-downloader -skip-update-check -download-path game.zip",
"unzip -o game.zip",
"echo '3. Downloading Java 25...'",
"curl -L -o java25.tar.gz https://api.adoptium.net/v3/binary/latest/25/ga/linux/x64/jdk/hotspot/normal/eclipse",
"mkdir -p local_java",
"tar -xzf java25.tar.gz -C local_java --strip-components=1",
"chmod +x local_java/bin/java",
"rm java25.tar.gz",
"echo '--- INSTALL COMPLETE ---'"
],
"type": "command"
}
],
"run": {
"stop": "/stop",
"command": "../local_java/bin/java -Xms1G -Xmx${ram}G -jar HytaleServer.jar --assets ../Assets.zip --disable-sentry --auth-mode authenticated --bind 0.0.0.0:${port} --backup --backup-dir ../Backups --backup-frequency 30",
"workingDirectory": "",
"pre": [],
"post": [],
"environmentVars": {
"port": "${port}",
"ram": "${ram}"
}
},
"data": {
"port": {
"type": "integer",
"display": "Port",
"value": 5520
},
"ram": {
"type": "integer",
"display": "RAM (GB)",
"value": 4
}
},
"environment": {
"type": "standard"
},
"supportedEnvironments": [
{
"type": "standard"
}
],
"requirements": {
"binaries": [
"curl",
"tar",
"unzip"
],
"os": "linux",
"arch": "amd64"
}
} |
Dont know if its just me, but this json does not work for me |
this is what i used, not too familiar with github either 😅 |
Not really sure why, but i get this? |
|
ahh thats my bad, forgot to update the template from my server after testing, updated my comment with the right working directory |
Updated installation commands and modified working directory.
It works! |
|
I also looked into this and created one inspired by the minecraft template. Template Json{
"type": "hytale",
"name": "hytale",
"display": "Hytale",
"data": {
"ip": {
"type": "string",
"value": "0.0.0.0",
"display": "IP",
"desc": "What IP to bind the server to",
"required": true,
"userEdit": false
},
"javaversion": {
"type": "string",
"value": "25",
"display": "Java Version",
"desc": "Version of Java to use",
"required": true,
"userEdit": true
},
"jvmArgs": {
"type": "string",
"value": "",
"display": "JVM Arguments",
"desc": "Extra JVM arguments to pass",
"required": false,
"userEdit": false
},
"serverArgs": {
"type": "string",
"value": "",
"display": "Server Arguments",
"desc": "Extra server arguments to pass",
"required": false,
"userEdit": false
},
"memory": {
"type": "integer",
"value": 4096,
"display": "Memory (MB)",
"desc": "How much memory in MB to allocate to the Java Heap",
"required": true,
"userEdit": false
},
"port": {
"type": "integer",
"value": 5520,
"display": "Port",
"desc": "What port to bind the server to",
"required": true,
"userEdit": false
},
"patchline": {
"type": "string",
"value": "release",
"display": "Patchline",
"desc": "Patchline you wish to install.",
"required": true,
"userEdit": true
}
},
"groups": [
{
"display": "General",
"description": "General settings for all servers",
"variables": [
"memory",
"ip",
"port",
"patchline",
"javaversion",
"jvmArgs",
"serverArgs"
],
"order": 1
}
],
"install": [
{
"if": "javaversion != ''",
"type": "javadl",
"version": "${javaversion}"
},
{
"type": "download",
"files": [
"https://downloader.hytale.com/hytale-downloader.zip"
]
},
{
"type": "command",
"commands": [
"unzip -o hytale-downloader.zip hytale-downloader-linux-amd64",
"rm hytale-downloader.zip",
"chmod +x hytale-downloader-linux-amd64",
"./hytale-downloader-linux-amd64 -skip-update-check -patchline ${patchline} -download-path game.zip",
"unzip -o game.zip",
"rm game.zip"
]
}
],
"run": {
"command": "java${javaversion} -Xmx${memory}M ${jvmArgs} -jar HytaleServer.jar --assets Assets.zip --bind ${ip}:${port} ${serverArgs}",
"stop": "/stop",
"stdin": {
"type": "stdin"
},
"autostart": false,
"autorecover": false,
"autorestart": false
},
"environment": {
"type": "host"
},
"supportedEnvironments": [
{
"type": "host"
}
],
"requirements": {
"binaries": [
"unzip"
],
"os": "linux",
"arch": "amd64"
}
} |
|
I don't know if this will help but i wanted to post my Hytale Template, i use it for my server and i have no problems with it, and it meets the requirements of the Hytale Manual. |
| "commands": [ | ||
| "echo '--- INSTALL START ---'", | ||
| "echo '1. Downloading Hytale Downloader...'", | ||
| "curl -L -o hytale-downloader.zip https://downloader.hytale.com/hytale-downloader.zip", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"Scripting" like this is generally frown upon, because it's very intensive.
A lot of these operations are also covered in some other tool, which is agnostic.
curl for example has a "download" operation
unzip is "extract"
mv is "move"
| "echo '2. Downloading Game Files...'", | ||
| "./hytale-downloader -skip-update-check -download-path game.zip", | ||
| "unzip -o game.zip", | ||
| "echo '3. Downloading Java 25...'", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
javadl should be used, and "optional" if the environment is host
(when using environment as host, the "java" command is "java25"
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| ], | ||
| "run": { | ||
| "stop": "/stop", | ||
| "command": "../local_java/bin/java -Xms1G -Xmx${ram}G -jar HytaleServer.jar --assets ../Assets.zip --disable-sentry --auth-mode authenticated --bind 0.0.0.0:${port} --backup --backup-dir ../Backups --backup-frequency 30", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Simply is "java25" when environment is host
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
See https://github.com/pufferpanel/templates/blob/v3/minecraft-waterfall/minecraft-waterfall.json#L79-L86 for an example structure
| "run": { | ||
| "stop": "/stop", | ||
| "command": "../local_java/bin/java -Xms1G -Xmx${ram}G -jar HytaleServer.jar --assets ../Assets.zip --disable-sentry --auth-mode authenticated --bind 0.0.0.0:${port} --backup --backup-dir ../Backups --backup-frequency 30", | ||
| "workingDirectory": "Server", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is there a reason we can't use the "root" folder?
| "workingDirectory": "Server", | ||
| "pre": [], | ||
| "post": [], | ||
| "environmentVars": { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
These should not be needed it seems, variable replacement does the command-line
| ], | ||
| "run": { | ||
| "stop": "/stop", | ||
| "command": "../local_java/bin/java -Xms1G -Xmx${ram}G -jar HytaleServer.jar --assets ../Assets.zip --disable-sentry --auth-mode authenticated --bind 0.0.0.0:${port} --backup --backup-dir ../Backups --backup-frequency 30", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also, the IP should be a variable for "consistency"
| "type": "standard" | ||
| }, | ||
| "supportedEnvironments": [ | ||
| { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Docker would be supported in this case, as it'd just need the eclipse image.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
See
templates/minecraft-waterfall/minecraft-waterfall.json
Lines 100 to 109 in d5f1aa7
| { | |
| "type": "host" | |
| }, | |
| { | |
| "type": "docker", | |
| "image": "eclipse-temurin:17", | |
| "portBindings": [ | |
| "0.0.0.0:${port}:${port}/tcp" | |
| ] | |
| } |
| } | ||
| }, | ||
| "environment": { | ||
| "type": "standard" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also, "host" instead of standard.
|
im not a pro at all 😭 and when i try to fix all these Pufferpanel just spits out "unknown error", i dont know where to go now tbh. |
|
My template already had almost everything @LordRalex requested, except for the extract, because in EDIT: New Template Json with `extract`{
"type": "hytale",
"name": "hytale",
"display": "Hytale",
"data": {
"ip": {
"type": "string",
"value": "0.0.0.0",
"display": "IP",
"desc": "What IP to bind the server to",
"required": true,
"userEdit": false
},
"javaversion": {
"type": "string",
"value": "25",
"display": "Java Version",
"desc": "Version of Java to use",
"required": true,
"userEdit": true
},
"jvmArgs": {
"type": "string",
"value": "",
"display": "JVM Arguments",
"desc": "Extra JVM arguments to pass",
"required": false,
"userEdit": false
},
"serverArgs": {
"type": "string",
"value": "",
"display": "Server Arguments",
"desc": "Extra server arguments to pass",
"required": false,
"userEdit": false
},
"memory": {
"type": "integer",
"value": 4096,
"display": "Memory (MB)",
"desc": "How much memory in MB to allocate to the Java Heap",
"required": true,
"userEdit": false
},
"port": {
"type": "integer",
"value": 5520,
"display": "Port",
"desc": "What port to bind the server to",
"required": true,
"userEdit": false
},
"patchline": {
"type": "string",
"value": "release",
"display": "Patchline",
"desc": "Patchline you wish to install.",
"required": true,
"userEdit": true
}
},
"groups": [
{
"display": "General",
"description": "General settings for all servers",
"variables": [
"memory",
"ip",
"port",
"patchline",
"javaversion",
"jvmArgs",
"serverArgs"
],
"order": 1
}
],
"install": [
{
"if": "javaversion != '' && env == 'host'",
"type": "javadl",
"version": "${javaversion}"
},
{
"type": "download",
"files": [
"https://downloader.hytale.com/hytale-downloader.zip"
]
},
{
"type": "extract",
"source": "hytale-downloader.zip",
"destination": "."
},
{
"type": "command",
"commands": [
"unzip -o hytale-downloader.zip hytale-downloader-linux-amd64",
"rm -f hytale-downloader.zip hytale-downloader-windows-amd64.exe QUICKSTART.md",
"chmod +x hytale-downloader-linux-amd64",
"./hytale-downloader-linux-amd64 -skip-update-check -patchline ${patchline} -download-path game.zip"
]
},
{
"type": "extract",
"source": "game.zip",
"destination": "."
},
{
"type": "command",
"commands": [
"rm -f game.zip"
]
}
],
"run": {
"command": [
{
"command": "java${javaversion} -Xmx${memory}M ${jvmArgs} -jar Server/HytaleServer.jar --assets Assets.zip --bind ${ip}:${port} ${serverArgs}",
"if": "env == 'host'"
},
{
"command": "java -Xmx${memory}M ${jvmArgs} -jar Server/HytaleServer.jar --assets Assets.zip --bind ${ip}:${port} ${serverArgs}"
}
],
"stop": "/stop",
"stdin": {
"type": "stdin"
},
"autostart": false,
"autorecover": false,
"autorestart": false
},
"environment": {
"type": "host"
},
"supportedEnvironments": [
{
"type": "host"
},
{
"type": "docker",
"image": "eclipse-temurin:${javaversion}",
"portBindings": [
"0.0.0.0:${port}:${port}/udp"
]
}
],
"requirements": {
"os": "linux",
"arch": "amd64"
}
} |
|
Can you use this template also for arm64? Bc i got my Pufferpannel on my rasp5 and in your json is amd64. |
I believe this template won't work on arm64 as the hytale downloader is currently only bundled for amd64. The hytale server software in itself works on arm64 tho. |
So would it be possible to edit this template to a working arm64 based template? |
Not really, Hytale does not offer a way of downloading besides their downloader, which they don't offer for arm cpus |
|
You could remove the downloader parts and upload the server files + Assets.zip yourself, but I don't think this should be expected in the normal template. |
|
I might be missing something, but this feels a bit confusing. https://support.hytale.com/hc/en-us/articles/45326769420827-Hytale-Server-Manual
There doesn’t seem to be a linux-arm64 (aarch64) downloader, which makes it hard to set up a server directly on ARM machines like Raspberry Pi or ARM-based VPS without workarounds. |
You're not missing anything, the Hytale server is written in Java (or another JVM based language) and should run on anything you can run a JVM on. That includes ARM CPUs. But for some reason someone decided that automated downloads should only ever happen through their downloader tool, yet that is built in a CPU dependent way and not provided for ARM CPUs, due to which on ARM you can only set up a server manually. If you want to know why they made that decision you'll probably have to ask the Hytale team as I fail to find any logic in that. |
Glad to hear I’m not the only one seeing it this way I’ll try to reach out to the Hytale team for clarification. |
you could modify the script to have no dependencies on the downloader. |
|
We could also implement the whole downloader as an I found a reverse engineered project of the downloader: https://github.com/decomp-project/hytale-downloader/ |
I'm no legal expert, but I'm pretty sure that would be a massive copyright infringement and I'm good without massive and unwinnable legal issues.
The tool they provide is most likely the only way they'll try to make sure keeps working since that's the only officially documented path. So far the only issue with it that I am aware of is missing support for ARM CPUs. That has nothing to do with reliability.
Then we have to keep track of any API changes and since they want you yo use their downloader and don't document the API I doubt they'll announce breaking changes ahead of time, should they happen. |
|
I also think the best thing would be, if they release the downloader tool also in arm or even better, directly as jar, so we could use it anywhere, where the server itself would run. |
| { | ||
| "commands": [ | ||
| "echo '--- MANUAL INSTALL START ---'", | ||
| "echo '1. Downloading Hytale Downloader...'", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Configuration file looks good, simple and easy to use
|
I still have not been able to get everything to work witrh the changes requested by LordRalex, so if anyone gets it working, please help me. As i mentioned in the top, i have never done this before. |
"requirements": { I used this method on my Raspberry Pi and it worked perfectly, both installation and execution. |


This is my first template submission, so apologies if anything is slightly off or could be improved.
After several hours of testing and troubleshooting, this setup is now fully working on my end and reliably installs and runs a Hytale dedicated server in PufferPanel, including proper authentication flow.
The template is designed to be as simple as possible, fill in the variables, install, authenticate, and the server is ready for players.
Feedback and improvements are very welcome!