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: http://www.tkte.ch/projects/pymy/?cver=1292920904000)
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.
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).
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.
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");
}
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?
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...
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.
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.
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.
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.
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.
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. :smile.gif:
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<Class<? extends mn>, 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);
}
}
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.
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. :smile.gif:
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<Class<? extends mn>, 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);
}
}
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).
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: http://www.tkte.ch/projects/pymy/?cver=1292920904000)
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.
You need to include all the modloader classes as well.
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.
This is mod_Arrows by the way.
Not a clue and why would that be the case everything is included and i never altered anything.
Do you know of any programs/spreadsheets that do anything like this?
Builder Mobs 0.53
My Other Mods Here
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.google.com/ccc?key ... n_GB#gid=3
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.
Builder Mobs 0.53
My Other Mods Here
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.
Forgot where i seen this posted. http://www.tkte.ch/projects/pymy/?cver=1292920904000
That's awesome! Thanks for posting this it will come in handy!! I will put it in OP
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. :smile.gif:
code from JD
Thanks for the tip! I will look into it.
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).
<!-- l -->List of all my other mods,creations,maps,etc..:
viewtopic.php?f=1039&t=325080&p=4488802#p4488802
<!-- l -->