minecraft an introduction copyright © 2015 – curt hill
TRANSCRIPT
Minecraft
An Introduction
Copyright © 2015 – Curt Hill
Copyright © 2015 – Curt Hill
Introduction
• A curious phenomenon!• A game with many modes• It trades good graphics for in-
character environment creation• May be played by very young but
still has interest for the mature
History• Original developer was Markus
Persson in 2009• Inspired by several previous
games that it was transcended• Mojang was the owning company• Purchased by Microsoft for 2.5
billion dollars• Is available on PCs, Macs, Android,
iPad, XBox, PlayStation and numerous other platforms
Copyright © 2015 – Curt Hill
Characteristics
• Open world type • First or third person• Several modes of play
– Survival– Creative– Adventure– Spectator– Demo
• Single and multiple player
Copyright © 2015 – Curt Hill
Modes
• Survival mode – Scavenger hunt to gather resources– Creating tools is part of game
• Creative – Create environments and objects– None of the limits of survival mode
• Adventure – Set down in a created world – Author limited creation and
destruction Copyright © 2015 – Curt Hill
Java• Minecraft is a game that is
completely written in Java• This is both good and bad• The Good
– Nearly platform independent– Lots of Java programmers– Decompilable
• The Bad– Somewhat slower– Decompilable
Copyright © 2015 – Curt Hill
Decompilable
• The decompiler has been a dream in CS for decades
• It takes an executable and produces the high level language that produced it
• In general this is a dream that cannot be done
• However, in Java it is possible
Copyright © 2015 – Curt Hill
What makes Java different?• There is only one compiler
– Makes it easy to see characteristic code constructions and infer what caused them
• Each class must be in a file that has the same name– Even when packed into a jar file
• The reflection feature – ability to examine and modify the
structure and behavior of an object at runtime
Copyright © 2015 – Curt Hill
Reflection Again• Reflection gives us the ability to ask
a class if it has a particular method• It also allows us to call that method• To look for methods not knowing if
we will find them and execute them if we do:String s = …Method mthd = foo.getClass() .getMethod(s, null);method.invoke(foo, null);
• We did not know what the name was until we found it
Copyright © 2015 – Curt Hill
Good and Bad?• The decompilability issue is both good
and bad• For the owners their code is exposed
– They are somewhat protected by copyright
– Derived code could be disguised and marketed by a competitor
• For the modders we can change anything– More power than in most modifiable
games
Copyright © 2015 – Curt Hill
Obfuscation• The owner’s answer is obfuscation• The word means to confuse or
disguise• The process generally involves:
– Transforming the names into meaningless ones
– Refactoring classes– Reorganizing flow of control
• To be useful in this case it must be done and undone by program
Copyright © 2015 – Curt Hill
Process• The author’s need to be able to
write, debug and maintain code in its original, highly understandable form
• They then obfuscate by program• The new Java code should execute
in a functionally equivalent way– A bug reported in the production code
should also be present in the pristine code
– Otherwise it is a obfuscation bug
Copyright © 2015 – Curt Hill
The Modder’s Problem
• How can we alter this obfuscated code?
• Someone has figured this out – There is a de-obfuscator that restores
reasonable names
• The MCP toolkit and Minecraft Forge has the tools needed to de- and re-obfuscate as well as decompilers– Neither of these are officially
connected to Mojang
Copyright © 2015 – Curt Hill
Relationship• Recently Mojang has been rather
cooperative with the modders• In Curt’s Occasionally Humble
Opinion they have legal grounds to eliminate these people or at least harass them enough to make it not worth while– They have chosen not to do so– This is likely that the modding
community has increased rather than decreased revenues
Copyright © 2015 – Curt Hill
Java Again• Recall that Java has dynamic binding• When a method call is executed for
the first time the class file is loaded from disk or elsewhere– It did not have to be in memory before
the call
• This allows objects to be dynamically loaded into memory without the program knowing anything about it before it started
Copyright © 2015 – Curt Hill
Structure of the Game• Like many multi-player games
there are two main components– A server– A client
• Both are Java programs and are subject to our change
• They communicate using packets over the internet
Copyright © 2015 – Curt Hill
Client and Server• The client is interested in three
main things:– Catching and interpreting keyboard
commands– Displaying the current scene on the
monitor– Communicating with the server on
what is going on
• The server is the communications relay– What has been reported by any client
is reported to all the restCopyright © 2015 – Curt Hill
Infinite Loops• The client stays in an infinite loop• The goal is to go through the loop
20 times a second– This is a tick
• The tick based items include updates to the world – Communication to and from the server– Monitoring the keyboard/mouse
• Rendering is not tick based• All the server processing is tick
basedCopyright © 2015 – Curt Hill
Client Again• The Minecraft client is actually
somewhat more than that• A server was integrated into the
client– This facilitates group play on a LAN
• Thus there are two programs– The server without the client (stand
alone or dedicated)– The client with the server
• We also have the issues of proxiesCopyright © 2015 – Curt Hill
Proxies• Code in a mod could run in two
places: the integrated server (part of the client) or the stand alone server
• If this code references code in the client then one of two things can happen:– In the integrated server all is good– In the stand alone server it crashes
• We thus need classes with different methods depending on the location
Copyright © 2015 – Curt Hill
Proxies Again• A typical solution is to have a
common proxy– This determines the needed method
signatures
• We take derivations of this for the server proxy and client proxy
• An annotation will show the system which one to load
• Usually client and server have same signatures but do different things– A rendering method would be empty on
the serverCopyright © 2015 – Curt Hill
Classes
• Minecraft is largely constructed from a few classes
• Most of these classes have many derivations
• In this presentation we will mention them
• Other presentations will discuss them more fully
Copyright © 2015 – Curt Hill
Classes• Block
– Describes how to draw and how it reacts to events (behavior)
• Item– Anything that a player can carry such
as a sword
• Entity– Anything that can move around
• TileEntity– Used when more data than a block is
needed
Copyright © 2015 – Curt Hill
Finally
• Plenty of more to consider• Licenses• Establishing the forge environment• Creating a simple mod• Lots more
Copyright © 2015 – Curt Hill