85 lines
3.2 KiB
Python
85 lines
3.2 KiB
Python
import os
|
|
import yaml
|
|
from typing import Any, List, Optional
|
|
|
|
with open('config.yaml', 'r') as open_file:
|
|
SETTINGS = yaml.load(open_file)
|
|
|
|
def at(keys : List[str]) -> Optional[Any]:
|
|
"""
|
|
Potentially get a value. If it doesn't exist, return None.
|
|
"""
|
|
return at_value(keys, SETTINGS)
|
|
|
|
def at_value(keys : List[str], value : Any) -> Optional[Any]:
|
|
try:
|
|
head, tail = keys[0], keys[1:]
|
|
except IndexError:
|
|
return value
|
|
else:
|
|
try:
|
|
new_value = value[head]
|
|
except TypeError:
|
|
return None
|
|
except KeyError:
|
|
return None
|
|
else:
|
|
return at_value(tail, new_value)
|
|
|
|
# EULA
|
|
EULA = at(['minecraft', 'eula']) or False
|
|
|
|
# Minecraft bridge credentials
|
|
MATRIX_HOMESERVER = at(['matrix', 'homeserver']) or "https://matrix.example.org/"
|
|
MATRIX_USERNAME = at(['matrix', 'username']) or "@alice:example.org"
|
|
MATRIX_PASSWORD = at(['matrix', 'password']) or "bridge_password"
|
|
|
|
# Matrix bridge room
|
|
MATRIX_ROOM = at(['matrix', 'room_id']) or "!channel_id:example.org"
|
|
|
|
SERVER_IP = os.getenv('SERVER_ADDRESS') or 'unknown ip'
|
|
|
|
# Matrix users who are allowed to run OP commands in Minecraft through Matrix
|
|
MC_ADMINS = [
|
|
"@bramvdnheuvel:nltrix.net", # Bram on Matrix (example, feel free to remove)
|
|
"@_discord_625632515314548736:t2bot.io" # Bram on Discord (example, feel free to remove)
|
|
# Your username on Matrix
|
|
]
|
|
if os.getenv('MATRIX_ADMINS') is not None:
|
|
MC_ADMINS = os.getenv('MATRIX_ADMINS').split(',')
|
|
|
|
make_bool = lambda os_value, default_value : default_value if not os_value else (
|
|
False if os_value.lower() == 'false' else True
|
|
)
|
|
|
|
SERVER_SETTINGS = {
|
|
'level-name': os.getenv('WORLD') or 'world',
|
|
|
|
# Server settings
|
|
'port' : 25565 if os.getenv('PORT') == None else int(os.getenv('PORT')),
|
|
'query.port' : 25565 if os.getenv('PORT') == None else int(os.getenv('PORT')),
|
|
'max-players' : 7 if os.getenv('MAX_PLAYERS') == None else int(os.getenv('MAX_PLAYERS')),
|
|
|
|
# Server temperature >:3
|
|
'view-distance' : 10 if os.getenv('RENDER_DISTANCE') == None else int(os.getenv('RENDER_DISTANCE')),
|
|
'enable-command-block' : make_bool(os.getenv('COMMAND_BLOCKS'), True),
|
|
|
|
# Environment
|
|
'allow-nether' : make_bool(os.getenv('NETHER'), True),
|
|
'spawn-npcs' : make_bool(os.getenv('NPCS'), True),
|
|
'spawn-animals' : make_bool(os.getenv('ANIMALS'), True),
|
|
'spawn-monsters' : make_bool(os.getenv('MONSTERS'), True),
|
|
|
|
# Gamemode
|
|
'pvp' : make_bool(os.getenv('PVP'), True),
|
|
'gamemode' : os.getenv('GAMEMODE') or 'survival',
|
|
'difficulty': os.getenv('DIFFICULTY') or 'medium',
|
|
'hardcore' : make_bool(os.getenv('HARDCORE'), False),
|
|
|
|
# Grief protection
|
|
'online-mode' : make_bool(os.getenv('VERIFY_ACCOUNTS'), True),
|
|
'white-list' : make_bool(os.getenv('WHITELIST'), True),
|
|
'enforce-whitelist' : make_bool(os.getenv('WHITELIST'), True),
|
|
'spawn-protection' : 16 if os.getenv('SPAWN_PROTECTION') == None else os.getenv('SPAWN_PROTECTION'),
|
|
}
|