62 lines
1.5 KiB
Java
62 lines
1.5 KiB
Java
// PUBLIC DOMAIN
|
|
// created by Searge
|
|
|
|
import java.io.File;
|
|
import java.lang.reflect.Field;
|
|
|
|
import net.minecraft.client.Minecraft;
|
|
|
|
public class Start
|
|
{
|
|
|
|
public static void main(String[] args)
|
|
{
|
|
try
|
|
{
|
|
// set new minecraft data folder to prevent it from using the .minecraft folder
|
|
// this makes it a portable version
|
|
Field f = net.minecraft.client.Minecraft.class.getDeclaredField("W");
|
|
Field.setAccessible(new Field[] { f }, true);
|
|
f.set(null, new File("."));
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
e.printStackTrace();
|
|
return;
|
|
}
|
|
|
|
// start minecraft game application
|
|
net.minecraft.client.Minecraft.main(args);
|
|
|
|
// enumerate all threads in this process
|
|
Thread[] threads = new Thread[256];
|
|
int count = java.lang.Thread.enumerate(threads);
|
|
|
|
// find the minecraft main thread
|
|
net.minecraft.client.Minecraft mc;
|
|
for(int i = 0; i < count; ++i)
|
|
{
|
|
// compare thread name to find the main thread
|
|
if(threads[i].getName().equals("Minecraft main thread"))
|
|
{
|
|
try
|
|
{
|
|
// get access to minecraft main thread object
|
|
Field f = Thread.class.getDeclaredField("target");
|
|
Field.setAccessible(new Field[] { f }, true);
|
|
mc = (net.minecraft.client.Minecraft)f.get(threads[i]);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
e.printStackTrace();
|
|
System.exit(0);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
// the variable mc now holds a reference to the minecraft main core class, anything
|
|
// should be accessible from there... have fun :)
|
|
}
|
|
|
|
}
|