Jump to content

Recommended Posts

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)

  • 4 weeks later...
Posted

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 :)

Posted

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)

 

Posted

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

Posted

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 :)

Posted

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

Posted

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.

Posted

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

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

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

×   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



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Im trying to build my mod using shade since i use the luaj library however i keep getting this error Reason: Task ':reobfJar' uses this output of task ':shadowJar' without declaring an explicit or implicit dependency. This can lead to incorrect results being produced, depending on what order the tasks are executed. So i try adding reobfJar.dependsOn shadowJar  Could not get unknown property 'reobfJar' for object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler. my gradle file plugins { id 'eclipse' id 'idea' id 'maven-publish' id 'net.minecraftforge.gradle' version '[6.0,6.2)' id 'com.github.johnrengelman.shadow' version '7.1.2' id 'org.spongepowered.mixin' version '0.7.+' } apply plugin: 'net.minecraftforge.gradle' apply plugin: 'org.spongepowered.mixin' apply plugin: 'com.github.johnrengelman.shadow' version = mod_version group = mod_group_id base { archivesName = mod_id } // Mojang ships Java 17 to end users in 1.18+, so your mod should target Java 17. java.toolchain.languageVersion = JavaLanguageVersion.of(17) //jarJar.enable() println "Java: ${System.getProperty 'java.version'}, JVM: ${System.getProperty 'java.vm.version'} (${System.getProperty 'java.vendor'}), Arch: ${System.getProperty 'os.arch'}" minecraft { mappings channel: mapping_channel, version: mapping_version copyIdeResources = true runs { configureEach { workingDirectory project.file('run') property 'forge.logging.markers', 'REGISTRIES' property 'forge.logging.console.level', 'debug' arg "-mixin.config=derp.mixin.json" mods { "${mod_id}" { source sourceSets.main } } } client { // Comma-separated list of namespaces to load gametests from. Empty = all namespaces. property 'forge.enabledGameTestNamespaces', mod_id } server { property 'forge.enabledGameTestNamespaces', mod_id args '--nogui' } gameTestServer { property 'forge.enabledGameTestNamespaces', mod_id } data { workingDirectory project.file('run-data') args '--mod', mod_id, '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/') } } } sourceSets.main.resources { srcDir 'src/generated/resources' } repositories { flatDir { dirs './libs' } maven { url = "https://jitpack.io" } } configurations { shade implementation.extendsFrom shade } dependencies { minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}" implementation 'org.luaj:luaj-jse-3.0.2' implementation fg.deobf("com.github.Virtuoel:Pehkui:${pehkui_version}") annotationProcessor 'org.spongepowered:mixin:0.8.5:processor' minecraftLibrary 'luaj:luaj-jse:3.0.2' shade 'luaj:luaj-jse:3.0.2' } // Example for how to get properties into the manifest for reading at runtime. tasks.named('jar', Jar).configure { manifest { attributes([ 'Specification-Title' : mod_id, 'Specification-Vendor' : mod_authors, 'Specification-Version' : '1', // We are version 1 of ourselves 'Implementation-Title' : project.name, 'Implementation-Version' : project.jar.archiveVersion, 'Implementation-Vendor' : mod_authors, 'Implementation-Timestamp': new Date().format("yyyy-MM-dd'T'HH:mm:ssZ"), "TweakClass" : "org.spongepowered.asm.launch.MixinTweaker", "TweakOrder" : 0, "MixinConfigs" : "derp.mixin.json" ]) } rename 'mixin.refmap.json', 'derp.mixin-refmap.json' } shadowJar { archiveClassifier = '' configurations = [project.configurations.shade] finalizedBy 'reobfShadowJar' } assemble.dependsOn shadowJar reobf { re shadowJar {} } publishing { publications { mavenJava(MavenPublication) { artifact jar } } repositories { maven { url "file://${project.projectDir}/mcmodsrepo" } } }  
    • All versions of Minecraft Forge suddenly black screen even without mods (tried reinstalling original Minecraft, Java, updating drivers doesn't work)
    • When i join minecraft all ok, when i join world all working fine, but when i open indentity menu, i get this The game crashed whilst unexpected error Error: java.lang.NullPointerException: Cannot invoke "top.ribs.scguns.common.Gun$Projectile.getDamage()" because "this.projectile" is null crash report here https://paste.ee/p/0vKaf
  • Topics

×
×
  • Create New...

Important Information

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