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
==Deliverables==
===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.
==Specifications==
===Product Requirements===
Functional 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
Software Requirements
* 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
Regulatory Requirements
* The mod shall be distributable with an MIT license
* The mod shall be distributable under an open source mentality
===Design Validation===
Requirement 	Test
TCP/IP addresses for networking computers in the mod	View that all UUID's have been changed to IP addresses
Usable for end users 	Ask people who have not used this mod to rate the difficulty of using the mod
Visualization of Networks 	Use a variety of test networks and verify they are properly visualized
Network switches are configurable 	Verify that all configurations are able to be used appropriately for network switches
Network routers are configurable 	Verify that all configurations are able to be used appropriately for network routers
Visualization of Network problems 	Use a variety of test networks with a certain problem and verify hat the problem is correctly found
Able to work with common VR devices 	Verify that our project does not interfere with the normal VR capabilities of Minecraft
=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.
File:NetCraftCurrentSchedule.PNG
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:
*	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.
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.
=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)
	Team Member 	Information
	Nick Avery 	Hometown: Idaho Falls, ID
Major: Computer Science
Graduation Date: May 2019
Future Goals: Would like to create interactive programs that help visualize data and teach concepts.
Email: aver8754@vandals.uidaho.edu
	Baylus Tunnicliff	Hometown: Moscow, ID
Major: Computer Science
Graduation Date: July 2019
Future Goals: Hope to be working on a start-up upon graduating. Hope to work with Artificial Intelligence someday.
Email: tunn4356@vandals.uidaho.edu
=Document Archive=
Many documents will be hosted on a private GitHub repository. This can be found at: https://github.com/IrishTunn/NetworkCraft