Minecraft inside GTA V: the Universal Modder passthrough
This Universal Modder example runs Minecraft and GTA V Legacy story mode together, then draws Minecraft's world into GTA's view. Mods in the two games exchange camera, collision and interaction data, so blocks and effects can participate in the same scene. It is an advanced source project with known limitations, not a one-click mod.
What this mod does
The mod supports block building in Los Santos, TNT and projectile effects crossing between the games, elytra flight, mobs interacting with GTA characters, and a Nether-themed sequence. GTA controls the camera, while Minecraft keeps running its own world and rendering its own frames.
The video is the Universal Modder showcase montage, with Minecraft/GTA scenes alongside other projects. View the full README and media on GitHub.
The example README covers the source and build process. The project was built on a Windows/NVIDIA machine and later rebuilt, with a more limited check, on an AMD machine.
A starting prompt for this idea
Putting Minecraft into GTA story mode with a linked camera and TNT interactions is a large integration. This adapted investigation prompt asks the agent to establish the route before installing it:
Investigate the Universal Modder Minecraft/GTA V passthrough example.
Compare its exact versions with my owned GTA V Legacy and Minecraft installs.
Explain the Fabric side, the ScriptHookV/ReShade side and the local bridge.
List every file the installer would change, existing files to preserve,
and the field note's unresolved cleanup issues before proposing an install.
Start with the synthetic host tests and keep all game work in Story Mode.You can select the code to copy it manually.
A first-time modder may prefer the smaller Terraria example. The prompt collection includes ways to keep recon, implementation and verification separate.
Route and tools used
This is a passthrough between two running games. A Fabric mod exports Minecraft's rendered color and depth buffers. A ReShade add-on receives those frames and composites them against GTA's depth, while a ScriptHookV component supplies GTA-side state and effects.
| Part | What it contributes |
|---|---|
| Minecraft Fabric mod | Camera following, exported frames, block world and interaction events |
| ScriptHookV component | GTA camera, ground probes, input forwarding and gameplay-side events |
| ReShade add-on and shader | Frame upload, depth comparison, reprojection and visual blending |
| Local WebSocket | Small state and event messages between the integrations |
| Shared memory | Minecraft frame data, separate from the message connection |
| Python host and video tools | Synthetic checks, scripted scenes and recording |
Matching the camera direction is only the start. The system also has to agree on coordinates, depth, timing and which game's objects should block the other game's view or movement. The AoE2 example illustrates a different route where only assets and data need conversion.
How to try it yourself
1. Compare the complete version group
The example requires:
| Component | Requirement |
|---|---|
| GTA | GTA V Legacy on Steam, story mode; built against build 3889 |
| Minecraft | Java Edition 26.3 |
| Loader | Fabric Loader 0.19.5 or later and Fabric API 0.161.0+26.3 |
| GTA integration | A ScriptHookV version compatible with the actual GTA build |
| Renderer | ReShade 6.8.0 with add-on support |
| Java build | JDK 25 |
| C++ build | Visual Studio 2022 or later with x64 C++ desktop tools |
| Host tools | Windows Python 3.12 with the dependencies listed in the source |
| Script environment | The main README route uses Windows with WSL |
The example does not support GTA V Enhanced. A newer game build can also need a newer compatible ScriptHookV. Check your installed versions against the example requirements on GitHub before changing files.
Use only the documented, permitted story-mode setup. Do not use this integration with GTA Online or try to bypass a protection to make a mismatched setup run. The safety FAQ explains the boundary.
2. Prepare separate game and build directories
Create a Minecraft launcher profile with its own game directory and practice world. This mod changes options and creates a special world, so do not point it at your normal Minecraft profile. Record the actual GTA install and save paths and preserve their configuration before installing loaders.
The source uses environment variables such as PASSTHROUGH_WIN_DIR, PASSTHROUGH_MC_DIR, PASSTHROUGH_JDK and GTA_DIR. Review their defaults and set paths for your own machine. Keep the resolved paths in your project log so Windows and WSL commands refer to the same intended files.
3. Build and check the Minecraft side
From the example's mc directory, with JDK 25 selected, run:
./gradlew buildYou can select the code to copy it manually.
The expected source build artifact is mc/build/libs/passthrough-0.1.0.jar, relative to the example root. Confirm your actual build output before copying it beside the matching Fabric API in the practice profile's mods directory.
The example also supplies gradle.sh for a Windows build mirror driven from WSL. Its installation wrapper uses your configured target directory; inspect that directory before invoking it.
4. Start with the host checks
Read the instructions for host/fakehost.py and gta/tests/fakegta.cpp. The first checks Minecraft frames against a synthetic scene; the second exercises the compositor with a stand-in host. These checks help separate rendering and alignment failures from GTA-specific behavior.
Passing them still leaves the in-game interactions to check. Keep the output from each check and record which integration was actually running. The CLI reference covers the capture and command-line tools used around these tests.
5. Review and install the GTA integration
From the example root in the WSL setup, run these preparation commands:
gta/fetch_deps.sh
gta/build.shYou can select the code to copy it manually.
The download script obtains dependencies from their respective sources; the build script compiles the integration. Before the next step, inspect gta/install.sh, the destination game folder and the existing loader/ReShade files. Record what will be added and what already belongs to another mod.
The installation command is gta/install.sh. Because of the cleanup issues described below, prepare a file-specific recovery plan instead of relying on its removal flag to preserve all pre-existing configuration.
6. Enter Story Mode and verify one behavior
Start Minecraft using the dedicated profile and use the story-mode launch arrangement documented by the example. Select Story Mode yourself on GTA's landing page. Automated focus and input can reach the wrong menu while someone is typing, so the supplied scene helper avoids clicking that page.
Check the connection messages and a simple aligned view first. Then test one interaction in a controlled scene. F7 toggles the passthrough; F8 re-levels Minecraft ground. Leave recording and large scripted effects until the basic route is stable.
What the agent learned
Small rendering differences in this project each needed their own diagnosis:
- Depth readback affected color output. The targeted Minecraft version leaves a graphics read state changed after depth copying; the example's Fabric integration accounts for it.
- A flat overlay cannot produce correct occlusion. The compositor needs both worlds' depth to place blocks behind buildings or in front of cars.
- Frame timing matters during motion. Camera and rendered-frame timing produce visible offsets; use a measurement scene rather than judging a static screenshot alone.
- Aspect ratios have to match. A mismatch between the Minecraft window and GTA's actual backbuffer distorts the result.
- Loader order matters. In this GTA setup, ReShade loads through the ASI loader rather than the ordinary proxy-DLL route.
On the second, AMD machine, the code built, a synthetic host test ran and an in-game composited view appeared. TNT, projectiles, mobs, flight and the Nether were not checked feature by feature there, so test each one on your own hardware.
Known limitations to review before installing
These unresolved issues materially affect how you use the example:
- Existing ReShade configuration:
install.sh --removecan delete a pre-existingReShade.ini. A marker-file fix exists locally but is not yet part of the example. Back up existing configuration and inspect removal behavior first. - Save-helper scope: the helper can copy its saves into every discovered profile. Do not run it against ordinary profiles without inspecting and narrowing the target set.
- Cleanup scope: some barrier and entity cleanup is broader than just one test object. Use a dedicated practice world.
- Local connection access: the example binds its bridge to
127.0.0.1, but it has no token. Other programs on the same machine can send it commands; close the example when finished. - Pause-menu overlay: the last Minecraft overlay can remain visible over GTA's map. This remains unresolved.
- Timing configuration: the documented pose lag and the compositor defaults differ. Record the value used in a capture instead of assuming one number fits every test.
The source changes over time, so check the current code and project updates before following older instructions.
Ideas to remix it
Create a non-destructive block-building demonstration in a dedicated test area.
Verify alignment, occlusion and collision before adding explosions or mobs.You can select the code to copy it manually.
Add an on-screen connection status indicator to the example.
Test host disconnect and reconnect behavior without changing the game-world features.You can select the code to copy it manually.
Design a repeatable camera-alignment scene with known geometry.
Record frame timing and compare the actual images before adjusting reprojection.You can select the code to copy it manually.
Return to the examples overview for the available routes, or use the prompt collection to turn one of these ideas into a small, reviewable plan.