Alright; so I'm making a modification to Minecraft where everyone's steve. This is hard to explain the situation but I'll try as best to explain:
I downloaded Optifine's decompiled code from OptifineSources.co.uk and this guide to setup MCP for newer versions. I then decompile VANILLA minecraft, let that run through and run cleanup.sh. (Decompile.sh doesn't work because of this!) I unzip Optifine's code and put it in SRC, and begin editing a few files, these involve
to set everyone's skin to the default, steve type, and to make it so Minecraft CANNOT get anyone's skin. I run recompile.sh then startclient.sh, and I guess it works, so reobfuscate.sh it is. This is where problems begin. The two biggest problems are the JSON file, which I got down, how to actually compile the jar, which is
jar cvf jarname.jar -C foldername/ .
I've tried things such as a...
Vanilla 1.12.2 Base, Copy and paste modified class files from above; keep in mind that I have to paste a few extra class files under the net folder& removed META-INF
Optifine 1.12.2 C6 base, Copy and paste modified class files.
Class files, Optifine
I was playing around with a lot of variables, and the most stablest I could get was where Optifine was ABLE to get in, but under options, video settings was this:
So when you hover about long enough, where an Optifine tooltip is SUPPOSED to appear, the game pulls the dirtblock screen of death then crashes.
I can't remember which result mixed with which, but I remember grabbing the specific classes, such as bua (i think?) cex, and cef. Adding these classes into a regular optifine client, zipping up (using the jar command) then running these resulted in Vanilla Minecraft, no Optifine; WTF? When I went onto multiplayer for both results, the mod worked perfectly, albeit Optifine didn't work well. Everyone defaulted to the regular steve skin, no alex's, no custom skins available.
TL;DR, My mod works, but Optifine won't come through and if it does it doesn't work as intended! How do I make Optifine work properly with my client mod? It's quite hard to recompile and decompile Optifine, then modify it.
Some extra things, after a large amount of tries, I went to /runtime/reobfuscate.py and changed this line
parser.add_option('-a', '--all', action='store_true', dest='reobf_all', help='output all classes', default=False)
to
parser.add_option('-a', '--all', action='store_true', dest='reobf_all', help='output all classes', default=True)
so I get ALL the class files, this didn't work either. What can I do to fix this? (I do not use Forge because it takes quite a while to boot up, and a client with what I want PLUS optifine works out for me)
I wouldn't trust files downloaded from an unofficial source which violates sp614x's copyright; when I modified Optifine myself I decompiled a pre-patched jar (note that I installed Optifine manually, not using its installer, this was also for a 1.6.4 version), which mostly worked (I had to remove the installer and Forge-related classes from the decompiled sources for MCP to successfully recompile it), and adding the modified files to the original jar worked without any significant issues (I made modifications to the rendering code to fix bugs, like smooth lighting and seeing in the dark, so this would be far more invasive than disabling skins. I did find out later that MCP incorrectly decompiled the RenderBlocks class; a line of redstone dust would only render oriented in one direction (I only noticed this when I found a jungle temple) due to MCP thinking that a variable set to 0,1,2 in vanilla was a boolean so one path was never executed, so it is possible that decompiled code can have errors when it isn't what MCP expects, hence the warnings it gives when using a modified jar).
Otherwise, you may have used the wrong class; did you run updateMD5 after inserting the Optifine sources? This will ensure that MCP only reobfuscates classes that you modified (plus any classes that reference any fields or methods that changed, I thought that MCP was broken when it reobfuscated unmodified classes but I found that the game would crash if I didn't include them). It is also possible to replace Optifine's classes with (modified) vanilla classes as long as Optifine doesn't attempt to access any methods/fields in them.
Of course, the crash report itself should tell you where the error occurred (easier to see if it occurred in non-vanilla code due to the original class names being kept); to me it looks like it can't get the translated name for some reason, suggesting missing code, including that which Optifine uses to display its tooltips, which will only cause a crash when the game tries to access it (one possible reason is that MCP didn't reobfuscate the Optifine classes which were added later; I've used JD-GUI to look at some of my own modified classes and some of vanilla methods/fields weren't obfuscated, usually due to changing their signature, and this would cause issues to any external code unless it was also updated to reflect the changes. sp614x may have also increased security by obfuscating their own code (the 1.6.4 version only has obfuscated vanilla names), which MCP wouldn't know about (such code would still have obfuscated names when decompiled and deobfuscated).
I did NOT run updateMD5.sh (not gonna lie I didn't know what that did) after, so here's what I did after seeing your post:
ran decompile.sh
replace /src/minecraft with optifine's contents
ran updatemd5.sh
edited files
recompile.sh
startclient.sh
reobfuscate.sh
that outputted just a few files, which is what I wanted.
I paste the modified classes onto Optifine's C6 unzipped jar / folder, move the classes and replace. Then convert back into a jar. Running the client gave off a
java.lang.NoSuchFieldError: fontRendererObj
at blr.b(GuiMainMenu.java:220)
at blk.a(SourceFile:363)
at bib.a(SourceFile:937)
at bib.aq(SourceFile:562)
at bib.a(SourceFile:404)
at net.minecraft.client.main.Main.main(SourceFile:123)
The only thing I can think of is to look at the class/line where the error is occurring (line 220 in GuiMainMenu, which references fontRendererObj, which may be in a different class as it doesn't seem like you modified this class).
Also, how did you install Optifine? Normally it uses an installer which installs a library which patches the jar at runtime (the "Mojang-approved" way to install mods which only needs to modify the version json to insert a reference to the library; the jar file itself isn't modified at all, which is discouraged by the fact that you have to take extra steps to prevent the launcher from re-downloading a clean copy) and this may be broken by a pre-modified jar (I've had people have trouble installing Optifine with my own mods, likely because they tried to use its installer; I've always installed it manually and never had any issues. Similarly, back when I used Forge and my own non-Forge mods Forge would refuse to patch modified classes, not even starting unless I added JVM arguments to tell it to ignore them; compatibility was ensured since the modified files already had all the Forge patches in them).
I simply installed Optifine by downloading a jar from optifine.net, then using the jar downloaded to install the client/launcher profile. The installer jar with the Extract, Install, and Cancel options.
Alright; so I'm making a modification to Minecraft where everyone's steve. This is hard to explain the situation but I'll try as best to explain:
I downloaded Optifine's decompiled code from OptifineSources.co.uk and this guide to setup MCP for newer versions. I then decompile VANILLA minecraft, let that run through and run cleanup.sh. (Decompile.sh doesn't work because of this!) I unzip Optifine's code and put it in SRC, and begin editing a few files, these involve
to set everyone's skin to the default, steve type, and to make it so Minecraft CANNOT get anyone's skin. I run recompile.sh then startclient.sh, and I guess it works, so reobfuscate.sh it is. This is where problems begin. The two biggest problems are the JSON file, which I got down, how to actually compile the jar, which is
I've tried things such as a...
I was playing around with a lot of variables, and the most stablest I could get was where Optifine was ABLE to get in, but under options, video settings was this:
So when you hover about long enough, where an Optifine tooltip is SUPPOSED to appear, the game pulls the dirtblock screen of death then crashes.
I can't remember which result mixed with which, but I remember grabbing the specific classes, such as bua (i think?) cex, and cef. Adding these classes into a regular optifine client, zipping up (using the jar command) then running these resulted in Vanilla Minecraft, no Optifine; WTF? When I went onto multiplayer for both results, the mod worked perfectly, albeit Optifine didn't work well. Everyone defaulted to the regular steve skin, no alex's, no custom skins available.
TL;DR, My mod works, but Optifine won't come through and if it does it doesn't work as intended! How do I make Optifine work properly with my client mod? It's quite hard to recompile and decompile Optifine, then modify it.
Some extra things, after a large amount of tries, I went to /runtime/reobfuscate.py and changed this line
to
so I get ALL the class files, this didn't work either. What can I do to fix this? (I do not use Forge because it takes quite a while to boot up, and a client with what I want PLUS optifine works out for me)
m
I wouldn't trust files downloaded from an unofficial source which violates sp614x's copyright; when I modified Optifine myself I decompiled a pre-patched jar (note that I installed Optifine manually, not using its installer, this was also for a 1.6.4 version), which mostly worked (I had to remove the installer and Forge-related classes from the decompiled sources for MCP to successfully recompile it), and adding the modified files to the original jar worked without any significant issues (I made modifications to the rendering code to fix bugs, like smooth lighting and seeing in the dark, so this would be far more invasive than disabling skins. I did find out later that MCP incorrectly decompiled the RenderBlocks class; a line of redstone dust would only render oriented in one direction (I only noticed this when I found a jungle temple) due to MCP thinking that a variable set to 0,1,2 in vanilla was a boolean so one path was never executed, so it is possible that decompiled code can have errors when it isn't what MCP expects, hence the warnings it gives when using a modified jar).
Otherwise, you may have used the wrong class; did you run updateMD5 after inserting the Optifine sources? This will ensure that MCP only reobfuscates classes that you modified (plus any classes that reference any fields or methods that changed, I thought that MCP was broken when it reobfuscated unmodified classes but I found that the game would crash if I didn't include them). It is also possible to replace Optifine's classes with (modified) vanilla classes as long as Optifine doesn't attempt to access any methods/fields in them.
Of course, the crash report itself should tell you where the error occurred (easier to see if it occurred in non-vanilla code due to the original class names being kept); to me it looks like it can't get the translated name for some reason, suggesting missing code, including that which Optifine uses to display its tooltips, which will only cause a crash when the game tries to access it (one possible reason is that MCP didn't reobfuscate the Optifine classes which were added later; I've used JD-GUI to look at some of my own modified classes and some of vanilla methods/fields weren't obfuscated, usually due to changing their signature, and this would cause issues to any external code unless it was also updated to reflect the changes. sp614x may have also increased security by obfuscating their own code (the 1.6.4 version only has obfuscated vanilla names), which MCP wouldn't know about (such code would still have obfuscated names when decompiled and deobfuscated).
TheMasterCaver's First World - possibly the most caved-out world in Minecraft history - includes world download.
TheMasterCaver's World - my own version of Minecraft largely based on my views of how the game should have evolved since 1.6.4.
Why do I still play in 1.6.4?
I did NOT run updateMD5.sh (not gonna lie I didn't know what that did) after, so here's what I did after seeing your post:
ran decompile.sh
replace /src/minecraft with optifine's contents
ran updatemd5.sh
edited files
recompile.sh
startclient.sh
reobfuscate.sh
that outputted just a few files, which is what I wanted.
I paste the modified classes onto Optifine's C6 unzipped jar / folder, move the classes and replace. Then convert back into a jar. Running the client gave off a
and instant crash- I removed the META-INF folder.
m
bump
m
The only thing I can think of is to look at the class/line where the error is occurring (line 220 in GuiMainMenu, which references fontRendererObj, which may be in a different class as it doesn't seem like you modified this class).
Also, how did you install Optifine? Normally it uses an installer which installs a library which patches the jar at runtime (the "Mojang-approved" way to install mods which only needs to modify the version json to insert a reference to the library; the jar file itself isn't modified at all, which is discouraged by the fact that you have to take extra steps to prevent the launcher from re-downloading a clean copy) and this may be broken by a pre-modified jar (I've had people have trouble installing Optifine with my own mods, likely because they tried to use its installer; I've always installed it manually and never had any issues. Similarly, back when I used Forge and my own non-Forge mods Forge would refuse to patch modified classes, not even starting unless I added JVM arguments to tell it to ignore them; compatibility was ensured since the modified files already had all the Forge patches in them).
TheMasterCaver's First World - possibly the most caved-out world in Minecraft history - includes world download.
TheMasterCaver's World - my own version of Minecraft largely based on my views of how the game should have evolved since 1.6.4.
Why do I still play in 1.6.4?
I simply installed Optifine by downloading a jar from optifine.net, then using the jar downloaded to install the client/launcher profile. The installer jar with the Extract, Install, and Cancel options.
m