Jump to content

sep87x

Members
  • Posts

    68
  • Joined

  • Last visited

Posts posted by sep87x

  1. java.lang.RuntimeException: java.lang.ClassNotFoundException: cpw.mods.fml.common.asm.FMLSanityChecker

     

    Finally. I am not entirely sure, but I guess I found the source of the ClassNotFound error. As I read through the stack trace and searched for the path inside the jar, I couldn't find the common directory, the repackage and the server directory inside cpw/mods/fml. Might that be the source of the error? And what would be a way to fix this?

  2. Hey there,

     

    This guy talk about a modify in the sources, but how can I override a basic method from MC without use Super?

     

    Is this then a coremod or a basicmod?

     

    I've posted a similary question yesterday about editing the sources. As far as I understood, this needs to be a coremod and you need to know a bit about ASM. Though it hasn't been fixed yet, it contains a huge amount of information about ASM, coremods and modification of base class sources.

     

    http://www.minecraftforge.net/forum/index.php/topic,10464.0.html

     

    And how can I find the right method?

     

    I don't know where the method could be located, but I guess that it's in a server-running class, a client-running class or the world class. (i haven't checked it yet)

     

    And the last question: Is is posibile to make a only serverside mod or must the "slow-down" timecycle be clientside?

     

    The @SideOnly annotation might help you out. With this annotation you are able to define on which side this method can be executed, so methods with the annotation @SideOnly(Side.CLIENT) can only be called by a client source.

     

    The "slow-down" timecycle needs to be (in my opinion) on the server side.

  3. @Chibill is right, but I found a more appropriate method. If you look inside the ItemHoe class, you'll find a method to use a hoe on a block. The code looks as follows:

     

                UseHoeEvent event = new UseHoeEvent(par2EntityPlayer, par1ItemStack, par3World, par4, par5, par6); // Create a new event on creating farmland
                if (MinecraftForge.EVENT_BUS.post(event)) // Push the event into the bus, returns false when cancelled
                {
                    return false;
                }
    
                if (event.getResult() == Result.ALLOW) // Event returns true when dirt can be changed to farmland
                {
                    par1ItemStack.damageItem(1, par2EntityPlayer); // Do your stuff here
                    return true;
                }
    

     

    You'll find this in the onItemUse() method :)

     

    I don't know if you can use this for a "non existing" hoe stack (new ItemStack(Item.stoneHoe)), but it's worth a try.

  4. Argh, me stupid ::)

     

    I added it to the vm args. Well, it recognizes the mod as a coremod, BUT there is another hurdle that popped up suddenly. There's a ClassNotFound exception in the package cpw.mods.fml.common.asm.FMLSanityChecker. See the full stack trace here: http://gw.minecraftforge.net/uPpv Is this normal?

     

    My nerves are done for today. I guess I should wait for the next morning to come. Thanks to anyone who has helped me so far.

     

    P.S. The class exists in the package explorer.

     

    y8LTHgn.png

  5. I still don't get it. There must be something wrong when running MC. I removed the class with the @Mod annotation, moved anything to a ModContainer, and put the path into the gteModContainerClass() method of the FMLLoadingPlugin class. There must be something wrong with the running settings. I added the argument and added an environment variable.

     

    uiEqWA8.png

     

    dC1cG04.png

     

    I just don't get it. What am I doing wrong?

  6. As far as I understood: I have two "main" classes now, the ModDesertWells class (\w @Mod annotation) and the DesertGenFMLLoadingPlugin (implements IFMLLoadingPlugin). Is it possible to "merge" both files? I mean if I can use the implementation in my ModDesertWells class? And ...

     

    I tried to add the argument (in program arguments) "fml.coreMods.load net.sep87x.desertwells.DesertGenFMLLoadingPlugin", but it didn't work. Am I doing something wrong?

     

    I am very sorry to ask so much. I'm new to coremods. Alternatively a link about coremods would be MUCH more appreciated. I couldn't find a page where coremods are being described.

  7. I'm sorry but I'm a bit confused now. I don't have an idea about coremods, so I need to ask. The DesertGenFMLLoadingPlugin (http://gw.minecraftforge.net/RBEG) class is the main class of the core mod. I've already "linked" the ClassTransformer in it. Do I need to add the name of the "original" mod in the method getModContainerClass(), so ModDesertWells.class.getName()? What does the manifest file look like? And I tried to add the argument (in program arguments) "fml.coreMods.load net.sep87x.desertwells.DesertGenFMLLoadingPlugin", but it didn't work. Am I doing something wrong?

  8. I haven't coded items for a long time, but this might help you. In your item class, you add the method onItemUse(), get the player, get his looking vector and set an air block at the given coordinates of the vector. (and spawn a drop)

  9. Okay, so I read through the whole thing and made the following: I set up a IClassTransformer which locates the decorate()-function inside the BiomeGenDesert class. With some byte code stuff I attempted to remove these lines:

     

                WorldGenDesertWells worldgendesertwells = new WorldGenDesertWells();
                worldgendesertwells.generate(par1World, par2Random, k, par1World.getHeightValue(k, l) + 1, l);

     

    (Small amount of code, I hope it is okay to post it directly here)

     

    ... and make it to this:

     

                new FakeWorldGenDesertWells().generate(par1World, par2Random, k, par1World.getHeightValue(k, l) + 1, l);

     

    I wrote it out and retrieved the byte code. My class transformer looks like this now: http://gw.minecraftforge.net/Ybvi

     

    Before compiling, I have some questions left. Where do I need to register the class transformer and the FMLLoadingPlugin (onInit() should be clear, but which class is needed)? There are some other classes with the decorate()-method in it as I looked inside conf/methods. At the code it is now, should it be clear which method I want? I think "a" is a bit short ... even for a recompiled source.

  10. In any case it sounds quite extreme to do it like that, are you sure there aren't better ways to do the generation?

     

    My current plan was to make the "custom" generation only one method in the main class to call, but diesieben07 had the better idea.

     

    How I would do it: Disable the vanilla WorldGenDesertWell by removing the override BiomeGenDesert.decorate via ASM (should be quite easy). That will stop the generation and then just generate a new type of well.

     

    Thanks for that. Is there already an interface for that in Forge? I know I have to read something about ASM, but I already know a byte about it.

  11. Hey there,

     

    I'm having some problems with a mod I'm working on. I want to rewrite the WorldGenDesertWells class so they become useful (seriously, they are pretty useless as they are now). As I finished and made the whole re-compile-obfuscate-blah procedure I recognized and remembered that it's impossible due to the new 1.6 update to replace base class files. Now I'm having a bit of a problem: I read a lot about ClassTransformers and stuff, but it didn't fit my imagination.

     

    So my question is: is there any way to replace a whole vanilla class? The "new" class contains a new field, a (quiet huge) method and some changes in the generate() method. I do not own the original class file, because I've already edited it. Does anyone have an idea on how to do this? I am very close to release this mod and this is my last hurdle. I don't want to start the whole project all over again.

     

    Greets from Germany

    ~ sep87x

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.