blob: b253720532d358b844a267b1395f4278f0b7120b (
plain)
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
#!/usr/bin/env sh
PLATFORM=$(uname -s | tr '[:upper:]' '[:lower:]')
# Only accepts 1 argument: the Minecraft profile to launch
INAME=
if [ -z "${1}" ]; then
echo "ERROR: Requires one argument (the Minecraft instance to launch)"
exit 1
else
INAME="${1}"
fi
# Setup and read configurations
JAVA=java
MCUSER=Player
JARGS='-Xms512M -Xmx1024M'
VERSION=
BLACKLISTED_LIBRARIES=
BLACKLISTED_NATIVES=
ADDITIONAL_LIBRARIES=
XARGS=
if [ -f 'user.local' ]; then
. "./user.local"
else
echo "JAVA=${JAVA}" > user.local
echo "MCUSER=${MCUSER}" >> user.local
echo "JARGS='${JARGS}'" >> user.local
fi
if [ -f "profiles.local/${INAME}" ]; then
. "profiles.local/${INAME}"
elif [ -f "profiles/${INAME}" ]; then
. "profiles/${INAME}"
else
echo "ERROR: Specified profile does not exist."
exit 1
fi
if [ ! -f "manifests/${VERSION}.json" ]; then
echo "Invalid version detected. Either it is mistyped, or you have not downloaded it yet."
exit 1
fi
MINECRAFT_JAR=${MINECRAFT_JAR:=libraries/com/mojang/minecraft/${VERSION}/minecraft-${VERSION}-client.jar}
VERSION_MANIFEST=$(cat "manifests/${VERSION}.json")
# Some libraries included in the manifests are known to cause issues, so we blacklist them here
# 1.12 and earlier, natives and regular libraries are contained in different elements. For 1.13 and later, an element may contain both.
CLASSPATH=
for I in $(echo "${VERSION_MANIFEST}" | jq -c .libraries.[]); do
if [[ $(echo "${I}" | jq .downloads.artifact) != 'null' ]]; then
for J in ${BLACKLISTED_LIBRARIES}; do
if [ ${J} == $(basename $(echo ${I} | jq -r .downloads.artifact.path)) ]; then
SKIP=1
fi
done
if [[ ${SKIP} -eq 1 ]]; then
SKIP=
continue
fi
JAR=$(echo ${I} | jq -r .downloads.artifact.path)
if [ "${JAR}" != 'null' ]; then
CLASSPATH="${PWD}/libraries/${JAR}:${CLASSPATH}"
fi
fi
if [[ $(echo "${I}" | jq .natives) != 'null' ]]; then
for J in ${BLACKLISTED_NATIVES}; do
if [ ${J} == $(basename $(echo ${I} | jq ".downloads.classifiers.\"natives-${PLATFORM}\".path")) ]; then
SKIP=1
fi
done
if [[ ${SKIP} -eq 1 ]]; then
SKIP=
continue
fi
JAR=$(echo ${I} | jq -r ".downloads.classifiers.\"natives-${PLATFORM}\".path")
if [ "${JAR}" != 'null' ]; then
CLASSPATH="${PWD}/libraries/${JAR}:${CLASSPATH}"
fi
fi
done
for I in ${ADDITIONAL_LIBRARIES}; do
CLASSPATH="${CLASSPATH}:${PWD}/${I}"
done
CLASSPATH="${CLASSPATH}:${PWD}/${MINECRAFT_JAR}"
if [[ $(echo "${VERSION_MANIFEST}" | jq -r .minecraftArguments) != 'null' ]]; then
ARGUMENT_LIST=$(echo ${VERSION_MANIFEST} | jq -r .minecraftArguments)
else
for I in $(echo ${VERSION_MANIFEST} | jq -r '.arguments.game[] | select(type=="string")'); do
ARGUMENT_LIST="${ARGUMENT_LIST} ${I}"
done
fi
ARGUMENTS="$(echo ${ARGUMENT_LIST} | sed -e "s/\${auth_player_name}/${MCUSER}/" -e "s/\${version_name}/${VERSION}/" -e "s@\${game_directory}@\"${PWD}/instances/${INAME}\"@" -e "s@\${assets_root}@${PWD}/assets@" -e "s/\${assets_index_name}/$(echo ${VERSION_MANIFEST} | jq -r .assetIndex.id)/" -e 's/${auth_uuid}/00000000-0000-0000-0000-000000000000/' -e 's/${auth_access_token}/0/' -e 's/${user_type}/mojang/' -e "s/\${version_type}/$(echo ${VERSION_MANIFEST} | jq -r .type)/" -e 's/${user_properties}/{}/' -e "s@\${game_assets}@${PWD}/assets/virtual/legacy@" -e 's/${auth_session}/0/')"
MAINCLASS=${MAINCLASS:=$(echo ${VERSION_MANIFEST} | jq -r .mainClass)}
INSTANCES="${PWD}/instances"
if [ -f "playtime/${INAME}" ]; then
PRVTOTAL=`cat "playtime/${INAME}"`
else
PRVTOTAL=0
fi
STARTTIME=`date +"%s"`
mkdir -p "${INSTANCES}/${INAME}"
ORIGDIR="${PWD}"
cd "${INSTANCES}/${INAME}"
trap 'echo "Interrupt received"' INT
echo ${ARGUMENTS} ${XARGS} | xargs "${JAVA}" ${JARGS} -Duser.language=en -Djava.library.path="${ORIGDIR}/natives-${PLATFORM}" -cp "${CLASSPATH}" "${MAINCLASS}"
ENDTIME=`date +"%s"`
cd "${ORIGDIR}"
TOTALSECONDS=`echo ${ENDTIME} - ${STARTTIME} + ${PRVTOTAL} | nickle`
if [ ! -z ${TOTALSECONDS} ]; then # Prevent playtime from being cleared if nickle is broken/missing
mkdir -p playtime
echo ${TOTALSECONDS} > "playtime/${INAME}"
echo Total playtime: ${ENDTIME} - ${STARTTIME} + ${PRVTOTAL} = ${TOTALSECONDS}
fi
|