-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrun_client_mac.sh
More file actions
109 lines (102 loc) · 4.96 KB
/
Copy pathrun_client_mac.sh
File metadata and controls
109 lines (102 loc) · 4.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#!/bin/bash
# Minecraftクライアントを起動するスクリプト(mac / WSL / Windows Git Bash 対応)
#
# 使い方:
# bash run_client_mac.sh 通常 ( オンライン、 TLS workaround on )
# bash run_client_mac.sh offline オフライン ( キャッシュ済み依存のみ )
# bash run_client_mac.sh notls テザリング等 ( workaround off で素の TLS )
# bash run_client_mac.sh offline notls 併用も可
# bash run_client_mac.sh keepdaemon gradle daemon を kill しない ( デフォルトは kill )
#
# 起動前に外部 mod ( libs/local/ 配下 ) を含めるか対話で尋ねる ( y/N )。
# y を選ぶと -PwithExternalMods=true を gradle に渡し、 libs/local/*.jar が自動取り込み。
cd "$(dirname "$0")"
GRADLE_ARGS="runClient"
USE_TLS_WORKAROUND="yes"
KILL_DAEMON="yes" # JAVA_TOOL_OPTIONS / gradle.properties 変更が daemon に反映されない問題対策
for arg in "$@"; do
case "$arg" in
offline)
GRADLE_ARGS="$GRADLE_ARGS --offline -x downloadAssets"
echo "=== Offline mode (using cached dependencies, skipping downloadAssets) ==="
;;
notls|no-tls)
USE_TLS_WORKAROUND="no"
echo "=== TLS workaround OFF (デフォルト TLS で接続 — テザリング等 直接回線向け) ==="
;;
keepdaemon|keep-daemon)
KILL_DAEMON="no"
;;
esac
done
# --- gradle daemon を停止 ( JVM 引数 / 環境変数の変更を確実に反映させる ) ---
# 起動毎に 5 秒前後余分にかかるが、 「daemon が古い JAVA_TOOL_OPTIONS を保持していて
# notls / TLS workaround の切り替えが効かない」 問題を完全に潰せる。
# どうしても daemon を残したい時は引数に `keepdaemon` を追加 ( 既存 daemon が起動中ならそのまま使う )。
if [ "$KILL_DAEMON" = "yes" ]; then
if [ -x ./gradlew ]; then
echo "=== Stopping any running gradle daemon (--stop) ==="
./gradlew --stop > /dev/null 2>&1 || true
fi
fi
# --- TLS workaround for Cisco Umbrella SSL inspection ---
# 開発端末のネット (マンション ISP) が Cisco Umbrella の透過 SSL 検査を経由しており、
# 中間 Proxy が古くて TLS 1.3 と ECDHE/DHE 系 cipher を理解できない。
# JDK 17 が ClientHello を送ると handshake_failure になるため、
# TLS 1.2 + RSA key exchange cipher のみに限定する。
# 該当 cipher は JDK 17 でデフォルト無効化されているので
# tls_workaround.properties で再有効化。
#
# JAVA_TOOL_OPTIONS は JVM 起動時に自動で picked up されるので
# Gradle daemon / worker 含む全 JVM に伝播する (org.gradle.jvmargs より確実)。
#
# `bash run_client_mac.sh notls` で一時的に workaround を無効化できる
# ( テザリング等 で 直接 maven.minecraftforge.net に到達できる時に使用 )。
TLS_WORKAROUND_FILE="$(pwd)/tls_workaround.properties"
if [ "$USE_TLS_WORKAROUND" = "yes" ] && [ -f "$TLS_WORKAROUND_FILE" ]; then
export JAVA_TOOL_OPTIONS="-Djava.security.properties=${TLS_WORKAROUND_FILE} -Djdk.tls.client.protocols=TLSv1.2 -Dhttps.protocols=TLSv1.2 -Djdk.tls.client.cipherSuites=TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA256"
fi
# --- 外部 mod 同梱の対話確認 ---
# 非対話環境 (CI等) での誤検出を防ぐため、標準入力が TTY の時のみ問う。
# 環境変数で明示指定もできる: WITH_EXTERNAL_MODS=1 / SKIP_EXTERNAL_MODS_PROMPT=1
# ( 後方互換 ) WITH_SPELLBOOKS=1 / SKIP_SPELLBOOKS_PROMPT=1 も従来通り受け付ける。
if [ -n "$WITH_EXTERNAL_MODS" ] || [ -n "$WITH_SPELLBOOKS" ]; then
USE_EXTERNAL_MODS="yes"
elif [ -n "$SKIP_EXTERNAL_MODS_PROMPT" ] || [ -n "$SKIP_SPELLBOOKS_PROMPT" ]; then
USE_EXTERNAL_MODS="no"
elif [ -t 0 ]; then
printf "外部 mod をオンにしますか? [y/N]: "
read ANSWER
case "$ANSWER" in
y|Y|yes|YES|Yes) USE_EXTERNAL_MODS="yes" ;;
*) USE_EXTERNAL_MODS="no" ;;
esac
else
USE_EXTERNAL_MODS="no"
fi
if [ "$USE_EXTERNAL_MODS" = "yes" ]; then
GRADLE_ARGS="$GRADLE_ARGS -PwithExternalMods=true"
echo "=== 外部 mod ON ( libs/local/ 配下の .jar を自動ロード ) ==="
if [ -d libs/local ]; then
found=0
while IFS= read -r jar; do
echo " → $jar"
found=$((found + 1))
done < <(find libs/local -type f -name "*.jar" 2>/dev/null | sort)
if [ "$found" = "0" ]; then
echo " ! libs/local/ に .jar がありません ( ここに置けば自動取り込み )"
fi
else
echo " ! libs/local/ ディレクトリが存在しません — 作成して .jar を置いてください"
fi
else
echo "=== 外部 mod OFF ==="
fi
case "$(uname -s)" in
MINGW*|CYGWIN*|MSYS*)
./gradlew.bat $GRADLE_ARGS
;;
*)
./gradlew $GRADLE_ARGS
;;
esac