All Mods Resource Packs Data Packs Shaders Modpacks Plugins
*NEW* VM computers

*NEW* VM computers

by Unknown • Downloads: 0 • Followers: 0
Description
Gallery
Changelog
Versions

THIS IS A FAN MADE PORT OF VM COMPUTERS BY Delta2Force

Transfers VM Computers to modern Minecraft version (1.20.1)

Original Mod

Check out the original VM Computers mod by Delta2Force:
https://www.curseforge.com/minecraft/mc-mods/vm-computers

Thanks to KuanogenMod for testing some of the versions!

If you have problems with this port, please submit them to my GitHub.

Join the vmcomputers Discord Server!

Donate to the original creator (Delta2Force)
Note: Only accepts Bitcoin and BitcoinCash
BTC: 3GubEkHV69gCkjWhRgRWYqWqyjcWW3gxFF
BCH: bitcoincash:qq6jttzlvgj68lvecnh75pt3znezj4vx6sysfvj3j5

Dependencies

How to use

Ordering

  1. Craft an ordering tablet (as seen below)
  2. Wait until it detects a satellite (they appear quite often)
  3. The rest is (hopefully) self-explanatory

Creating a Hard Drive / Importing an ISO disk image

Virtual Hard Drives are created by pressing the use button (right-click) while holding an hard drive in your hand. It doesn't matter if it has been assigned to a disk image or not as it will always open the menu. You can either use an existing hard drive (located in .minecraft/vm_computers/vhds) or create a new one.

ISO images are CDs / DVDs but as files. They are stored at .minecraft/vm_computers/isos. Once you place them in the folder, you can select them in the PC case menu.


Building the computer

You will need the following items (which can be bought from the Ordering Tablet):

  • PC Case,
  • Motherboard,
  • RAM,
  • GPU, and
  • Monitor
Note: The keyboard and mouse are purely decorative (currently...) and you can start the VM without a hard drive or ISO inserted.

To insert a hard drive, you will need to create one by right-clicking with a hard drive in your hand.
It doesn't matter if it is already assigned to a disk image or not.

  1. Place down the case
  2. Press the use button (right-click) on the case
  3. (Optional) Select an ISO image from the list
  4. Open the case

    Note: The buttons will be disabled if you do not have the item in your inventory.
  5. The rest (hopefully) is self-explanatory

Using the computer

To turn on the computer, press the Power On button in the PC case menu. To interact with the computer, press the use button (right-click) on the monitor.
Note: Pressing Alt+F4 will close the game, not the window you are on in the virtual machine.

To stop interacting with the computer, press the keys mentioned in the top-right corner of the screen when interacting with the monitor.


Contributing

If you'd like to contribute to this project, please fork the master branch, make your changes and create a pull request to have the changes reviewed. If you plan to contribute larger changes, please create a issue to discuss the major changes that you were planning to make.

I don't like rules, but to keep consistency and readability of the code please follow these guidelines:

  1. Use lambda expressions when appropriate
    • You'll find that it is faster to write () -> {}, just saying :)
  2. Try to follow the code style of the project
    • Makes everyone's life so much easier when it comes to making changes and understanding the code
  3. Commit messages should describe the change well without being too short
    • Where it says 'Update [insert file name here]' should be replaced with a short overview of what was changed. Use the optional extended description to explain the specific changes that were made.
  4. When making a pull request, make sure that you have made all of the changes you have wanted to before posting the pull request.
    • It gets messy when you create a pull request and continue to make changes after the fact.

All Versions

+ Add Version
Name Game version Platforms Published Downloads Actions
1.21.1
Fabric Neoforge
3mo ago 1
1.20.1
Fabric Forge
3mo ago 1
1.20.1
Fabric Forge
3mo ago 1
1.21.1
Fabric Neoforge
3mo ago 1
1.21.1
Fabric
5mo ago 1
1.21.1
Neoforge
5mo ago 1
1.20.1
Forge
5mo ago 1
1.20.1
Fabric
5mo ago 1
1.21.1
Neoforge
5mo ago 1
1.21.1
Fabric
5mo ago 1
1.20.1
Fabric
5mo ago 1
1.20.1
Fabric
5mo ago 1
1.20.x
Fabric
6mo ago 1
1.20.1
Fabric
7mo ago 1
1.20.1
Forge
7mo ago 1
1.20.1
Fabric
7mo ago 1
1.20.1
Fabric
8mo ago 1
## IF PREVIOUS VERSION WORKS FINE THEN THERE IS NO REASON IN USING THIS VERSION
  • Fixed vmware autodetect being not accurate
## IF PREVIOUS VERSION WORKS FINE THEN THERE IS NO REASON IN USING THIS VERSION
  • Fixed vmware autodetect being not accurate
# this mod works on fabric by itself with fabric api, for forge you have to use it along with [Sinytra Connector](https://modrinth.com/mod/connector) and [Forgified Fabric API](https://modrinth.com/mod/forgified-fabric-api)
## changes
  • VMware backend instead of VirtualBox
  • New 3-layered video pipeline for enhanced performance
# this mod works on fabric by itself with fabric api, for neoforge you have to use it along with [Sinytra Connector](https://modrinth.com/mod/connector) and [Forgified Fabric API](https://modrinth.com/mod/forgified-fabric-api)
## changes
  • VMware backend instead of VirtualBox
  • New 3-layered video pipeline for enhanced performance
final fixes for 1.21.1 fabric
final fixes for 1.21.1 neoforge
final fixes for 1.20.1 forge
Final fixes for 1.20.1 fabric
# ITS A PREPREPREALPHA BUILD, IT WORKS IN SIGLEPLAYER BUT I DIDNT TEST IT ON SERVER
# IF YOU ARE HAVING AN ISSUE LIKE PC NOT STARTING|SHUTTING DOWN, PLEASE TRY TO CLOSE MINECRAFT AND REBOOT YOUR SYSTEM BEFORE REPORTING THE ISSUE
## PORTED TO 1.21.1 NEOFORGE

# ITS A PREPREPREALPHA BUILD, IT WORKS IN SIGLEPLAYER BUT I DIDNT TEST IT ON SERVER
# IF YOU ARE HAVING AN ISSUE LIKE PC NOT STARTING|SHUTTING DOWN, PLEASE TRY TO CLOSE MINECRAFT AND REBOOT YOUR SYSTEM BEFORE REPORTING THE ISSUE
## PORTED THE LATEST MOD VERSION THAT SUPPORTS LATEST VBOX TO FABRIC 1.21.1
##### that's all
# BUG FIXES
1. Mouse not working inside of vm - fixed
2. Keyboard keys spamming/not responding - fixed (still weird behaviour in windows 98 setup)
3. Crashing on pcs without 3d acceleration support - fixed
## SMALL CHANGES
1. Changed support message so people wouldn't text the original mod creator (sorry i forgot about that in previous versions)
Fixes & Improvements:

Fixed VirtualBox VM startup crash related to 3D acceleration
Details: Previously, the mod forcefully enabled GraphicsFeature_Acceleration3D during VM startup. If the host machine's hardware, graphics drivers, or the installed version of VirtualBox (e.g. 7.0+) did not support 3D acceleration with the current configuration, it would result in a VBOX_E_NOT_SUPPORTED error and cause the game to crash or the VM to fail to boot entirely.
Solution: Moved the --accelerate3d on argument to a silent modification command. Now, the mod will attempt to enable 3D acceleration, but will safely fallback and start the VM in software rendering mode if the host system does not support it, preventing crashes for users with incompatible setups or newer VirtualBox versions.
# Changelog

## [1.4.16-1.20.1-fabric] - 2026-05-09

### Security & Critical Bug Fixes

  • Fixed UUID mismatch in multiplayer screen texture cleanup** (ClientMod.java)
  • S2C_STOP_SCREEN and S2C_SCREEN were using mcc.player.getUuid() for remove() instead of pcOwner.
  • This caused screen textures from other players to **never be destroyed**, leading to a severe **memory leak** (NativeImage, NativeImageBackedTexture, Identifier).
  • Also fixed a **double-close bug** where vmScreenTextureNI.close() was called instead of vmScreenTextureNIBT.close() in S2C_SCREEN.

  • Fixed component loss when placing last PC case from stack** (ItemPCCase.java, ItemPCCaseSidepanel.java)
  • decrement(1) was called **before** reading NBT data. When count == 1, the stack became EMPTY and getNbt() returned null, causing **permanent loss** of all PC components (motherboard, CPU, RAM, HDD, ISO).
  • Now NBT is saved to a local variable **before** decrementing.

  • Fixed server crash on missing inventory item** (MainMod.java)
  • removeStck() threw RuntimeException when an item was not found, crashing the **entire server**.
  • Replaced with logging via LOGGER.error() and graceful return.
  • Also hardened against desync between contains() check and removeStck() execution.

  • Fixed ClassCastException exploit in C2S_ORDER** (MainMod.java)
  • No validation that readItemStack().getItem() is actually an OrderableItem. A malicious client could send any item, causing a server crash.
  • Added instanceof OrderableItem check with logging of invalid packets.
  • Same fix applied to S2C_SYNC_ORDER handler in ClientMod.java.

  • Fixed IllegalArgumentException in C2S_ADD_CPU / C2S_ADD_RAM** (MainMod.java)
  • When dividedBy or mb values did not match expected constants, lookingFor remained null, causing new ItemStack(null) → server crash.
  • Added lookingFor != null guard before creating ItemStack.

  • Fixed HDD removal ignoring NBT** (MainMod.java)
  • removeStck() matched only by Item type, not NBT. If a player had multiple HDDs with different VHD files, the **wrong disk** could be removed.
  • Enhanced removeStck() to prefer **exact NBT match** before falling back to type-only match.

  • Fixed VM always created with only 1 CPU** (GuiPCEditing.java)
  • Math.min(1, ...) in the "create new VM" branch always returned 1, regardless of host CPU count or player settings. The "modify existing" branch already used correct Math.max(1, ...).
  • Fixed to Math.max(1, ...) — VM now gets the correct number of CPUs.

  • Fixed ConcurrentModificationException in ServerMixin** (ServerMixin.java)
  • MainMod.orders.remove() was called during for-each iteration over HashMap.values(), guaranteeing a crash every time an order completed.
  • Implemented deferred removal: collect keys to remove in a list, then delete after the loop.

  • Fixed NPE when sending packets to disconnected players** (ServerMixin.java)
  • playerManager.getPlayer() could return null if a player logged out. Calling .getWorld() or ServerPlayNetworking.send(null, ...) caused NPE.
  • Added null checks before all getPlayer() usages.

  • Fixed deadlock in insertISO** (GuiPCEditing.java)
  • wait() without while loop and without timeout — if notify() was called before wait(), the thread hung forever.
  • Replaced with while (condition) { lock.wait(5000); } pattern using a shared ClientMod.VM_TURNING_ON_LOCK.
  • Also fixed the case where a new GuiPCEditing instance had a different monitor object than the one notify() was called on.

  • Fixed busy-wait burning 100% CPU in turnOffPC** (GuiPCEditing.java)
  • while(ClientMod.vmTurningOn) {} was an infinite spin-loop.
  • Replaced with Thread.sleep(50) inside the loop. Also added volatile to vmTurningOn so the thread actually sees state changes.

  • Fixed Timer thread leak in GuiFocus** (GuiFocus.java)
  • A new Timer was created every time GuiFocus opened, but cancel() was only called on NullPointerException (singleplayer). In multiplayer, timers leaked indefinitely.
  • Timer is now stored as a field and cancelled in removed().

  • Fixed NPE-based control flow in singleplayer** (GuiFocus.java)
  • getCurrentServerEntry().address throws NPE in singleplayer. The code used catch(NullPointerException) as control flow.
  • Replaced with explicit == null check.

  • Fixed resource leak in VBoxManage** (VBoxManage.java)
  • BufferedReader and InputStream were not closed in finally, leaking file descriptors on exceptions.
  • Wrapped in try-with-resources.

  • Fixed FileWriter not closed on exception** (ClientMod.java)
  • increaseVHDNum() opened a FileWriter without try-with-resources or finally. On any exception, the file handle leaked.
  • Wrapped in try-with-resources.

  • Fixed Unpooled.buffer() leaks across all packet handlers**
  • new PacketByteBuf(Unpooled.buffer()) was used in ClientMod.java, GuiPCEditing.java, ServerMixin.java, and PlayerManagerMixin.java instead of PacketByteBufs.create().
  • Replaced all instances with the proper Fabric API method.

  • Fixed regex bug in hard drive selection** (GuiCreateHarddrive.java)
  • split(" | ") treated " | " as a regex (space OR space), effectively equivalent to split(" ").
  • Any VHD filename containing a space was broken. Replaced with indexOf(" | ") + substring() for literal matching.

  • Fixed iron ingot overpayment loss** (EntityDeliveryChest.java)
  • When a player overpaid, is.increment() was called on an already-empty ItemStack (after decrement()), causing the **excess ingots to be permanently lost**.
  • Fixed by saving the count before decrement(), then creating a new ItemStack for the refund and using player.getInventory().offerOrDrop().

  • Fixed matrix stack imbalance on exception** (HeldItemMixin.java)
  • matrices.push() in HEAD and matrices.pop() in TAIL were not atomic. An exception between them left the stack unbalanced.
  • Wrapped rendering in try-finally to guarantee matrices.pop().

  • Fixed NBT key inconsistency** (EntityPC.java, ItemPCCase.java, ItemPCCaseSidepanel.java)
  • Constructor used different NBT keys (x64, MoboInstalled, GPUInstalled, RAMSlot0, VHDName, ISOName) than readCustomDataFromNbt / writeCustomDataToNbt (X64, MotherboardInstalled, GpuInstalled, GbRamSlot0, HardDriveFileName, IsoFileName).
  • This worked only because the two paths never crossed, but was a refactoring minefield.
  • Unified all keys to match writeCustomDataToNbt format. Added **backward compatibility** in constructor to read both old and new keys.

### New Features

  • Transition to VBoxManage CLI (VBox CLI)**
  • Replaced the deprecated **VirtualBox JWS (Java Web Services) API** with a new VBoxManage.java wrapper that calls the VBoxManage command-line tool directly.
  • The JWS API was **removed in VirtualBox 7.0+**, making the old mod completely incompatible with modern VirtualBox installations.
  • All VM operations are now performed via CLI:
  • createVm, modifyVm, startVm, powerOffVm
  • storageAttach, addStorageController, removeStorageController
  • mountMedium, unmountMedium
  • putScancodes, putMouseEvent
  • takeScreenshot
  • getVmState, vmExists, discardSavedState
  • Added executeSilent() for optional operations that may fail on newer VBox versions (e.g., --accelerate2dvideo in VBox 7.x).
  • Added connection test (testConnection()) and version detection (getVersion()).

  • Support for VirtualBox 7.x and newer**
  • VBox 7.0+ removed vboxwebsrv (the SOAP web service). The mod now works with **any VirtualBox version** that provides VBoxManage.
  • Added parsing of showvminfo --machinereadable output for medium attachment state, compatible with VBox 7.x output format.
  • --accelerate2dvideo is now handled silently (ignored if unsupported) instead of crashing.

### Performance Improvements

  • Added volatile to all cross-thread shared state** (ClientMod.java)
  • vmTurnedOn, vmTurningOn, vmTurningOff, vmUpdateThread, vmTextureBytes, vmTextureBytesSize.
  • Prevents infinite busy-waits and race conditions between the render thread and VM update thread.

  • Added synchronized to texture byte transfers** (VMRunnable.java + ClientMod.java)
  • vmTextureBytes / vmTextureBytesSize were updated in one thread and read in another without any synchronization, risking torn reads.
  • Added VM_TEXTURE_LOCK with proper synchronized blocks on both write (VM thread) and read (render thread) sides.

  • Added synchronized to tablet texture streaming** (TabletOS.java)
  • byteArrayInputStream was written by the tablet renderer thread and read by the main render thread without synchronization.
  • Added TEXTURE_SYNC lock with local copy pattern.

  • Throttled isMediumEjected() polling** (GuiPCEditing.java)
  • Previously called VBoxManage showvminfo **every frame (~60 times/second)**, spawning a new OS process each time.
  • Now checks **every 2 seconds**, reducing CPU and disk load by ~99%.

  • Throttled tablet renderer** (GameloopMixin.java)
  • Tablet renderer while(true) loop had no Thread.sleep(), pinning a CPU core at 100%.
  • Added Thread.sleep(33) for ~30 FPS cap.
  • Also replaced silent ConcurrentModificationException swallowing with proper logging.

  • Reduced S2C_SYNC_ORDER network spam** (ServerMixin.java)
  • Order sync packet was sent **20 times/second per order** regardless of whether status changed.
  • Now tracks lastSyncedStatus and only sends the packet when the status actually changes.

### Architecture & Code Quality

  • Proper use of PacketByteBufs.create() throughout**
  • Eliminates manual buffer lifecycle management and potential leaks.

  • Added SLF4J/Log4j logging** (MainMod.java)
  • Replaced RuntimeException server crashes with LOGGER.error() for inventory desync events.

  • Backward compatibility for old NBT saves**
  • Old PC cases placed in the world before this update will still load correctly thanks to dual-key reading in EntityPC constructor.

# Changelog

## [1.4.15-1.20.1-fabric] - 2026-04-08

### Added
  • Ported the mod to Minecraft **1.20.1**.
  • Full support for **Fabric Loader**.
  • Updated to **Java 17**.

### Changed
  • Updated all dependencies to be compatible with 1.20.1 (Fabric API, Yarn mappings).
  • Refactored rendering logic to comply with modern Minecraft rendering standards.
  • Updated entity interaction logic to ensure compatibility with 1.20.1.
  • Integrated ShadowJar for better dependency management and to resolve class loading issues (e.g., CatalogManager).

### Fixed
  • Fixed GUI rendering issues that were present during the porting process.
  • Fixed an issue where the PC editing menu would not open when interacting with components.
  • Resolved various runtime compatibility errors related to Java 17 and relocated libraries.

## Development Plans (Branches)

Three main development branches have been defined for the project:

1. **Deprecated**:
  • Contains already released versions and versions that have become obsolete for any reason (critical bugs, etc.). Github current branches will/are marked as deprecated, please don't use them.
2. **Port/Rewrite**:
  • Port of the original mod and its refinement as intended by the original author.
  • Versions: **1.x.x**.
3. **Reimagining**:
  • Personal ideas, custom components, new devices, and expanded functionality.
  • Versions: **2.x.x**.


## VM Computers Forge 1.20.1 Beta

This is a beta port of VM Computers for Forge 1.20.1.

### Working
  • Initial setup and saved setup flow
  • VirtualBox support
  • VMware Workstation support
  • VM screen rendering
  • Keyboard and mouse input
  • Config save/load via setup.json

### Fixed in this beta
  • VirtualBox JAXB/JAX-WS crash on Forge
  • vboxwebsrv startup issues
  • setup flow resetting incorrectly
  • missing config/path creation
  • Connector/cache conflicts with old builds
  • blank VM screen while VM was running
  • VirtualBox session lock issues
  • VMware startup with old .vdi disks
  • missing keyboard input in VMware
  • missing VMware setup text

### Known limitations
  • VMware is still experimental
  • VMware may create a separate -vmware.vmdk from an existing .vdi
  • VirtualBox and VMware disks may not stay in sync in that case
  • Tested mainly on Windows 11, Prism Launcher, and Forge 1.20.1

### Recommended
  • Use VirtualBox for the most stable experience
  • Use VMware as a beta/experimental backend for now

### Bug reports
Please include:
  • latest log
  • whether you used VirtualBox or VMware
  • whether the disk was .vdi or .vmdk
  • whether it happened on first setup or a later restart

# NEW VM COMPUTERS 1.5 UPDATE
## Changelog:
1. VMware support
2. First steps to make mod work on linux/mac os
initial release, requires virtual box v6.1.x
*NEW* VM computers Icon
Download *NEW* VM computers
Select game version
Select platform