leonardude Posted November 13, 2013 Share Posted November 13, 2013 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 Quote Link to comment Share on other sites More sharing options...
Mitchellbrine Posted November 14, 2013 Share Posted November 14, 2013 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"). Quote -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 More sharing options...
leonardude Posted November 14, 2013 Author Share Posted November 14, 2013 Can you give me a more direct answer using actual code please? Quote Link to comment Share on other sites More sharing options...
leonardude Posted November 14, 2013 Author Share Posted November 14, 2013 Like, do I extend BlockCactus or not? Quote Link to comment Share on other sites More sharing options...
Mitchellbrine Posted November 15, 2013 Share Posted November 15, 2013 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 Quote -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 More sharing options...
leonardude Posted November 15, 2013 Author Share Posted November 15, 2013 There is nothing in the BlockCactus class that lets me stack my cactus on top of others of my cacti, and there is nothing letting me make my cactus only be able to be put down on my custom block, so if you could help me with that, then that would be great! Quote Link to comment Share on other sites More sharing options...
TheGreyGhost Posted November 15, 2013 Share Posted November 15, 2013 Hi Some hints :-) BlockCactus.canPlaceBlockAt --> BlockCactus.canBlockStay --> Block.canSustainPlant If you look at these methods and understand how they work then you should be able to adapt them (override them) to do what you want. -TGG Quote Link to comment Share on other sites More sharing options...
leonardude Posted November 15, 2013 Author Share Posted November 15, 2013 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. Quote Link to comment Share on other sites More sharing options...
Mazetar Posted November 15, 2013 Share Posted November 15, 2013 I was about to reply but I see TGG said all I was about to say. He mentions the other relevant methods to look at. Understand how the three works internally and you should be good Quote If you guys dont get it.. then well ya.. try harder... Link to comment Share on other sites More sharing options...
leonardude Posted November 15, 2013 Author Share Posted November 15, 2013 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. Quote Link to comment Share on other sites More sharing options...
TheGreyGhost Posted November 15, 2013 Share Posted November 15, 2013 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); } } Quote Link to comment Share on other sites More sharing options...
leonardude Posted November 15, 2013 Author Share Posted November 15, 2013 I don't understand what I would need to do with canBlockStay to make it only work for my custom block. Quote Link to comment Share on other sites More sharing options...
TheGreyGhost Posted November 15, 2013 Share Posted November 15, 2013 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 Quote Link to comment Share on other sites More sharing options...
leonardude Posted November 15, 2013 Author Share Posted November 15, 2013 I know about inheritance and all of that. I've known Java for around two years. I just don't understand what to do relating to the cactus and what inheritance has to do with getting my cactus to only be able to be placed on my custom block. Quote Link to comment Share on other sites More sharing options...
TheGreyGhost Posted November 15, 2013 Share Posted November 15, 2013 Hi OK fair enough. I'll send you a private message. -TGG Quote Link to comment Share on other sites More sharing options...
leonardude Posted November 16, 2013 Author Share Posted November 16, 2013 Thanks! When can you message me? Quote Link to comment Share on other sites More sharing options...
Recommended Posts
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.