NetworkCraft

The NetworkCraft project is a mod for Minecraft built upon the OpenComputers mod. Our goal is to expand the networking capabilities of the existing mod to mirror real TCP/IP networks and to visualize these networks in a way that helps teach these concepts.

=Problem Definition= Develop a Minecraft Mod that enables realistic modeling of TCP/IP networks and their control

Background
Minecraft is a 3D/VR game that enables the creation of complex virtual worlds. Mods enable modifying Minecraft. There are 1000s free of mods, i.e.: Animals, Armor, Sims-style, Mechanics, Flight Simulators. There are several mods for energy and mechanics, and a couple that simulate computing: Computer Craft and Open-Computers. However, these do not model computer networks and their control and security in a way that is realistic enough to enable quality research and education in TCP/IP based networks and cyber security using 3D worlds and VR

Value Proposition
Teaching and researching networking concepts can be a big investment. A person would need to buy the hardware required to create a test network and have the space to set it up. Our project will be able to make this process easier, by eliminating the need for hardware and simulating networks in the video game Minecraft. This is also an improvement, as it can be more approachable to students just starting to learn about computing, can also reduce the risk of security issues involving allowing students access to network security tools, and eliminates the need for a large physical space designated for the computer network.

Product Requirements
Functional Requirements Software Requirements Regulatory Requirements
 * The user shall not be required to install any mod other than NetworkCraft
 * The mod shall modify the OpenComputers mod to enable teaching/learning of TCP/IP Networking
 * The mod shall be capable of being hosted on a Minecraft server
 * The mod shall simulate TCP/IP Network Configuration
 * The mod shall simulate Network visualization, including improper network configuration visualization.
 * The mod shall allow the user to use VR gear or mouse and keyboard to interact with the game
 * The mod shall be distributable with an MIT license
 * The mod shall be distributable under an open source mentality

Design Validation
=Project Learning=

OpenComputers
OpenComputers is a Minecraft mod that simulates computers in a very realistic way. The user can build their own computer and create programs to help them in game. This serves as a great starting point for our project, as it is detailed and has networking capabilities that our customer is looking for in our project. A video showing a small example of a OpenComputers network can be seen here: https://www.youtube.com/watch?v=vCjmG1ZNWGo

OpenComputers is a mod with 20+ contributors. The project is 123,000+ lines of code (64% Scala, 21% Lua, 15% Java). Time will have to be spent creating class diagrams of the systems involved with our intended changes in order to understand where changes need to be made.

Project Structure
Diagramming the project layout and system configuration is the first step in understanding the project.



Java, Scala, and Lua
The mod is currently written with 2 languages, Java and Scala, with Lua being the language that the user uses to program their computers. We will need to make sure we create our own code that inherits from the existing code, as to not create any new problems that could arise with other parts of the mod that we do not wish to change. The Java portions of code act as a way for Minecraft to interact with a mod, or an API. The Scala potion of code are what drives the actual content of the code. Lua scripts will also need to be created so that the user can program the computers with the new network capabilities.

Network Addressing
Currently, the mod uses a UUID network address for its computers.This format is alphanumeric, and is designed to always be unique, for example: 123e4567-e89b-12d3-a456-426655440000. This does not reflect what our client would like, as they want the mod to use the TCP/IP format, which looks like this: 192.168.0.1 This format is widely used in the real world, and if implemented will add greater realism to the current mod.

Minecraft Modding
Modding Minecraft is somewhat easy to do. A tool called Minecraft Forge allows anyone to add a compiled mod to Minecraft easily. Once we complete significant milestones in coding, we can test and make sure that our mod will continue to work with Forge.

A goal of this project is to make the mod as easy to install as possible, to avoid issues with usability. The goal is for this to be simple to use and install, to allow anybody from any familiarity with modding Minecraft to install and use the mod.

This mod is intended to be used in conjunction with another mod currently being developed involving power systems. The goal will be to join these two mods together to create a mod that allows controlling of power systems with TCP/IP networking and other similar situations.

=Schedule= Team NetworkCraft is using the Agile development process for project scheduling. This means every week, the team meets and evaluates the current state of the project. The team will then set goals that should be completed by the next meeting. Our plan for next semester is to start development on our programs needed for the mod and to keep a high level of documentation of all our programs and progress. =System Architecture= This is a UML diagram of the classes associated with the networking stuff only. The blue boxes are proposed changes that we want to make, and where we would put them. We expanded on the already existing network cards and networks to create IpNetworks. While the name doesn’t convey this, MAC addressing is also handled by this network too. Once these networks were added, you simply just use a new item we made that is the same as the other network card, except it uses IpNetworks instead. Using some new functions provided by this card: These functions were all added to allow the user to customize the computers on the network however they want. This helps with the Network simulation and configuration requirements.
 * sendViaIp(address, port, data): sends data to given address, along specified port.
 * receiveIpAddress: Ask the network for an assigned IpAddress
 * setIpAddress(address): sets the ip address to given value
 * setMacAddress(address): sets MAC.
 * etc.

=Future Work= Firstly, finishing the areas we were unable to. Properly develop a working installation guide for the mod and follow test case procedures for ensuring it works. Then implement visualization stuff to allow users to see where they configured the network wrong.

Then, working to create plugins to let this mod interface with its sister mod, Electrical Age, is one of the end goals for this project. There are plenty of examples of this in

We estimate with a group focused on the project, given some familiarity with Java, it would fit in a two-semester project for a group to implement visualization and work with compatibility of the sister mod. 3 people seems excessive. Ideally,two interested/knowledgeable on visualization and Java.

=Team Information= Customer: UI CoE: Daniel Conte de Leon (CS)

=Document Archive= Many documents will be hosted on a private GitHub repository. This can be found at: https://github.com/IrishTunn/NetworkCraft