Posted April 27, 201411 yr So first off, the reason this is 1.6.4 is because it is for my modpack. I have made my own forge mod to go along with my modpack and I will update to 1.7.2 only when the vast majority of the current ones I have are updated. The item in question: A weapon (coded almost the same as a sword) called a "Cane" that changes into a powered up version of itself on right click (which I have achieved). But when the "powered up" Cane's durability runs out or gets to a certain level, I want it to automatically change back into the regular Cane then have a cooldown before you can power it up again. My goal: Get the Powered Cane to turn into a Cane when durability runs out. And if possible, add a cooldown to onItemRightClick or something that adds a right click cooldown function that still works with powering up the Cane. CaneGold.java is the regular cane I'm talking about CaneSword.java is the "Sword" tool that all canes extend from. CanePower.java is the "powered up" cane. You get this when right clicking the Gold Cane. (Which works) Here is my code: https://gist.github.com/EliteForges/e5067c9fceccdc039712 If you need any more info or something explained I will explain it, just ask!
April 27, 201411 yr Have a look at damageItem() it the Item class. Try to override it and make it change the ItemStack instead of deleting it. PM's regarding modding questions should belong in the Modder Support sub-forum and won't be answered.
April 27, 201411 yr Author How can I make an item change texture change and the item's damage in a method? EDIT: I updated CaneGold.java. Is this how I would properly set a cooldown timer so that it changes items? Or can I make it change texture, damage delt, and name for 10 seconds then change back into a gold cane? public static int ticks = 10; public static int use = 0; public static void givePoweredCane() { ItemStack Poweredcane = new ItemStack(Main.canePower); use=1; } public void onUpdate(ItemStack par1ItemStack, World par2World, Entity par3Entity, int par4, boolean par5) { if((use == 1) && (ticks > 0)){ ticks--; ItemStack cane = new ItemStack(Main.caneCool); } else if(ticks <= 0){ use = 0; ticks = 10; ItemStack cane = new ItemStack(Main.canegold); } } public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer player, Entity entity) { if(use==0) givePoweredCane(); CaneCooldown.givePoweredCane(); return itemStack; }
April 27, 201411 yr If you are using Eclipse, then you should probably be seeing warnings about unused variables in your methods. Heed them! Or turn the warnings on in your options, since that can save you heartaches in these kinds of instances. You are creating local variables in your methodsZ: ItemStack <stackname> = new ItemStack(<blah blah>) just creates an itemstack and promptly lets it get garbage collected and disappear. The way to make these persist is to store them in a persistent place or return them from methods. You do neither. The player has an inventory and a held itemstack, you might want to use one of them to store the new 'ItemStack' or at least spawn it in world and delete the original. -S- (if I helped, please click Thank and applaud) http://6upnqa.dm2301.livefilestore.com/y2mtf-vG7Tqq1TiiVpIm53KWj7294NDPoHfSHHb4PzZiMAUfRCfK0UY0MwOu7Q3zTBNVTKqWjr2-xgBfFRpQT5p-QivtvknPpoABMNUw9br9WuZcBFkjePhnAbW500gVm-P/sequiturian.png[/img]
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.