Instantly share code, notes, and snippets.

What would you like to do?
Updates the lwjgl that minecraft uses.
#!/usr/bin/env bash
echo "Determining OS..."
if [[ "$(uname -s)" == "Linux" ]]; then
downloader="wget --no-check-certificate -q -O"
natives="libjinput-linux libjinput-linux64 liblwjgl liblwjgl64 libopenal libopenal64"
elif [[ "$(uname -s)" == "Darwin" ]]; then
mcdir="$HOME/Library/Application\ Support/minecraft/"
downloader="curl -o"
natives="libjinput-osx.jnilib liblwjgl.jnilib openal.dylib"
echo "OS not supported. Exploding..."
exit 1
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} - |\
grep -oE "https?:\/\/\/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..."
exit 0
echo "Determining download URL..."
dlurl=$(${downloader%%-o} - "$latest" |\
grep -oE -m1 "https?://[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/"
echo "Downloading latest LWJGL..."
$downloader "$HOME/.cache/" "$dlurl"
echo "Extracting zip file..."
unzip -qqo "$HOME/.cache/" -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/"
for i in $natives; do
echo "Copying $i..."
cp "$lwjgldir/native/$os/$" "$mcdir/bin/natives/"
echo "Deleting cache..."
rm -rf "$lwjgldir"

This comment has been minimized.

fndragon commented Mar 15, 2013

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.


This comment has been minimized.


aperson commented Mar 16, 2013

I've updated the script accordingly. thanks!


This comment has been minimized.

MestreLion commented Mar 21, 2013

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..


This comment has been minimized.

pbhj commented Feb 5, 2014

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" worked fine, thanks.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment