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`
- 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

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,
"ForgetLastFileOnTitle": true
}

View File

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

View File

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

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/ && \
/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

View File

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

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