public
Last active

Updates the lwjgl that minecraft uses.

  • Download Gist
update_lwjgl.sh
Shell
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
#!/usr/bin/env bash
 
echo "Determining OS..."
 
if [[ "$(uname -s)" == "Linux" ]]; then
mcdir="$HOME/.minecraft/"
downloader="wget --no-check-certificate -q -O"
os="linux"
natives="libjinput-linux libjinput-linux64 liblwjgl liblwjgl64 libopenal libopenal64"
elif [[ "$(uname -s)" == "Darwin" ]]; then
mcdir="$HOME/Library/Application\ Support/minecraft/"
downloader="curl -o"
os="macosx"
natives="libjinput-osx.jnilib liblwjgl.jnilib openal.dylib"
else
echo "OS not supported. Exploding..."
exit 1
fi
 
echo "Determining installed LWJGL version..."
 
installed="$(unzip -p $mcdir/bin/lwjgl.jar | strings | grep '^[0-9]*\.[0-9]*\.[0-9]*')"
 
echo "LWJGL $installed installed"
 
echo "Determining latest online version..."
 
latest=$(${downloader%%-o} - http://lwjgl.org/download.php |\
grep -oE "https?:\/\/sourceforge.net\/projects\/java-game-lib\/files\/Official%20Releases\/LWJGL%20[0-9|\.]*")
 
echo "Found version ${latest##*%20}"
 
if [[ "${latest##*%20}" == "$installed" ]]; then
echo "LWJGL already at current version."
if [[ "$1" == "-force" ]]; then
echo "Updating anyways..."
else
exit 0
fi
fi
 
echo "Determining download URL..."
 
dlurl=$(${downloader%%-o} - "$latest" |\
grep -oE -m1 "https?://sourceforge.net/projects/java-game-lib/files/Official%20Releases/LWJGL%20[0-9|\.]*/lwjgl-[0-9|\.]*.zip")
 
echo "Checking if ~./cache/ exists..."
 
if [[ ! -d "$HOME/.cache/" ]]; then
echo "~/.cache/ did not exist. Creating..."
mkdir "$HOME/.cache/"
fi
 
echo "Downloading latest LWJGL..."
 
$downloader "$HOME/.cache/lwjgl.zip" "$dlurl"
 
echo "Extracting zip file..."
 
unzip -qqo "$HOME/.cache/lwjgl.zip" -d "$HOME/.cache/"
 
lwjgldir=$(find -L "$HOME/.cache" -maxdepth 1 -type d -name "*lwjgl*" -print)
echo "Copying files..."
 
for i in "jinput" "lwjgl" "lwjgl_util"; do
echo "Copying $i..."
cp "$lwjgldir/jar/$i.jar" "$mcdir/bin/"
done
for i in $natives; do
echo "Copying $i..."
cp "$lwjgldir/native/$os/$i.so" "$mcdir/bin/natives/"
done
 
echo "Deleting cache..."
 
rm -rf "$lwjgldir"

Change line 62 to lwjgldir=$(find -L "$HOME/.cache" -maxdepth 1 -type d -name "lwjgl" -print)

This way if your home directory has a symbolic link for .cache (I have a symbolic link there for speed), find correctly points to the lwjgl directory extracted by unzip.

I've updated the script accordingly. thanks!

It's great to see more people and scripts using XDG dirs like ~/.config, ~/.local, ~/.cache, etc to unclutter user's $HOME, so kudos for that! And, if you want to further improve that, use cachedir=${XDG_CACHE_HOME:-"$HOME/.cache"} instead of hardcoding "$HOME/.cache". Remember all XDG dirs are configurable via env vars, and ~/.cache is just a default. Also, setting this value in a cachedir var somewhere near the top will allow you to avoid repeating it over and over through the code..

Make sure you run it as bash, I used "sh" and on my Kubuntu that's symlinked to dash (I didn't realise). That gives a couple of errors on the [[ tests. using "bash update.sh" worked fine, thanks.

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.