Thanks for taking the time and addressing my issues. Why would I think this is a slow reply? It is really appreciated!
It is good to get to understand why design decisions were made and helps me consider pitfalls with my approaches. So thanks for that in-depth discussion.
Your analysis is quite accurate and considering the path I took (MCP -> MCP+ML -> MCP+ML+Forge -> ML+Forge -> ForgeGradle+ML+Forge -> ForgeGradle+Forge and now ForgeGradle+Forge+LL) you are right, going to MCP+LL would feel like a step back which is why I am happy that there is the LL plugin for FG. So yes, I know that those tools and yours are taking a lot of the tedious work away and I am grateful for that. Remembering that a release took me several hours just to reobfuscate the mod when MCP updated and now it is almost at a point where it automagically builds on a hosted CI... Which is why my expectations are so high I guess.
And deservedly so, ForgeGradle does a good job of hiding the compexity of the MC build chain behind a really nice interface. As you've experienced the whole transition you probably realise what an achievement this is.
3. Regarding the API-Jar: The nice thing about that would be that it would work outside of MCP because separated interfaces like that do not need obfuscation. It is my understanding that if you provide those all a dev would have to do is insert the jar into the MCP's jars or lib folder and compilation would run without issues and without having to deobfuscate because those are not obfuscated. But I could be wrong here. Maybe the decoupling from MC is not strong enough for that.
This is true for anything which doesn't need to be obfuscated yes. But anything which needs to pass through the eye of the obfuscation needle so to speak needs to actually be mutable by FernFlower. So yes, if my interfaces didn't require obfuscation you'd be absolutely correct, however a lot of the interfaces reference Minecraft classes (for example Tickable passes through an instance of Minecraft itself, which makes it an obfuscation target) and thus need to be passed in to FernFlower as bins so that they can be transformed as part of the obfuscation process.
This requirement to squirt everything through the obfuscator regardless of whether it's "yours" or not is what gives rise to the use of the MD5 technique. Basically there are 3 ways of getting the classes you want back after obfuscation:
Make a list of your classes beforehand, and extract them afterward. This is obviously pretty straightforward to implement but gives you a few corner cases to deal with. There also isn't an easy way to implement this in an ant script, although I can think of a few ways none of them are particularly elegant so it would be better to write a little script or tool to do this for you.
Have a deterministic way to identify and extract your classes after obfuscation. This is actually the easiest. For example if you know all your classes are in the package "com.snipingcoward.mod.whatever" then you can obviously just copy those classes. The only thing I don't like about this is that it couples your build script to your code (which is sometimes unavoidable) so if you refactor or add another package you need to remember to include it in the build script. It's not a big deal though but can make build scripts a ***** to maintain.
Use the MD5 masking capability built in to MCP. This is what I do. Basically MCP was designed around modifying base classes. To this end, when it's initially set up, it first runs a recompile and reobfuscate and stores MD5 hashes for every output class file. This means that if you then edit a base class and recompile, the theory is that the MD5 of your edited class will have changed and thus the obfuscation script "spits out" only those classes which have changed. However because these MD5s are just stored in a flatfile, we can trick MCP into masking off files we don't want it to output by storing and then re-deploying known "MD5 sets" which mask off upstream resources. In a nutshell, we compile liteloader and store the MD5 set thus generated, and then when we compile our mod (which by requirement needs the liteloader classes as well, as mentioned above) the obfuscator separates our mod classes from the liteloader classes by simple virtue of seeing them as "unchanged" (their MD5s match the ones we stored).
While this is a little more complicated, the fact that it leverages already-existing functionality is the benefit, and once the build script is set up to do the MD5 set manipulation for you it suddenly gets very simple.
4. I am not against the MD5 procedure at all I was just afraid that not running this procedure prevents me from successfully testing the dev build. But if that is not the case, then all is good.
No not at all. I hope the explanation above clears this up.
6. I understand that support is time consuming and we all are doing this in our free time so any documentation or support is already nice. The tutorials help with avoiding the support ping-pong of asking questions back and forth. Your videos are great and already helping there but to be honest videos are a horrible resources to go back to and look something up again
I understand that, and I am trying to work on it when I have the time. One thing people have been nagging me for for ages is a mods list, and I've just spent a long time building one. It's trying to prioritise things which is hard.
2. About the .litemod-extension: I imagine I could also tell my user base to rename their .jar file into .litemod but with each setup step the chance of installation failure increases. I have very little posts in my thread because the Installation just works, I'd like to keep it that way . The checkbox or config file entry is another setting the users could miss - but yes that would be a workaround for hybrid jars in general I guess. Although if Killjoys' recommendations work I might just ship two (different) files after all.
This is likely the easiest for the time being. Basically it's a mechanism designed to avoid a pitfall in another piece of software not my own, since yesterday I've spoken to cpw and we've agreed on a "modsystem" entry in the META-INF which will mean FML will load any jars with missing or matching "modsystem" specified, but will ignore jars which specify anything else. Unfortunately this doesn't help with historic jars, but it means that after a suitable amount of time has elapsed, it may be possible to transition back to using .jar
Regarding this problematic of loading bad or conflicting jars: Have you considered using a custom class loader as a sandbox environment and only transfer the valid jars to the main class loader? Just an idea.
I have, and this is actually done for a couple of things. The main issue is that class loading in MC is pretty complicated from the get-go, and there are too many "legacy cases" and assumptions which are broken if classloading is messed with too much. Plus in this instance it doesn't solve the problem since the kind of thing the pre-injection check is designed to fix don't actually manifest until waaaaay after the jar ever touches the classloader, by which time it's too late. This is because mod jars actually get loaded and crawled quite a bit before the game is fully initialised, and thus everything is nice and cozy by the time any real damage can be seen, and thus the game goes down anyway. It is precisely because of this that my design decision from the get-go was that versioning data would trump all other operations, and this is why versioning data are mandatory under liteloader.
That's not to say I don't use sandbox classloaders for anything. One use is to make sure that injected transformers aren't referencing game classes (which will cause issues if a Klass gets created in the parent ClassLoader causing it to bypass the transformer chain) because this is a safe and easily detectable situation which I can catch and abort. However once a jar is on the classpath it's free to do whatever damage it wants, and thus pre-injection checking is the only recourse.
Killjoys' replies gave me hopes that this can actually still work out nicely even at the current state that initially I found so problematic for my approach.
For sure. And I'm sure that Abrar didn't go to this trouble to implement this to have it not work, so it's worth persevering with. In all honesty the vast majority of dev discussion happens on IRC, so feel free to jump on. #ForgeGradle is the best channel for help with FG, and Abrar's around quite a lot if you need help.
how do i install liteloader with both optifine and forge in the latest version?
If you already have Forge:
a. Install with installer, make sure to chain to Forge, select the new profile and use that.
or b. Extract it and put it in the mods/1.7.10 folder of Forge.
If you don't have Forge:
a. Install LL, put Forge in that mods/1.7.10 folder.
or b. Install Forge, follow above steps.
Either way, Optifine ends up in the mods/1.7.10 folder to be loaded by either LL or Forge.
how do i install liteloader with both optifine and forge in the latest version?
1. Install forge
2. Only after you installed Forge, run the LiteLoader Installer and under "Extend from:" choose the version of Forge you installed.
3. Put Optifine in your mods folder (If you don't have a mods folder make one in appdata > .minecraft)
4. Select the profile that says LiteLoader and forge.
There are different ways of achieving this also but this is the way that works best for me.
In this update did they update the thing you had to downgrade in an update? =D (Sorry for the vagueness... and all the "update"'s)
Yes. But Lex is away at con at the moment so that is not being pushed. Once he's back and that gets pushed then I will release my _04 which also updates to ASM 5.0.3 so that the crossover of conflicting versions of ASM is minimised. For now, steer clear of that build for obvious reasons.
I cant seem to ba able to set up an error free workspace in 1.7.10. Any insights?
After correcting build paths, I get from the SVN projects java/client section many errors that seems to go on forever; many of the functions no longer exist. For instance in the GuiHoverLabel I get this:
In this occurrence, this.visible, this.hovered, this.xPosition, this.yPosition, this.width, and this.height are all either not resolved or just simply not a field. It may be a problem with the AuthLib, the only library I had to re-route to in the project from the SVN.
Rollback Post to RevisionRollBack
Cat: You had a troubled childhood? Jade: My favorite toy was a hammer... You put the rest together!
But On To Techie Stuff, It Is Incompatible With Code Chicken Core Due To Liteloader Loading The CodeChickenCore .Jar It Creates In In The 1.7.10 Folder Inside The Mods Folder. What I Suggest Is That You Make It So Liteloader ONLY Loads .Litemod Files From The Afore Mentioned 1.7.10 Folder.
P.S. I Know What I'm Doing, I've Been Playing Minecraft For 3 Years And Modded For Almost As Long.
Great Modloader Thingy, I Love It!
But On To Techie Stuff, It Is Incompatible With Code Chicken Core Due To Liteloader Loading The CodeChickenCore .Jar It Creates In In The 1.7.10 Folder Inside The Mods Folder. What I Suggest Is That You Make It So Liteloader ONLY Loads .Litemod Files From The Afore Mentioned 1.7.10 Folder.
It only parses the manifest from jar files for the TweakClass entry, which codechickenlib doesn't have. If it crashes, post the log.
Hi Mumfrey I'm sure that liteloader is'nt compatible to java 1.8 and new forge so please add compatibilities
This is a known issue and is not restricted to the "new" forge and it's actually an FML issue not a liteloader one. The current FML implementation of the sorting tweaker is not compatible with builds of Java 8 past a certain version (not sure which, but all recent release seem to be affected). This is because Collections.sort() now delegates to the instance List.sort() which causes the modCount of the list to be incremented whilst the tweakers are being walked. Since this is a combination of circumstances which couldn't have been forseen, and Java 1.8 isn't officially supported yet, the current recommendation is to stick with Java 7 if you're having issues with 8, because things need time to be updated.
Also, guess why that new forge is marked "new". That's right, it's not released yet. Guess what, when that does go live I have a companion update for LiteLoader ready to push at the same time. Yes, believe it or not I do keep up with Forge development and we try to make sure we stay compatible with each other, so your demand is completely unnecessary anyway.
---- Minecraft Crash Report ----
// But it works on my machine.
Time: 9/1/14 5:01 PM
Description: Initializing game
java.lang.NoClassDefFoundError: cpw/mods/fml/common/IPickupNotifier
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at cpw.mods.fml.common.ProxyInjector.inject(ProxyInjector.java:59)
at cpw.mods.fml.common.FMLModContainer.constructMod(FMLModContainer.java:492)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74)
at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47)
at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322)
at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304)
at com.google.common.eventbus.EventBus.post(EventBus.java:275)
at cpw.mods.fml.common.LoadController.sendEventToModContainer(LoadController.java:208)
at cpw.mods.fml.common.LoadController.propogateStateMessage(LoadController.java:187)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74)
at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47)
at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322)
at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304)
at com.google.common.eventbus.EventBus.post(EventBus.java:275)
at cpw.mods.fml.common.LoadController.distributeStateMessage(LoadController.java:118)
at cpw.mods.fml.common.Loader.loadMods(Loader.java:492)
at cpw.mods.fml.client.FMLClientHandler.beginMinecraftLoading(FMLClientHandler.java:204)
at net.minecraft.client.Minecraft.func_71384_a(Minecraft.java:480)
at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:867)
at net.minecraft.client.main.Main.main(SourceFile:148)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at net.minecraft.launchwrapper.Launch.launch(Launch.java:134)
at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
Caused by: java.lang.ClassNotFoundException: cpw.mods.fml.common.IPickupNotifier
at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:188)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 36 more
Caused by: java.lang.NullPointerException
at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:180)
... 38 more
A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------
-- Head --
Stacktrace:
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at cpw.mods.fml.common.ProxyInjector.inject(ProxyInjector.java:59)
at cpw.mods.fml.common.FMLModContainer.constructMod(FMLModContainer.java:492)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74)
at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47)
at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322)
at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304)
at com.google.common.eventbus.EventBus.post(EventBus.java:275)
at cpw.mods.fml.common.LoadController.sendEventToModContainer(LoadController.java:208)
at cpw.mods.fml.common.LoadController.propogateStateMessage(LoadController.java:187)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74)
at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47)
at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322)
at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304)
at com.google.common.eventbus.EventBus.post(EventBus.java:275)
at cpw.mods.fml.common.LoadController.distributeStateMessage(LoadController.java:118)
at cpw.mods.fml.common.Loader.loadMods(Loader.java:492)
at cpw.mods.fml.client.FMLClientHandler.beginMinecraftLoading(FMLClientHandler.java:204)
at net.minecraft.client.Minecraft.func_71384_a(Minecraft.java:480)
-- Initialization --
Details:
Stacktrace:
at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:867)
at net.minecraft.client.main.Main.main(SourceFile:148)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at net.minecraft.launchwrapper.Launch.launch(Launch.java:134)
at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
---- Minecraft Crash Report ----
// But it works on my machine.
Time: 9/1/14 5:01 PM
Description: Initializing game
java.lang.NoClassDefFoundError: cpw/mods/fml/common/IPickupNotifier
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at cpw.mods.fml.common.ProxyInjector.inject(ProxyInjector.java:59)
at cpw.mods.fml.common.FMLModContainer.constructMod(FMLModContainer.java:492)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74)
at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47)
at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322)
at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304)
at com.google.common.eventbus.EventBus.post(EventBus.java:275)
at cpw.mods.fml.common.LoadController.sendEventToModContainer(LoadController.java:208)
at cpw.mods.fml.common.LoadController.propogateStateMessage(LoadController.java:187)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74)
at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47)
at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322)
at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304)
at com.google.common.eventbus.EventBus.post(EventBus.java:275)
at cpw.mods.fml.common.LoadController.distributeStateMessage(LoadController.java:118)
at cpw.mods.fml.common.Loader.loadMods(Loader.java:492)
at cpw.mods.fml.client.FMLClientHandler.beginMinecraftLoading(FMLClientHandler.java:204)
at net.minecraft.client.Minecraft.func_71384_a(Minecraft.java:480)
at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:867)
at net.minecraft.client.main.Main.main(SourceFile:148)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at net.minecraft.launchwrapper.Launch.launch(Launch.java:134)
at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
Caused by: java.lang.ClassNotFoundException: cpw.mods.fml.common.IPickupNotifier
at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:188)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 36 more
Caused by: java.lang.NullPointerException
at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:180)
... 38 more
A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------
-- Head --
Stacktrace:
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at cpw.mods.fml.common.ProxyInjector.inject(ProxyInjector.java:59)
at cpw.mods.fml.common.FMLModContainer.constructMod(FMLModContainer.java:492)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74)
at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47)
at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322)
at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304)
at com.google.common.eventbus.EventBus.post(EventBus.java:275)
at cpw.mods.fml.common.LoadController.sendEventToModContainer(LoadController.java:208)
at cpw.mods.fml.common.LoadController.propogateStateMessage(LoadController.java:187)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74)
at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47)
at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322)
at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304)
at com.google.common.eventbus.EventBus.post(EventBus.java:275)
at cpw.mods.fml.common.LoadController.distributeStateMessage(LoadController.java:118)
at cpw.mods.fml.common.Loader.loadMods(Loader.java:492)
at cpw.mods.fml.client.FMLClientHandler.beginMinecraftLoading(FMLClientHandler.java:204)
at net.minecraft.client.Minecraft.func_71384_a(Minecraft.java:480)
-- Initialization --
Details:
Stacktrace:
at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:867)
at net.minecraft.client.main.Main.main(SourceFile:148)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at net.minecraft.launchwrapper.Launch.launch(Launch.java:134)
at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
---- Minecraft Crash Report ----
// But it works on my machine.
Time: 9/1/14 5:01 PM
Description: Initializing game
java.lang.NoClassDefFoundError: cpw/mods/fml/common/IPickupNotifier
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at cpw.mods.fml.common.ProxyInjector.inject(ProxyInjector.java:59)
at cpw.mods.fml.common.FMLModContainer.constructMod(FMLModContainer.java:492)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74)
at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47)
at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322)
at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304)
at com.google.common.eventbus.EventBus.post(EventBus.java:275)
at cpw.mods.fml.common.LoadController.sendEventToModContainer(LoadController.java:208)
at cpw.mods.fml.common.LoadController.propogateStateMessage(LoadController.java:187)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74)
at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47)
at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322)
at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304)
at com.google.common.eventbus.EventBus.post(EventBus.java:275)
at cpw.mods.fml.common.LoadController.distributeStateMessage(LoadController.java:118)
at cpw.mods.fml.common.Loader.loadMods(Loader.java:492)
at cpw.mods.fml.client.FMLClientHandler.beginMinecraftLoading(FMLClientHandler.java:204)
at net.minecraft.client.Minecraft.func_71384_a(Minecraft.java:480)
at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:867)
at net.minecraft.client.main.Main.main(SourceFile:148)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at net.minecraft.launchwrapper.Launch.launch(Launch.java:134)
at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
Caused by: java.lang.ClassNotFoundException: cpw.mods.fml.common.IPickupNotifier
at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:188)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 36 more
Caused by: java.lang.NullPointerException
at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:180)
... 38 more
A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------
-- Head --
Stacktrace:
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at cpw.mods.fml.common.ProxyInjector.inject(ProxyInjector.java:59)
at cpw.mods.fml.common.FMLModContainer.constructMod(FMLModContainer.java:492)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74)
at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47)
at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322)
at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304)
at com.google.common.eventbus.EventBus.post(EventBus.java:275)
at cpw.mods.fml.common.LoadController.sendEventToModContainer(LoadController.java:208)
at cpw.mods.fml.common.LoadController.propogateStateMessage(LoadController.java:187)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74)
at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47)
at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322)
at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304)
at com.google.common.eventbus.EventBus.post(EventBus.java:275)
at cpw.mods.fml.common.LoadController.distributeStateMessage(LoadController.java:118)
at cpw.mods.fml.common.Loader.loadMods(Loader.java:492)
at cpw.mods.fml.client.FMLClientHandler.beginMinecraftLoading(FMLClientHandler.java:204)
at net.minecraft.client.Minecraft.func_71384_a(Minecraft.java:480)
-- Initialization --
Details:
Stacktrace:
at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:867)
at net.minecraft.client.main.Main.main(SourceFile:148)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at net.minecraft.launchwrapper.Launch.launch(Launch.java:134)
at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
I Tryed Installing Liteloader so i could use Matmos mod.But When i installed it,It Crashed my game
Please Help me!
As Mumfrey said Custom NPC's is out of date, download the 1.7.10 version here and just because it's bugging me/maybe you want to know that there is an update for Damage Indicators (Version 3.2.0 for 1.7.10) which you can download here.
As Mumfrey said Custom NPC's is out of date, download the 1.7.10 version here and just because it's bugging me/maybe you want to know that there is an update for Damage Indicators (Version 3.2.0 for 1.7.10) which you can download here.
[...] As a stop-gap, I've modified FG behavior by injecting a task that'll let you use updated MCP mappings, even the same as LiteLoader uses, and it seems to work. I don't have the whole process written up yet, but if you're interested, I can explain.
I missed the ForgeGradle discussion this past weekend, but I've since written this tutorial on a hack to use updated MCP mappings in a FG LiteLoader build. I forgot to mention it in this thread, but now's a good time as any, for anybody desiring a little more from the FG deobf names - this was one of the main reasons for me spending a week developing a custom gradle system rather than using FG.
Some notes:
In the instructions I mention you have to create an mcpJar, but that was written for when there wasn't an mcpJar provided yet. Now that I think about it, since Mumfrey currently provides the mcpJar for the 'latest' LiteLoader build 03, and if the few srg names it uses haven't been deobfuscated, you probably do not need to create the aforementioned jar. Just apply the 'snapshot.gradle' as detailed in the previous section and the rest of Minecraft should be updated accordingly.
These instructions no longer give you the *very* latest mappings, only up until about 3 weeks ago. There is now a new location for these mappings but I have only just gotten time to begin testing - I'll update the tutorial later this week most likely.
Abrar does not provide support for this hack, but he will hopefully be providing this functionality natively in FG soon, now that the new MCPBot is close to providing all the requisite snapshot support. In any case, you can try to reach me in #ForgeGradle if you need help, as I intend to keep this hack working until FG has native support. :3
I Don't See the Custom NPCs Mod In The Mods Folder.
That's because that folder you've screenshotted is clearly not your mods folder, or more to the point, isn't the mods folder being loaded by the profile in question. Ask yourself why the folder is clearly called .minecraftnormal when usually the folder would be .minecraft hmmm?
It's clearly the wrong folder because the log you yourself posted earlier on mentioned:
And deservedly so, ForgeGradle does a good job of hiding the compexity of the MC build chain behind a really nice interface. As you've experienced the whole transition you probably realise what an achievement this is.
This is true for anything which doesn't need to be obfuscated yes. But anything which needs to pass through the eye of the obfuscation needle so to speak needs to actually be mutable by FernFlower. So yes, if my interfaces didn't require obfuscation you'd be absolutely correct, however a lot of the interfaces reference Minecraft classes (for example Tickable passes through an instance of Minecraft itself, which makes it an obfuscation target) and thus need to be passed in to FernFlower as bins so that they can be transformed as part of the obfuscation process.
This requirement to squirt everything through the obfuscator regardless of whether it's "yours" or not is what gives rise to the use of the MD5 technique. Basically there are 3 ways of getting the classes you want back after obfuscation:
No not at all. I hope the explanation above clears this up.
I understand that, and I am trying to work on it when I have the time. One thing people have been nagging me for for ages is a mods list, and I've just spent a long time building one. It's trying to prioritise things which is hard.
This is likely the easiest for the time being. Basically it's a mechanism designed to avoid a pitfall in another piece of software not my own, since yesterday I've spoken to cpw and we've agreed on a "modsystem" entry in the META-INF which will mean FML will load any jars with missing or matching "modsystem" specified, but will ignore jars which specify anything else. Unfortunately this doesn't help with historic jars, but it means that after a suitable amount of time has elapsed, it may be possible to transition back to using .jar
I have, and this is actually done for a couple of things. The main issue is that class loading in MC is pretty complicated from the get-go, and there are too many "legacy cases" and assumptions which are broken if classloading is messed with too much. Plus in this instance it doesn't solve the problem since the kind of thing the pre-injection check is designed to fix don't actually manifest until waaaaay after the jar ever touches the classloader, by which time it's too late. This is because mod jars actually get loaded and crawled quite a bit before the game is fully initialised, and thus everything is nice and cozy by the time any real damage can be seen, and thus the game goes down anyway. It is precisely because of this that my design decision from the get-go was that versioning data would trump all other operations, and this is why versioning data are mandatory under liteloader.
That's not to say I don't use sandbox classloaders for anything. One use is to make sure that injected transformers aren't referencing game classes (which will cause issues if a Klass gets created in the parent ClassLoader causing it to bypass the transformer chain) because this is a safe and easily detectable situation which I can catch and abort. However once a jar is on the classpath it's free to do whatever damage it wants, and thus pre-injection checking is the only recourse.
For sure. And I'm sure that Abrar didn't go to this trouble to implement this to have it not work, so it's worth persevering with. In all honesty the vast majority of dev discussion happens on IRC, so feel free to jump on. #ForgeGradle is the best channel for help with FG, and Abrar's around quite a lot if you need help.
If you already have Forge:
a. Install with installer, make sure to chain to Forge, select the new profile and use that.
or b. Extract it and put it in the mods/1.7.10 folder of Forge.
If you don't have Forge:
a. Install LL, put Forge in that mods/1.7.10 folder.
or b. Install Forge, follow above steps.
Either way, Optifine ends up in the mods/1.7.10 folder to be loaded by either LL or Forge.
1. Install forge
2. Only after you installed Forge, run the LiteLoader Installer and under "Extend from:" choose the version of Forge you installed.
3. Put Optifine in your mods folder (If you don't have a mods folder make one in appdata > .minecraft)
4. Select the profile that says LiteLoader and forge.
There are different ways of achieving this also but this is the way that works best for me.
In this update did they update the thing you had to downgrade in an update? =D (Sorry for the vagueness... and all the "update"'s)
Yes. But Lex is away at con at the moment so that is not being pushed. Once he's back and that gets pushed then I will release my _04 which also updates to ASM 5.0.3 so that the crossover of conflicting versions of ASM is minimised. For now, steer clear of that build for obvious reasons.
After correcting build paths, I get from the SVN projects java/client section many errors that seems to go on forever; many of the functions no longer exist. For instance in the GuiHoverLabel I get this:
In this occurrence, this.visible, this.hovered, this.xPosition, this.yPosition, this.width, and this.height are all either not resolved or just simply not a field. It may be a problem with the AuthLib, the only library I had to re-route to in the project from the SVN.
It only parses the manifest from jar files for the TweakClass entry, which codechickenlib doesn't have. If it crashes, post the log.
Mods I work on and maintain:
TabbyChat | Mine Little Pony
My Blog
I just used it today to start working on a LL project; it's very easy and handles everything for you, including librariise and making the lite mod.
Mods I work on and maintain:
TabbyChat | Mine Little Pony
My Blog
This is a known issue and is not restricted to the "new" forge and it's actually an FML issue not a liteloader one. The current FML implementation of the sorting tweaker is not compatible with builds of Java 8 past a certain version (not sure which, but all recent release seem to be affected). This is because Collections.sort() now delegates to the instance List.sort() which causes the modCount of the list to be incremented whilst the tweakers are being walked. Since this is a combination of circumstances which couldn't have been forseen, and Java 1.8 isn't officially supported yet, the current recommendation is to stick with Java 7 if you're having issues with 8, because things need time to be updated.
Also, guess why that new forge is marked "new". That's right, it's not released yet. Guess what, when that does go live I have a companion update for LiteLoader ready to push at the same time. Yes, believe it or not I do keep up with Forge development and we try to make sure we stay compatible with each other, so your demand is completely unnecessary anyway.
It's FML that's not compatible. LiteLoader is fine but FML breaks under later builds of Java 8 because of the aforementioned CoModificationException.
---- Minecraft Crash Report ----
// But it works on my machine.
Time: 9/1/14 5:01 PM
Description: Initializing game
java.lang.NoClassDefFoundError: cpw/mods/fml/common/IPickupNotifier
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at cpw.mods.fml.common.ProxyInjector.inject(ProxyInjector.java:59)
at cpw.mods.fml.common.FMLModContainer.constructMod(FMLModContainer.java:492)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74)
at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47)
at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322)
at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304)
at com.google.common.eventbus.EventBus.post(EventBus.java:275)
at cpw.mods.fml.common.LoadController.sendEventToModContainer(LoadController.java:208)
at cpw.mods.fml.common.LoadController.propogateStateMessage(LoadController.java:187)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74)
at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47)
at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322)
at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304)
at com.google.common.eventbus.EventBus.post(EventBus.java:275)
at cpw.mods.fml.common.LoadController.distributeStateMessage(LoadController.java:118)
at cpw.mods.fml.common.Loader.loadMods(Loader.java:492)
at cpw.mods.fml.client.FMLClientHandler.beginMinecraftLoading(FMLClientHandler.java:204)
at net.minecraft.client.Minecraft.func_71384_a(Minecraft.java:480)
at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:867)
at net.minecraft.client.main.Main.main(SourceFile:148)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at net.minecraft.launchwrapper.Launch.launch(Launch.java:134)
at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
Caused by: java.lang.ClassNotFoundException: cpw.mods.fml.common.IPickupNotifier
at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:188)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 36 more
Caused by: java.lang.NullPointerException
at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:180)
... 38 more
A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------
-- Head --
Stacktrace:
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at cpw.mods.fml.common.ProxyInjector.inject(ProxyInjector.java:59)
at cpw.mods.fml.common.FMLModContainer.constructMod(FMLModContainer.java:492)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74)
at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47)
at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322)
at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304)
at com.google.common.eventbus.EventBus.post(EventBus.java:275)
at cpw.mods.fml.common.LoadController.sendEventToModContainer(LoadController.java:208)
at cpw.mods.fml.common.LoadController.propogateStateMessage(LoadController.java:187)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74)
at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47)
at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322)
at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304)
at com.google.common.eventbus.EventBus.post(EventBus.java:275)
at cpw.mods.fml.common.LoadController.distributeStateMessage(LoadController.java:118)
at cpw.mods.fml.common.Loader.loadMods(Loader.java:492)
at cpw.mods.fml.client.FMLClientHandler.beginMinecraftLoading(FMLClientHandler.java:204)
at net.minecraft.client.Minecraft.func_71384_a(Minecraft.java:480)
-- Initialization --
Details:
Stacktrace:
at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:867)
at net.minecraft.client.main.Main.main(SourceFile:148)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at net.minecraft.launchwrapper.Launch.launch(Launch.java:134)
at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
-- System Details --
Details:
Minecraft Version: 1.7.10
Operating System: Windows 7 (x86) version 6.1
Java Version: 1.7.0_67, Oracle Corporation
Java VM Version: Java HotSpot(TM) Client VM (mixed mode), Oracle Corporation
Memory: 96723784 bytes (92 MB) / 248528896 bytes (237 MB) up to 523501568 bytes (499 MB)
JVM Flags: 6 total; -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump -Xmx512M -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:-UseAdaptiveSizePolicy -Xmn128M
AABB Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used
IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0
FML: MCP v9.05 FML v7.10.18.1182 Minecraft Forge 10.13.0.1182 8 mods loaded, 8 mods active
mcp{9.05} [Minecraft Coder Pack] (minecraft.jar) Unloaded->Constructed
FML{7.10.18.1182} [Forge Mod Loader] (forge-1.7.10-10.13.0.1182.jar) Unloaded->Constructed
Forge{10.13.0.1182} [Minecraft Forge] (forge-1.7.10-10.13.0.1182.jar) Unloaded->Constructed
CodeChickenCore{1.0.2.11} [CodeChicken Core] (minecraft.jar) Unloaded->Constructed
NotEnoughItems{1.0.2.15} [Not Enough Items] (NotEnoughItems-1.7.10-1.0.2.15-universal.jar) Unloaded->Constructed
DamageIndicatorsMod{3.1.2} [Damage Indicators] ([1.7.2]DamageIndicatorsMod-3.1.2.jar) Unloaded->Constructed
customnpcs{1.6.4} [CustomNpcs] (CustomNPCs_1.6.4.zip) Unloaded
MapWriter{2.1.2} [MapWriter] (MapWriter-1.7.10-2.1.2.jar) Unloaded
Launched Version: 1.7.10
I Tryed Installing Liteloader so i could use Matmos mod.But When i installed it,It Crashed my game
Please Help me!
This is nothing to do with LiteLoader, you have a 1.6.4 mod in your mods folder and FML is trying to load it...
As Mumfrey said Custom NPC's is out of date, download the 1.7.10 version here and just because it's bugging me/maybe you want to know that there is an update for Damage Indicators (Version 3.2.0 for 1.7.10) which you can download here.
I have custom npcs mod? Meybe thats it...
I missed the ForgeGradle discussion this past weekend, but I've since written this tutorial on a hack to use updated MCP mappings in a FG LiteLoader build. I forgot to mention it in this thread, but now's a good time as any, for anybody desiring a little more from the FG deobf names - this was one of the main reasons for me spending a week developing a custom gradle system rather than using FG.
Some notes:
Note Block Display | Modules for the Macro / Keybind Mod
I don't make any minimaps
I Don't See the Custom NPCs Mod In The Mods Folder.
That's because that folder you've screenshotted is clearly not your mods folder, or more to the point, isn't the mods folder being loaded by the profile in question. Ask yourself why the folder is clearly called .minecraftnormal when usually the folder would be .minecraft hmmm?
It's clearly the wrong folder because the log you yourself posted earlier on mentioned: None of which show up in the above screenshot, so you're looking at the wrong folder.
This is not a liteloader issue. Sort your profiles out.