Jump to content

  • Curse Sites
Become a Premium Member! Help
Latest News Article

[Misc] Updating Mods to the Latest MC [29/11/10]


  • Please log in to reply
43 replies to this topic

#1

simo_415
    simo_415

    Glowstone Miner

  • Members
  • 3046 posts

Posted 23 December 2010 - 01:01 AM

How to update your mods to the latest version

In this post I will attempt to explain what you need to do to update mods from a different version of minecraft to the current version (without the use of MCP). Before you get started I must warn you that this is tedious work and can often take several hours - you should not attempt this unless you are very familiar with Java exceptions and willing to spend a lot of time debugging your code.

Requirements
1. Familiar with Java exceptions and the Java programming language
2. JDK 1.6
3. Syntax highlighting text editor or IDE (Notepad++, Editplus, Eclipse, etc)
4. DJ Java Decompiler 3.7.7.81 (this version is free, google it and you will find it)
5. The modded minecraft.jar which the mod is compatible with
6. Patience

Why this needs to be done
You need to update your mod because when new updates of minecraft are released this often changes fields, methods and classes by adding or modifying them. This isn't good because minecraft code is obfuscated which means that when extra stuff is added in it renames some of the classes/methods/fields from what they were to new names. Therefore since your mod uses references to these classes or actually changes these classes it will break them.

How to do it
Ok, this guide is going to be very generic so that it *should* apply to any version of a mod being made compatible with any version of minecraft.

For this tutorial I am going to use C:/MC/Mods/ as a base directory.

First Steps: Setting up and Getting the source code
1. Download the latest minecraft.jar and extract ALL its contents to a directory. I am going to use ./new
2. Extract the modded minecraft.jar into a directory as well. I am going to use ./old
3. Copy all the modded files which DON'T normally exist in minecraft.jar from ./old into ./new
4. Open all the modded classes in ./old with your Java decompiler then create the appropriate .java files for each of them. For example for bs.class I would create bs.java
5. Open all the class files you need modded in the new version with your java decompiler and create the appropriate .java files for each of them. Note: New versions of minecraft often result in different class names, make sure you are modding the correct class, refer to the section below for more information.

Finding the right class
If your mod modifies minecraft classes then chances are these class names will have changed in the new release. To find what the new class name is follow these steps below:
1. Locate the old class name in the new directory.
2. Open up the class in the new directory and see if they are the same class. To check if they are the same class, use your best judgment - check method signatures and strings contained within the classes
3. If they aren't continue down the alphabet until you find the correct class.

Example of finding the new bq.class from 1.2.6 into 1.0.2
Check new bq.class, doesn't match
Check new br.class, doesn't match
Check new bs.class, matches!
Therefore your mod needs to be moved from bq.class to bs.class
(For a good reference of class names in version refer to this website: <!-- m -->http://www.tkte.ch/p...r=1292920904000<!-- m -->)

At this point you have the source code for the mod that you want to make compatible and know what the classes are that need modifying.

Before making the mod compatible, save yourself some time by making sure it will compile again.
1. Open up a shell console (command prompt if on Windows) and navigate to the ./old directory.
2. Type javac *.java
3. If there are no errors you can begin making this mod compatible. If there are errors fix them before making the mod compatible.

Making the mod compatible
1. Start by opening the class files which usually exist in minecraft which need modding in both the old and new directories - make sure to open the correct new class. For example, bs.class - open both ./old/bq.java and ./new/bs.java
2. Add in all the modded code from the old version into the new version.
2.1 Add in all the modified imports.
2.2 Add in all the modified instance variables.
2.3 Add in all the new methods.
2.4 Add in all the changed methods - try to only add the necessary lines and not overwrite the whole method.
3. Change all your code where you reference other classes to the new class names
4. Compile the class; javac bs.java
5. Fix all the compile errors (see next section about this).
6. Open the class files which don't usually exist in minecraft and update all the references to classes, methods and fields in the default minecraft package.
7. Compile the class.
8. Fix all the compile errors (see next section about this).

Compile Problems
The compile problems you will encounter are due to field, method and class names changing in the new version of minecraft which breaks the code that you have changed. To fix this you will need to find the appropriate new versions of names and get them changed in your modded bit of code. It is best to start by changing the class names in your mod to the new ones, once you have changed all the names try compiling again. Further compile errors are usually due to field and method names changing, you will have to find these new names by
opening the class files. Once all field, method and class names have been resolved to their new names you should be able to compile with relatively few (possibly no) errors. All remaining errors should be relatively straight forward to fix - usually casting to the correct type fixes these errors.

Testing
Once you have fully compiled all your new classes you need to test that they work. Install the classes in minecraft.jar as you would any normal mod, then run minecraft.

Final Words
This tutorial is by no means a complete and accurate guide on how to best go about updating your mods but it provides ONE way in which to do this, there are a few different approaches you could take in updating mods.

Register or log in to remove.

#2

Woot
    Woot

    Redstone Miner

  • Members
  • 567 posts

Posted 23 December 2010 - 03:11 AM

Is there anything different required for Modloader mods? for some reason i can't get them to compile.

#3

simo_415
    simo_415

    Glowstone Miner

  • Members
  • 3046 posts

Posted 23 December 2010 - 03:38 AM

Woot said:

Is there anything different required for Modloader mods? for some reason i can't get them to compile.

You need to include all the modloader classes as well.

#4

Woot
    Woot

    Redstone Miner

  • Members
  • 567 posts

Posted 23 December 2010 - 04:09 AM

Lol yes i should have been more clear i have them in there along with risugami's elemental arrows and decompiled. The problem comes up when trying to compile elemental arrows (or any other mod_yourmod.java).

#5

simo_415
    simo_415

    Glowstone Miner

  • Members
  • 3046 posts

Posted 23 December 2010 - 04:34 AM

Woot said:

Lol yes i should have been more clear i have them in there along with risugami's elemental arrows and decompiled. The problem comes up when trying to compile elemental arrows (or any other mod_yourmod.java).

Ok, so you only need to decompile classes that you want to upgrade.. If you want to upgrade stuff that uses the modloader then get the latest version of the mod loader class files for that version, ie: 1.1_02. Then ONLY decompile the classes you want to upgrade - in this example use ModLoader class files from 1.1_02 and the decompiled class(es) of elemental arrows from the previous release. Every .java file will need to be updated with the new classes.

#6

Devlix
    Devlix

    Coal Miner

  • Members
  • 136 posts

Posted 23 December 2010 - 04:45 AM

I wish this tutorial was here earlier, would have prevented me from having to learn all about decompiling and recompiling Java, bleh.

#7

Woot
    Woot

    Redstone Miner

  • Members
  • 567 posts

Posted 23 December 2010 - 06:20 AM

simo_415 said:


Ok, so you only need to decompile classes that you want to upgrade.. If you want to upgrade stuff that uses the modloader then get the latest version of the mod loader class files for that version, ie: 1.1_02. Then ONLY decompile the classes you want to upgrade - in this example use ModLoader class files from 1.1_02 and the decompiled class(es) of elemental arrows from the previous release. Every .java file will need to be updated with the new classes.

That was what i was doing.

Even if i use only a stock minecraft version 1.1_02 , modloader 1.1_02, and elemental arrows 1.1_02 i come up with these errors on mod_arrows.

E:\MINECR~1\mod_Arrows.java:13: cannot find symbol
symbol  : variable exarrow
location: class mod_Arrows
		ModLoader.RegisterEntityID(exarrow, "ExArrow", ModLoader.getUniqueEntityId());
								   ^
E:\MINECR~1\mod_Arrows.java:14: cannot find symbol
symbol  : variable fiarrow
location: class mod_Arrows
		ModLoader.RegisterEntityID(fiarrow, "FiArrow", ModLoader.getUniqueEntityId());
								   ^
E:\MINECR~1\mod_Arrows.java:15: cannot find symbol
symbol  : variable icearrow
location: class mod_Arrows
		ModLoader.RegisterEntityID(icearrow, "IceArrow", ModLoader.getUniqueEntityId());
								   ^
E:\MINECR~1\mod_Arrows.java:16: cannot find symbol
symbol  : variable eggarrow
location: class mod_Arrows
		ModLoader.RegisterEntityID(eggarrow, "EggArrow", ModLoader.getUniqueEntityId());
								   ^
E:\MINECR~1\mod_Arrows.java:45: cannot find symbol
symbol  : variable exarrow
location: class mod_Arrows
		renderers.put(exarrow, new hy());
					  ^
E:\MINECR~1\mod_Arrows.java:46: cannot find symbol
symbol  : variable fiarrow
location: class mod_Arrows
		renderers.put(fiarrow, new hy());
					  ^
E:\MINECR~1\mod_Arrows.java:47: cannot find symbol
symbol  : variable icearrow
location: class mod_Arrows
		renderers.put(icearrow, new hy());
					  ^
E:\MINECR~1\mod_Arrows.java:48: cannot find symbol
symbol  : variable eggarrow
location: class mod_Arrows
		renderers.put(eggarrow, new hy());
					  ^
8 errors


This is mod_Arrows by the way.

import java.util.Map;

public class mod_Arrows extends BaseMod
{

	public mod_Arrows()
	{
		ModLoader.RegisterEntityID(exarrow, "ExArrow", ModLoader.getUniqueEntityId());
		ModLoader.RegisterEntityID(fiarrow, "FiArrow", ModLoader.getUniqueEntityId());
		ModLoader.RegisterEntityID(icearrow, "IceArrow", ModLoader.getUniqueEntityId());
		ModLoader.RegisterEntityID(eggarrow, "EggArrow", ModLoader.getUniqueEntityId());
		ModLoader.AddName(exp, "Explosive Arrow");
		ModLoader.AddName(fir, "Fire Arrow");
		ModLoader.AddName(ice, "Ice Arrow");
		ModLoader.AddName(egg, "Egg Arrow");
		ModLoader.AddName(hombow, "Homing Bow");
	}

	public void AddRecipes(eu recipes)
	{
		recipes.a(new fz(exp, 1), new Object[] {
			"X", "#", "Y", Character.valueOf('Y'), ee.J, Character.valueOf('X'), ee.K, Character.valueOf('#'), ee.B
		});
		recipes.a(new fz(fir, 1), new Object[] {
			"X", "#", "Y", Character.valueOf('Y'), ee.J, Character.valueOf('X'), ee.k, Character.valueOf('#'), ee.B
		});
		recipes.a(new fz(ice, 1), new Object[] {
			"X", "#", "Y", Character.valueOf('Y'), ee.J, Character.valueOf('X'), ee.aB, Character.valueOf('#'), ee.B
		});
		recipes.a(new fz(egg, 1), new Object[] {
			"X", "#", "Y", Character.valueOf('Y'), ee.J, Character.valueOf('X'), ee.aN, Character.valueOf('#'), ee.B
		});
		recipes.a(new fz(hombow, 1), new Object[] {
			" #X", "# X", " #X", Character.valueOf('X'), ee.I, Character.valueOf('#'), ee.l
		});
	}

	public void AddRenderer(Map renderers)
	{
		renderers.put(exarrow, new hy());
		renderers.put(fiarrow, new hy());
		renderers.put(icearrow, new hy());
		renderers.put(eggarrow, new hy());
	}

	public void RegisterTextureOverrides()
	{
		ModLoader.addOverride("/gui/items.png", "/arrows/exarrow.png", exp.aZ);
		ModLoader.addOverride("/gui/items.png", "/arrows/fiarrow.png", fir.aZ);
		ModLoader.addOverride("/gui/items.png", "/arrows/icearrow.png", ice.aZ);
		ModLoader.addOverride("/gui/items.png", "/arrows/eggarrow.png", egg.aZ);
		ModLoader.addOverride("/gui/items.png", "/arrows/hombow.png", hombow.aZ);
	}

	public static ee exp = (new ee(128)).a(ModLoader.getUniqueSpriteIndex("/gui/items.png")).a("expArrow");
	public static ee fir = (new ee(129)).a(ModLoader.getUniqueSpriteIndex("/gui/items.png")).a("firArrow");
	public static ee ice = (new ee(130)).a(ModLoader.getUniqueSpriteIndex("/gui/items.png")).a("iceArrow");
	public static ee egg = (new ee(131)).a(ModLoader.getUniqueSpriteIndex("/gui/items.png")).a("eggArrow");
	public static ee hombow = (new lk(140, true)).a(ModLoader.getUniqueSpriteIndex("/gui/items.png")).a("homBow");

}


#8

simo_415
    simo_415

    Glowstone Miner

  • Members
  • 3046 posts

Posted 23 December 2010 - 07:49 AM

Well where are those four variables defined? You are getting those compile errors because they are not defined.

#9

Woot
    Woot

    Redstone Miner

  • Members
  • 567 posts

Posted 23 December 2010 - 08:47 AM

simo_415 said:

Well where are those four variables defined? You are getting those compile errors because they are not defined.

Not a clue and why would that be the case everything is included and i never altered anything.

#10

OgreSean

Posted 24 December 2010 - 05:56 AM

Wow, thanks for posting this.  I attempted to manually update my mod, but it was a big hassle.  This helps quite a bit.  If I attempt updating my mod again, I will probably use or make some sort of program for easily identifying what classes were expanded and which ones stayed the same (after mapping the old class names to the new ones of course).  That would help me a lot.

Do you know of any programs/spreadsheets that do anything like this?
Check out the mod I'm making!
Builder Mobs 0.53
Posted Image
My Other Mods Here

#11

simo_415
    simo_415

    Glowstone Miner

  • Members
  • 3046 posts

Posted 24 December 2010 - 06:15 AM

OgreSean said:

Wow, thanks for posting this.  I attempted to manually update my mod, but it was a big hassle.  This helps quite a bit.  If I attempt updating my mod again, I will probably use or make some sort of program for easily identifying what classes were expanded and which ones stayed the same (after mapping the old class names to the new ones of course).  That would help me a lot.

Do you know of any programs/spreadsheets that do anything like this?

I'm glad that it helps =)

Not sure of any programs but the MCP project has a spreadsheet that maps classes from version to version, work hasn't started on 1.2.6 > BETA though...

https://spreadsheets... ... n_GB#gid=3

#12

OgreSean

Posted 24 December 2010 - 06:44 AM

Thanks for the link!

Say, out of curiosity, do you happen to keep a list of class mappings for commonly modded or used classes, like Entity and World?  I'm only asking because I know you have already converted your Single Player Commands mod, so I thought you might have made some kind of incomplete list of class mappings between alpha and beta.
Check out the mod I'm making!
Builder Mobs 0.53
Posted Image
My Other Mods Here

#13

simo_415
    simo_415

    Glowstone Miner

  • Members
  • 3046 posts

Posted 24 December 2010 - 07:02 AM

OgreSean said:

Thanks for the link!

Say, out of curiosity, do you happen to keep a list of class mappings for commonly modded or used classes, like Entity and World?  I'm only asking because I know you have already converted your Single Player Commands mod, so I thought you might have made some kind of incomplete list of class mappings between alpha and beta.

Nah I don't.

I know that in 1.1.2:
World is dd.class
EntityPlayerSP is bs.class
Entity is mn.class
EntityPlayer is ei.class
EntityLiving is fy.class

Now that you mention it though I should probably make one, would save me a bit of work.

#14

Woot
    Woot

    Redstone Miner

  • Members
  • 567 posts

Posted 24 December 2010 - 07:28 AM

OgreSean said:

Thanks for the link!

Say, out of curiosity, do you happen to keep a list of class mappings for commonly modded or used classes, like Entity and World?  I'm only asking because I know you have already converted your Single Player Commands mod, so I thought you might have made some kind of incomplete list of class mappings between alpha and beta.

Forgot where i seen this posted. http://www.tkte.ch/p...r=1292920904000

#15

simo_415
    simo_415

    Glowstone Miner

  • Members
  • 3046 posts

Posted 24 December 2010 - 10:54 AM

Woot said:

OgreSean said:

Thanks for the link!

Say, out of curiosity, do you happen to keep a list of class mappings for commonly modded or used classes, like Entity and World?  I'm only asking because I know you have already converted your Single Player Commands mod, so I thought you might have made some kind of incomplete list of class mappings between alpha and beta.

Forgot where i seen this posted. http://www.tkte.ch/p...r=1292920904000

That's awesome! Thanks for posting this it will come in handy!! I will put it in OP

#16

Woot
    Woot

    Redstone Miner

  • Members
  • 567 posts

Posted 25 December 2010 - 01:34 AM

Your welcome, btw i solved my little problem. If you notice when you google DJ Java Decompiler 3.7.7.81 the first result should lead to the "trip over it" blog, where it states.

Quote

DJ doesn't do Java 5/6 class decompilation very well. The best one on the block currently is JD (http://java.decompiler.free.fr/). Check it out. It has eclipse integration too.
So i give it a shot and sure enough the results were different than DJ Java Decompiler, and wouldn't you know it compiled no problem. :iapprove:

code from JD
import java.util.Map;

public class mod_Arrows extends BaseMod
{
  public static ee exp = new ee(128).a(ModLoader.getUniqueSpriteIndex("/gui/items.png")).a("expArrow");

  public static ee fir = new ee(129).a(ModLoader.getUniqueSpriteIndex("/gui/items.png")).a("firArrow");

  public static ee ice = new ee(130).a(ModLoader.getUniqueSpriteIndex("/gui/items.png")).a("iceArrow");

  public static ee egg = new ee(131).a(ModLoader.getUniqueSpriteIndex("/gui/items.png")).a("eggArrow");

  public static ee hombow = new lk(140, true).a(ModLoader.getUniqueSpriteIndex("/gui/items.png")).a("homBow");

  public mod_Arrows()
  {
	ModLoader.RegisterEntityID(exarrow.class, "ExArrow", ModLoader.getUniqueEntityId());
	ModLoader.RegisterEntityID(fiarrow.class, "FiArrow", ModLoader.getUniqueEntityId());
	ModLoader.RegisterEntityID(icearrow.class, "IceArrow", ModLoader.getUniqueEntityId());
	ModLoader.RegisterEntityID(eggarrow.class, "EggArrow", ModLoader.getUniqueEntityId());
	ModLoader.AddName(exp, "Explosive Arrow");
	ModLoader.AddName(fir, "Fire Arrow");
	ModLoader.AddName(ice, "Ice Arrow");
	ModLoader.AddName(egg, "Egg Arrow");
	ModLoader.AddName(hombow, "Homing Bow");
  }

  public void AddRecipes(eu recipes)
  {
	recipes.a(new fz(exp, 1), new Object[] { "X", "#", "Y", Character.valueOf('Y'), ee.J, Character.valueOf('X'), ee.K, Character.valueOf('#'), ee.B });
	recipes.a(new fz(fir, 1), new Object[] { "X", "#", "Y", Character.valueOf('Y'), ee.J, Character.valueOf('X'), ee.k, Character.valueOf('#'), ee.B });
	recipes.a(new fz(ice, 1), new Object[] { "X", "#", "Y", Character.valueOf('Y'), ee.J, Character.valueOf('X'), ee.aB, Character.valueOf('#'), ee.B });
	recipes.a(new fz(egg, 1), new Object[] { "X", "#", "Y", Character.valueOf('Y'), ee.J, Character.valueOf('X'), ee.aN, Character.valueOf('#'), ee.B });
	recipes.a(new fz(hombow, 1), new Object[] { " #X", "# X", " #X", Character.valueOf('X'), ee.I, Character.valueOf('#'), ee.l });
  }

  public void AddRenderer(Map, at> renderers)
  {
	renderers.put(exarrow.class, new hy());
	renderers.put(fiarrow.class, new hy());
	renderers.put(icearrow.class, new hy());
	renderers.put(eggarrow.class, new hy());
  }

  public void RegisterTextureOverrides()
  {
	ModLoader.addOverride("/gui/items.png", "/arrows/exarrow.png", exp.aZ);
	ModLoader.addOverride("/gui/items.png", "/arrows/fiarrow.png", fir.aZ);
	ModLoader.addOverride("/gui/items.png", "/arrows/icearrow.png", ice.aZ);
	ModLoader.addOverride("/gui/items.png", "/arrows/eggarrow.png", egg.aZ);
	ModLoader.addOverride("/gui/items.png", "/arrows/hombow.png", hombow.aZ);
  }
}


#17

simo_415
    simo_415

    Glowstone Miner

  • Members
  • 3046 posts

Posted 25 December 2010 - 03:14 AM

Woot said:

Your welcome, btw i solved my little problem. If you notice when you google DJ Java Decompiler 3.7.7.81 the first result should lead to the "trip over it" blog, where it states.

Quote

DJ doesn't do Java 5/6 class decompilation very well. The best one on the block currently is JD (http://java.decompiler.free.fr/). Check it out. It has eclipse integration too.
So i give it a shot and sure enough the results were different than DJ Java Decompiler, and wouldn't you know it compiled no problem. :SSSS:

code from JD
import java.util.Map;

public class mod_Arrows extends BaseMod
{
  public static ee exp = new ee(128).a(ModLoader.getUniqueSpriteIndex("/gui/items.png")).a("expArrow");

  public static ee fir = new ee(129).a(ModLoader.getUniqueSpriteIndex("/gui/items.png")).a("firArrow");

  public static ee ice = new ee(130).a(ModLoader.getUniqueSpriteIndex("/gui/items.png")).a("iceArrow");

  public static ee egg = new ee(131).a(ModLoader.getUniqueSpriteIndex("/gui/items.png")).a("eggArrow");

  public static ee hombow = new lk(140, true).a(ModLoader.getUniqueSpriteIndex("/gui/items.png")).a("homBow");

  public mod_Arrows()
  {
	ModLoader.RegisterEntityID(exarrow.class, "ExArrow", ModLoader.getUniqueEntityId());
	ModLoader.RegisterEntityID(fiarrow.class, "FiArrow", ModLoader.getUniqueEntityId());
	ModLoader.RegisterEntityID(icearrow.class, "IceArrow", ModLoader.getUniqueEntityId());
	ModLoader.RegisterEntityID(eggarrow.class, "EggArrow", ModLoader.getUniqueEntityId());
	ModLoader.AddName(exp, "Explosive Arrow");
	ModLoader.AddName(fir, "Fire Arrow");
	ModLoader.AddName(ice, "Ice Arrow");
	ModLoader.AddName(egg, "Egg Arrow");
	ModLoader.AddName(hombow, "Homing Bow");
  }

  public void AddRecipes(eu recipes)
  {
	recipes.a(new fz(exp, 1), new Object[] { "X", "#", "Y", Character.valueOf('Y'), ee.J, Character.valueOf('X'), ee.K, Character.valueOf('#'), ee.B });
	recipes.a(new fz(fir, 1), new Object[] { "X", "#", "Y", Character.valueOf('Y'), ee.J, Character.valueOf('X'), ee.k, Character.valueOf('#'), ee.B });
	recipes.a(new fz(ice, 1), new Object[] { "X", "#", "Y", Character.valueOf('Y'), ee.J, Character.valueOf('X'), ee.aB, Character.valueOf('#'), ee.B });
	recipes.a(new fz(egg, 1), new Object[] { "X", "#", "Y", Character.valueOf('Y'), ee.J, Character.valueOf('X'), ee.aN, Character.valueOf('#'), ee.B });
	recipes.a(new fz(hombow, 1), new Object[] { " #X", "# X", " #X", Character.valueOf('X'), ee.I, Character.valueOf('#'), ee.l });
  }

  public void AddRenderer(Map, at> renderers)
  {
	renderers.put(exarrow.class, new hy());
	renderers.put(fiarrow.class, new hy());
	renderers.put(icearrow.class, new hy());
	renderers.put(eggarrow.class, new hy());
  }

  public void RegisterTextureOverrides()
  {
	ModLoader.addOverride("/gui/items.png", "/arrows/exarrow.png", exp.aZ);
	ModLoader.addOverride("/gui/items.png", "/arrows/fiarrow.png", fir.aZ);
	ModLoader.addOverride("/gui/items.png", "/arrows/icearrow.png", ice.aZ);
	ModLoader.addOverride("/gui/items.png", "/arrows/eggarrow.png", egg.aZ);
	ModLoader.addOverride("/gui/items.png", "/arrows/hombow.png", hombow.aZ);
  }
}

Thanks for the tip! I will look into it.

#18

TLUL
    TLUL

    Gold Miner

  • Members
  • 484 posts
  • Minecraft: TLUL

Posted 08 January 2011 - 01:31 AM

If you're getting errors on the import lines, don't forget that you might need to extract the contents of jinput.jar, lwjgl.jar, and/or lwjgl_util.jar into ./old and ./new in order to compile some mods. DON'T EXTRACT THE META-INF FOLDER.

Edit: Also, JD-Core, the decompiler mentioned in the above post, is most definitely better than Jad (DJ Decompiler is a graphical frontend for Jad).

My current flagship project: X-Ray Mod (always up-to-date!)

"The lazier you become, the less you are able to complete. Never let


#19

nadine
    nadine

    Obsidian Miner

  • Members
  • 1459 posts

Posted 20 January 2011 - 03:36 PM

when i go to old folder and type javac *.java it says its unkown command ??? why whats wrong ?
Posted Image
Posted Image
Posted Image
Posted Image
List of all my other mods,creations,maps,etc..:
viewtopic.php?f=1039&t=325080&p=4488802#p4488802

#20

simo_415
    simo_415

    Glowstone Miner

  • Members
  • 3046 posts

Posted 20 January 2011 - 03:53 PM

You need to add the JDK bin directory to the classpath. Look it up on google, should be easy to find.