24
Minecraft An Introduction Copyright © 2015 – Curt Hill

Minecraft An Introduction Copyright © 2015 – Curt Hill

Embed Size (px)

Citation preview

Page 1: Minecraft An Introduction Copyright © 2015 – Curt Hill

Minecraft

An Introduction

Copyright © 2015 – Curt Hill

Page 2: 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

Page 3: Minecraft An Introduction Copyright © 2015 – Curt Hill

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

Page 4: Minecraft An Introduction 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

Page 5: Minecraft An Introduction 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

Page 6: Minecraft An Introduction 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

Page 7: Minecraft An Introduction 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

Page 8: Minecraft An Introduction 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

Page 9: Minecraft An Introduction 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

Page 10: Minecraft An Introduction 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

Page 11: Minecraft An Introduction 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

Page 12: Minecraft An Introduction 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

Page 13: Minecraft An Introduction 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

Page 14: Minecraft An Introduction 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

Page 15: Minecraft An Introduction 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

Page 16: Minecraft An Introduction 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

Page 17: Minecraft An Introduction 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

Page 18: Minecraft An Introduction Copyright © 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

Page 19: Minecraft An Introduction Copyright © 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

Page 20: Minecraft An Introduction Copyright © 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

Page 21: Minecraft An Introduction 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

Page 22: Minecraft An Introduction Copyright © 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

Page 23: Minecraft An Introduction 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

Page 24: Minecraft An Introduction 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