Enhance chipper script: add run directory management and role-based execution; update options for multiplayer warnings

This commit is contained in:
Chipperfluff 2025-12-22 16:57:43 +01:00
parent 6b7dd9f96a
commit 0d5bc6a5bf
5 changed files with 207 additions and 80 deletions

2
.gitignore vendored
View File

@ -36,3 +36,5 @@ loom-cache/
__pycache__/ __pycache__/
*.pyc *.pyc
run-*/

View File

@ -25,3 +25,21 @@ java {
languageVersion = JavaLanguageVersion.of(17) languageVersion = JavaLanguageVersion.of(17)
} }
} }
loom {
runs {
server {
server()
runDir "run-server"
}
client1 {
client()
runDir "run-1"
}
client2 {
client()
runDir "run-2"
}
}
}

307
chipper
View File

@ -1,119 +1,226 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# Do NOT use `set -e` with Gradle
set -u set -u
RUN_DIR="run"
OPTIONS_SRC="./config/options.txt"
OPTIONS_DST="$RUN_DIR/options.txt"
GRADLE="./gradlew" GRADLE="./gradlew"
GRADLE_FLAGS=( GRADLE_BASE_FLAGS=(
"--console=plain" "--console=plain"
"--configuration-cache" "--no-daemon"
"-Dfabric.development=true"
"-Dminecraft.api.env=dev"
"-Dminecraft.session.disable=true"
) )
# ---------- helpers ---------- OPTIONS_SRC="./config/options.txt"
inject_options() { ROLE=""
if [[ -f "$OPTIONS_SRC" ]]; then ROLE_INDEX=""
echo "[*] Injecting options.txt..." PASSTHROUGH=()
cp "$OPTIONS_SRC" "$OPTIONS_DST"
else
echo "[!] Warning: $OPTIONS_SRC not found, skipping injection"
fi
}
ensure_run_dir() { # ---------- utils ----------
if [[ ! -d "$RUN_DIR" ]]; then
echo "[*] Creating run directory..."
mkdir -p "$RUN_DIR"
fi
}
# ---------- actions ---------- rand() { shuf -i 0-$(($1 - 1)) -n 1; }
clean() { parse_args() {
clear local cleaned=()
echo "[*] Running gradle clean..." for ((i=0; i<${#ARGS[@]}; i++)); do
$GRADLE clean "${GRADLE_FLAGS[@]}" case "${ARGS[$i]}" in
} -s|--server)
ROLE="server"
build() {
clear
ensure_run_dir
inject_options
echo "[*] Running client..."
$GRADLE runClient "${GRADLE_FLAGS[@]}"
}
show_tree() {
clear
echo "[*] Project tree (respecting .gitignore):"
tree --gitignore
}
ship() {
clear
echo "[*] Building project..."
$GRADLE build "${GRADLE_FLAGS[@]}"
echo "[+] Build ready to ship."
}
# ---------- help ----------
help_menu() {
cat <<'EOF'
🐿️ S Q U I R R E L B U I L D T O O L 🐿️
Usage:
./chipper [option]
Options:
--clean Run gradle clean
--build Run client (fast path)
--tree Show project tree only
--ship Build project
--help Show this help menu
Notes:
- Uses Gradle configuration cache
- Plain console output (no fake progress)
- Safe to Ctrl+C after EXECUTION starts
The squirrel believes in you.
EOF
}
# ---------- argument parsing ----------
if [[ $# -eq 0 ]]; then
help_menu
exit 0
fi
case "$1" in
--clean)
clean
;; ;;
--build) -p1|--player1)
build ROLE="client"
ROLE_INDEX=1
;; ;;
--tree) -p2|--player2)
show_tree ROLE="client"
ROLE_INDEX=2
;; ;;
--ship) --)
ship PASSTHROUGH=( "${ARGS[@]:$((i+1))}" )
;; break
--help|-h)
help_menu
;; ;;
*) *)
echo "[!] Unknown option: $1" cleaned+=( "${ARGS[$i]}" )
echo "" ;;
help_menu esac
done
ARGS=( "${cleaned[@]}" )
}
# ---------- run-dir helpers ----------
prepare_run_dir() {
local dir="$1"
rm -rf "$dir"
mkdir -p "$dir"
}
inject_options() {
local dir="$1"
# options.txt
if [[ -f "$OPTIONS_SRC" ]]; then
cp "$OPTIONS_SRC" "$dir/options.txt"
fi
# servers.dat (client server list)
if [[ -f "./config/servers.dat" ]]; then
cp "./config/servers.dat" "$dir/servers.dat"
fi
}
ensure_server_files() {
local dir="$1"
[[ -f "$dir/eula.txt" ]] || echo "eula=true" > "$dir/eula.txt"
if [[ ! -f "$dir/server.properties" ]]; then
cat > "$dir/server.properties" <<EOF
online-mode=false
server-port=25565
level-name=world
enable-command-block=true
EOF
fi
}
# ---------- squirrel ----------
header() {
local action="$1"
local squirrels=(
' /\_/\
( o.o )
> ^ <'
' /\_/\
( -.- )
o_(")(")'
' /\_/\
( @.@ )
> ~ <'
)
clear
echo "${squirrels[$(rand ${#squirrels[@]})]}"
echo
case "$action" in
run) echo "🐿️ running chipper" ;;
clean) echo "🐿️ cleaning workspace" ;;
build) echo "🐿️ building project" ;;
tree) echo "🐿️ observing project tree" ;;
*) echo "🐿️ thinking..." ;;
esac
echo
}
# ---------- commands ----------
cmd_run() {
header run
case "$ROLE" in
server)
run_dir="run-server"
prepare_run_dir "$run_dir"
inject_options "$run_dir"
ensure_server_files "$run_dir"
echo "🖥️🐿️ starting dedicated server"
exec "$GRADLE" runServer "${GRADLE_BASE_FLAGS[@]}" "${PASSTHROUGH[@]}"
;;
client)
run_dir="run-$ROLE_INDEX"
task="runClient$ROLE_INDEX"
prepare_run_dir "$run_dir"
inject_options "$run_dir"
echo "🎮🐿️ starting client $ROLE_INDEX"
exec "$GRADLE" "$task" "${GRADLE_BASE_FLAGS[@]}" "${PASSTHROUGH[@]}"
;;
*)
echo "❌🐿️ no role selected"
echo "👉🐿️ use one of:"
echo " --server"
echo " --player1"
echo " --player2"
exit 1
;;
esac
}
cmd_clean() {
header clean
"$GRADLE" clean "${GRADLE_BASE_FLAGS[@]}" "${PASSTHROUGH[@]}"
}
cmd_build() {
header build
"$GRADLE" build "${GRADLE_BASE_FLAGS[@]}" "${PASSTHROUGH[@]}"
}
cmd_tree() {
header tree
tree --gitignore
}
cmd_help() {
cat <<'EOF'
/\_/\
( o.o )
> ^ <
🐿️ C H I P P E R
Usage:
./chipper run [role] [-- passthrough]
Roles:
-s, --server Start ONLY server
-p1, --player1 Start ONLY client 1
-p2, --player2 Start ONLY client 2
Other commands:
clean Gradle clean
build Gradle build
tree Show project tree
help Show this menu
Examples:
./chipper run --server
./chipper run --player1
./chipper run --player2
./chipper run --player1 -- --debug
./chipper build
./chipper tree
Notes:
- No legacy player spawning
- Each role has its own run directory
- options.txt injected per run dir
- Everything after `--` is forwarded
- The squirrel is mandatory
EOF
}
# ---------- entry ----------
ARGS=( "$@" )
parse_args
case "${ARGS[0]:-help}" in
run) cmd_run ;;
clean) cmd_clean ;;
build) cmd_build ;;
tree) cmd_tree ;;
help|-h) cmd_help ;;
*)
echo "[!] Unknown command: ${ARGS[0]}"
cmd_help
exit 1 exit 1
;; ;;
esac esac

View File

@ -72,8 +72,8 @@ tutorialStep:movement
mouseWheelSensitivity:1.0 mouseWheelSensitivity:1.0
rawMouseInput:true rawMouseInput:true
glDebugVerbosity:1 glDebugVerbosity:1
skipMultiplayerWarning:false skipMultiplayerWarning:true
skipRealms32bitWarning:false skipRealms32bitWarning:true
hideMatchedNames:true hideMatchedNames:true
joinedFirstServer:false joinedFirstServer:false
hideBundleTutorial:false hideBundleTutorial:false

BIN
config/servers.dat Normal file

Binary file not shown.