Jump to content

How do I create a custom cactus, that can only spawn on a specific block?


leonardude

Recommended Posts

Hey all!

 

I have no idea how to create a custom cactus, but I to create a custom cactus that damages you like a normal cactus, but only spawns on a block from my mod.

 

This is the code for my cactus class:

 

 

package com.leonardude.zether.blocks;

 

import net.minecraft.block.Block;

import net.minecraft.block.material.Material;

 

import com.leonardude.zether.main.Zether;

 

public class BlockRedCactus extends Block {

 

public BlockRedCactus(int id, Material material) {

super(id, material);

this.setCreativeTab(Zether.zetherTab);

this.setHardness(12.0F);

this.setResistance(2000.0F);

this.setLightOpacity(255);

}

 

}

 

Thanks in advance!

Leonardude

Link to comment
Share on other sites

Um... (*cough, cough*) Look at the BlockCactus class (*cough, cough*), reference it (*cough, cough*), and use methods from it (*cough, cough*).

 

At least, that's how I made my cactus mod that made 15 new cacti... (that got deleted on PMC by a moderator with no modding experience who thought it "was too simple").

-Mitchellbrine

 

Minecraft can do ANYTHING, it's coded in Java and you got the full power of Java behind you when you code. So nothing is impossible.

It may be freaking fucking hard though, but still possible ;)

 

If you create a topic on Modder Support, live by this motto:

I don't want your charity, I want your information
Link to comment
Share on other sites

Here's my NON-CODED (;)) answer:

 

1) Extend BlockCactus

2) Take a look at BlockCactus

3) Find the right fields

4) Customize them to your own needs

-Mitchellbrine

 

Minecraft can do ANYTHING, it's coded in Java and you got the full power of Java behind you when you code. So nothing is impossible.

It may be freaking fucking hard though, but still possible ;)

 

If you create a topic on Modder Support, live by this motto:

I don't want your charity, I want your information
Link to comment
Share on other sites

I'm pretty sure the only method that I have to override is Block.canSustainPlant but that uses Enum Plant Types, and that only works for growing plants on vanilla blocks. I want my cactus to grow on my own version of sand, so I need to do other stuff with it than just override a method.

Link to comment
Share on other sites

I don't think that you guys know what I'm asking right now.

The current cactus spawning code uses the Enumeration DESERT, which means that it can only spawn or be place on sand, based on the if statements in the given methods. What I need to do is have my own cactus spawn on my own block, USING MY OWN ENUMERATION! (Bold wasn't working so I had to capitalize it) I don't know how to create my own enumeration that acts like the DESERT enumeration, but uses a custom block instead of sand.

Link to comment
Share on other sites

Hi

 

You're right that adding your own enum would be difficult.  Luckily you don't need to.

 

In canBlockStay:

 

The first four if statements check whether the cactus is next to another one.

The last one checks whether the block beneath the cactus will support its growth.

So why not change the call to canSustainPlant to your own checking code?

 

@Override canBlockStay in MyCustomCactus.canBlockStay and you're laughing.

 

-TGG

 

    /**
     * Can this block stay at this position.  Similar to canPlaceBlockAt except gets checked often with plants.
     */
    public boolean canBlockStay(World par1World, int x, int y, int z)
    {
        if (par1World.getBlockMaterial(x - 1, y, z).isSolid())
        {
            return false;
        }
        else if (par1World.getBlockMaterial(x + 1, y, z).isSolid())
        {
            return false;
        }
        else if (par1World.getBlockMaterial(x, y, z - 1).isSolid())
        {
            return false;
        }
        else if (par1World.getBlockMaterial(x, y, z + 1).isSolid())
        {
            return false;
        }
        else
        {
            int blockBeneathMe = par1World.getBlockId(x, y - 1, z);
            return blocksList[blockBeneathMe] != null && blocksList[blockBeneathMe].canSustainPlant(par1World, x, y - 1, z, ForgeDirection.UP, this);
        }
    }

 

Link to comment
Share on other sites

Hi

 

OK, I understand your confusion now.  I'd recommend you spend a bit of time doing some practice tutorials about inheritance in Java and especially how to override methods when you extend base classes.  Otherwise you'll struggle for days and get really frustrated because Minecraft uses that all the time.

 

http://docs.oracle.com/javase/tutorial/java/concepts/inheritance.html

http://docs.oracle.com/javase/tutorial/java/IandI/index.html

http://www.tutorialspoint.com/java/java_inheritance.htm

 

Unfortunately I can't really recommend any good tutorials for learning Java because I have come from C++, but perhaps some of the other folks on this forum could help.

 

-TGG

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

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