This commit is contained in:
norimicry 2021-01-23 21:04:33 +01:00
parent c12a02fea8
commit 89ef32e734
48 changed files with 392 additions and 64 deletions

View File

@ -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` - 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. - 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 ## Setup
@ -16,7 +18,7 @@ git clone https://github.com/printfuck/stardew-multiplayer-docker
docker-compose up docker-compose up
``` ```
### Ansible ### Ansible !deprecated!
Create an inventory file with your hosts Create an inventory file with your hosts
@ -24,7 +26,7 @@ Create an inventory file with your hosts
ansible -i <your_inventori> playbook.yml 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: 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 ## 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 ### VNC
@ -50,15 +52,20 @@ Localhost:
- VNCPASS=insecure - 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 ## 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 ## Used Mods
* [AutoLoadGame](https://www.nexusmods.com/stardewvalley/mods/2509) * [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) * [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) * [Unlimited Players](https://www.nexusmods.com/stardewvalley/mods/2213)
* some more ...
## Troubleshooting ## Troubleshooting

View File

@ -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
}

View File

@ -1,5 +1,5 @@
{ {
"LastFileLoaded": "Bar_271098218", "LastFileLoaded": "Barr_271103276",
"LoadIntoMultiplayer": true, "LoadIntoMultiplayer": true,
"ForgetLastFileOnTitle": true "ForgetLastFileOnTitle": true
} }

View File

@ -1,3 +0,0 @@
{
"PlayerLimit": 10
}

View File

@ -5,18 +5,140 @@ services:
build: docker build: docker
container_name: stardew container_name: stardew
environment: environment:
- "VNC_PASSWORD=2342" - "VNC_PASSWORD=nyanyanya"
- "DISPLAY_HEIGHT=1000" - "DISPLAY_HEIGHT=1000"
- "DISPLAY_WIDTH=1400" - "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: ports:
# VNC
- 5902:5900 - 5902:5900
# NOVNC WEB
- 5801:5800 - 5801:5800
# Game
- 24642:24642/udp - 24642:24642/udp
volumes: volumes:
- ./valley_saves:/root/.config/StardewValley/Saves/ # Saves go here now
- ./configs/alwayson.json:/data/Stardew/Stardew Valley/Mods/Always On Server/config.json - ./valley_saves:/config/xdg/config/StardewValley/Saves
- ./configs/unlimitedplayers.json:/data/Stardew/Stardew Valley/Mods/UnlimitedPlayers/config.json # 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 - ./configs/autoload.json:/data/Stardew/Stardew Valley/Mods/AutoLoadGame/config.json
# add another mod
# - ./ModFolder:/data/Stardew/Stardew Valley/Mods/ModFolder

View File

@ -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/ && \ 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" /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 RUN apt-get install -y gettext-base jq netcat procps
COPY mods/alwayson.zip /data/alwayson.zip
COPY mods/unlimitedplayers.zip /data/unlimitedplayers.zip # Add Mods
COPY mods/autoloadgame.zip /data/autoloadgame.zip
# 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 && \ 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 COPY docker-entrypoint.sh /startapp.sh

View File

@ -1,17 +1,39 @@
#!/bin/sh #!/bin/bash
export HOME=/config
#if [ -f /tmp/.X10-lock ]; then rm /tmp/.X10-lock; fi for modPath in /data/Stardew/Stardew\ Valley/Mods/*/
#Xvfb :10 -screen 0 1580x920x24 -ac & do
mod=$(basename "$modPath")
#while [ ! -z "`xdpyinfo -display :10 2>&1 | grep 'unable to open display'`" ]; do # Normalize mod name ot uppercase and only characters, eg. "Always On Server" => ENABLE_ALWAYSONSERVER_MOD
# echo Waiting for display; var="ENABLE_$(echo "${mod^^}" | tr -cd '[A-Z]')_MOD"
# sleep 5;
#done
#export DISPLAY=:10.0 # Remove the mod if it's not enabled
#x11vnc -display :10 -rfbport 5900 -rfbportv6 -1 -no6 -noipv6 -httpportv6 -1 -forever -desktop StardewValley -cursor arrow -passwd $VNCPASS -shared & if [ "${!var}" != "true" ]; then
#sleep 5 echo "Removing ${modPath} (${var}=${!var})"
#i3 & rm -rf "$modPath"
#export XAUTHORITY=~/.Xauthority continue
#TERM=xterm 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 /data/Stardew/Stardew\ Valley/StardewValley
sleep 233

Binary file not shown.

Binary file not shown.

View 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}
}

View 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" ]
}

Binary file not shown.

Binary file not shown.

View 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}
}

View 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" ]
}

Binary file not shown.

Binary file not shown.

View 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" ]
}

View 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}
}
}

View 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" ]
}

Binary file not shown.

Binary file not shown.

View 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}
}

View 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": []
}

Binary file not shown.

Binary file not shown.

View 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" ]
}

Binary file not shown.

Binary file not shown.

View 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" ]
}

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,5 @@
{
"everyoneIsAdmin": ${REMOTE_CONTROL_EVERYONE_IS_ADMIN},
"admins": [],
"shouldAssignAdminToFirstCabinFarmer": ${REMOTE_CONTROL_SHOULD_ASSIGN_ADMIN_TO_FIRST_CABIN_FARMER}
}

View 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"]
}

Binary file not shown.

Binary file not shown.

View 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}"
}
}

View 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" ]
}

Binary file not shown.

View File

@ -0,0 +1,3 @@
{
"PlayerLimit": ${UNLIMITED_PLAYERS_PLAYER_LIMIT}
}

View 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.

View 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"

View 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