update
This commit is contained in:
parent
c12a02fea8
commit
89ef32e734
15
README.md
15
README.md
@ -6,6 +6,8 @@ This project aims to autostart a Stardew Valley Multiplayer Server as easy as po
|
||||
|
||||
- Updating to most recent version requires a rebuild: `docker-compose build --no-cache`
|
||||
- Although I'm trying to put out updates, I don't have the time for testing, so I recommend forking and fixing things on your own.
|
||||
- Ansible and Terraform will not be supported anymore
|
||||
- Thanks to the brilliant configuration script from Novex and the genius baseimage from jlesage this now looks a bit better
|
||||
|
||||
## Setup
|
||||
|
||||
@ -16,7 +18,7 @@ git clone https://github.com/printfuck/stardew-multiplayer-docker
|
||||
|
||||
docker-compose up
|
||||
```
|
||||
### Ansible
|
||||
### Ansible !deprecated!
|
||||
|
||||
Create an inventory file with your hosts
|
||||
|
||||
@ -24,7 +26,7 @@ Create an inventory file with your hosts
|
||||
ansible -i <your_inventori> playbook.yml
|
||||
```
|
||||
|
||||
### Terraform (with Hetzner Cloud)
|
||||
### Terraform (with Hetzner Cloud) !deprecated!
|
||||
|
||||
Enter your API Token in `terraform/vars.auto.tfvars` and modify the resource section in `main.tf` to your liking, then run the following script:
|
||||
|
||||
@ -34,7 +36,7 @@ Enter your API Token in `terraform/vars.auto.tfvars` and modify the resource sec
|
||||
|
||||
## Game Setup
|
||||
|
||||
Intially you have to create or load a game once at first startup via VNC. After that the Autoload Mod jumps into the previously loaded savegame everytime you rerun the container. You can also edit the config file of the Autoload Mod to archieve similar behaviour.
|
||||
Intially you have to create or load a game once at first startup via VNC or Web interface. After that the Autoload Mod jumps into the previously loaded savegame everytime you rerun the container. You can also edit the config file of the Autoload Mod to archieve similar behaviour.
|
||||
|
||||
### VNC
|
||||
|
||||
@ -50,15 +52,20 @@ Localhost:
|
||||
- VNCPASS=insecure
|
||||
```
|
||||
|
||||
### Web Interface
|
||||
|
||||
On port 5800 inside the container is a web interface that uses noVNC. This is a bit easier and more accessible than just the vnc interface. Although you will be asked for the vnc password, I wouldn't recommend exposing the the port to the outside world.
|
||||
|
||||
## How it works
|
||||
|
||||
The game, the modloader (SMAPI), and the necessary Mods are pulled from my servers (I'll assume you already own the game - since you're looking for a multiplayer - so please don't rip it from there) to minimize version conflicts. The `docker-entrypoint.sh` script will start `Xvfb` and `x11vnc` before starting the game. You can control the game via vnc with the settings within the `docker-compose.yml` file.
|
||||
The game will be pulled from my servers (I'll assume you already own the game - since you're looking for a multiplayer - so please don't rip it from there) and the modloader (SMAPI) will be pulled from Github when building the container. You can control the mod's settings with environment variables in the `docker-compose.yml` file.
|
||||
|
||||
## Used Mods
|
||||
|
||||
* [AutoLoadGame](https://www.nexusmods.com/stardewvalley/mods/2509)
|
||||
* [Always On](https://community.playstarbound.com/threads/updating-mods-for-stardew-valley-1-4.156000/page-20#post-3353880)
|
||||
* [Unlimited Players](https://www.nexusmods.com/stardewvalley/mods/2213)
|
||||
* some more ...
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
|
@ -1,28 +0,0 @@
|
||||
{
|
||||
"serverHotKey": "F9",
|
||||
"profitmargin": 50,
|
||||
"upgradeHouse": 0,
|
||||
"petname": "mypetnyame",
|
||||
"farmcavechoicemushrooms": false,
|
||||
"communitycenterrun": true,
|
||||
"timeOfDayToSleep": 2200,
|
||||
"lockPlayerChests": true,
|
||||
"clientsCanPause": false,
|
||||
"copyInviteCodeToClipboard": true,
|
||||
"festivalsOn": true,
|
||||
"eggHuntCountDownConfig": 120,
|
||||
"flowerDanceCountDownConfig": 120,
|
||||
"luauSoupCountDownConfig": 120,
|
||||
"jellyDanceCountDownConfig": 120,
|
||||
"grangeDisplayCountDownConfig": 120,
|
||||
"iceFishingCountDownConfig": 120,
|
||||
"endofdayTimeOut": 300,
|
||||
"fairTimeOut": 1200,
|
||||
"spiritsEveTimeOut": 900,
|
||||
"winterStarTimeOut": 900,
|
||||
"eggFestivalTimeOut": 120,
|
||||
"flowerDanceTimeOut": 120,
|
||||
"luauTimeOut": 120,
|
||||
"danceOfJelliesTimeOut": 120,
|
||||
"festivalOfIceTimeOut": 120
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"LastFileLoaded": "Bar_271098218",
|
||||
"LastFileLoaded": "Barr_271103276",
|
||||
"LoadIntoMultiplayer": true,
|
||||
"ForgetLastFileOnTitle": true
|
||||
}
|
@ -1,3 +0,0 @@
|
||||
{
|
||||
"PlayerLimit": 10
|
||||
}
|
@ -5,18 +5,140 @@ services:
|
||||
build: docker
|
||||
container_name: stardew
|
||||
environment:
|
||||
- "VNC_PASSWORD=2342"
|
||||
- "VNC_PASSWORD=nyanyanya"
|
||||
- "DISPLAY_HEIGHT=1000"
|
||||
- "DISPLAY_WIDTH=1400"
|
||||
## Always On Server mod
|
||||
# Removing this will probably defeat the point of ever using this?
|
||||
- ENABLE_ALWAYSONSERVER_MOD=${ENABLE_ALWAYSONSERVER_MOD-true}
|
||||
- ALWAYS_ON_SERVER_HOTKEY=${ALWAYS_ON_SERVER_HOTKEY-F9}
|
||||
- ALWAYS_ON_SERVER_PROFIT_MARGIN=${ALWAYS_ON_SERVER_PROFIT_MARGIN-100}
|
||||
- ALWAYS_ON_SERVER_UPGRADE_HOUSE=${ALWAYS_ON_SERVER_UPGRADE_HOUSE-0}
|
||||
- ALWAYS_ON_SERVER_PET_NAME=${ALWAYS_ON_SERVER_PET_NAME-nya}
|
||||
- ALWAYS_ON_SERVER_FARM_CAVE_CHOICE_MUSHROOMS=${ALWAYS_ON_SERVER_FARM_CAVE_CHOICE_MUSHROOMS-true}
|
||||
- ALWAYS_ON_SERVER_COMMUNITY_CENTER_RUN=${ALWAYS_ON_SERVER_COMMUNITY_CENTER_RUN-true}
|
||||
- ALWAYS_ON_SERVER_TIME_OF_DAY_TO_SLEEP=${ALWAYS_ON_SERVER_TIME_OF_DAY_TO_SLEEP-2200}
|
||||
- ALWAYS_ON_SERVER_LOCK_PLAYER_CHESTS=${ALWAYS_ON_SERVER_LOCK_PLAYER_CHESTS-true}
|
||||
- ALWAYS_ON_SERVER_CLIENTS_CAN_PAUSE=${ALWAYS_ON_SERVER_CLIENTS_CAN_PAUSE-true}
|
||||
- ALWAYS_ON_SERVER_COPY_INVITE_CODE_TO_CLIPBOARD=${ALWAYS_ON_SERVER_COPY_INVITE_CODE_TO_CLIPBOARD-false}
|
||||
|
||||
- ALWAYS_ON_SERVER_FESTIVALS_ON=${ALWAYS_ON_SERVER_FESTIVALS_ON-true}
|
||||
- ALWAYS_ON_SERVER_EGG_HUNT_COUNT_DOWN=${ALWAYS_ON_SERVER_EGG_HUNT_COUNT_DOWN-600}
|
||||
- ALWAYS_ON_SERVER_FLOWER_DANCE_COUNT_DOWN=${ALWAYS_ON_SERVER_FLOWER_DANCE_COUNT_DOWN-600}
|
||||
- ALWAYS_ON_SERVER_LUAU_SOUP_COUNT_DOWN=${ALWAYS_ON_SERVER_LUAU_SOUP_COUNT_DOWN-600}
|
||||
- ALWAYS_ON_SERVER_JELLY_DANCE_COUNT_DOWN=${ALWAYS_ON_SERVER_JELLY_DANCE_COUNT_DOWN-600}
|
||||
- ALWAYS_ON_SERVER_GRANGE_DISPLAY_COUNT_DOWN=${ALWAYS_ON_SERVER_GRANGE_DISPLAY_COUNT_DOWN-600}
|
||||
- ALWAYS_ON_SERVER_ICE_FISHING_COUNT_DOWN=${ALWAYS_ON_SERVER_ICE_FISHING_COUNT_DOWN-600}
|
||||
|
||||
- ALWAYS_ON_SERVER_END_OF_DAY_TIMEOUT=${ALWAYS_ON_SERVER_END_OF_DAY_TIMEOUT-300}
|
||||
- ALWAYS_ON_SERVER_FAIR_TIMEOUT=${ALWAYS_ON_SERVER_FAIR_TIMEOUT-1200}
|
||||
- ALWAYS_ON_SERVER_SPIRITS_EVE_TIMEOUT=${ALWAYS_ON_SERVER_SPIRITS_EVE_TIMEOUT-900}
|
||||
- ALWAYS_ON_SERVER_WINTER_STAR_TIMEOUT=${ALWAYS_ON_SERVER_WINTER_STAR_TIMEOUT-900}
|
||||
|
||||
- ALWAYS_ON_SERVER_EGG_FESTIVAL_TIMEOUT=${ALWAYS_ON_SERVER_EGG_FESTIVAL_TIMEOUT-120}
|
||||
- ALWAYS_ON_SERVER_FLOWER_DANCE_TIMEOUT=${ALWAYS_ON_SERVER_FLOWER_DANCE_TIMEOUT-120}
|
||||
- ALWAYS_ON_SERVER_LUAU_TIMEOUT=${ALWAYS_ON_SERVER_LUAU_TIMEOUT-120}
|
||||
- ALWAYS_ON_SERVER_DANCE_OF_JELLIES_TIMEOUT=${ALWAYS_ON_SERVER_DANCE_OF_JELLIES_TIMEOUT-120}
|
||||
- ALWAYS_ON_SERVER_FESTIVAL_OF_ICE_TIMEOUT=${ALWAYS_ON_SERVER_FESTIVAL_OF_ICE_TIMEOUT-120 }
|
||||
|
||||
## Unlimited Players mod
|
||||
# Removing this will limit game players to 4
|
||||
- ENABLE_UNLIMITEDPLAYERS_MOD=${ENABLE_UNLIMITEDPLAYERS_MOD-true}
|
||||
- UNLIMITED_PLAYERS_PLAYER_LIMIT=${UNLIMITED_PLAYERS_PLAYER_LIMIT-10}
|
||||
|
||||
## Auto Load Game mod
|
||||
# Removing this will mean you need to VNC in to manually start the game each boot
|
||||
- ENABLE_AUTOLOADGAME_MOD=${ENABLE_AUTOLOADGAME-true}
|
||||
- AUTO_LOAD_GAME_LAST_FILE_LOADED=${AUTO_LOAD_GAME_LAST_FILE_LOADED-null}
|
||||
- AUTO_LOAD_GAME_FORGET_LAST_FILE_ON_TITLE=${AUTO_LOAD_GAME_FORGET_LAST_FILE_ON_TITLE-true}
|
||||
- AUTO_LOAD_GAME_LOAD_INTO_MULTIPLAYER=${AUTO_LOAD_GAME_LOAD_INTO_MULTIPLAYER-true}
|
||||
|
||||
## Remote Control mod
|
||||
# Disabling this will remove the ability to automatically sleep and save on shutdown
|
||||
- ENABLE_REMOTECONTROL_MOD=${ENABLE_REMOTECONTROL_MOD-true}
|
||||
- REMOTE_CONTROL_EVERYONE_IS_ADMIN=${REMOTE_CONTROL_EVERYONE_IS_ADMIN-false} # Disable any authorization by just making everyone an admin - useful for private servers where everyone is trusted
|
||||
- REMOTE_CONTROL_DEFAULT_ADMINS=${REMOTE_CONTROL_DEFAULT_ADMINS-} # A list of comma-separated json objects to use as default admins, eg: {id: "123456789", name: "Seb"}, {id: "987654321", name: "Kitz"}
|
||||
- REMOTE_CONTROL_SHOULD_ASSIGN_ADMIN_TO_FIRST_CABIN_FARMER=${REMOTE_CONTROL_SHOULD_ASSIGN_ADMIN_TO_FIRST_CABIN_FARMER-true} # Give the first player that connects admin privileges
|
||||
|
||||
## Save Backup mod
|
||||
# Disabling this will stop saves being backed up
|
||||
- ENABLE_SAVEBACKUP_MOD=${ENABLE_SAVEBACKUP_MOD-true}
|
||||
|
||||
## Chat Commands mod
|
||||
- ENABLE_CHATCOMMANDS_MOD=${ENABLE_CHATCOMMANDS_MOD-false}
|
||||
|
||||
## Console Commands mod
|
||||
- ENABLE_CONSOLECOMMANDS_MOD=${ENABLE_CONSOLECOMMANDS_MOD-false}
|
||||
|
||||
## Time Speed mod
|
||||
- ENABLE_TIMESPEED_MOD=${ENABLE_TIMESPEED_MOD-false}
|
||||
|
||||
# Days are only 20 hours long
|
||||
# 7.0 = 14 mins per in game day (default)
|
||||
# 10.0 = 20 mins
|
||||
# 15.0 = 30 mins
|
||||
# 20.0 = 40 mins
|
||||
# 30.0 = 1 hour
|
||||
# 120.0 = 4 hours
|
||||
# 300.0 = 10 hours
|
||||
# 600.0 = 20 hours (realtime)
|
||||
|
||||
- TIME_SPEED_DEFAULT_TICK_LENGTH=${TIME_SPEED_DEFAULT_TICK_LENGTH-7.0}
|
||||
- TIME_SPEED_TICK_LENGTH_BY_LOCATION_INDOORS=${TIME_SPEED_TICK_LENGTH_BY_LOCATION_INDOORS-7.0}
|
||||
- TIME_SPEED_TICK_LENGTH_BY_LOCATION_OUTDOORS=${TIME_SPEED_TICK_LENGTH_BY_LOCATION_OUTDOORS-7.0}
|
||||
- TIME_SPEED_TICK_LENGTH_BY_LOCATION_MINE=${TIME_SPEED_TICK_LENGTH_BY_LOCATION_MINE-7.0}
|
||||
|
||||
- TIME_SPEED_ENABLE_ON_FESTIVAL_DAYS=${TIME_SPEED_ENABLE_ON_FESTIVAL_DAYS-false}
|
||||
- TIME_SPEED_FREEZE_TIME_AT=${TIME_SPEED_FREEZE_TIME_AT-null}
|
||||
- TIME_SPEED_LOCATION_NOTIFY=${TIME_SPEED_LOCATION_NOTIFY-false}
|
||||
|
||||
- TIME_SPEED_KEYS_FREEZE_TIME=${TIME_SPEED_KEYS_FREEZE_TIME-N}
|
||||
- TIME_SPEED_KEYS_INCREASE_TICK_INTERVAL=${TIME_SPEED_KEYS_INCREASE_TICK_INTERVAL-OemPeriod}
|
||||
- TIME_SPEED_KEYS_DECREASE_TICK_INTERVAL=${TIME_SPEED_KEYS_DECREASE_TICK_INTERVAL-OemComma}
|
||||
- TIME_SPEED_KEYS_RELOAD_CONFIG=${TIME_SPEED_KEYS_RELOAD_CONFIG-B}
|
||||
|
||||
## Crops Anytime Anywhere mod
|
||||
- ENABLE_CROPSANYTIMEANYWHERE_MOD=${ENABLE_CROPSANYTIMEANYWHERE_MOD-false}
|
||||
|
||||
- CROPS_ANYTIME_ANYWHERE_ENABLE_IN_SEASONS_SPRING=${CROPS_ANYTIME_ANYWHERE_ENABLE_IN_SEASONS_SPRING-true}
|
||||
- CROPS_ANYTIME_ANYWHERE_ENABLE_IN_SEASONS_SUMMER=${CROPS_ANYTIME_ANYWHERE_ENABLE_IN_SEASONS_SUMMER-true}
|
||||
- CROPS_ANYTIME_ANYWHERE_ENABLE_IN_SEASONS_FALL=${CROPS_ANYTIME_ANYWHERE_ENABLE_IN_SEASONS_FALL-true}
|
||||
- CROPS_ANYTIME_ANYWHERE_ENABLE_IN_SEASONS_WINTER=${CROPS_ANYTIME_ANYWHERE_ENABLE_IN_SEASONS_WINTER-true}
|
||||
|
||||
- CROPS_ANYTIME_ANYWHERE_FARM_ANY_LOCATION=${CROPS_ANYTIME_ANYWHERE_FARM_ANY_LOCATION-true}
|
||||
|
||||
- CROPS_ANYTIME_ANYWHERE_FORCE_TILLABLE_DIRT=${CROPS_ANYTIME_ANYWHERE_FORCE_TILLABLE_DIRT-true}
|
||||
- CROPS_ANYTIME_ANYWHERE_FORCE_TILLABLE_GRASS=${CROPS_ANYTIME_ANYWHERE_FORCE_TILLABLE_GRASS-true}
|
||||
- CROPS_ANYTIME_ANYWHERE_FORCE_TILLABLE_STONE=${CROPS_ANYTIME_ANYWHERE_FORCE_TILLABLE_STONE-false}
|
||||
- CROPS_ANYTIME_ANYWHERE_FORCE_TILLABLE_OTHER=${CROPS_ANYTIME_ANYWHERE_FORCE_TILLABLE_OTHER-false}
|
||||
|
||||
## Friends Forever mod
|
||||
- ENABLE_FRIENDSFOREVER_MOD=${ENABLE_FRIENDSFOREVER_MOD-false}
|
||||
|
||||
- FRIENDS_FOREVER_AFFECT_SPOUSE=${FRIENDS_FOREVER_AFFECT_SPOUSE-false}
|
||||
- FRIENDS_FOREVER_AFFECT_DATES=${FRIENDS_FOREVER_AFFECT_DATES-true}
|
||||
- FRIENDS_FOREVER_AFFECT_EVERYONE_ELSE=${FRIENDS_FOREVER_AFFECT_EVERYONE_ELSE-true}
|
||||
- FRIENDS_FOREVER_AFFECT_ANIMALS=${FRIENDS_FOREVER_AFFECT_ANIMALS-true}
|
||||
|
||||
## No Fence Decay mod
|
||||
- ENABLE_NOFENCEDECAY_MOD=${ENABLE_NOFENCEDECAY_MOD-false}
|
||||
|
||||
## Non-destructive NPCs mod
|
||||
- ENABLE_NONDESTRUCTIVENPCS_MOD=${ENABLE_NONDESTRUCTIVENPCS_MOD-false}
|
||||
|
||||
ports:
|
||||
# VNC
|
||||
- 5902:5900
|
||||
# NOVNC WEB
|
||||
- 5801:5800
|
||||
# Game
|
||||
- 24642:24642/udp
|
||||
volumes:
|
||||
- ./valley_saves:/root/.config/StardewValley/Saves/
|
||||
- ./configs/alwayson.json:/data/Stardew/Stardew Valley/Mods/Always On Server/config.json
|
||||
- ./configs/unlimitedplayers.json:/data/Stardew/Stardew Valley/Mods/UnlimitedPlayers/config.json
|
||||
# Saves go here now
|
||||
- ./valley_saves:/config/xdg/config/StardewValley/Saves
|
||||
# Should work, not tested
|
||||
- ./backups:/config/xdg/config/StardewValley/Saves/save-backups
|
||||
# The stateful configs should be initially empty files with 777 permission
|
||||
- ./configs/autoload.json:/data/Stardew/Stardew Valley/Mods/AutoLoadGame/config.json
|
||||
# add another mod
|
||||
# - ./ModFolder:/data/Stardew/Stardew Valley/Mods/ModFolder
|
||||
|
||||
|
||||
|
@ -31,16 +31,21 @@ RUN wget https://github.com/Pathoschild/SMAPI/releases/download/3.9.0/SMAPI-3.9.
|
||||
unzip /data/nexus.zip -d /data/nexus/ && \
|
||||
/bin/bash -c "echo -e \"2\n/data/Stardew/Stardew\ Valley\n1\n\" | /usr/bin/mono /data/nexus/SMAPI\ 3.9.0\ installer/internal/unix-install.exe"
|
||||
|
||||
# Add Mods
|
||||
COPY mods/alwayson.zip /data/alwayson.zip
|
||||
COPY mods/unlimitedplayers.zip /data/unlimitedplayers.zip
|
||||
COPY mods/autoloadgame.zip /data/autoloadgame.zip
|
||||
RUN apt-get install -y gettext-base jq netcat procps
|
||||
|
||||
# Add Mods
|
||||
|
||||
# Add Mods & Scripts
|
||||
COPY ["mods/", "/data/Stardew/Stardew Valley/Mods/"]
|
||||
COPY scripts/ /opt/
|
||||
|
||||
RUN unzip /data/alwayson.zip -d /data/Stardew/Stardew\ Valley/Mods && \
|
||||
unzip /data/unlimitedplayers.zip -d /data/Stardew/Stardew\ Valley/Mods && \
|
||||
unzip /data/autoloadgame.zip -d /data/Stardew/Stardew\ Valley/Mods && \
|
||||
rm /data/alwayson.zip /data/unlimitedplayers.zip /data/autoloadgame.zip
|
||||
RUN chmod +x /data/Stardew/Stardew\ Valley/StardewValley && \
|
||||
chmod -R 777 /data/Stardew/
|
||||
chmod -R 777 /data/Stardew/ && \
|
||||
chown -R 1000:1000 /data/Stardew && \
|
||||
chmod +x /opt/*.sh
|
||||
|
||||
RUN \
|
||||
APP_ICON_URL=https://stardewcommunitywiki.com/mediawiki/images/4/48/Fiddlehead_Fern.png && \
|
||||
install_app_icon.sh "$APP_ICON_URL"
|
||||
|
||||
COPY docker-entrypoint.sh /startapp.sh
|
||||
|
@ -1,17 +1,39 @@
|
||||
#!/bin/sh
|
||||
#!/bin/bash
|
||||
export HOME=/config
|
||||
|
||||
#if [ -f /tmp/.X10-lock ]; then rm /tmp/.X10-lock; fi
|
||||
#Xvfb :10 -screen 0 1580x920x24 -ac &
|
||||
for modPath in /data/Stardew/Stardew\ Valley/Mods/*/
|
||||
do
|
||||
mod=$(basename "$modPath")
|
||||
|
||||
#while [ ! -z "`xdpyinfo -display :10 2>&1 | grep 'unable to open display'`" ]; do
|
||||
# echo Waiting for display;
|
||||
# sleep 5;
|
||||
#done
|
||||
# Normalize mod name ot uppercase and only characters, eg. "Always On Server" => ENABLE_ALWAYSONSERVER_MOD
|
||||
var="ENABLE_$(echo "${mod^^}" | tr -cd '[A-Z]')_MOD"
|
||||
|
||||
#export DISPLAY=:10.0
|
||||
#x11vnc -display :10 -rfbport 5900 -rfbportv6 -1 -no6 -noipv6 -httpportv6 -1 -forever -desktop StardewValley -cursor arrow -passwd $VNCPASS -shared &
|
||||
#sleep 5
|
||||
#i3 &
|
||||
#export XAUTHORITY=~/.Xauthority
|
||||
#TERM=xterm
|
||||
# Remove the mod if it's not enabled
|
||||
if [ "${!var}" != "true" ]; then
|
||||
echo "Removing ${modPath} (${var}=${!var})"
|
||||
rm -rf "$modPath"
|
||||
continue
|
||||
fi
|
||||
|
||||
if [ -f "${modPath}/config.json.template" ]; then
|
||||
echo "Configuring ${modPath}config.json"
|
||||
|
||||
# Seed the config.json only if one isn't manually mounted in (or is empty)
|
||||
if [ "$(cat "${modPath}config.json" 2> /dev/null)" == "" ]; then
|
||||
envsubst < "${modPath}config.json.template" > "${modPath}config.json"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
# Run extra steps for certain mods
|
||||
/opt/configure-remotecontrol-mod.sh
|
||||
|
||||
/opt/tail-smapi-log.sh &
|
||||
|
||||
# Try fixing Backup Permissions
|
||||
chmod -R 777 /data/Stardew/Stardew\ Valley/save-backups
|
||||
|
||||
# Ready to start!
|
||||
/data/Stardew/Stardew\ Valley/StardewValley
|
||||
|
||||
sleep 233
|
||||
|
BIN
docker/mods/Always On Server/Always On Server.dll
Normal file
BIN
docker/mods/Always On Server/Always On Server.dll
Normal file
Binary file not shown.
BIN
docker/mods/Always On Server/Always On Server.pdb
Normal file
BIN
docker/mods/Always On Server/Always On Server.pdb
Normal file
Binary file not shown.
28
docker/mods/Always On Server/config.json.template
Normal file
28
docker/mods/Always On Server/config.json.template
Normal file
@ -0,0 +1,28 @@
|
||||
{
|
||||
"serverHotKey": "${ALWAYS_ON_SERVER_HOTKEY}",
|
||||
"profitmargin": ${ALWAYS_ON_SERVER_PROFIT_MARGIN},
|
||||
"upgradeHouse": ${ALWAYS_ON_SERVER_UPGRADE_HOUSE},
|
||||
"petname": "${ALWAYS_ON_SERVER_PET_NAME}",
|
||||
"farmcavechoicemushrooms": ${ALWAYS_ON_SERVER_FARM_CAVE_CHOICE_MUSHROOMS},
|
||||
"communitycenterrun": ${ALWAYS_ON_SERVER_COMMUNITY_CENTER_RUN},
|
||||
"timeOfDayToSleep": ${ALWAYS_ON_SERVER_TIME_OF_DAY_TO_SLEEP},
|
||||
"lockPlayerChests": ${ALWAYS_ON_SERVER_LOCK_PLAYER_CHESTS},
|
||||
"clientsCanPause": ${ALWAYS_ON_SERVER_CLIENTS_CAN_PAUSE},
|
||||
"copyInviteCodeToClipboard": ${ALWAYS_ON_SERVER_COPY_INVITE_CODE_TO_CLIPBOARD},
|
||||
"festivalsOn": ${ALWAYS_ON_SERVER_FESTIVALS_ON},
|
||||
"eggHuntCountDownConfig": ${ALWAYS_ON_SERVER_EGG_HUNT_COUNT_DOWN},
|
||||
"flowerDanceCountDownConfig": ${ALWAYS_ON_SERVER_FLOWER_DANCE_COUNT_DOWN},
|
||||
"luauSoupCountDownConfig": ${ALWAYS_ON_SERVER_LUAU_SOUP_COUNT_DOWN},
|
||||
"jellyDanceCountDownConfig": ${ALWAYS_ON_SERVER_JELLY_DANCE_COUNT_DOWN},
|
||||
"grangeDisplayCountDownConfig": ${ALWAYS_ON_SERVER_GRANGE_DISPLAY_COUNT_DOWN},
|
||||
"iceFishingCountDownConfig": ${ALWAYS_ON_SERVER_ICE_FISHING_COUNT_DOWN},
|
||||
"endofdayTimeOut": ${ALWAYS_ON_SERVER_END_OF_DAY_TIMEOUT},
|
||||
"fairTimeOut": ${ALWAYS_ON_SERVER_FAIR_TIMEOUT},
|
||||
"spiritsEveTimeOut": ${ALWAYS_ON_SERVER_SPIRITS_EVE_TIMEOUT},
|
||||
"winterStarTimeOut": ${ALWAYS_ON_SERVER_WINTER_STAR_TIMEOUT},
|
||||
"eggFestivalTimeOut": ${ALWAYS_ON_SERVER_EGG_FESTIVAL_TIMEOUT},
|
||||
"flowerDanceTimeOut": ${ALWAYS_ON_SERVER_FLOWER_DANCE_TIMEOUT},
|
||||
"luauTimeOut": ${ALWAYS_ON_SERVER_LUAU_TIMEOUT},
|
||||
"danceOfJelliesTimeOut": ${ALWAYS_ON_SERVER_DANCE_OF_JELLIES_TIMEOUT},
|
||||
"festivalOfIceTimeOut": ${ALWAYS_ON_SERVER_FESTIVAL_OF_ICE_TIMEOUT}
|
||||
}
|
10
docker/mods/Always On Server/manifest.json
Normal file
10
docker/mods/Always On Server/manifest.json
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"Name": "Always On Server",
|
||||
"Author": "funny-snek & Zuberii",
|
||||
"Version": "1.20.2-unofficial.1-slamerz",
|
||||
"Description": "A Headless server mod.",
|
||||
"UniqueID": "funny-snek.Always_On_Server",
|
||||
"EntryDll": "Always On Server.dll",
|
||||
"MinimumApiVersion": "3.0.0",
|
||||
"UpdateKeys": [ "Nexus:2677" ]
|
||||
}
|
BIN
docker/mods/AutoLoadGame/AutoLoadGame.dll
Normal file
BIN
docker/mods/AutoLoadGame/AutoLoadGame.dll
Normal file
Binary file not shown.
BIN
docker/mods/AutoLoadGame/AutoLoadGame.pdb
Normal file
BIN
docker/mods/AutoLoadGame/AutoLoadGame.pdb
Normal file
Binary file not shown.
5
docker/mods/AutoLoadGame/config.json.template
Normal file
5
docker/mods/AutoLoadGame/config.json.template
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"LastFileLoaded": "${AUTO_LOAD_GAME_LAST_FILE_LOADED}",
|
||||
"LoadIntoMultiplayer": ${AUTO_LOAD_GAME_LOAD_INTO_MULTIPLAYER},
|
||||
"ForgetLastFileOnTitle": ${AUTO_LOAD_GAME_FORGET_LAST_FILE_ON_TITLE}
|
||||
}
|
10
docker/mods/AutoLoadGame/manifest.json
Normal file
10
docker/mods/AutoLoadGame/manifest.json
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"Name": "Auto Load Game",
|
||||
"Author": "Caraxian",
|
||||
"Version": "1.0.2",
|
||||
"Description": "Automatically load a save file when starting.",
|
||||
"UniqueID": "caraxian.AutoLoadGame",
|
||||
"EntryDll": "AutoLoadGame.dll",
|
||||
"MinimumApiVersion": "2.10.1",
|
||||
"UpdateKeys": [ "Nexus:2509" ]
|
||||
}
|
BIN
docker/mods/ChatCommands/ChatCommands.dll
Normal file
BIN
docker/mods/ChatCommands/ChatCommands.dll
Normal file
Binary file not shown.
BIN
docker/mods/ChatCommands/ChatCommands.pdb
Normal file
BIN
docker/mods/ChatCommands/ChatCommands.pdb
Normal file
Binary file not shown.
10
docker/mods/ChatCommands/manifest.json
Normal file
10
docker/mods/ChatCommands/manifest.json
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"Name": "Chat Commands",
|
||||
"Author": "Cat",
|
||||
"Version": "1.14.0",
|
||||
"Description": "Lets you run SMAPI commands from the chat window!",
|
||||
"UniqueID": "cat.chatcommands",
|
||||
"EntryDll": "ChatCommands.dll",
|
||||
"MinimumApiVersion": "3.0.0",
|
||||
"UpdateKeys": [ "Nexus:2092" ]
|
||||
}
|
BIN
docker/mods/CropsAnytimeAnywhere/CropsAnytimeAnywhere.dll
Normal file
BIN
docker/mods/CropsAnytimeAnywhere/CropsAnytimeAnywhere.dll
Normal file
Binary file not shown.
BIN
docker/mods/CropsAnytimeAnywhere/CropsAnytimeAnywhere.pdb
Normal file
BIN
docker/mods/CropsAnytimeAnywhere/CropsAnytimeAnywhere.pdb
Normal file
Binary file not shown.
15
docker/mods/CropsAnytimeAnywhere/config.json.template
Normal file
15
docker/mods/CropsAnytimeAnywhere/config.json.template
Normal file
@ -0,0 +1,15 @@
|
||||
{
|
||||
"EnableInSeasons": {
|
||||
"Spring": ${CROPS_ANYTIME_ANYWHERE_ENABLE_IN_SEASONS_SPRING},
|
||||
"Summer": ${CROPS_ANYTIME_ANYWHERE_ENABLE_IN_SEASONS_SUMMER},
|
||||
"Fall": ${CROPS_ANYTIME_ANYWHERE_ENABLE_IN_SEASONS_FALL},
|
||||
"Winter": ${CROPS_ANYTIME_ANYWHERE_ENABLE_IN_SEASONS_WINTER}
|
||||
},
|
||||
"FarmAnyLocation": ${CROPS_ANYTIME_ANYWHERE_FARM_ANY_LOCATION},
|
||||
"ForceTillable": {
|
||||
"Dirt": ${CROPS_ANYTIME_ANYWHERE_FORCE_TILLABLE_DIRT},
|
||||
"Grass": ${CROPS_ANYTIME_ANYWHERE_FORCE_TILLABLE_GRASS},
|
||||
"Stone": ${CROPS_ANYTIME_ANYWHERE_FORCE_TILLABLE_STONE},
|
||||
"Other": ${CROPS_ANYTIME_ANYWHERE_FORCE_TILLABLE_OTHER}
|
||||
}
|
||||
}
|
10
docker/mods/CropsAnytimeAnywhere/manifest.json
Normal file
10
docker/mods/CropsAnytimeAnywhere/manifest.json
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"Name": "Crops Anytime Anywhere",
|
||||
"Author": "Pathoschild",
|
||||
"Version": "1.1.0",
|
||||
"MinimumApiVersion": "2.10.1",
|
||||
"Description": "Lets you grow crops in any season and location (configurable).",
|
||||
"UniqueID": "Pathoschild.CropsAnytimeAnywhere",
|
||||
"EntryDll": "CropsAnytimeAnywhere.dll",
|
||||
"UpdateKeys": [ "Nexus:3000" ]
|
||||
}
|
BIN
docker/mods/FriendsForever/FriendsForever.dll
Normal file
BIN
docker/mods/FriendsForever/FriendsForever.dll
Normal file
Binary file not shown.
BIN
docker/mods/FriendsForever/FriendsForever.pdb
Normal file
BIN
docker/mods/FriendsForever/FriendsForever.pdb
Normal file
Binary file not shown.
6
docker/mods/FriendsForever/config.json.template
Normal file
6
docker/mods/FriendsForever/config.json.template
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"AffectSpouses": ${FRIENDS_FOREVER_AFFECT_SPOUSE},
|
||||
"AffectDates": ${FRIENDS_FOREVER_AFFECT_DATES},
|
||||
"AffectEveryoneElse": ${FRIENDS_FOREVER_AFFECT_EVERYONE_ELSE},
|
||||
"AffectAnimals": ${FRIENDS_FOREVER_AFFECT_ANIMALS}
|
||||
}
|
11
docker/mods/FriendsForever/manifest.json
Normal file
11
docker/mods/FriendsForever/manifest.json
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"Name": "Friends Forever",
|
||||
"Author": "Isaac S.",
|
||||
"Version": "1.2.3",
|
||||
"Description": "Makes it so friendship levels never decay!",
|
||||
"UniqueID": "IsaacS.FriendsForever",
|
||||
"EntryDll": "FriendsForever.dll",
|
||||
"UpdateKeys": [ "Nexus:1738" ],
|
||||
"MinimumApiVersion": "2.10.2",
|
||||
"Dependencies": []
|
||||
}
|
BIN
docker/mods/NoFenceDecay/NoFenceDecay.dll
Normal file
BIN
docker/mods/NoFenceDecay/NoFenceDecay.dll
Normal file
Binary file not shown.
BIN
docker/mods/NoFenceDecay/NoFenceDecay.pdb
Normal file
BIN
docker/mods/NoFenceDecay/NoFenceDecay.pdb
Normal file
Binary file not shown.
10
docker/mods/NoFenceDecay/manifest.json
Normal file
10
docker/mods/NoFenceDecay/manifest.json
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"Name": "No Fence Decay",
|
||||
"Author": "Cat",
|
||||
"Version": "1.5.0",
|
||||
"Description": "Makes all fences and gates last forever.",
|
||||
"UniqueID": "cat.nofencedecay",
|
||||
"EntryDll": "NoFenceDecay.dll",
|
||||
"MinimumApiVersion": "2.9.0",
|
||||
"UpdateKeys": [ "Nexus:1180" ]
|
||||
}
|
BIN
docker/mods/NonDestructiveNPCs/NonDestructiveNPCs.dll
Normal file
BIN
docker/mods/NonDestructiveNPCs/NonDestructiveNPCs.dll
Normal file
Binary file not shown.
BIN
docker/mods/NonDestructiveNPCs/NonDestructiveNPCs.pdb
Normal file
BIN
docker/mods/NonDestructiveNPCs/NonDestructiveNPCs.pdb
Normal file
Binary file not shown.
10
docker/mods/NonDestructiveNPCs/manifest.json
Normal file
10
docker/mods/NonDestructiveNPCs/manifest.json
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"Name": "Non Destructive NPCs",
|
||||
"Author": "Madara Uchiha",
|
||||
"Version": "1.0.0",
|
||||
"Description": "NPCs no longer destroy placed objects in their paths. They would instead pass through them.",
|
||||
"UniqueID": "MadaraUchiha.NonDestructiveNPCs",
|
||||
"EntryDll": "NonDestructiveNPCs.dll",
|
||||
"MinimumApiVersion": "3.1.0",
|
||||
"UpdateKeys": [ "Nexus:5176" ]
|
||||
}
|
BIN
docker/mods/RemoteControl/RemoteControl.dll
Normal file
BIN
docker/mods/RemoteControl/RemoteControl.dll
Normal file
Binary file not shown.
BIN
docker/mods/RemoteControl/RemoteControl.pdb
Normal file
BIN
docker/mods/RemoteControl/RemoteControl.pdb
Normal file
Binary file not shown.
5
docker/mods/RemoteControl/config.json.template
Normal file
5
docker/mods/RemoteControl/config.json.template
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"everyoneIsAdmin": ${REMOTE_CONTROL_EVERYONE_IS_ADMIN},
|
||||
"admins": [],
|
||||
"shouldAssignAdminToFirstCabinFarmer": ${REMOTE_CONTROL_SHOULD_ASSIGN_ADMIN_TO_FIRST_CABIN_FARMER}
|
||||
}
|
10
docker/mods/RemoteControl/manifest.json
Normal file
10
docker/mods/RemoteControl/manifest.json
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"Name": "Remote Control",
|
||||
"Author": "Sebbity",
|
||||
"Version": "1.0.0",
|
||||
"Description": "Remotely control a stardew valley host ",
|
||||
"UniqueID": "Sebbity.RemoteControl",
|
||||
"EntryDll": "RemoteControl.dll",
|
||||
"MinimumApiVersion": "2.10.0",
|
||||
"UpdateKeys": [ "GitHub:Novex/StardewValley-RemoteControl"]
|
||||
}
|
BIN
docker/mods/TimeSpeed/TimeSpeed.dll
Normal file
BIN
docker/mods/TimeSpeed/TimeSpeed.dll
Normal file
Binary file not shown.
BIN
docker/mods/TimeSpeed/TimeSpeed.pdb
Normal file
BIN
docker/mods/TimeSpeed/TimeSpeed.pdb
Normal file
Binary file not shown.
19
docker/mods/TimeSpeed/config.json.template
Normal file
19
docker/mods/TimeSpeed/config.json.template
Normal file
@ -0,0 +1,19 @@
|
||||
{
|
||||
"DefaultTickLength": ${TIME_SPEED_DEFAULT_TICK_LENGTH},
|
||||
"TickLengthByLocation": {
|
||||
"Indoors": ${TIME_SPEED_TICK_LENGTH_BY_LOCATION_INDOORS},
|
||||
"Outdoors": ${TIME_SPEED_TICK_LENGTH_BY_LOCATION_OUTDOORS},
|
||||
"Mine": ${TIME_SPEED_TICK_LENGTH_BY_LOCATION_MINE}
|
||||
},
|
||||
|
||||
"EnableOnFestivalDays": ${TIME_SPEED_ENABLE_ON_FESTIVAL_DAYS},
|
||||
"FreezeTimeAt": ${TIME_SPEED_FREEZE_TIME_AT},
|
||||
"LocationNotify": ${TIME_SPEED_LOCATION_NOTIFY},
|
||||
|
||||
"Keys": {
|
||||
"FreezeTime": "${TIME_SPEED_KEYS_FREEZE_TIME}",
|
||||
"IncreaseTickInterval": "${TIME_SPEED_KEYS_INCREASE_TICK_INTERVAL}",
|
||||
"DecreaseTickInterval": "${TIME_SPEED_KEYS_DECREASE_TICK_INTERVAL}",
|
||||
"ReloadConfig": "${TIME_SPEED_KEYS_RELOAD_CONFIG}"
|
||||
}
|
||||
}
|
10
docker/mods/TimeSpeed/manifest.json
Normal file
10
docker/mods/TimeSpeed/manifest.json
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"Name": "TimeSpeed",
|
||||
"Author": "cantorsdust",
|
||||
"Version": "2.4.3",
|
||||
"Description": "Lets you control the flow of time in the game: speed it up, slow it down, or freeze it altogether.",
|
||||
"UniqueID": "cantorsdust.TimeSpeed",
|
||||
"EntryDll": "TimeSpeed.dll",
|
||||
"MinimumApiVersion": "3.0.0",
|
||||
"UpdateKeys": [ "Nexus:169" ]
|
||||
}
|
BIN
docker/mods/UnlimitedPlayers/UnlimitedPlayers.dll
Normal file
BIN
docker/mods/UnlimitedPlayers/UnlimitedPlayers.dll
Normal file
Binary file not shown.
3
docker/mods/UnlimitedPlayers/config.json.template
Normal file
3
docker/mods/UnlimitedPlayers/config.json.template
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
"PlayerLimit": ${UNLIMITED_PLAYERS_PLAYER_LIMIT}
|
||||
}
|
9
docker/mods/UnlimitedPlayers/manifest.json
Normal file
9
docker/mods/UnlimitedPlayers/manifest.json
Normal file
@ -0,0 +1,9 @@
|
||||
{
|
||||
"Author": "Armitxes",
|
||||
"Description": "Remove the maximum player restrictions, build endless cabins.",
|
||||
"Name": "Armi's Unlimited Players",
|
||||
"EntryDll": "UnlimitedPlayers.dll",
|
||||
"UniqueID": "Armitxes.UnlimitedPlayers",
|
||||
"UpdateKeys": [ "GitHub:Armitxes/StardewValley_UnlimitedPlayers" ],
|
||||
"Version": "2020.2.15"
|
||||
}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
10
docker/scripts/configure-remotecontrol-mod.sh
Normal file
10
docker/scripts/configure-remotecontrol-mod.sh
Normal file
@ -0,0 +1,10 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Quit if we don't have any default admins
|
||||
if [ -z "${REMOTE_CONTROL_DEFAULT_ADMINS}" ] || [ ! -f "/data/Stardew/Stardew Valley/Mods/RemoteControl/config.json" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
# Add default admins to the admin list
|
||||
jq ".admins[.admins | length] |= . + ${REMOTE_CONTROL_DEFAULT_ADMINS}" "/data/Stardew/Stardew Valley/Mods/RemoteControl/config.json" > "/data/Stardew/Stardew Valley/Mods/RemoteControl/config.json.out"
|
||||
mv -f "/data/Stardew/Stardew Valley/Mods/RemoteControl/config.json.out" "/data/Stardew/Stardew Valley/Mods/RemoteControl/config.json"
|
12
docker/scripts/tail-smapi-log.sh
Normal file
12
docker/scripts/tail-smapi-log.sh
Normal file
@ -0,0 +1,12 @@
|
||||
#!/bin/sh
|
||||
|
||||
echo "-- SMAPI Log: Starting"
|
||||
|
||||
# Wait for SMAPI log and tail infinitely
|
||||
while [ ! -f "/root/.config/StardewValley/ErrorLogs/SMAPI-latest.txt" ]; do
|
||||
echo "-- SMAPI Log: Waiting for log to appear";
|
||||
sleep 5;
|
||||
done
|
||||
|
||||
echo "-- SMAPI Log: Tailing"
|
||||
tail -f /config/xdg/config/StardewValley/ErrorLogs/SMAPI-latest.txt
|
Loading…
Reference in New Issue
Block a user