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

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

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

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.