Enhance chipper script: add run directory management and role-based execution; update options for multiplayer warnings
This commit is contained in:
parent
6b7dd9f96a
commit
0d5bc6a5bf
2
.gitignore
vendored
2
.gitignore
vendored
@ -36,3 +36,5 @@ loom-cache/
|
||||
|
||||
__pycache__/
|
||||
*.pyc
|
||||
|
||||
run-*/
|
||||
18
build.gradle
18
build.gradle
@ -25,3 +25,21 @@ java {
|
||||
languageVersion = JavaLanguageVersion.of(17)
|
||||
}
|
||||
}
|
||||
|
||||
loom {
|
||||
runs {
|
||||
server {
|
||||
server()
|
||||
runDir "run-server"
|
||||
}
|
||||
client1 {
|
||||
client()
|
||||
runDir "run-1"
|
||||
}
|
||||
client2 {
|
||||
client()
|
||||
runDir "run-2"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
261
chipper
261
chipper
@ -1,119 +1,226 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Do NOT use `set -e` with Gradle
|
||||
set -u
|
||||
|
||||
RUN_DIR="run"
|
||||
OPTIONS_SRC="./config/options.txt"
|
||||
OPTIONS_DST="$RUN_DIR/options.txt"
|
||||
|
||||
GRADLE="./gradlew"
|
||||
GRADLE_FLAGS=(
|
||||
GRADLE_BASE_FLAGS=(
|
||||
"--console=plain"
|
||||
"--configuration-cache"
|
||||
"--no-daemon"
|
||||
"-Dfabric.development=true"
|
||||
"-Dminecraft.api.env=dev"
|
||||
"-Dminecraft.session.disable=true"
|
||||
)
|
||||
|
||||
# ---------- helpers ----------
|
||||
OPTIONS_SRC="./config/options.txt"
|
||||
|
||||
ROLE=""
|
||||
ROLE_INDEX=""
|
||||
PASSTHROUGH=()
|
||||
|
||||
# ---------- utils ----------
|
||||
|
||||
rand() { shuf -i 0-$(($1 - 1)) -n 1; }
|
||||
|
||||
parse_args() {
|
||||
local cleaned=()
|
||||
for ((i=0; i<${#ARGS[@]}; i++)); do
|
||||
case "${ARGS[$i]}" in
|
||||
-s|--server)
|
||||
ROLE="server"
|
||||
;;
|
||||
-p1|--player1)
|
||||
ROLE="client"
|
||||
ROLE_INDEX=1
|
||||
;;
|
||||
-p2|--player2)
|
||||
ROLE="client"
|
||||
ROLE_INDEX=2
|
||||
;;
|
||||
--)
|
||||
PASSTHROUGH=( "${ARGS[@]:$((i+1))}" )
|
||||
break
|
||||
;;
|
||||
*)
|
||||
cleaned+=( "${ARGS[$i]}" )
|
||||
;;
|
||||
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
|
||||
echo "[*] Injecting options.txt..."
|
||||
cp "$OPTIONS_SRC" "$OPTIONS_DST"
|
||||
else
|
||||
echo "[!] Warning: $OPTIONS_SRC not found, skipping injection"
|
||||
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_run_dir() {
|
||||
if [[ ! -d "$RUN_DIR" ]]; then
|
||||
echo "[*] Creating run directory..."
|
||||
mkdir -p "$RUN_DIR"
|
||||
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
|
||||
}
|
||||
|
||||
# ---------- actions ----------
|
||||
# ---------- squirrel ----------
|
||||
|
||||
header() {
|
||||
local action="$1"
|
||||
|
||||
local squirrels=(
|
||||
' /\_/\
|
||||
( o.o )
|
||||
> ^ <'
|
||||
|
||||
' /\_/\
|
||||
( -.- )
|
||||
o_(")(")'
|
||||
|
||||
' /\_/\
|
||||
( @.@ )
|
||||
> ~ <'
|
||||
)
|
||||
|
||||
clean() {
|
||||
clear
|
||||
echo "[*] Running gradle clean..."
|
||||
$GRADLE clean "${GRADLE_FLAGS[@]}"
|
||||
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
|
||||
}
|
||||
|
||||
build() {
|
||||
clear
|
||||
# ---------- commands ----------
|
||||
|
||||
ensure_run_dir
|
||||
inject_options
|
||||
cmd_run() {
|
||||
header run
|
||||
|
||||
echo "[*] Running client..."
|
||||
$GRADLE runClient "${GRADLE_FLAGS[@]}"
|
||||
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
|
||||
}
|
||||
|
||||
show_tree() {
|
||||
clear
|
||||
echo "[*] Project tree (respecting .gitignore):"
|
||||
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
|
||||
}
|
||||
|
||||
ship() {
|
||||
clear
|
||||
echo "[*] Building project..."
|
||||
$GRADLE build "${GRADLE_FLAGS[@]}"
|
||||
echo "[+] Build ready to ship."
|
||||
}
|
||||
|
||||
# ---------- help ----------
|
||||
|
||||
help_menu() {
|
||||
cmd_help() {
|
||||
cat <<'EOF'
|
||||
🐿️ S Q U I R R E L B U I L D T O O L 🐿️
|
||||
/\_/\
|
||||
( o.o )
|
||||
> ^ <
|
||||
|
||||
🐿️ C H I P P E R
|
||||
|
||||
Usage:
|
||||
./chipper [option]
|
||||
./chipper run [role] [-- passthrough]
|
||||
|
||||
Options:
|
||||
--clean Run gradle clean
|
||||
--build Run client (fast path)
|
||||
--tree Show project tree only
|
||||
--ship Build project
|
||||
--help Show this help menu
|
||||
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:
|
||||
- Uses Gradle configuration cache
|
||||
- Plain console output (no fake progress)
|
||||
- Safe to Ctrl+C after EXECUTION starts
|
||||
|
||||
The squirrel believes in you.
|
||||
- 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
|
||||
}
|
||||
|
||||
# ---------- argument parsing ----------
|
||||
# ---------- entry ----------
|
||||
|
||||
if [[ $# -eq 0 ]]; then
|
||||
help_menu
|
||||
exit 0
|
||||
fi
|
||||
ARGS=( "$@" )
|
||||
parse_args
|
||||
|
||||
case "$1" in
|
||||
--clean)
|
||||
clean
|
||||
;;
|
||||
--build)
|
||||
build
|
||||
;;
|
||||
--tree)
|
||||
show_tree
|
||||
;;
|
||||
--ship)
|
||||
ship
|
||||
;;
|
||||
--help|-h)
|
||||
help_menu
|
||||
;;
|
||||
case "${ARGS[0]:-help}" in
|
||||
run) cmd_run ;;
|
||||
clean) cmd_clean ;;
|
||||
build) cmd_build ;;
|
||||
tree) cmd_tree ;;
|
||||
help|-h) cmd_help ;;
|
||||
*)
|
||||
echo "[!] Unknown option: $1"
|
||||
echo ""
|
||||
help_menu
|
||||
echo "[!] Unknown command: ${ARGS[0]}"
|
||||
cmd_help
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
@ -72,8 +72,8 @@ tutorialStep:movement
|
||||
mouseWheelSensitivity:1.0
|
||||
rawMouseInput:true
|
||||
glDebugVerbosity:1
|
||||
skipMultiplayerWarning:false
|
||||
skipRealms32bitWarning:false
|
||||
skipMultiplayerWarning:true
|
||||
skipRealms32bitWarning:true
|
||||
hideMatchedNames:true
|
||||
joinedFirstServer:false
|
||||
hideBundleTutorial:false
|
||||
|
||||
BIN
config/servers.dat
Normal file
BIN
config/servers.dat
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user