Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

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


leonardude
 Share

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
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.

 Share



  • Recently Browsing

    No registered users viewing this page.

  • Posts

    • Hi, I'm trying to make a forge server in minecraft 1.16.5 and when i open the .bat file to start the server i have an error and i dont know what is happening so if anyone can help me, thank you.  Version: 1.16.5  Forge version: 1.16.5-36.2.22   Error: 2022-01-19 20:42:25,004 main WARN Advanced terminal features are not available in this environment [20:42:25] [main/INFO] [cp.mo.mo.Launcher/MODLAUNCHER]: ModLauncher running: args [--gameDir, ., --launchTarget, fmlserver, --fml.forgeVersion, 36.2.22, --fml.mcpVersion, 20210115.111550, --fml.mcVersion, 1.16.5, --fml.forgeGroup, net.minecraftforge] [20:42:25] [main/INFO] [cp.mo.mo.Launcher/MODLAUNCHER]: ModLauncher 8.0.9+86+master.3cf110c starting: java version 16.0.2 by Oracle Corporation Exception in thread "main" java.lang.IllegalAccessError: class cpw.mods.modlauncher.SecureJarHandler (in unnamed module @0x5e4c8041) cannot access class sun.security.util.ManifestEntryVerifier (in module java.base) because module java.base does not export sun.security.util to unnamed module @0x5e4c8041         at cpw.mods.modlauncher.SecureJarHandler.lambda$static$1(SecureJarHandler.java:41)         at cpw.mods.modlauncher.api.LamdbaExceptionUtils.uncheck(LamdbaExceptionUtils.java:95)         at cpw.mods.modlauncher.SecureJarHandler.<clinit>(SecureJarHandler.java:41)         at cpw.mods.modlauncher.Launcher.lambda$new$6(Launcher.java:55)         at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1708)         at cpw.mods.modlauncher.api.TypesafeMap.computeIfAbsent(TypesafeMap.java:52)         at cpw.mods.modlauncher.api.TypesafeMap.computeIfAbsent(TypesafeMap.java:47)         at cpw.mods.modlauncher.Environment.computePropertyIfAbsent(Environment.java:62)         at cpw.mods.modlauncher.Launcher.<init>(Launcher.java:55)         at cpw.mods.modlauncher.Launcher.main(Launcher.java:66)         at net.minecraftforge.server.ServerMain$Runner.runLauncher(ServerMain.java:63)         at net.minecraftforge.server.ServerMain$Runner.access$100(ServerMain.java:60)         at net.minecraftforge.server.ServerMain.main(ServerMain.java:57)   Lates LOG:  [19ene.2022 20:42:25.197] [main/INFO] [cpw.mods.modlauncher.Launcher/MODLAUNCHER]: ModLauncher running: args [--gameDir, ., --launchTarget, fmlserver, --fml.forgeVersion, 36.2.22, --fml.mcpVersion, 20210115.111550, --fml.mcVersion, 1.16.5, --fml.forgeGroup, net.minecraftforge] [19ene.2022 20:42:25.201] [main/INFO] [cpw.mods.modlauncher.Launcher/MODLAUNCHER]: ModLauncher 8.0.9+86+master.3cf110c starting: java version 16.0.2 by Oracle Corporation   Debug: [19ene.2022 20:42:25.197] [main/INFO] [cpw.mods.modlauncher.Launcher/MODLAUNCHER]: ModLauncher running: args [--gameDir, ., --launchTarget, fmlserver, --fml.forgeVersion, 36.2.22, --fml.mcpVersion, 20210115.111550, --fml.mcVersion, 1.16.5, --fml.forgeGroup, net.minecraftforge] [19ene.2022 20:42:25.201] [main/INFO] [cpw.mods.modlauncher.Launcher/MODLAUNCHER]: ModLauncher 8.0.9+86+master.3cf110c starting: java version 16.0.2 by Oracle Corporation [19ene.2022 20:42:25.215] [main/DEBUG] [cpw.mods.modlauncher.LaunchServiceHandler/MODLAUNCHER]: Found launch services [minecraft,testharness,fmlclient,fmlserver]  
    • You can download builds of OpenJDK for free from Eclipse Adoptium or AdoptOpenJDK NOTE: The AdoptOpenJDK site is not liable to be around much longer as they became Eclipse Adoptium, however there are still some older builds that were not carried over to the new site
    • Please provide debug.log (more info on where it is and how to provide it can be found in my signature below, just expand the spoiler)
    • Please provide a screenshot of your launcher
    • You "deleted the phrase"? I'm not sure what that is supposed to mean.
  • Topics

  • Who's Online (See full list)

×
×
  • Create New...

Important Information

By using this site, you agree to our Privacy Policy.