Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Featured Replies

Posted

Hi im a nobe and i know it.

 

Im working on a small mod thats based on Forge.

I want to add an item that takes damage when used in a crafting recipe like the handsaws from redpower.

I read that its uses Forge to function. I looked for something that could do that in the source files, google, Forge Wiki but i cant find anything.

 

Please If you know how to do it please tell me or point me in the right direction.

:)

 

EDIT:

Hi do annubody know how it works on 1.4?

 

 

(Sorry For my Spelling)

look at the crafting handler interface.

I do Forge for free, however the servers to run it arn't free, so anything is appreciated.
Consider supporting the team on Patreon

  • 4 weeks later...

hey, i am looking for some healp in the same thing like the author.

 

i looked in the ICraftingHandler, but i dont understand how it works :( do i have to create a ItemTool with this handler implemented?

 

and then make it like:

 

stack.setItemDamage(stack.getItemDamage() - 1);

 

greetz

helfull

Developing CocktailsMod :)

Success!!!

 

After mining (get it :)) through the source code for half a day (not to be provd of :)) I at last came up with a method which does what you want (and so do I).

 

!WARNING!

 

This is a code which was a result of a half a day of reading through the internet so it's not writen well. Also... if you can rewrite in a better state then do that and post it here please. So here goes:

 

 

@Override
        public void takenFromCrafting(EntityPlayer e, ItemStack item, IInventory m)
        {
        	for(int i=0; i<m.getSizeInventory(); i++)
    		{        	
        		if(m.getStackInSlot(i) != null)
        		{
        			ItemStack j = m.getStackInSlot(i);
        			if(j.getItem() != null && j.getItem() == this.pickSapphire)
        			{				
        				ItemStack k = new ItemStack(pickSapphire, 2);
        				k.damageItem(j.getItemDamage() + 1, e);
        				m.setInventorySlotContents(i, k);
        			}
        		}    			
    		}
        }

 

 

 

I think I also have some explaining to do :)

 

1. This goes in the mod_xxx.java

2. For loop loops through the slots in the current inventory (crafting table/inventory crafting space) looking for the item stated in the if statement

3. Now this is the stupid part but I couldn't find a better way... The truth is that takenFromCrafting is called before the ingredients are destroied or at least that is what I've found (Lex?) that is why you have to make an ItemStack of two Items so that one is destroied and the other stays in the grid

4. this in the if statement is the BaseMod class or the class having your item defined in

5. Then is just the damage calculation depending on the ingredient (Item)

 

This is it :) If you have some more questions be sure to ask and I'll respond asap.

 

Have fun, JKK.

 

EDIT: Eloraam if you see this, would you mind not die because of laughing :) Maybe even supply us with your code? (not begging ofc)

 

the line

if(j.getItem() != null && j.getItem() == this.pickSapphire)

 

could just be

 

if(j.getItem() == this.pickSapphire)

 

because if it equals pickSapphire it cannot be null

Not to be a smart ass but how are you going to get an Item out of Null? Tbh it is not needed as I checked if the Inventory slot was occupied but rather one too many then one too short :)

Thats actually quite similar to how El does it.

Except instead of creating a new ItemStack like a berp, she just edits the ItemStack instance.

stack.damage++;

stack.stackSize++;

Done.

 

As for this line:

if(j.getItem() != null && j.getItem() == this.pickSapphire)

the PROPER line should be:

if(j != null && j.getItem() == this.pickSapphire)

I do Forge for free, however the servers to run it arn't free, so anything is appreciated.
Consider supporting the team on Patreon

rly big thanks to JKK

 

i got it now to work :) i am now 1 step closer to release my mod

Developing CocktailsMod :)

Thats actually quite similar to how El does it.

Except instead of creating a new ItemStack like a berp, she just edits the ItemStack instance.

stack.damage++;

stack.stackSize++;

Done.

 

As for this line:

if(j.getItem() != null && j.getItem() == this.pickSapphire)

the PROPER line should be:

if(j != null && j.getItem() == this.pickSapphire)

Thank you for the respons Lex. Tbh I was trying out the solution that you first stated (++) but at that time I didn't know I need 2 stacks so I thought it somehow isn't working. For the second one... makes sence to use it that way.

Do not specify a damage value for it in the recipe and it will use all.

 

My recipe:

ModLoader.addShapelessRecipe(new ItemStack(DecPlanks, 4, 2),new Object[]{
Block.planks,Block.planks,Block.planks,Block.planks, Item.axeGold
	});

 

I can only use the golden axe once in the recipe, because when its damaged after the first time I use it in the recipe Its not new hence I cant use it anymore this is very frustrating. btw JKK, because you got it working, can you please help me out? I need this! Thank you!

  • 4 weeks later...
  • Author

Was Reading this and i was trying to get this working but i did something wrong. I got errors on the e and m's

 

After i pieced together what the comments said and i got it to this.

 

 

    for(int i=0; i<m.getSizeInventory(); i++)

    {       

    if(m.getStackInSlot(i) != null)

    {

    ItemStack j = m.getStackInSlot(i);

    if(j != null && j.getItem() == this.Test)

    {

    ItemStack k = new ItemStack(Test, 2);

    k.damageItem(j.getItemDamage() + 1, e);

    m.setInventorySlotContents(i, k);

    }

    }   

    }

 

 

 

What are wrong?!?!

  • 2 weeks later...

Use -1 as damage value in recipe, it will then accept items with any damage. (Can't test this, I just read it from the source code)

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

Important Information

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.