Enterprise Virtualization in Minecraft

=Problem Definition= Currently, unmodded Minecraft has no way to connect to a remote machine directly. If you want to manage the Minecraft server or perform any other actions on another machine, you have to leave the Minecraft window and use another software tool entirely to issue your commands.

=Background= The goal of the project is to create a Minecraft mod that will integrate remote VM software directly into the gameplay of Minecraft. This will allow you to open a connection to a virtual machine and issue commands to it remotely, all without leaving Minecraft.

=Deliverables= A fully functional Minecraft mod that can be installed on Minecraft version 1.15.x. This mod will grant the ability to log in and create a remote desktop connection to a remote machine, all within the game of Minecraft.

=Specifications= Must have Minecraft Version 1.15.x installed on your computer before attempting to use VMCraft. You must also install "virt-viewer" on your machine and add it to your PATH variable. This is the software that enables the mod to handle remote desktop connections.

=Value Proposition Statement= Although Minecraft mods to provide virtualization do exist, they currently focus on locally hosted virtual machines and lack the versatility to be useful at enterprise scale. The ability for a platform-agnostic mod to connect to remote hosts using standard protocols will provide much utility that current mods cannot. We plan to implement this mod with an emphasis on versatility so that users are limited only by the limitations of the virtual machine, rather than by the mod functionality as well.

=Design Considerations= This mod should be able to connect to a virtual machine hosting any operating system. In order to support this, we will attempt to implement it in a way that is platform agnostic. As long as the host operating system is capable of running software that uses common protocols for a remote desktop connection, VMCraft should be able to connect to it. For this reason the mod now supports two different kinds of protocols, VNC and Spice.

=Project Learning= In order to create the project, we have decided to use the program known as Minecraft Forge. Each team member needed to install this software and become familiar with its use. We will also needed to become familiar with different types of virtual machines, as well as remote desktop connection protocols.

=Conceptual Development= The first thing we needed to decide on in order to proceed was what version of Minecraft we would be using. We decided to use Minecraft version 1.15, as this was the most up-to-date at the start of the project. We also knew that Minecraft updates frequently and that the updates are often quite destructive, so we made the conscious decision ahead of time that we would not try to keep up with the Minecraft updates throughout the year. Otherwise it could frustrate development and slow down our progress. Next, we decided to make use of Minecraft Forge to handle our development of the mod. Minecraft Forge is a flexible software designed specifically for modifying Minecraft, and handles many of the small issues of modding for us. It also has a large userbase and is carefully maintained by members of the Minecraft community. The next consideration we worked on was the functionality of the mod. Our team easily reached an agreement that we would add a new craftable block, one that would open a GUI for maintaining connections. More on this in the Final Design section below. Once we had the new craftable block added, we needed to consider how our mod would handle the connection to a remote machine. We decided that a remote desktop connection would be the most powerful, and that it would be a solid choice to support both the VNC and Spice protocols for remote desktop connection. VNC and Spice are two of the most widely used protocols for remote desktop connections. We also decided to use a software called "virt-viewer" for hosting the remote desktop connections. Virt-viewer natively supports both VNC and Spice, as well as working on all popular operating systems. Once virt-viewer was working, we were able to test it on a local virtual machine rather easily. But in order to test on a remote virtual machine, we decided to set up one on a professional server. If we connected to that, you could surely connect to anything with VMCraft. Microsoft Azure kindly offers a limited amount of free server time for students, and so we took advantage of this and connected to an Azure virtual machine with VMCraft.

=Final Design= The final design of VMCraft includes a craftable laptop block, an in-game interface for entering connection information, and support for a remote desktop connection. The crafting recipe for a laptop includes four iron ingots, a glass pane, two redstone dust, a redstone torch, and a comparator. These materials are not trivial, but if you really do need to connect to a virtual machine in short order, you could always spawn one using creative mode. The next part of our final design was the laptop block. At first, we added a placeholder block to minecraft that was just a black block with '>' symbol on it. However, we decided to make it a bit nicer and created a sleek-looking laptop block with the windows background on it. Although the windows background did have to pixelated quite a lot. The last thing that was added to VMCraft was the Graphic User Interface. It went through a couple different versions as we figured out what we needed, but the final product is an interface with fields for host, port number, username, and password. There is also a button that toggles between VNC/Spice protocols, and a button for finishing the connection and for closing the window.

=Validation= In order to verify that VMCraft is working properly, we set up two machines. The first machine was our local machine, which was a Windows machine that had the build version of VMCraft installed and working on it. The second machine was a Linux virtual machine being hosted remotely by Microsoft Azure. Within the game of Minecraft, we set up a laptop block and used it to initiate a connection to the remote machine. The connection was successful and it set up a remote desktop connection, which we used to affect changes in the remote machine. This is how we were able to validate that not only does VMCraft successfully set up remote connections, it can do so across different operating systems.

=Team Members= Blake Rude Graeme Holliday Nathan Zander