John is a custom Minecraft Classic compatible client written in C that works on Windows, macOS, Linux, iOS, Android, FreeBSD, NetBSD, OpenBSD, Solaris, Haiku, IRIX, 3DS (unfinished), PSP (unfinished), and in a web browser.
It is not affiliated with (or supported by) Mojang AB, Minecraft, or Microsoft in any way.
You can download John from here and the very latest builds from here.
John strives to support providing an experience identical to the original Minecraft Classic by strictly following a clean room reverse engineering approach.
If you're interested in documenting or verifying the behaviour of the original Minecraft Classic, please get in contact with (unknownshadow200
on Discord).
- A fork of ClassiCube with a new name, paying tribute to the site's founder, John ClassiCube
- A complete re-implementation of Minecraft Classic 0.30, with optional additions
- Partially supports some features of Minecraft Classic versions before 0.30
- Lightweight, minimal memory usage compared to original Minecraft Classic
- Much better performance than original Minecraft Classic
- Works with effectively all graphics cards that support OpenGL or Direct3D 9
- It does not add any additional features other than the name change
- It does not work with Minecraft Java or Bedrock edition servers
- It does not have a survival mode (nor will such a mode be added)
- It does not support logging in with Mojang/Minecraft accounts
- Windows: 95 or later
- macOS: 10.5 or later (can be compiled to work with 10.3/10.4 though)
- Linux: libcurl and libopenal
- Android: 2.3 or later
Note: When running from within VirtualBox, disable Mouse Integration, otherwise the camera will not work properly
Initially, you will need to run John.exe to download the required assets from minecraft.net and classicube.net.
Just click 'OK' to the dialog menu that appears when you start the launcher.
Singleplayer Run John.exe, then click Singleplayer at the main menu.
Multiplayer Run John.exe. You can connect to LAN/locally hosted servers, and classicube.net servers if you have a ClassiCube account.
The most common reason for being stuck on OpenGL 1.1 is non-working GPU drivers - so if possible, you should try either installing or updating the drivers for your GPU.
Otherwise:
- On Windows, you can still run the OpenGL build of John anyways. (You can try downloading and using the MESA software renderer from here for slightly better performance though)
- On other operating systems, you will have to compile the game yourself. Don't forget to add
-DCC_BUILD_GL11
to the compilation command line so that the compiled game supports OpenGL 1.1.
Note: The various instructions below automatically compile John with the recommended defaults for the platform.
If you (not recommended) want to override the defaults (e.g. to compile OpenGL build on Windows), see here for details.
Open John.sln (File -> Open -> Project/Solution) and compile it (Build -> Build Solution).
If you get a The Windows SDK version 5.1 was not found
compilation error, see here for how to fix
- Use 'Developer Tools for Visual Studio' from Start Menu
- Navigate to the directory with John's source code
- Enter
cl.exe *.c /link user32.lib gdi32.lib winmm.lib dbghelp.lib shell32.lib comdlg32.lib /out:John.exe
I am assuming you used the installer from https://sourceforge.net/projects/mingw-w64/
- Install MinGW-W64
- Use either Run Terminal from Start Menu or run mingw-w64.bat in the installation folder
- Navigate to the directory with John's source code
- Enter
gcc *.c -o John.exe -mwindows -lwinmm -limagehlp
I am assuming you used the installer from https://osdn.net/projects/mingw/
- Install MinGW. You need mingw32-base-bin and msys-base-bin packages.
- Run msys.bat in the C:\MinGW\msys\1.0 folder.
- Navigate to the directory with John's source code
- Enter
gcc *.c -o John.exe -mwindows -lwinmm -limagehlp
I am assuming you used tcc-0.9.27-win64-bin.zip
from https://bellard.org/tcc/
- Extract the .zip file
- In
ExtMath.c
, changefabsf
tofabs
andsqrtf
tosqrtf
- In TCC's
include/math.h
, remove the inline definition forfabs
at around line 217 - In TCC's
lib/kernel32.def
, add missingRtlCaptureContext
- Add missing include files from
winapi-full-for-0.9.27.zip
as required - ???
Install appropriate libs as required. For ubuntu these are: libx11-dev, libxi-dev and libgl1-mesa-dev
gcc *.c -o John -rdynamic -lm -lpthread -lX11 -lXi -lGL -ldl
i686-w64-mingw32-gcc *.c -o John.exe -mwindows -lwinmm -limagehlp
x86_64-w64-mingw32-gcc *.c -o John.exe -mwindows -lwinmm -limagehlp
Although the regular linux compiliation flags will work fine, to take full advantage of the hardware:
gcc *.c -o John -DCC_BUILD_RPI -rdynamic -lm -lpthread -lX11 -lXi -lEGL -lGLESv2 -ldl
cc *.c -o John -framework Carbon -framework AGL -framework OpenGL -framework IOKit
cc *.c interop_cocoa.m -o John -framework Cocoa -framework OpenGL -framework IOKit -lobjc
Open android
folder in Android Studio (TODO explain more detailed)
Run gradlew
in android folder (TODO explain more detailed)
iOS version will have issues as it's incomplete and only tested in iOS Simulator
Import ios/CCIOS.xcodeproj
project into Xcode (TODO explain more detailed)
xcodebuild -sdk iphoneos -configuration Debug
(TODO explain more detailed)
Install libexecinfo, curl and openal-soft package if needed
cc *.c -o John -I /usr/local/include -L /usr/local/lib -lm -lpthread -lX11 -lXi -lGL -lexecinfo
Install libexecinfo, curl and openal package if needed
cc *.c -o John -I /usr/X11R6/include -I /usr/local/include -L /usr/X11R6/lib -L /usr/local/lib -lm -lpthread -lX11 -lXi -lGL -lexecinfo
Install libexecinfo, curl and openal-soft package if needed
cc *.c -o John -I /usr/X11R7/include -I /usr/pkg/include -L /usr/X11R7/lib -L /usr/pkg/lib -lpthread -lX11 -lXi -lGL -lexecinfo
cc *.c -o John -I /usr/local/include -L /usr/local/lib -lm -lpthread -lX11 -lXi -lGL -lexecinfo
gcc *.c -o John -lm -lsocket -lX11 -lXi -lGL
Install openal_devel and libexecinfo_devel package if needed
cc *.c Window_Haiku.cpp -o John -lm -lexecinfo -lGL -lnetwork -lstdc++ -lbe -lgame -ltracker
gcc -lGL -lX11 -lXi -lm -lpthread -ldl
Install SDL2 port if needed
cc *.c -o John -lgl -lSDL2
emcc *.c -s ALLOW_MEMORY_GROWTH=1 --js-library interop_web.js
The generated javascript file has some issues. See here for how to fix
cd into src
directory, then run make psp
. You'll need pspsdk
cd into src
directory, then run make 3ds
. You'll need libctru
You'll have to write the necessary code. You should read portability.md in doc folder.
Functions and variables in .h files are mostly documented.
Further information (e.g. style) for John's source code can be found in the doc and misc folders.
Fixes for compilation errors when using musl or old glibc for C standard library
-
Press escape (after joining a world) or pause to switch to the pause menu.
-
Pause menu -> Options -> Controls lists all of the key combinations used by the client.
-
Note that toggling 'vsync' to on will minimise CPU usage, while off will maximimise chunk loading speed.
-
Press F to cycle view distance. A smaller number of visible chunks can improve performance.
-
If the server has disabled hacks, key combinations such as fly and speed will not do anything.
-
To see the list of built in commands, type
/client
. -
To see help for a given built in command, type
/client help <command name>
.
- curl - HTTP/HTTPS for linux and macOS
- FreeType - Font handling for all platforms
- GCC - Compiles client for linux
- MinGW-w64 - Compiles client for windows
- Clang - Compiles client for macOS
- Emscripten - Compiles client for web
- RenderDoc - graphics debugging
John uses sounds from Freesound.org
Full credits are listed in doc/sound-credits.md