Jump to content
Sign in to follow this  
Sanguin

The Minecraft Hacked Client Guide

Recommended Posts

Sanguin

So First off i have no idea where to put this so ive just putn it here :P.

If u find any grammar mistakes you can have em

also me and my fellow programing comrades from NGSoftwork (NoGuiSoftworks) are mostlikely to not implement a gui so as sayd it just gonna have basic show of options ingame but youll gonna see that later.

Maybe i am adding a lil better ui later but for the start i just gonna show the basic stuff

Also i think i will be adding the pictures later so i just index them here

Aaand im to lazy and exhausted to explain every single codesnippet so i just paste them here and let you guys have some fun extending them or creating new ones or or or (but if u ask very friendly on any voip program i am currently using and ive got the time to explain it to you i will ;))

 

Requirements:

Please login or register to see this link.

Please login or register to see this link.

Please login or register to see this link.

Please login or register to see this link.

Basic Java or anyother programming knowledge

 

(Just Install the JDK and Eclipse)

 

First Step:

The First thing u gotta do is setting up mcp.

How u do diz u might asking

Its actualy rather easy.

just put the unzipped mcp files in a folder.

 

Now you run:

Cleanup.bat then

Updatemcp.bat then

Decompile.bat then

 

Now after a while the Client should be decompiled.

(Could be that mcp throws errors while decompiling the server source but we dont need that)

 

Second Step:

Now you start Eclipse

It should ask where to start:

you direct him to the "/eclipse" folder in the mcp folder

Then Eclipse will load...

Now it should be looking like this

LOOK HERE FOR PICTURE NUMBER 1

The Server source can be deleted.

 

So after elapsing client and src now where gonna create a new where gonna create a new Class

LOOK HERE FOR PICTURE NUMBER 2

were gonna call the package PiratePerfection and the name Client

LOOK HERE FOR PICTURE NUMBER 3

Hit Finish and let it create the package

Now you should see a fresh page with these three lines of code

package PiratePerfection;

public class Client 
{
	
}

This is the main File of our Client.

Now were gonna Create a String for the Name of the Client

We do that by adding between the curly brackets

public String CLIENT_NAME = "PiratePerfection";

(i hope teh Captin will be fine with me using this name :o)

also were wanna add the Version of the Client

were doing that by adding

public int CLIENT_VERSION = 1;

so what next u may ask.

were going to add a function that starts the client

	public void startClient()
	{
		
	}

Now were going to create a instance of the client by adding

public static final Client PP = new Client();

so after weve done that we can save and close this file

whiche should look like this

package PiratePerfection;

public class Client 
{
	public String CLIENT_NAME = "PiratePerfection";
	
	public int CLIENT_VERSION = 1;
	
	public static final Client PP = new Client();
	
	public void startClient()
	{
		
	}
}

 

now were going to create the base for our client.

make a new class with the package set to PiratePerfection.module and the name Module

all modules were creating will extend this class.

so were going to add a String for the name

private String moduleName;

the bind of the Module,

private int moduleBind;

but before adding the category there,

were going to create a new Enum in the same Package with the Name Category

LOOK HERE FOR PICTURE NUMBER 4

in this enum were going to add:

COMBAT, WORLD, RENDER, PLAYER, OTHER;

save and close this tab.

back in the module tab were now going to add a variable for the Category of the mod by adding:

private Category moduleCategory;

and to also were adding a boolean to check if the mod is toggled

private boolean isToggled;

after that were going to add a constructor

	public Module(String moduleName, int moduleBind,Category moduleCategory)
	{
		
	}

so to set the fields at the top (moduleName, Bind,Category) as parameters were going to add in this constructor

		this.moduleName = moduleName;
		this.moduleBind = moduleBind;
		this.moduleCategory = moduleCategory;

Now were going to create some getters for the fields. to do that were going to add a Constructor:

	public String getName()
	{
		return this.moduleName;
	}

and another Constructer:

	public int getBind()
	{
		return this.moduleBind;
	}

and:

	public Category getCategory()
	{
		return this.moduleCategory;
	}

aaaand:

	public boolean getToggled()
	{
		return this.isToggled;
	}

now were creating three methods that are getting called:

	public void onToggle(){}
	
	public void onEnable(){}
	
	public void onDisable(){}

and now were creating some handlers that handle stuff :D

first of the handler for toggling a module

	public void setToggled(boolean shouldToggle)
	{
		this.onToggle();
		if(shouldToggle)
		{
			this.onEnable();
			this.isToggled=true;
		}else{
			this.onDisable();
			this.isToggled=false;
		}
	}

then were going to create a method to toggle the module

	public void toggleModule()
	{
		this.setToggled(!this.getToggled());
	}

now were going to set the bind with:

	public void setBind(int newBind)
	{
		this.moduleBind = newBind;
	}

now the module class should look like this:

package PiratePerfection.module;

public class Module
{
	private String moduleName;
	
	private int moduleBind;
	
	private Category moduleCategory;
	
	private boolean isToggled;
	
	public Module(String moduleName, int moduleBind,Category moduleCategory)
	{
		this.moduleName = moduleName;
		this.moduleBind = moduleBind;
		this.moduleCategory = moduleCategory;
	}
	
	public String getName()
	{
		return this.moduleName;
	}
	
	public int getBind()
	{
		return this.moduleBind;
	}
	
	public Category getCategory()
	{
		return this.moduleCategory;
	}
	
	public boolean getToggled()
	{
		return this.isToggled;
	}
	
	public void setToggled(boolean shouldToggle)
	{
		this.onToggle();
		if(shouldToggle)
		{
			this.onEnable();
			this.isToggled=true;
		}else{
			this.onDisable();
			this.isToggled=false;
		}
	}
	
	public void toggleModule()
	{
		this.setToggled(!this.getToggled());
	}
	
	public void setBind(int newBind)
	{
		this.moduleBind = newBind;
	}
	
	public void onToggle(){}
	
	public void onEnable(){}
	
	public void onDisable(){}
	
}

now we can save and close this tab.

Now we need to hook our client by accessing the main minecraft class (whiche is under net.Minecraft.client (the Minecraft.java))

now were going to find the method startGame by hitting ctrl+f and searching for "startGame"

now weve found this function were going to scroll down until 

 this.renderGlobal.func_174966_b();

(at the bottom of the function)

right above this were going to add a comment were going to add a todo by typing

//TODO: PiratePerfection

and now were going to add a line of code that calls the startClient function by writing under the lil todo:

Client.PP.startClient();

(if anything on the lines you add throws errors you first hit ctrl+shift+O (which is the magic keybind to import anything that is needed but not imported yet). bear that in mind)

now weve finished step two u can actually test it (but it wont do anything abnormaly due to the fact weve havent add anything ;P) by pressing the lil play button right besides the spider

 

Third Step:

In this step were going to create some mods.

But before we can create modules for our client we have to make some work.

so now were going into the package PiratePerfection.module and there were going to create a new class whiche we give the name ModuleManager.

in this class were going to make an arraylist whiche includes the modules.

we do that by typing

public ArrayList<Module> activeModules = new ArrayList<Module>();

this line will give a error with arraylist but do you remember the magic keybind ctrl + shift + O?

just hit that and it should import arraylist and tada no errors.

Now were going to add a Constructor for the Module Manager:

public ModuleManager()
 
{

}

so now we can save and close this tab.

Now were going back to our main client class (the Client.java in the package PiratePerfection)

in there were going to create an instance of the module manager by typing:

public ModuleManager moduleManager;

to initialize this instance were going to write in the startClient method:

this.moduleManager = new ModuleManager();

now we can save and back out of our client class.

Now we have to create some more Events in our Module class (PiratePerfection.module)

whiche are:

public void onUpdate(){}

and

public void onRender(){}

now we can save and exit the module class.

After that were going to hook up the events we have just now created.

in order to do that were going into the EntityPlayerSP class (net.minecraft.client.entity)

Were going to hit ctrl + f and search for the method "onUpdate".

now you should see the line:

super.onUpdate();

were putting our TODO above it:

//TODO: PiratePerfection

(btw these todos will help updating. the extra classes were make can get imported but the things we write into the minecraft source cannot get imported so we add a todo to find it faster what weve added)

Now were adding under our todo these lines of code:

for(Module eventModule : Client.PP.moduleManager.activeModules)
{
    eventModule.onUpdate();
}

So what these lines do?

it cicles throu all the modules weve declared in the arraylist we have created and call the onUpdate function on them.

now weve hooked up the onUpdate event we can save and exit the EntityPlayerSP class

Now were going to hook the onRender event:

In the Class EntityRenderer (net.minecraft.client.renderer) were going hit ctrl + f and search for ""hand"" (in the search youre not going to type ""hand"" youre going to type "hand" the outer qoutationmarks are just there for showing the search parameter)

this.mc.mcProfiler.endStartSection("hand");

now this line should come up.

right under this line were going to add an todo

//TODO: PiratePerfection

and under that were going to type:

for(Module eventModule : Client.PP.moduleManager.activeModules)
{
	eventModule.onRender();
}

what does this do?

it does like the same thing as above but it is calling the onRender function of the Modules.

Now we can Save and exit the EntityRenderer class.

Now we need to hook up our binds

were doing that by opening the main Minecraft class (net.minecraft.client)

were going to search for "getEventKey".

now we scroll a bit until we find a list of if statements

it should kinda or partly looks like 

if (var1 == 1)
{
    this.displayInGameMenu();
}

if (var1 == 32 && Keyboard.isKeyDown(61) && this.ingameGUI != null)
{
    this.ingameGUI.getChatGUI().clearChatMessages();
}

so now were going to add our todo right above the if(var1==1) statement

//TODO: PiratePerfection

and under the todo comment were going to add:

for(Module eventModule : Client.PP.moduleManager.activeModules)
{
	if(Keyboard.getEventKey()== eventModule.getBind())
    	eventModule.toggleModule();
}

what this does?

when a key is pressed it cicles throu all our active module (whiche we will add to the arraylist) and looks if the pressed key is the keybind weve declared.

save and exit this tab.

 

after all this is hooked up we can start creating mods.

were going to start with flight and Sprint

so what are we doing?

we are create a new class with the package name PiratePerfection.module.modules and with the name Sprint

this module is going to extend the module class so the line of code:

public class Sprint{

}

looks like:

public class Sprint extends Module{

}

(dont forget to hit the magic key combination)

now eclipse will give a error with sprint. just hover the mouse above it and then a popup will come wiche says Add Constructor Sprint(String,int,Category)

were going to click that.

now we get rid of some of the autogenerated stuff so it looks like:

public Sprint() {
	super(moduleName, moduleBind, moduleCategory);
}

now we replace the moduleName with the module name we want:

the moduleBind with the Bind and moduleCategory with the Category

for example it looks like this:

public Sprint() {
	super("Sprint", Keyboard.KEY_R, Category.PLAYER);
}

(the module name is Sprint the bind is the key R and the Category is Player)

now were going to add the event on Update:

public void onUpdate()
{
    
}

so in this were going to add an if statement to check if the module isnt toggled, by adding:

if(!this.getToggled())
    return;

now under this were going to create some querys:

if(!(Minecraft.getMinecraft().thePlayer.isCollidedHorizontally) && !(Minecraft.getMinecraft().thePlayer.moveForward == 0.0F))
{
    
}

so what this says u may ask?

first it checks if youre running into a wall and secondly it checks if youre moving Forward.

when you not run into a wall and youre not have a forward movement of 0 it does whatever is between the curly brackets.

(btw these querys prevent you from being detected by some Please login or register to see this link.  some server admins have installed (there are more than this one and im pretty sure big servers like hive or gommehd have their own anticheat))

So now we add between the curly brackets:

Minecraft.getMinecraft().thePlayer.setSprinting(true);

now we can save and exit this tab.

 

after we done this were going to create  a class in the package PiratePerfection.module.modules with the name Flight.

now were going to do the same things as above (extend Module, add constructor, remove autogenerated stuff, set you own stuff(i will add the whole source here after i sayed what to do exactly))

now were adding our onUpdate event:

public void onUpdate()
{
    
}

check if the mod is enabled:

if(!this.getToggled())
    return;

and then add a line of code that set the player flying:

Minecraft.getMinecraft().thePlayer.capabilities.isFlying = true;

and after that were going to create another event called onDisable

public void onDisable()
{
	
}

in whiche we say:

Minecraft.getMinecraft().thePlayer.capabilities.isFlying = false;

now you may ask why we dont add the isFlying = true into the event onEnable it is because this dont happen normaly so it have to be constantly saying ur flying, also if you landing on the ground you normaly stop flying... but the mod would be still enabled and that isnt good :D.

the whole code:

package PiratePerfection.module.modules;

import net.minecraft.client.Minecraft;

import org.lwjgl.input.Keyboard;

import PiratePerfection.module.Category;
import PiratePerfection.module.Module;

public class Flight extends Module{

	public Flight() {
		super("Flight", Keyboard.KEY_F, Category.PLAYER);
	}
	
	public void onUpdate()
	{
		if(!this.getToggled())
			return;
		Minecraft.getMinecraft().thePlayer.capabilities.isFlying = true;
	}
	
	public void onDisable()
	{
		Minecraft.getMinecraft().thePlayer.capabilities.isFlying = false;
	}

}

 now we can save and exit this tab and go into the moduleManager class (PiratePerfection.module)

and import everything from the modules packages by adding under the other import:

import PiratePerfection.module.modules.*;

and in the modulemanager method were going to add our Modules by adding the two lines:

this.activeModules.add(new Sprint());
this.activeModules.add(new Flight());

so the whole class should look like this: 

package PiratePerfection.module;

import java.util.ArrayList;

import PiratePerfection.module.modules.*;

public class ModuleManager 
{ 
	public ArrayList<Module> activeModules = new ArrayList<Module>();
	
	public ModuleManager()
	{
		this.activeModules.add(new Sprint());
		this.activeModules.add(new Flight());
	}
}

now save and exit this tab.

You wanna test it what you just coded dont you? i agree. lets hit the play button right besides the spider after a while minecraft will pop up and you can connect to the mcpworld (Singleplayer -> mcpworld -> play selected world).

now when you hit f you will fly and when you hit r and u move forward u will run.

In the next Step i will show u how to integrate a basic ui and add some more mods.

 

Fourth Step:

So In this step were going to create a basic ui using the stylesheet minecraft provides so we dont have to import external librarys.

So leeeets begin:

were going to create a new class in with the Package name PiratePerfection.ui and with the name UIRenderer.

Were just going to create one Method with the name renderUI

public static void renderUI()
{
	
}

now we need to hook this method up.

to do that were going to open the GuiIngame class (net.minecraft.client.gui)

were going to search for "if (this.mc.gameSettings.showDebugInfo)" right above this query were going to add our lil TODO and under this todo were going to add:

GL11.glPushMatrix();
UIRenderer.renderUI();
GL11.glPopMatrix();

now we can save and exit this tab.

 

Back in the UIRenderer class we write into the method renderUI

Minecraft.getMinecraft().fontRendererObj.drawString(Client.PP.CLIENT_NAME + " v" + Client.PP.CLIENT_VERSION, 2, 2, 0xFF0000);

this will render the Clientname and the version in red into the ingame screen.

Minecraft.getMinecraft().fontRendererObj.drawString(String, int, int, color)

is the function i am using.

the String is for the message were going to output, the two ints are for the position on the screen and the color is for the color.

 

now were going to add a new method (over the renderUI method) to render the Array list of the modules we have to the screen

private static void renderArrayList()
{
	
}

now were have to initialize a variable:

int yCount = 16;

and for cicling throu all the active modules were going to create a for loop

for(Module arrayModule : Client.PP.moduleManager.activeModules)
{
    
}

Okay now lets think of a basic ui... how about printing the Bind the name and wether or not if the module is activated.

so first were going to add a query to look if it is sth. that shouldnt be rendered (to do this we have the Category OTHER)

if(arrayModule.getCategory()==Category.OTHER)
	continue;

So this checks if the category of the module is equal to the category of other, when it is its just gonna skip the rest of the code and continues with the next module.

So if you want to show the bind too you have to create another method for getting the bind (because getBind returns an int and you cant do much if there is 444: Flight or sth like that cant ya ;))

So were going to create a function that returns the Keybind as String.

i am not gonna explain it i just paste it here:

private static String getKey(int Key)
	{
		String Keystring;
		if(Key == Keyboard.KEY_0)
		{
			Keystring = "0";
		}else if(Key == Keyboard.KEY_1)
		{
			Keystring = "1";
		}else if(Key == Keyboard.KEY_2)
		{
			Keystring = "2";
		}else if(Key == Keyboard.KEY_3)
		{
			Keystring = "3";
		}else if(Key == Keyboard.KEY_4)
		{
			Keystring = "4";
		}else if(Key == Keyboard.KEY_5)
		{
			Keystring = "5";
		}else if(Key == Keyboard.KEY_6)
		{
			Keystring = "6";
		}else if(Key == Keyboard.KEY_7)
		{
			Keystring = "7";
		}else if(Key == Keyboard.KEY_8)
		{
			Keystring = "8";
		}else if(Key == Keyboard.KEY_9)
		{
			Keystring = "9";
		}else if(Key == Keyboard.KEY_Q)
		{
			Keystring = "Q";
		}else if(Key == Keyboard.KEY_Y)
		{
			Keystring = "Y";
		}else if(Key == Keyboard.KEY_X)
		{
			Keystring = "X";
		}else if(Key == Keyboard.KEY_E)
		{
			Keystring = "E";
		}else if(Key == Keyboard.KEY_C)
		{
			Keystring = "C";
		}else if(Key == Keyboard.KEY_R)
		{
			Keystring = "R";
		}else if(Key == Keyboard.KEY_F)
		{
			Keystring = "F";
		}else if(Key == Keyboard.KEY_V)
		{
			Keystring = "V";
		}else if(Key == Keyboard.KEY_T)
		{
			Keystring = "T";
		}else if(Key == Keyboard.KEY_G)
		{
			Keystring = "G";
		}else if(Key == Keyboard.KEY_B)
		{
			Keystring = "B";
		}else if(Key == Keyboard.KEY_Z)
		{
			Keystring = "Z";
		}else if(Key == Keyboard.KEY_H)
		{
			Keystring = "H";
		}else if(Key == Keyboard.KEY_N)
		{
			Keystring = "N";
		}else if(Key == Keyboard.KEY_U)
		{
			Keystring = "U";
		}else if(Key == Keyboard.KEY_J)
		{
			Keystring = "J";
		}else if(Key == Keyboard.KEY_M)
		{
			Keystring = "M";
		}else if(Key == Keyboard.KEY_I)
		{
			Keystring = "I";
		}else if(Key == Keyboard.KEY_K)
		{
			Keystring = "K";
		}else if(Key == Keyboard.KEY_COMMA)
		{
			Keystring = ",";
		}else if(Key == Keyboard.KEY_O)
		{
			Keystring = "O";
		}else if(Key == Keyboard.KEY_L)
		{
			Keystring = "L";
		}else if(Key == Keyboard.KEY_P)
		{
			Keystring = "P";
		}else if(Key == Keyboard.KEY_RSHIFT)
		{
			Keystring = "RShift";
		}else if(Key == Keyboard.KEY_NUMPAD0)
		{
			Keystring = "Num0";
		}else if(Key == Keyboard.KEY_NUMPAD1)
		{
			Keystring = "Num1";
		}else if(Key == Keyboard.KEY_NUMPAD2)
		{
			Keystring = "Num2";
		}else if(Key == Keyboard.KEY_NUMPAD3)
		{
			Keystring = "Num3";
		}else if(Key == Keyboard.KEY_NUMPAD4)
		{
			Keystring = "Num4";
		}else if(Key == Keyboard.KEY_NUMPAD5)
		{
			Keystring = "Num5";
		}else if(Key == Keyboard.KEY_NUMPAD6)
		{
			Keystring = "Num6";
		}else if(Key == Keyboard.KEY_NUMPAD7)
		{
			Keystring = "Num7";
		}else if(Key == Keyboard.KEY_NUMPAD8)
		{
			Keystring = "Num8";
		}else if(Key == Keyboard.KEY_NUMPAD9)
		{
			Keystring = "Num9";
		}else if(Key == Keyboard.KEY_RETURN)
		{
			Keystring = "Enter";
		}else{
			Keystring = "Undefined";
		}
		
		return Keystring;
	}

So congratz youve made it to the end of a long function ;D

 

So we have that we can make a check for if the module is toggled or not:

if(arrayModule.getToggled())
{

    
}else{

}

and in this function were going to write if it is toggled (the upper condition):

Minecraft.getMinecraft().fontRendererObj.drawString(getKey(arrayModule.getBind())+": "+arrayModule.getName(), 2, yCount, 0x00FF00);
yCount += 9;

and for any other condition (else) were going to write:

Minecraft.getMinecraft().fontRendererObj.drawString(getKey(arrayModule.getBind()) + ": "+arrayModule.getName(), 2, yCount, 0xFF0000);
yCount += 9;

so what does this does? its just looks whether the module is toggled or not and when it is toggled it renders the name in green on the screen and for any other condition whiche is most likely deactivated in red.

 

Last but not least were going to add a call to this function into the method renderUI so renderUI looks like this:

public static void renderUI()
{
	Minecraft.getMinecraft().fontRendererObj.drawString(Client.PP.CLIENT_NAME + " v" + Client.PP.CLIENT_VERSION, 2, 2, 0xFF0000);
	renderArrayList();
}

 

so it looks like this:

package PiratePerfection.ui;

import org.lwjgl.input.Keyboard;

import PiratePerfection.Client;
import PiratePerfection.module.Category;
import PiratePerfection.module.Module;
import net.minecraft.client.Minecraft;

public class UIRenderer 
{
	
	//Put the Freaking long getKey function here
	
	public static  void renderArrayList()
	{
		int yCount = 16;
		
		for(Module arrayModule : Client.PP.moduleManager.activeModules)
		{
			if(arrayModule.getCategory()==Category.OTHER)
				continue;
			if(arrayModule.getToggled())
			{
				Minecraft.getMinecraft().fontRendererObj.drawString(getKey(arrayModule.getBind()) + ": "+arrayModule.getName(), 2, yCount, 0x00FF00);
				yCount += 9;
			}else{
				Minecraft.getMinecraft().fontRendererObj.drawString(getKey(arrayModule.getBind()) + ": "+arrayModule.getName(), 2, yCount, 0xFF0000);
				yCount += 9;
			}
		}
		
	}
	
	public static void renderUI()
	{
		Minecraft.getMinecraft().fontRendererObj.drawString(Client.PP.CLIENT_NAME + " v" + Client.PP.CLIENT_VERSION, 2, 2, 0xFF0000);
		renderArrayList();
	}
}

 

So thats our really basic UI.

I am going to explain in the next Step how XRay works and how we can code it.

 

Fifth Step:

In this step were going to create a Basic XRay module.

Soooo letse go!

So first of all you have to open the Block.java (net.minecraft.net.block)

After you have opened this file were going to create a new class in the Package PiratePerfection.module.modules called XRay

and do the normal stuff when you create a new Module

there were initialize an ArrayList for the Blocks we want to find with xray:

public ArrayList<Block> xrayBlocks = new ArrayList<Block>();

after this were going to add our onEnable event an within this event were going to let the Renderer Reload were doing this by typing:

Minecraft.getMinecraft().renderGlobal.loadRenderers();

Were going to do the Same on the Event onDisable.

So now were creating a boolean whiche says whether or not the block is a xrayBlock

public boolean isXrayBlock(Block blockToCheck)
{
	if(this.xrayBlocks.contains(blockToCheck))
    	return true;
	return false;
}

after weve done that we can Save this tab and open the ModuleManager (PiratePerfection.module)

and initialize the xray by adding this line under the initializing of the ArrayList:

public XRay xrayModule;

and then were creating the instance of the module by adding into the arraylist (in the function modulemanager):

this.activeModules.add(this.xrayModule = new XRay());

now we can save and exit the ModuleManager class.

now were creating a class within the package PiratePerfection.utils with the name XRayUtils

within there were just going to create one line of code:

public static boolean isXray;

so to hook up this were going to add in the XRay module in the onEnable function 

XRayUtils.isXray=true;

and in the onDisable function

XRayUtils.isXray = false;

(be sure to add these line before reloading the Renderers)

after that open tha tab Block.java

now search for "shouldSide" 

so what do we do?

were creating a TODO here and then

create a check if its in the xray arraylist:

if(Client.PP.moduleManager.xrayModule.isXrayBlock(this))
    return true;

and under this were creating a check if the module is toggled with:

if(XRayUtils.isXray)
    return false;

after that

were going to search for "getMixedBrightness" (should be above shouldSidebeRendered)

and there were going to add 

if(Client.PP.moduleManager.xrayModule.getToggled())
	return 1000000000;

So after weve save everything we can close all tabs except the XRay Module Tab.

and add into the onEnable function right on the top:

this.xrayBlocks.add(Block.getBlockById(15));

this will add iron to the blocks that should Render (basicaly you have to put the id of the block you want to see into the parenthesize of getBlockById)

(you can add more blocks like:

this.xrayBlocks.add(Block.getBlockById(14)); //Gold
this.xrayBlocks.add(Block.getBlockById(15)); //Iron
this.xrayBlocks.add(Block.getBlockById(16)); //Coal
this.xrayBlocks.add(Block.getBlockById(21)); //Lapis
this.xrayBlocks.add(Block.getBlockById(56)); //Diamond

Okay now we can test it if it works...

Sooo evrything looks awesome so far (the blocks could be a bit dark but thats an issue with eclipse or mcp or idk and will be not there when you export it)

but to have it there a bit better too Were going to add a new Module... the Brightness Module

first of all were going to save and close all tabs.

and then were going to create a Module as always with the name Brightness.

it has the Event onUpdate with following code in it:

if(this.getToggled() || XRayUtils.isXray)
{
	while(Minecraft.getMinecraft().gameSettings.gammaSetting < 100F)
		Minecraft.getMinecraft().gameSettings.gammaSetting += 0.5;
}else{
	while(Minecraft.getMinecraft().gameSettings.gammaSetting > 1F)
		Minecraft.getMinecraft().gameSettings.gammaSetting -= 0.5;
}

its pretty selfexplaining.

now we are just adding this to the Module Manager

(by adding this into the function ModuleManager:

this.activeModules.add(new Brightness());

So after weve done that we can save it everything close every tab and test it.

so now you see it works fine.

So the next Step i will do to complete this ulitmate guide of doom is how to Export and run this Client in Minecraft.

 

Sixth Step:

Okay in this Step were going to export our modified client and run it throu the official Minecraft Launcher.

So i dont want to use actually the mcp recompile settings, instead i use Eclipse + Original Minecraft.

So what are we doing. were going to rightclick the Client folder in eclipse and hit export.

Now were choosing the option JAR file (under the folder Java) and hit next.

Now were going to uncheck .classpath and .project and extend the folder Client (if you have Server there be sure to uncheck that too) after we have extended it were going to uncheck jar and lib so only src is checked.

Now choose the Destination folder and hit finish.

Now we should have created a .jar file.

Open it via 7zip or Winrar or any other program that can handle .jars.

Now were going to delete the META-INF and the Start.class (if there are other classes like project or classpath be sure to delete them too)

so now were have to go into our Minecraft folder and there in the subfolder versions and open the version of the game you have modded.

now open the <Version Name>.jar (in my example it would be 1.8.jar)

and copy the assets folder into the your .jar.

now create a new folder in the versions tab whiche is called exactly the same as the .jar (in my example PiratePerfection)

and in there were going to copy the .jar into here and create a .json file (whiche we name exactly as the folder and the .jar)

and put following code in it:

{
  "id": "PiratePerfection", // Put the name of the .jar the folder or the .json here
  "time": "2014-09-02T10:24:35+02:00",
  "releaseTime": "2014-09-02T10:24:35+02:00",
  "type": "release",
  "minecraftArguments": "--username ${auth_player_name} --version ${version_name} --gameDir ${game_directory} --assetsDir ${assets_root} --assetIndex ${assets_index_name} --uuid ${auth_uuid} --accessToken ${auth_access_token} --userProperties ${user_properties} --userType ${user_type}",
  "libraries": [
    {
      "name": "java3d:vecmath:1.5.2"
    },
    {
      "name": "net.sf.trove4j:trove4j:3.0.3"
    },
    {
      "name": "com.ibm.icu:icu4j-core-mojang:51.2"
    },
    {
      "name": "net.sf.jopt-simple:jopt-simple:4.6"
    },
    {
      "name": "com.paulscode:codecjorbis:20101023"
    },
    {
      "name": "com.paulscode:codecwav:20101023"
    },
    {
      "name": "com.paulscode:libraryjavasound:20101123"
    },
    {
      "name": "com.paulscode:librarylwjglopenal:20100824"
    },
    {
      "name": "com.paulscode:soundsystem:20120107"
    },
    {
      "name": "io.netty:netty-all:4.0.15.Final"
    },
    {
      "name": "com.google.guava:guava:17.0"
    },
    {
      "name": "org.apache.commons:commons-lang3:3.3.2"
    },
    {
      "name": "commons-io:commons-io:2.4"
    },
    {
      "name": "commons-codec:commons-codec:1.9"
    },
    {
      "name": "net.java.jinput:jinput:2.0.5"
    },
    {
      "name": "net.java.jutils:jutils:1.0.0"
    },
    {
      "name": "com.google.code.gson:gson:2.2.4"
    },
    {
      "name": "com.mojang:authlib:1.5.17"
    },
    {
      "name": "com.mojang:realms:1.5.5"
    },
    {
      "name": "org.apache.commons:commons-compress:1.8.1"
    },
    {
      "name": "org.apache.httpcomponents:httpclient:4.3.3"
    },
    {
      "name": "commons-logging:commons-logging:1.1.3"
    },
    {
      "name": "org.apache.httpcomponents:httpcore:4.3.2"
    },
    {
      "name": "org.apache.logging.log4j:log4j-api:2.0-beta9"
    },
    {
      "name": "org.apache.logging.log4j:log4j-core:2.0-beta9"
    },
    {
      "name": "org.lwjgl.lwjgl:lwjgl:2.9.1",
      "rules": [
        {
          "action": "allow"
        },
        {
          "action": "disallow",
          "os": {
            "name": "osx"
          }
        }
      ]
    },
    {
      "name": "org.lwjgl.lwjgl:lwjgl_util:2.9.1",
      "rules": [
        {
          "action": "allow"
        },
        {
          "action": "disallow",
          "os": {
            "name": "osx"
          }
        }
      ]
    },
    {
      "name": "org.lwjgl.lwjgl:lwjgl-platform:2.9.1",
      "rules": [
        {
          "action": "allow"
        },
        {
          "action": "disallow",
          "os": {
            "name": "osx"
          }
        }
      ],
      "natives": {
        "linux": "natives-linux",
        "windows": "natives-windows",
        "osx": "natives-osx"
      },
      "extract": {
        "exclude": [
          "META-INF/"
        ]
      }
    },
    {
      "name": "org.lwjgl.lwjgl:lwjgl:2.9.2-nightly-20140822",
      "rules": [
        {
          "action": "allow",
          "os": {
            "name": "osx"
          }
        }
      ]
    },
    {
      "name": "org.lwjgl.lwjgl:lwjgl_util:2.9.2-nightly-20140822",
      "rules": [
        {
          "action": "allow",
          "os": {
            "name": "osx"
          }
        }
      ]
    },
    {
      "name": "org.lwjgl.lwjgl:lwjgl-platform:2.9.2-nightly-20140822",
      "rules": [
        {
          "action": "allow",
          "os": {
            "name": "osx"
          }
        }
      ],
      "natives": {
        "linux": "natives-linux",
        "windows": "natives-windows",
        "osx": "natives-osx"
      },
      "extract": {
        "exclude": [
          "META-INF/"
        ]
      }
    },
    {
      "name": "net.java.jinput:jinput-platform:2.0.5",
      "natives": {
        "linux": "natives-linux",
        "windows": "natives-windows",
        "osx": "natives-osx"
      },
      "extract": {
        "exclude": [
          "META-INF/"
        ]
      }
    },
    {
      "name": "tv.twitch:twitch:6.5"
    },
    {
      "name": "tv.twitch:twitch-platform:6.5",
      "rules": [
        {
          "action": "allow"
        },
        {
          "action": "disallow",
          "os": {
            "name": "linux"
          }
        }
      ],
      "natives": {
        "linux": "natives-linux",
        "windows": "natives-windows-${arch}",
        "osx": "natives-osx"
      },
      "extract": {
        "exclude": [
          "META-INF/"
        ]
      }
    },
    {
      "name": "tv.twitch:twitch-external-platform:4.5",
      "rules": [
        {
          "action": "allow",
          "os": {
            "name": "windows"
          }
        }
      ],
      "natives": {
        "windows": "natives-windows-${arch}"
      },
      "extract": {
        "exclude": [
          "META-INF/"
        ]
      }
    }
  ],
  "mainClass": "net.minecraft.client.main.Main",
  "minimumLauncherVersion": 14,
  "assets": "1.8"
}

 

Now after weve saved and close it you can open Minecraft and click Edit Profile and under the field Use version you choose your version.

now hit save and you can click Play and you are able to play with your mod :D

Share this post


Link to post
Share on other sites
Guest Thanks so Much!

Thanks so much I really appreciate you helping fellow members with making a challenging thing.

 

Thank you :)

Share this post


Link to post
Share on other sites
Guest Kepper

It doesn't work for me when I launch in the Minecraft launcher it says A Java Exception has occurred. Please help :(

Share this post


Link to post
Share on other sites

Your content will need to be approved by a moderator

Guest
You are commenting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×