VR mod for Minecraft. For Version 1.12.X
Clone or download
Latest commit 7e58cbc Jan 16, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
bin alpha1 Jun 29, 2017
images alpha1 Jun 29, 2017
installer Account for new MultiMC structure in OptiFine install instructions Jan 5, 2019
javascripts alpha1 Jun 29, 2017
mcppatches optifine e3 Dec 13, 2018
patches r11 and r12 test Jan 16, 2019
resources Optifine D3 May 18, 2018
src r11 and r12 test Jan 16, 2019
stylesheets alpha1 Jun 29, 2017
.gitattributes :neckbeard: Added .gitattributes & .gitignore files Jun 29, 2017
.gitignore TIL Mar 12, 2018
.gitmodules alpha1 Jun 29, 2017
.public_rev alpha1 Jun 29, 2017
CHANGES.md alpha1 Jun 29, 2017
CNAME alpha1 Jun 29, 2017
LICENSE.md alpha1 Jun 29, 2017
Makefile alpha1 Jun 29, 2017
README.md Update README.md Mar 16, 2018
applychanges.bat alpha1 Jun 29, 2017
applychanges.py Move assets directory to facilitate cleaner loading in dev environment Apr 22, 2018
applychanges.sh Fix .sh scripts Nov 15, 2017
build.bat alpha1 Jun 29, 2017
build.log alpha1 Jun 29, 2017
build.py Package mappings in jar Jun 1, 2018
build.sh Fix .sh scripts Nov 15, 2017
build.txt update optifine so forge works Jul 4, 2017
copyfilteredfiles.bat alpha1 Jun 29, 2017
copyfilteredfiles.py alpha1 Jun 29, 2017
copyfilteredfiles.sh Fix .sh scripts Nov 15, 2017
create_install.bat alpha1 Jun 29, 2017
create_install.py alpha1 Jun 29, 2017
create_install.sh Fix .sh scripts Nov 15, 2017
getchanges.bat alpha1 Jun 29, 2017
getchanges.py r4 May 3, 2018
getchanges.sh Fix .sh scripts Nov 15, 2017
getcompilechanges.bat alpha1 Jun 29, 2017
getcompilechanges.sh Fix .sh scripts Nov 15, 2017
idea.py alpha1 Jun 29, 2017
index.html alpha1 Jun 29, 2017
install.bat optifien c9, 6 beta 1 Mar 12, 2018
install.py fix up installer script some more Mar 12, 2018
install.sh Fix .sh scripts Nov 15, 2017
logo.png alpha1 Jun 29, 2017
minecriftversion.py r11 and r12 test Jan 16, 2019
normalisePatchLineEndings.bat alpha1 Jun 29, 2017
normalisePatchLineEndings.py alpha1 Jun 29, 2017
params.json alpha1 Jun 29, 2017
sync-public.sh Fix .sh scripts Nov 15, 2017
test.sh Fix .sh scripts Nov 15, 2017


Vivecraft for Minecraft 1.12

This readme is intended for developers. For downloads and gameplay instructions please see the official website

Using this Repository

Vivecraft uses patches to avoid distributing Minecraft code. The build scripts are in Python 2.X.

  • Fork, checkout or download the repo using your Git method of choice.
  • Install Java JDK 1.8. The Java JRE will NOT work.
  • Set the JAVA_HOME environment variable to the JDK directory
  • Add %JAVA_HOME%\bin to your PATH environment variable
  • Install Python 2.7.x (NOT 3.x). Be sure to tick the 'add python to your PATH' option during install. Download from python.org
  • Open a command prompt and navigate to the repo directory
  • Run install.bat

The install process (install.py) does a number of things:

  • It downloads MCP (Minecraft coder's pack) and extracts it to the \mcp9xx\ directory.
  • It downloads a ton of dependencies.
  • It merges Optifine into vanilla minecraft jar.
  • It decompiles and deobfuscates the combined minecraft/optifine into \mcp9xx\src.minecraft_orig_nofix\
  • It applies any patches found in \mcppatches\ and copies the result to\mcp9xx\src.minecraft_orig\
  • It applies all the patches found in \patches\ and copies the result to \mcp9xx\src\minecraft.
  • It copies all code files found in \src\ to \mcp9xx\src\minecraft.
  • It copies all files found in \assets\ to \mcp9xx\src\assets. This directory is now the full 'Vivecraft' codebase.

If you use Eclipse you can open the workspace found in \mcp9xx\eclipse. You will have to correct the library path for the vanilla jar and realms jar, and also add libraries for JRift, json, asm, and launchwrapper, all of these can be found in the root /lib folder. To run the game from eclipse you also have to attach natives to the lwjgl jar (from lib/natives).

Make all changes to the game in the \mcp9xx\src\minecraft directory.

To update code to Github:

  • run getchanges.bat. This compares mcp9xx\src\minecraft to mcp9xx\src\minecraft_orig. patches are generated for modified files and copied to \patches. Whole new files are copied to \src.
  • Push to Github.

To build an installer:

  • run build.bat. This runs getchanges, build, and then create_install. Basically it takes the new files and patches and creates a jar. And then it uses the code and jsons found in \installer\ to make an installer.exe.

To update changes from github

  • After pulling changes from github run applychanges.bat. This backs up mcp9xx\src\minecraft to mcp9xx\src\minecraft_bak, and starts over by applying all patches in \patches\ to mcp9xx\src\minecraft_orig, and copies the result o mcp9xx\src\minecraft

Caveats - Maintaining Forge Compatibility

When Vivecraft is run with Forge, any public method can be called by any mod, and any vanilla class is up for grabs for ASM modification. To this end, please follow these guidelines in writing Vivecraft code:

  • Do not rename any vanilla methods, fields, or classes
  • Do not change the type or signatures of any vanilla members.
  • Keep modification to vanilla methods minimal, move code to your own methods, preferrably in your own files.

Additionally, vivecraft does not use bytecode manipulation at runtime to modify the vanilla classes (mostly), it replaces them wholesale in much the same way as optifine. It only replaces files that have been modified by the user, and it replaces them after Forge and Optifine have made their modifications to them. This means that any vanilla class you modify will NOT have any of Forge's code changes made to it at runtime. To fix this, the class must have all Forge's method calls added via reflection in Vivecraft. Optifine uses this method extensively and Vivecraft expands it.

Before making ANY changes to a vanilla class file you should check to see:

  • Is the class already modified by Vivecraft? You can tell if there is a .patch file for it on github. If so: feel free to make any other changes.
  • Is the class already modified by Optifine? You can tell because there will usually be calls to Reflector.java. If Optifine has already made the Reflection calls, continue with your edits.
  • Is the class modfied by Forge? - Check Forge's github patches to see, Forge modifies many base classes but not all. If the class is not modified by Forge, feel free to edit it.
  • If the class is modified by Forge, and neither Vivecraft, nor Optifine have added the Reflection calls, you will have to do so along with your own changes. See Reflector.java for numerous examples.