You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
274 lines
12 KiB
Markdown
274 lines
12 KiB
Markdown
5 months ago
|
# Anleitung: Minecraft-Server auf einem NUC-GameServer einrichten
|
||
|
|
||
|
Diese Anleitung führt dich Schritt für Schritt durch den Prozess der Einrichtung eines Minecraft-Servers auf dem NUC-GameServer.
|
||
|
Bei fragen gerne immer Alex oder jemand anderen Admin-fähiges fragen.
|
||
|
|
||
|
---
|
||
|
|
||
|
## Schritt 1: Entscheiden, welchen Server man aufbauen will
|
||
|
|
||
|
Bevor du loslegst, musst du entscheiden, ob du einen **Vanilla-Server** (unmodifizierte Version) oder einen **modded Server** (mit Modifikationen) einrichten möchtest.
|
||
|
|
||
|
- **Beispiel:** Du möchtest das Modpack **Farming Valley** einrichten.
|
||
|
|
||
|
> **Tipp:** Vanilla-Server eignen sich für einfache Multiplayer-Erlebnisse ohne zusätzliche Modifikationen, während modded Server eine Vielzahl von neuen Funktionen und Inhalten bieten.
|
||
|
|
||
|
>> **Hinweis:** Zurzeit (08/2024) ist nur ein Vanilla Minecraft 1.21 aktiv und unter der Adresse "minecraft-vanilla.iamsander.de" erreichbar.
|
||
|
|
||
|
---
|
||
|
|
||
|
## Schritt 2: Server-Dateien für das gewählte Modpack finden
|
||
|
|
||
|
Die Server-Dateien für dein Modpack müssen ausfindig gemacht werden. In vielen Fällen sind diese als seperater Download auf Plattformen wie CurseForge oder Technic Modpacks zu finden.
|
||
|
Üblicherweise beinhalten diese mindestens eine .jar Datei und ein server.properties Datei.
|
||
|
|
||
|
- **Beispiel:** Die Dateien für Farming Valley findest du auf **CurseForge**.
|
||
|
|
||
|
> **Hinweis:** Stelle sicher, dass du die richtige Version des Modpacks auf der Client-Seite (deinem Rechner) herunterlädst, die mit deinem Minecraft-Server kompatibel ist. Sonst werden dir Fehler im Multiplayer Menu angezeigt und gegebenenfalls das Betreten des Servers nicht erlaubt.
|
||
|
|
||
|
---
|
||
|
|
||
|
## Schritt 3: Entpacken der Server-Dateien in den NUC-GameServers Ordner
|
||
|
|
||
|
Nachdem du die Server-Dateien heruntergeladen hast, müssen diese in den richtigen Ordner auf deinem NUC-GameServer entpackt werden.
|
||
|
|
||
|
- **Beispiel:** Entpacke die Dateien in den folgenden Pfad:
|
||
|
```plaintext
|
||
|
C:\Users\4lexK\Desktop\GameServers\Minecraft
|
||
|
|
||
|
> ***Hinweis***: Zurzeit (08/2024) sind folgende Server aktiv:
|
||
|
> - Minecraft Vanilla 1.21
|
||
|
-> minecraft-vanilla.iamsander.de
|
||
|
> - The 1.12.2 Pack 1.6.3 (SanderPack)
|
||
|
-> mc-sanderpack.iamsander.de
|
||
|
> - GT New Horizons 2.6.0 (SanderHorizons)
|
||
|
-> mc-sanderhorizons.iamsander.de
|
||
|
> - RLCraft 2.9.3 (SanderHardcore)
|
||
|
-> mc-sanderhardcore.iamsander.de
|
||
|
> - Farming Valley 1.1.2 (SanderValley)
|
||
|
-> mc-sandervalley.iamsander.de
|
||
|
|
||
|
## Schritt 4: Validieren und Konfigurieren der Serverdaten.
|
||
|
|
||
|
Beispiel:
|
||
|
In jedem Server-Ordner mussen folgende Elemente enthalten sein:
|
||
|
- config Ordner
|
||
|
- libraries Ordner
|
||
|
- mods Ordner (falls modded)
|
||
|
- resources Ordner
|
||
|
- scripts Ordner
|
||
|
- minecraft server jar File der jeweiligen Basis Minecraft Version
|
||
|
- modloader jar File kompatibel mit der Minecraft version
|
||
|
(üblicherweise im Modpack-Ordner enthalten. Kann online geprüft werden, welche notwendig ist)
|
||
|
- server.json File
|
||
|
- options.txt
|
||
|
- (optional) Ein 64x64 server-icon.png File (für das Icon im Multiplayer Menü)
|
||
|
|
||
|
Zunächst muss der Server einmal initial gestartet werden um die eula.txt erzeugen zu lassen. Dafür einmal entweder die Minecraft[...].jar (bei Vanilla) oder die Forge[...].jar (bei modded) regulär ausführen. Der Server fährt dann hoch und bricht dann nach erzeugen der eula.txt ab. Diese muss geöffnet und der False wert auf True geändert werden um die Eula zu akzeptieren.
|
||
|
|
||
|
Im Anschluss muss die server.properties Datei mit einem Texteditor angepasst werden. Viele der Parameter hier sind geschmackssache und können bei Bedarf und interesse recherchiert und geändert werden.
|
||
|
Die wichtigsten drei Einstellungen sind
|
||
|
1. Die "level"-Parameter:
|
||
|
- level-name=[NameDerWelt z.b. SanderPack]
|
||
|
- level-seed=[EineZahl die den Startwert der Generierung bestimmt z.b. 08062021]
|
||
|
- level-type=[Typ der Welt z.b. BIOMESOP für Biomes O Plenty oder DEFAULT für reguläres Survival]
|
||
|
2. motd:
|
||
|
Dieser stellt die Welt-Beschreibung dar, welche im Multiplayer Menu unter dem Icon und dem Namen angezeigt wird.
|
||
|
3. Die "server"-Parameter:
|
||
|
- server-ip=[üblicherweise die IP mit der die Welt erreichbar ist; sollte stehts leer sein damit die Host-Maschinen IP gewählt wird]
|
||
|
- server-port=[Der Port auf der Maschine auf dem gehostet wird. Default 25565. Beim Betreiben mehrerer Server müssen die Ports jeweils umgeändert werden, da immer nur ein Port gleichzeitig verwendet werden kann]
|
||
|
|
||
|
## Step 5: Anbinden an Nuc Morroc Telegram Bot.
|
||
|
|
||
|
Wir haben einen Telegram-Bot, welcher das Ansteuern und Verwalten der GameServer übernimmt.
|
||
|
Der Bot ist unter folgendem Username zu erreichen.
|
||
|
|
||
|
@sander_nuc_morroc_bot
|
||
|
|
||
|
Bei erstem Kontakt (oder dem /start Befehl) wird man nach einem Passwort gefragt.
|
||
|
Dieses lautet:
|
||
|
29102021
|
||
|
|
||
|
Um die Funktionen und den Menu-Eintrag beim Bot korrekt einzufügen muss man eine Anpassung an unserem Osiris_listener Git-Repo (https://sandergit.iamsander.de/Alex/osiris_listener).
|
||
|
|
||
|
Hier gibt es das Skript osiris_listener_telegram.py
|
||
|
|
||
|
In diesem Skript müssen folgende Anpassungen gemacht werden:
|
||
|
|
||
|
1. Neues GameServer Profil hinzufügen
|
||
|
|
||
|
``` python
|
||
|
gaming_server_profiles = {
|
||
|
# Minecraft
|
||
|
"mc_vanilla" : {
|
||
|
'profile_id': 'vanilla',
|
||
|
'server_name': 'Vanilla 1.21',
|
||
|
'directory': 'C:/Users/4lexK/Desktop/GameServers/Minecraft/Vanilla_1-21/',
|
||
|
'command': ['C:/Program Files/Java/jdk-22/bin/java.exe', '-Xmx1024M', '-Xms1024M', '-jar', 'minecraft_server.1.21.jar', '--nogui', '--bonusChest'],
|
||
|
'wait_time': 30
|
||
|
},
|
||
|
```
|
||
|
Hierbei gelten folgende Regeln:
|
||
|
- profile_id -> Wird genutzt in diversen Mechaniken
|
||
|
- server_name -> Wird genutzt in Status-Nachrichten
|
||
|
- directory -> Zeigt immer auf den Root-Ordner des Servers
|
||
|
- command -> Liste aus Command und Parametern (siehe etwaige Launch-Skripte oder auf der Seite des Server-File Providers welche Params empfohlen werden)
|
||
|
- wait_time -> Rudimentäre Schätzung wie lange das Skript warten soll wenn ein Server seinen SIGINT (CTRL-C) erhalten hat und sich vollständig heruntergefahren hat
|
||
|
|
||
|
|
||
|
> Beispiel:
|
||
|
Falls beim Server-Zip ein Launchskript (.bat oder .sh File) enthalten ist, kann das direkt benutzt werden um start-Parameter für diese Zeilen zu extrahieren.
|
||
|
|
||
|
2. Hinzufügen von einem Untermenü für den Telegram Bot
|
||
|
|
||
|
Hierzu kann an den restlichen nested Menüs nach Beispielen für Optionen gesucht werden.
|
||
|
``` python
|
||
|
####
|
||
|
# Nested Menu Bäume
|
||
|
####
|
||
|
main_menu = [
|
||
|
[
|
||
|
{"text": "Tool Commands", "callback_data": "tools"},
|
||
|
],
|
||
|
[
|
||
|
{"text": "Game Server", "callback_data": "game_servers"}
|
||
|
|
||
|
]
|
||
|
# Add neue Hauptmenu Elemente hier
|
||
|
]
|
||
|
|
||
|
tools_menu = [
|
||
|
[
|
||
|
{"text": "<- Zurück", "callback_data": "nuc_back"}
|
||
|
],
|
||
|
[
|
||
|
{"text": "Status", "callback_data": "nuc_satus"},
|
||
|
{"text": "Shutdown", "callback_data": "nuc_shutdown"},
|
||
|
]
|
||
|
# Add neue Tool Commands here
|
||
|
]
|
||
|
```
|
||
|
|
||
|
Hierbei gilt:
|
||
|
Jedes Menü (z.b. tools_menu) enthält Listen von Buttons mit Daten. Diese Daten enthalten immer "text" -> Der Text im Button und "callback_data" -> eine ID zur Verarbeitung der Logik.
|
||
|
|
||
|
3. In der Funktion handle_callback werden die callback_data IDs verarbeitet:
|
||
|
``` python
|
||
|
async def handle_callback(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
|
||
|
query = update.callback_query
|
||
|
await query.answer()
|
||
|
await start_timer(context, query.message.chat_id)
|
||
|
data = query.data
|
||
|
|
||
|
match data:
|
||
|
# Main
|
||
|
case "tools":
|
||
|
await query.message.reply_text("Wähle eine Tool Funktion:", reply_markup=InlineKeyboardMarkup(tools_menu))
|
||
|
case "game_servers":
|
||
|
await query.message.reply_text("Wähle einen Gameserver Typ:", reply_markup=InlineKeyboardMarkup(gameserver_menu))
|
||
|
# Tools
|
||
|
case "nuc_satus":
|
||
|
status = get_status_nuc()
|
||
|
await query.message.reply_text(f"Nuc Morroc Status (Auslastungen) \nCPU:{status["cpu"]}\nRAM:{status["ram"]}")
|
||
|
case "nuc_shutdown":
|
||
|
logging.info("Received request to shutdown.")
|
||
|
try:
|
||
|
os.system("shutdown /s /t 1")
|
||
|
await query.message.reply_text(f"Nuc Morroc wird heruntergefahren")
|
||
|
except Exception as exc:
|
||
|
logging.error(f"Error executing shutdown command: {exc}")
|
||
|
await query.message.reply_text(f"Fehler beim herunterfahren des Nuc Morroc.")
|
||
|
[...]
|
||
|
# MC Sanderpack (The 1.12.2 Pack)
|
||
|
case "mc_sanderpack_start":
|
||
|
msg = start_gameserver("mc_sanderpack")
|
||
|
await query.message.reply_text(f"{msg}")
|
||
|
case "mc_sanderpack_stop":
|
||
|
msg = stop_gameserver("mc_sanderpack")
|
||
|
await query.message.reply_text(f"{msg}")
|
||
|
case "mc_sanderpack_back":
|
||
|
await query.message.reply_text("Wähle einen Minecraft Server:",
|
||
|
reply_markup = InlineKeyboardMarkup(minecraft_menu))
|
||
|
[...]
|
||
|
```
|
||
|
Zu beachten ist, dass jede Message awaited werden muss.
|
||
|
|
||
|
|
||
|
## Step 6 Testen
|
||
|
|
||
|
Hierbei werden die neuen Infos getestet (via Code und via Bot) um sicher zu stellen, dass alles mit Rechten Dingen zugeht.
|
||
|
|
||
|
> **Notiz**:
|
||
|
Nie eine Funktion/Button einbauen der Pauschal alle GameServer / große Mengen der Server Started. Der Rechner wird mit ziemlicher Sicherheit in die Knie gehen.
|
||
|
|
||
|
## Zusatzinfos
|
||
|
### Setzen von Admins (OPs)
|
||
|
In jedem Server-Root Ordner sollte eine Datei Namens "ops.json" enthalten sein (spätestens nach erstem hochfahren des Servers).
|
||
|
In dieser Datei werden alle Admins (OPs) und weitere Nutzer mit erhöhten Rechten eingetragen.
|
||
|
Hier ein Beispiel:
|
||
|
``` json
|
||
|
[
|
||
|
{
|
||
|
"uuid": "4363e821-880d-4950-b492-b27682aa0202",
|
||
|
"name": "4lexKidd",
|
||
|
"level": 3,
|
||
|
"bypassesPlayerLimit": false
|
||
|
},
|
||
|
{
|
||
|
"uuid": "f867bc59-62b2-4019-9b9a-8a0216bef6e2",
|
||
|
"name": "F0xy_Br0wn",
|
||
|
"level": 3,
|
||
|
"bypassesPlayerLimit": false
|
||
|
}
|
||
|
]
|
||
|
```
|
||
|
|
||
|
Erläuterungen:
|
||
|
- uuid: Kann extrahiert werden aus der Datei "usercache.json". Nachdem ein Spieler sich zum ersten Mal einloggt wird diese uuid dort eingetragen. Diese ist einzigartig für jeden Spieler und immer gleich(Kann von anderen Server Konfigs kopiert werden).
|
||
|
- name: Ist der Spieler Name
|
||
|
- level: Ist das Rechte Level (0 = Rechteloser Spieler bis 3 = Voll-Rechte Admin)
|
||
|
- bypassesPlayerLimit: Boolscher Wert der bestimmt, ob ein Spieler immer Zugang erhalten soll egal ob das Spieler Limit des Servers erreicht ist. Bei True darf der Spieler immer auf den Server.
|
||
|
|
||
|
Falls interesse besteht mehr rechte einzuräumen (gerade uns Sanders, falls wir mit Gästen spielen), sollten diese Einträge gemacht werden und unsere Accounts höhere Rechte erhalten.
|
||
|
|
||
|
### Setzen von Whitelist-Spielern
|
||
|
Falls bemerkt wird, dass zu viele aussenstehende sich auf dem Server herumtreiben und man wieder nur eine ausgewählte Menge Spieler erlauben will, kann man eine Whitelist aktivieren.
|
||
|
|
||
|
In jedem Server-Root Ordner gibt es dafür eine whitelist.json.
|
||
|
Diese wird ähnlich der OP-Liste gepflegt:
|
||
|
|
||
|
``` json
|
||
|
[
|
||
|
{
|
||
|
"uuid": "4363e821-880d-4950-b492-b27682aa0202",
|
||
|
"name": "4lexKidd",
|
||
|
"level": 3,
|
||
|
"bypassesPlayerLimit": false
|
||
|
},
|
||
|
{
|
||
|
"uuid": "f867bc59-62b2-4019-9b9a-8a0216bef6e2",
|
||
|
"name": "F0xy_Br0wn",
|
||
|
"level": 3,
|
||
|
"bypassesPlayerLimit": false
|
||
|
}
|
||
|
]
|
||
|
```
|
||
|
|
||
|
Zusätzlich zu den Usern muss im server.properties die Konfiguration
|
||
|
``` json
|
||
|
white-list=false
|
||
|
```
|
||
|
auf true gesetzt werden, damit die whitelist angewendet wird und jeder auto-geblockt wird, der nicht darauf steht.
|
||
|
|
||
|
### Einzelne Mod-Konfigurationen
|
||
|
|
||
|
Im Server-Root Ordner müsste ein "Config" Ordner enthalten sein. Hier sind Konfigurationsdateien zu jedem Mod seperat enthalten.
|
||
|
In diesen sind üblicherweise ein bzw. mehrere .cfg Dateien enthalten. Diese können fein-getuned werden aber vorsicht, man sollte sich im klaren sein was man tut weil man an vielen stellen verherende Balancing Probleme inkludieren kann.
|
||
|
Üblicherweise sind Modpacks in dieser Hinsicht gut gebalanced und benötigen keine einzel Mod-Anpassungen mehr.
|
||
|
|
||
|
### Eigenes Custom Server-Icon für das Multiplayer-Menu bauen.
|
||
|
|
||
|
Damit das Icon korrekt geladen werden kann, darf es die Größe 64 x 64 nicht überschreiten.
|
||
|
|
||
|
Zur Vereinfachung liegt beim osiris-listener Repo eine Gimp-Arbeitsvorlage ("server_icon.xcf") bei.
|
||
|
Nach Bearbeitung muss das Icon nur als server_icon.png exportiert und in den gewünschten Ordner gepackt werden. Der Serverstart wird das neue Icon automatisch erkennen und versuchen es zu laden.
|