Jump to content

Recommended Posts

Posted

little help  i need whit this 

 

 

i have a lot of guns in mi mod in this case just speak about the SCARH, and i been working in make entityes capable of use this gun , i alredy have that

the trouble is than the gun run out from ammo,   

wel now i wanna give to this entity more spare munition just by rigth clicking it whith loaded magazine

 

i think lets make a little  inventory inside the gun itself (fusil-SCARH)  and set some more magazines for the later use of the mob

im planing to make an animation of the mob changin magazine when it gets empty

 

so i make this code based on the code from the entityLivingBase to store the 4 default armour slots

 

 

magazine55645.class

public boolean itemInteractionForEntity(ItemStack stack, EntityPlayer playerIn, EntityLivingBase target) {


	//get the gun from the entity
	ItemStack gun = target.getHeldItem(); 



	System.out.println("\n\n\n\n");

	if (gun != null & !playerIn.worldObj.isRemote) {

		ArrayList<ItemStack> inventario = new ArrayList<ItemStack>(0);

		NBTTagCompound tagCompund = gun.getTagCompound();

		NBTTagList nbttaglist = tagCompund.getTagList("Inventory", 6);

		System.out.println("In nbttaglist.tagCount()=" + nbttaglist.tagCount());

		for (int i = 0; i < nbttaglist.tagCount(); ++i) {
			ItemStack itemstack = ItemStack.loadItemStackFromNBT(nbttaglist.getCompoundTagAt(i));

			if (itemstack != null) {
				System.out.println("downSLot=" + i + " itemName=" + itemstack.getUnlocalizedName());
				inventario.add(itemstack);
			}

		}

		System.out.println("\n\n");

		inventario.add(magazine);
		System.out.println("inventario.size()=" + inventario.size());

		System.out.println("\n\n");

		nbttaglist = new NBTTagList();

		for (int i = 0; i < inventario.size(); ++i) {
			ItemStack itemstack = inventario.get(i);

			NBTTagCompound temp0 = new NBTTagCompound();

			if (itemstack != null) {

				System.out.println("upSLot=" + i + " itemName=" + itemstack.getUnlocalizedName());

				itemstack.writeToNBT(temp0);

				nbttaglist.appendTag(temp0);

			}
		}

		System.out.println("Out nbttaglist.tagCount()=" + nbttaglist.tagCount());

		tagCompund.setTag("Inventory", nbttaglist);

		gun.setTagCompound(tagCompund);


		int hand = playerIn.inventory.currentItem;
		//playerIn.replaceItemInInventory(hand, null);


	}

	return false;
}

// ####################################################################################3

 

 

what this does is first take the gun from the entity, read the nbttags an get the inventory from the gun, add this magazine  store back  the nbttags to the gun

the trouble is that when i read again the inventory from the gun, is empty, there is no magazines but i alredy store some magazines, and this code is not trowing any error

 

theories ??

 

thanks fro reading

 

 

console out put



//first try
[19:45:21] [server thread/INFO] [sTDOUT]: [mercenarymod.items.armasdefuego.cargador55645.cargador55645:itemInteractionForEntity:529]: 




[19:45:21] [server thread/INFO] [sTDOUT]: [mercenarymod.items.armasdefuego.cargador55645.cargador55645:itemInteractionForEntity:539]: In nbttaglist.tagCount()=0
[19:45:21] [server thread/INFO] [sTDOUT]: [mercenarymod.items.armasdefuego.cargador55645.cargador55645:itemInteractionForEntity:551]: 


[19:45:21] [server thread/INFO] [sTDOUT]: [mercenarymod.items.armasdefuego.cargador55645.cargador55645:itemInteractionForEntity:554]: inventario.size()=1
[19:45:21] [server thread/INFO] [sTDOUT]: [mercenarymod.items.armasdefuego.cargador55645.cargador55645:itemInteractionForEntity:556]: 


[19:45:21] [server thread/INFO] [sTDOUT]: [mercenarymod.items.armasdefuego.cargador55645.cargador55645:itemInteractionForEntity:567]: upSLot=0 itemName=cargador55645_Standar
[19:45:21] [server thread/INFO] [sTDOUT]: [mercenarymod.items.armasdefuego.cargador55645.cargador55645:itemInteractionForEntity:576]: Out nbttaglist.tagCount()=1
[19:45:23] [Client thread/INFO] [sTDOUT]: [mercenarymod.items.armasdefuego.cargador55645.cargador55645:itemInteractionForEntity:529]: 



//second try
[19:45:23] [server thread/INFO] [sTDOUT]: [mercenarymod.items.armasdefuego.cargador55645.cargador55645:itemInteractionForEntity:529]: 




[19:45:23] [server thread/INFO] [sTDOUT]: [mercenarymod.items.armasdefuego.cargador55645.cargador55645:itemInteractionForEntity:539]: In nbttaglist.tagCount()=0
[19:45:23] [server thread/INFO] [sTDOUT]: [mercenarymod.items.armasdefuego.cargador55645.cargador55645:itemInteractionForEntity:551]: 


[19:45:23] [server thread/INFO] [sTDOUT]: [mercenarymod.items.armasdefuego.cargador55645.cargador55645:itemInteractionForEntity:554]: inventario.size()=1
[19:45:23] [server thread/INFO] [sTDOUT]: [mercenarymod.items.armasdefuego.cargador55645.cargador55645:itemInteractionForEntity:556]: 


[19:45:23] [server thread/INFO] [sTDOUT]: [mercenarymod.items.armasdefuego.cargador55645.cargador55645:itemInteractionForEntity:567]: upSLot=0 itemName=cargador55645_Standar
[19:45:23] [server thread/INFO] [sTDOUT]: [mercenarymod.items.armasdefuego.cargador55645.cargador55645:itemInteractionForEntity:576]: Out nbttaglist.tagCount()=1
[19:45:24] [Client thread/INFO] [sTDOUT]: [mercenarymod.items.armasdefuego.cargador55645.cargador55645:itemInteractionForEntity:529]: 



//third  try   the inventory in the gun is still enmpty
[19:45:24] [server thread/INFO] [sTDOUT]: [mercenarymod.items.armasdefuego.cargador55645.cargador55645:itemInteractionForEntity:529]: 




[19:45:24] [server thread/INFO] [sTDOUT]: [mercenarymod.items.armasdefuego.cargador55645.cargador55645:itemInteractionForEntity:539]: In nbttaglist.tagCount()=0
[19:45:24] [server thread/INFO] [sTDOUT]: [mercenarymod.items.armasdefuego.cargador55645.cargador55645:itemInteractionForEntity:551]: 


[19:45:24] [server thread/INFO] [sTDOUT]: [mercenarymod.items.armasdefuego.cargador55645.cargador55645:itemInteractionForEntity:554]: inventario.size()=1
[19:45:24] [server thread/INFO] [sTDOUT]: [mercenarymod.items.armasdefuego.cargador55645.cargador55645:itemInteractionForEntity:556]: 


[19:45:24] [server thread/INFO] [sTDOUT]: [mercenarymod.items.armasdefuego.cargador55645.cargador55645:itemInteractionForEntity:567]: upSLot=0 itemName=cargador55645_Standar
[19:45:24] [server thread/INFO] [sTDOUT]: [mercenarymod.items.armasdefuego.cargador55645.cargador55645:itemInteractionForEntity:576]: Out nbttaglist.tagCount()=1
[19:45:24] [Client thread/INFO] [sTDOUT]: [mercenarymod.items.armasdefuego.cargador55645.cargador55645:itemInteractionForEntity:529]: 




[19:45:24] [server thread/INFO] [sTDOUT]: [mercenarymod.items.armasdefuego.cargador55645.cargador55645:itemInteractionForEntity:529]: 

Posted

Why are you trying to store the inventory in the gun itself, rather than on the entity? Wouldn't it make more sense for the entity to have extra inventory slots to hold the ammo, so you can give it ammo at any time? Then, if it somehow loses the gun, it would still have the extra ammo.

 

As to your problem, you should use the Constants.NBT utility class provided by Forge when retrieving tags, and understand that when retrieving an NBTTagList, the type you pass in is the type of object stored in the list, not the list type itself.

// 6 = TAG_DOUBLE, are you storing a list of doubles? No.
NBTTagList nbttaglist = tagCompund.getTagList("Inventory", 6);

// you are storing a list of NBTTagCompounds, so use the appropriate type
NBTTagList nbttaglist = tagCompund.getTagList("Inventory", Constants.NBT.TAG_COMPOUND);

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



×
×
  • Create New...

Important Information

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