Jump to content

Item damage in contructor


Edska

Recommended Posts

Hello,

 

I am trying to write my first mod. Everything goes fine, but I have one problem. How can I set item damage on item when it is found or created? Now I have this code:

 

public BrokenItem(int par1) {
	super(par1); 
	setMaxStackSize(1);
	setMaxDamage(1000);	
}

 

I would like to create broken items. For example with 500 durability when they are found.

Link to comment
Share on other sites

The item classes are, like the block classes, only instanciated once, meaning if you set a variable in the item class, it will be changed for all loaded "items" in the world and even across worlds.

What you want to achieve is saved into an ItemStack. It's instanciated for each "item", making it unique. There you can store the damage value and even NBT data. I suggest you look at it, for your specific problem you should use itemStackInstance.setItemDamage(damageValue)

Don't ask for support per PM! They'll get ignored! | If a post helped you, click the "Thank You" button at the top right corner of said post! |

mah twitter

This thread makes me sad because people just post copy-paste-ready code when it's obvious that the OP has little to no programming experience. This is not how learning works.

Link to comment
Share on other sites

But how can I call that ItemStack in my constructor or apply my created ItemStack to my item? I tried this in my constructor:

 

ItemStack itemstack = new ItemStack(par1, 1, 500);

 

and when I check this:

 

getItemDamageFromStack(itemstack)

 

I get that it is 500 damaged, but nothing changes on my items.

Link to comment
Share on other sites

When i understood it right you want it when you craft that item/tool that it is half broken?

 

When you mean that you could tell that the Itemdamage is at the recipe is like that you want:

 

Like this:

 

ModLoader.addRecipe(new ItemStack(yourItem, 1, damage), new Object[] {"X", 'X', Block.dirt});

 

Important for everyone who want to tell modloader sucks/isbad use gameregisty:

 

ModLoader is a PathProxy To gameRegisty and Gameregisty goes to the crafting manager so it does not matter if it is gameregistry or Modloader.

 

I personaly made my own PathProxy and does even not use Both of them xD

Link to comment
Share on other sites

When i understood it right you want it when you craft that item/tool that it is half broken?

 

When you mean that you could tell that the Itemdamage is at the recipe is like that you want:

 

Like this:

 

ModLoader.addRecipe(new ItemStack(yourItem, 1, damage), new Object[] {"X", 'X', Block.dirt});

 

Important for everyone who want to tell modloader sucks/isbad use gameregisty:

 

ModLoader is a PathProxy To gameRegisty and Gameregisty goes to the crafting manager so it does not matter if it is gameregistry or Modloader.

 

I personaly made my own PathProxy and does even not use Both of them xD

 

You know that this "PathProxy" is client-sided? Meaning it will likely not work on a dedicated server. Also what if the Forge devs drop the ModLoader compatibility? Or if ModLoader changes something about this method and Forge adapts those changes after a couple releases? You are better off with using the Forge methods, trust me.

Don't ask for support per PM! They'll get ignored! | If a post helped you, click the "Thank You" button at the top right corner of said post! |

mah twitter

This thread makes me sad because people just post copy-paste-ready code when it's obvious that the OP has little to no programming experience. This is not how learning works.

Link to comment
Share on other sites

My Pathproxy is on both sides! Trust me! When mine does not work then it will not work with every pathproxy (gameregistry, modloader)

 

Here my PathProxy:

 

package speiger.src.api.common.functions;

import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;

import cpw.mods.fml.common.registry.GameRegistry;
import net.minecraft.block.Block;
import net.minecraft.client.settings.GameSettings;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.CraftingManager;
import net.minecraft.item.crafting.FurnaceRecipes;
import net.minecraft.item.crafting.IRecipe;
import net.minecraft.item.crafting.ShapedRecipes;
import net.minecraft.src.ModLoader;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.ForgeDirection;

public class PathProxy 
{

    public static void registerTile(Class<? extends TileEntity> tileEntityClass, String id)
    {
        TileEntity.addMapping(tileEntityClass, id);
    }

    public static void addRecipe(ItemStack output, Object... params)
    {
        CraftingManager.getInstance().func_92051_a(output, params);
    }

    public static void addSRecipe(ItemStack output, Object... params)
    {
        CraftingManager.getInstance().addShapelessRecipe(output, params);
    }

    public static void addRecipe(IRecipe recipe)
    {
        CraftingManager.getInstance().getRecipeList().add(recipe);
    }

    public static void addSmelting(int input, ItemStack output, float xp)
    {
        FurnaceRecipes.smelting().addSmelting(input, output, xp);
    }


    public static void registItem(Item id, String name)
    {
    	GameRegistry.registerItem(id, name);
    }
    
    public static void registBlock(Block block, Class<? extends ItemBlock> itemclass, String name)
    {
    	GameRegistry.registerBlock(block, itemclass, name);
    }
    
    
    public static void addSmelting(int itemID, int metadata, ItemStack itemstack, float experience)
    {
    	FurnaceRecipes.smelting().addSmelting(itemID, metadata, itemstack, experience);
    }

public static int getFuel(ItemStack par1) 
{
	// TODO Auto-generated method stub
	return 0;
}

public static void removeRecipe(ItemStack resultItem) {
	List<IRecipe> recipes = CraftingManager.getInstance().getRecipeList();
	for (int i = 0; i < recipes.size(); i++)
	{
		IRecipe tmpRecipe = recipes.get(i);
		if (tmpRecipe instanceof ShapedRecipes) {
			ShapedRecipes recipe = (ShapedRecipes)tmpRecipe;
			ItemStack recipeResult = recipe.getRecipeOutput();

			if (ItemStack.areItemStacksEqual(resultItem, recipeResult)) {
				recipes.remove(i--);
			}
		}
	}
}

    public static int setNextFacing(int i)
    {
    	if(i == ForgeDirection.NORTH.ordinal())return ForgeDirection.EAST.ordinal();
    	else if(i == ForgeDirection.EAST.ordinal())return ForgeDirection.SOUTH.ordinal();
    	else if(i == ForgeDirection.SOUTH.ordinal())return ForgeDirection.WEST.ordinal();
    	else if(i == ForgeDirection.WEST.ordinal())return ForgeDirection.NORTH.ordinal();
    	else return 0;
    }
    
    public static void addBlockRecipe(ItemStack par1, ItemStack par2)
    {
    	CraftingManager.getInstance().func_92051_a(par1, new Object[]{"XXX", "XXX", "XXX", 'X', par2});
    }
}

Link to comment
Share on other sites

My Pathproxy is on both sides! Trust me! When mine does not work then it will not work with every pathproxy (gameregistry, modloader)

 

Here my PathProxy:

 

package speiger.src.api.common.functions;

import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;

import cpw.mods.fml.common.registry.GameRegistry;
import net.minecraft.block.Block;
import net.minecraft.client.settings.GameSettings;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.CraftingManager;
import net.minecraft.item.crafting.FurnaceRecipes;
import net.minecraft.item.crafting.IRecipe;
import net.minecraft.item.crafting.ShapedRecipes;
import net.minecraft.src.ModLoader;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.ForgeDirection;

public class PathProxy 
{

    public static void registerTile(Class<? extends TileEntity> tileEntityClass, String id)
    {
        TileEntity.addMapping(tileEntityClass, id);
    }

    public static void addRecipe(ItemStack output, Object... params)
    {
        CraftingManager.getInstance().func_92051_a(output, params);
    }

    public static void addSRecipe(ItemStack output, Object... params)
    {
        CraftingManager.getInstance().addShapelessRecipe(output, params);
    }

    public static void addRecipe(IRecipe recipe)
    {
        CraftingManager.getInstance().getRecipeList().add(recipe);
    }

    public static void addSmelting(int input, ItemStack output, float xp)
    {
        FurnaceRecipes.smelting().addSmelting(input, output, xp);
    }


    public static void registItem(Item id, String name)
    {
    	GameRegistry.registerItem(id, name);
    }
    
    public static void registBlock(Block block, Class<? extends ItemBlock> itemclass, String name)
    {
    	GameRegistry.registerBlock(block, itemclass, name);
    }
    
    
    public static void addSmelting(int itemID, int metadata, ItemStack itemstack, float experience)
    {
    	FurnaceRecipes.smelting().addSmelting(itemID, metadata, itemstack, experience);
    }

public static int getFuel(ItemStack par1) 
{
	// TODO Auto-generated method stub
	return 0;
}

public static void removeRecipe(ItemStack resultItem) {
	List<IRecipe> recipes = CraftingManager.getInstance().getRecipeList();
	for (int i = 0; i < recipes.size(); i++)
	{
		IRecipe tmpRecipe = recipes.get(i);
		if (tmpRecipe instanceof ShapedRecipes) {
			ShapedRecipes recipe = (ShapedRecipes)tmpRecipe;
			ItemStack recipeResult = recipe.getRecipeOutput();

			if (ItemStack.areItemStacksEqual(resultItem, recipeResult)) {
				recipes.remove(i--);
			}
		}
	}
}

    public static int setNextFacing(int i)
    {
    	if(i == ForgeDirection.NORTH.ordinal())return ForgeDirection.EAST.ordinal();
    	else if(i == ForgeDirection.EAST.ordinal())return ForgeDirection.SOUTH.ordinal();
    	else if(i == ForgeDirection.SOUTH.ordinal())return ForgeDirection.WEST.ordinal();
    	else if(i == ForgeDirection.WEST.ordinal())return ForgeDirection.NORTH.ordinal();
    	else return 0;
    }
    
    public static void addBlockRecipe(ItemStack par1, ItemStack par2)
    {
    	CraftingManager.getInstance().func_92051_a(par1, new Object[]{"XXX", "XXX", "XXX", 'X', par2});
    }
}

 

I'm not talking about your PathProxy, lol. I'm talking about the ModLoader class.

Don't ask for support per PM! They'll get ignored! | If a post helped you, click the "Thank You" button at the top right corner of said post! |

mah twitter

This thread makes me sad because people just post copy-paste-ready code when it's obvious that the OP has little to no programming experience. This is not how learning works.

Link to comment
Share on other sites

In the modloader class it looks like this:

 

public static void addRecipe(ItemStack par1, Object... params)

{

    GameRegistry.addRecipe(par1, params);

}

 

nothing else does modloader in forge do its like mine pathproxy but for modloader mods^^

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

    • हथियार व्यापारियों की चमक आज के समय में भारत और दुनिया के विभिन्न हिस्सों में तेजी से बढ़ रही है। स्वीडन की स्थित संस्था सिपरी की नवीनतम रिपोर्ट के अनुसार, विश्व भर में विभिन्न देश अब पूर्व कभी नहीं देखे गए हथियारों और सैन्य सामग्रियों पर धन का व्यय कर रहे हैं। वैश्विक संघर्षों के बढ़ते संकेतों के कारण, विश्व के कई हिस्सों में युद्ध की संभावनाएं बढ़ रही हैं। पश्चिमी एशिया में युद्ध की आग फैल रही है, जबकि दक्षिण चीन सागर और ताइवान में भी तनाव बढ़ रहा है। भारत-चीन सीमा पर भी स्थिति चिंताजनक है। इन घटनाओं के परिणामस्वरूप, विभिन्न देशों की प्राथमिकताएं बदल रही हैं, और हथियार व्यापारियों का धंधा आजकल चमक उठा है। सिपरी की रिपोर्ट के अनुसार, 2023 में वैश्विक सैन्य खर्च एक नया रिकॉर्ड स्थापित किया गया है। 2022 की तुलना में, 2023 में सैन्य खर्च 6.8 फीसदी बढ़कर 24.4 ट्रिलियन डॉलर पर पहुंच गया। इसके पीछे कुछ विशेष कारण हैं, जिनमें दुनिया भर में तनाव बढ़ना और अद्यतित सैन्य तैयारियों की आवश्यकता शामिल है। इस वृद्धि में, भारत जैसे देशों का योगदान भी अधिक है। भारत ने भी अपने सैन्य खर्चों में वृद्धि की है, और यह दुनिया के सबसे बड़े और सबसे प्रभावशाली राष्ट्रों में एक बन गया है। इसके अलावा, अमेरिका, चीन, और रूस भी सैन्य खर्च में वृद्धि की हैं, जिससे विश्व सुरक्षा में नए दायरे खुले हैं। संभावनाओं के इस नए मंच पर, दुनिया के सक्षम देश अब अपने सैन्य तैयारियों में ज्यादा ध्यान दे रहे हैं। यह वृद्धि विकास और प्रगति के बजट पर भी प्रभाव डाल रही है, जिससे विभिन्न देशों के आर्थिक प्रगति में बदलाव आ सकता है।   https://www.nayaindia.com/editorial-column/editorial1/arms-sales-increased-in-the-world-454072.html
    • Hello, Hi and I am making a forge 1.12.2 mod and also trying to get a custom model helmet item (I made a joker mask) and exported it to .json format and put it in the ~/namespace/models/item folder. Though, I'm struggling to get the item to render what I want it to be rendered like as I've positioned it in the 'head' window view in blockbench. How did you render out your model? I checked your code and it looks like no references to the actual model are being made. I'm new to this forge modding stuff (was a fabric modder) and I desperately need some help. Is there a way to standardly render out armor models made using blockbench? any methods that one can use? My model in JSON: ```json { "credit": "Made with Blockbench", "texture_size": [160, 160], "textures": { "0": "ydyrn:items/joker_mask_texture", "particle": "ydyrn:items/joker_mask_texture" }, "elements": [ { "from": [0, 0, 0], "to": [16, 16, 1], "faces": { "north": {"uv": [0, 1.7, 16, 14.2], "texture": "#0"}, "east": {"uv": [0, 4, 0.9, 5.6], "texture": "#0"}, "south": {"uv": [0, 5.8, 1.6, 7.4], "texture": "#0"}, "west": {"uv": [0, 1.9, 1.3, 3.5], "texture": "#0"}, "up": {"uv": [0, 3.4, 1.6, 4.2], "texture": "#0"}, "down": {"uv": [0, 9, 1.6, 9.7], "texture": "#0"} } }, { "from": [15.8, 11, 0.5], "to": [16.2, 13, 15], "faces": { "north": {"uv": [7.9, 7.9, 7.94, 8.1], "texture": "#0"}, "east": {"uv": [7.9, 7.9, 9.35, 8.1], "texture": "#0"}, "south": {"uv": [7.9, 7.9, 7.94, 8.1], "texture": "#0"}, "west": {"uv": [7.9, 7.9, 9.35, 8.1], "texture": "#0"}, "up": {"uv": [7.9, 7.9, 7.94, 9.35], "texture": "#0"}, "down": {"uv": [7.9, 7.9, 7.94, 9.35], "texture": "#0"} } }, { "from": [0.2, 11, 14.6], "to": [15.8, 13, 15], "faces": { "north": {"uv": [7.9, 7.9, 9.46, 8.1], "texture": "#0"}, "east": {"uv": [7.9, 7.9, 7.94, 8.1], "texture": "#0"}, "south": {"uv": [7.9, 7.9, 9.46, 8.1], "texture": "#0"}, "west": {"uv": [7.9, 7.9, 7.94, 8.1], "texture": "#0"}, "up": {"uv": [7.9, 7.9, 9.46, 7.94], "texture": "#0"}, "down": {"uv": [7.9, 7.9, 9.46, 7.94], "texture": "#0"} } }, { "from": [-0.2, 11, 0.5], "to": [0.2, 13, 15], "faces": { "north": {"uv": [7.9, 7.9, 7.94, 8.1], "texture": "#0"}, "east": {"uv": [7.9, 7.9, 9.35, 8.1], "texture": "#0"}, "south": {"uv": [7.9, 7.9, 7.94, 8.1], "texture": "#0"}, "west": {"uv": [7.9, 7.9, 9.35, 8.1], "texture": "#0"}, "up": {"uv": [7.9, 7.9, 7.94, 9.35], "texture": "#0"}, "down": {"uv": [7.9, 7.9, 7.94, 9.35], "texture": "#0"} } } ], "display": { "thirdperson_righthand": { "translation": [-0.25, -2.75, 0], "scale": [0.3, 0.3, 0.3] }, "thirdperson_lefthand": { "translation": [-0.25, -2.75, 0], "scale": [0.3, 0.3, 0.3] }, "firstperson_righthand": { "rotation": [-9, 115, 15], "translation": [0, 1.25, -1.75], "scale": [0.5, 0.5, 0.5] }, "firstperson_lefthand": { "rotation": [-9, 115, 15], "translation": [0, 1.25, -1.75], "scale": [0.5, 0.5, 0.5] }, "ground": { "rotation": [40, 0, 0], "translation": [0, -2.5, 0], "scale": [0.5, 0.5, 0.5] }, "gui": { "rotation": [0, 180, 0] }, "head": { "translation": [0, 0, 0.25], "scale": [0.82773, 0.73594, 0.9] }, "fixed": { "translation": [0, 0, 8.75] } }, "groups": [ 0, { "name": "straps", "origin": [0, 0, 0], "color": 0, "children": [1, 2, 3] } ] } ```
    • Add the crash-report or latest.log (logs-folder) with sites like https://paste.ee/ and paste the link to it here  
    • In your config folder, delete the sophisticatedcore-common.toml file and test it again
  • Topics

×
×
  • Create New...

Important Information

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