Jump to content

[Solved]How would I use NBT on a Item( to store a randomly generated number)


gmod622

Recommended Posts

Please Help! How would I use NBT on a Item to store a randomly generated number? I look at the tutorial for NBT Tags, but there is not the same functions used in a Item class? Is this possible?

 

THANKS TO HYDROFLAME!!!

Not new to java >> New to modding.

Link to comment
Share on other sites

the nbt is not stored in the Item class but in a variable contained by the ItemStack

 

most function that Item has will give you a ItemStack as argument

 

aka (name may vary because i dont remember by heart)

 

public void onItemRightClick(ItemStack itemStack, and a bunch of other argument){
//here you can use the information about the itemstack nbt
//ex:
int theRandom = itemStack.stackTagCompound.getInteger("myRandomNumber");
	if(theRandom == 0){
		//here we DONT have anythin on the stack compound
		itemStack.stackTagCompound.setInteger("myRandomNumber", (int)(Math.random()*100));//generate a number between 0-100 and place it on the nbt
	}else{
		System.out.println("the number of thsi item is: "+theRandom);
	}
}

how to debug 101:http://www.minecraftforge.net/wiki/Debug_101

-hydroflame, author of the forge revolution-

Link to comment
Share on other sites

Right when i get excited i get a error  :-[

 

here is the error:

 

 

 2013-08-07 13:33:45 [iNFO] [sTDOUT] java.lang.NullPointerException
2013-08-07 13:33:45 [iNFO] [sTDOUT] 	at com.gmod622.SickMod.item.LicenseItemClass.onItemRightClick(LicenseItemClass.java:23)
2013-08-07 13:33:45 [iNFO] [sTDOUT] 	at net.minecraft.item.ItemStack.useItemRightClick(ItemStack.java:176)
2013-08-07 13:33:45 [iNFO] [sTDOUT] 	at net.minecraft.client.multiplayer.PlayerControllerMP.sendUseItem(PlayerControllerMP.java:428)
2013-08-07 13:33:45 [iNFO] [sTDOUT] 	at net.minecraft.client.Minecraft.clickMouse(Minecraft.java:1405)
2013-08-07 13:33:45 [iNFO] [sTDOUT] 	at net.minecraft.client.Minecraft.runTick(Minecraft.java:1854)
2013-08-07 13:33:45 [iNFO] [sTDOUT] 	at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:898)
2013-08-07 13:33:45 [iNFO] [sTDOUT] 	at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:826)
2013-08-07 13:33:45 [iNFO] [sTDOUT] 	at net.minecraft.client.main.Main.main(Main.java:93)
2013-08-07 13:33:45 [iNFO] [sTDOUT] 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
2013-08-07 13:33:45 [iNFO] [sTDOUT] 	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
2013-08-07 13:33:45 [iNFO] [sTDOUT] 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
2013-08-07 13:33:45 [iNFO] [sTDOUT] 	at java.lang.reflect.Method.invoke(Unknown Source)
2013-08-07 13:33:45 [iNFO] [sTDOUT] 	at net.minecraft.launchwrapper.Launch.launch(Launch.java:57)
2013-08-07 13:33:45 [iNFO] [sTDOUT] 	at net.minecraft.launchwrapper.Launch.main(Launch.java:18)
2013-08-07 13:33:45 [iNFO] [sTDOUT] 

 

 

here is my code:

 

Item:

 

 

 
import com.gmod622.SickMod.tile.TileEntityLicense;

import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;

public class LicenseItemClass extends Item {

public LicenseItemClass(int par1) {
	super(par1);
	this.setCreativeTab(CreativeTabs.tabMaterials);
}


 public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) {
	//here you can use the information about the itemstack nbt
	//ex:
	int theRandom = par1ItemStack.stackTagCompound.getInteger("myRandomNumber");
			if(theRandom == 0){
				//here we DONT have anythin on the stack compound
				par1ItemStack.stackTagCompound.setInteger("myRandomNumber", (int)(Math.random()*100));//generate a number between 0-100 and place it on the nbt
			}else{
				System.out.println("the number of thsi item is: "+theRandom);
			}
			return par1ItemStack;
	}


}

 

 

 

Please help me

Not new to java >> New to modding.

Link to comment
Share on other sites

if you dont knwo what :

java.lang.NullPointerException mean, i suggest you google that

 

but you need to make a null check before using the stackTagCompound and create it if its null

how to debug 101:http://www.minecraftforge.net/wiki/Debug_101

-hydroflame, author of the forge revolution-

Link to comment
Share on other sites

To create a TagCompound.

NBTTagCompound tag = new NBTTagCompound();
tag.setTagCompound("tagName", new NBTTagCompound());
tag.getTagCompound("tagName").setInteger("YourInteger");
ItemStack.setTagCompound(tag);

 

To Read An tagCompound

NBTTagCompound tag = ItemStack.getTagCompound("tagName");
int i = tag.getInteger("YourInteger");

 

Thats it!

Link to comment
Share on other sites

This is probably a newbie question but, I really don't know how to check if something is null. I know your probably not gonna answer this but, worth a shot... I haven't been code for about 1 1/2 now, so i really don't know stuff i didn't get indepth with it.

Not new to java >> New to modding.

Link to comment
Share on other sites

then you should really learn a bit more java (either while you continue to make your mod or wtv) because itll help you a LOT

 

but a null check is like this:

Object a;

//more code

if(a == null){

//do or dont do something depending on the logic

}

how to debug 101:http://www.minecraftforge.net/wiki/Debug_101

-hydroflame, author of the forge revolution-

Link to comment
Share on other sites

I probably sound like a noob.

you do :P, but dont worry we know a lot of people prefer to learn+mod at the same time so they often arrive in problem like this

but basicly everything in java (except primitive type: int, float, double, byte, long, boolean) is child of Object. Whenever you do "new Soemthing()" you are creating an object that is a child of the class Object (yup confusing i know)

but a == null can be done with anything !

 

Item s = wtv;
if (s == null){
//hello
}

Block b = some other stuff;

if (b == null){
//hello again 
}

 

now in the specific case you have, you want to check if the stackTagCompound is null , if it is you want to create it

 

if(itemStack.stackTagCompound == null){
//here we know the nbt is null
itemStack.stackTagCompoung = new NBTTagCompound();
}
//and here we can continue to use it becasue we know that if it was null it was also created

 

how to debug 101:http://www.minecraftforge.net/wiki/Debug_101

-hydroflame, author of the forge revolution-

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

    • Compare this list (client-side-only mods) with your mods: https://www.dropbox.com/scl/fi/yeldxfv8ed60e4uflc2fi/Client-Side-Only-Modlist.xlsx?rlkey=8376c5bk7b33je2tad4p3ybrg&st=qf6osvit&dl=0  
    • Crashlog: https://paste.ee/p/WrGYD I'm thinking the problem might be a client side mod but ive already checked the mod list like 5 times and still cant find the problem
    • I'm unable to join my local forge servers. When running my forge servers of seemingly any version (tested 1.18 to 1.21.1) I get an error message [Forge Version Check/WARN] [ne.mi.fm.VersionChecker/]: Failed to process update information The server continues to start up and run, however I'm unable to join. Looking for solutions? Full error message: (note last "thead warning" error seems to be unrelated and only happened once for 1.20.1) Forge version check warning has happened for every version. [09:52:31] [Forge Version Check/WARN] [ne.mi.fm.VersionChecker/]: Failed to process update information java.net.http.HttpConnectTimeoutException: HTTP connect timed out         at jdk.internal.net.http.HttpClientImpl.send(HttpClientImpl.java:950) ~[java.net.http:?] {}         at jdk.internal.net.http.HttpClientFacade.send(HttpClientFacade.java:133) ~[java.net.http:?] {}         at net.minecraftforge.fml.VersionChecker$1.openUrlString(VersionChecker.java:142) ~[fmlcore-1.20.1-47.3.10.jar%23102!/:?] {}         at net.minecraftforge.fml.VersionChecker$1.process(VersionChecker.java:180) ~[fmlcore-1.20.1-47.3.10.jar%23102!/:?] {}         at java.lang.Iterable.forEach(Iterable.java:75) ~[?:?] {}         at net.minecraftforge.fml.VersionChecker$1.run(VersionChecker.java:117) ~[fmlcore-1.20.1-47.3.10.jar%23102!/:?] {} Caused by: java.net.http.HttpConnectTimeoutException: HTTP connect timed out         at jdk.internal.net.http.ResponseTimerEvent.handle(ResponseTimerEvent.java:68) ~[java.net.http:?] {}         at jdk.internal.net.http.HttpClientImpl.purgeTimeoutsAndReturnNextDeadline(HttpClientImpl.java:1788) ~[java.net.http:?] {}         at jdk.internal.net.http.HttpClientImpl$SelectorManager.run(HttpClientImpl.java:1385) ~[java.net.http:?] {} Caused by: java.net.ConnectException: HTTP connect timed out         at jdk.internal.net.http.ResponseTimerEvent.handle(ResponseTimerEvent.java:69) ~[java.net.http:?] {}         at jdk.internal.net.http.HttpClientImpl.purgeTimeoutsAndReturnNextDeadline(HttpClientImpl.java:1788) ~[java.net.http:?] {}         at jdk.internal.net.http.HttpClientImpl$SelectorManager.run(HttpClientImpl.java:1385) ~[java.net.http:?] {} [09:52:31] [Yggdrasil Key Fetcher/ERROR] [mojang/YggdrasilServicesKeyInfo]: Failed to request yggdrasil public key com.mojang.authlib.exceptions.AuthenticationUnavailableException: Cannot contact authentication server         at com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService.makeRequest(YggdrasilAuthenticationService.java:119) ~[authlib-4.0.43.jar%2375!/:?] {}         at com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService.makeRequest(YggdrasilAuthenticationService.java:91) ~[authlib-4.0.43.jar%2375!/:?] {}         at com.mojang.authlib.yggdrasil.YggdrasilServicesKeyInfo.fetch(YggdrasilServicesKeyInfo.java:94) ~[authlib-4.0.43.jar%2375!/:?] {}         at com.mojang.authlib.yggdrasil.YggdrasilServicesKeyInfo.lambda$get$1(YggdrasilServicesKeyInfo.java:81) ~[authlib-4.0.43.jar%2375!/:?] {}         at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) ~[?:?] {}         at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:358) ~[?:?] {}         at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) ~[?:?] {}         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[?:?] {}         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[?:?] {}         at java.lang.Thread.run(Thread.java:1575) ~[?:?] {} Caused by: java.net.SocketTimeoutException: Connect timed out         at sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:546) ~[?:?] {}         at sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:592) ~[?:?] {}         at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) ~[?:?] {}         at java.net.Socket.connect(Socket.java:760) ~[?:?] {}         at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:304) ~[?:?] {}         at sun.net.NetworkClient.doConnect(NetworkClient.java:178) ~[?:?] {}         at sun.net.www.http.HttpClient.openServer(HttpClient.java:531) ~[?:?] {}         at sun.net.www.http.HttpClient.openServer(HttpClient.java:636) ~[?:?] {}         at sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:264) ~[?:?] {}         at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:377) ~[?:?] {}         at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:193) ~[?:?] {}         at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1273) ~[?:?] {}         at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1114) ~[?:?] {}         at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:179) ~[?:?] {}         at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1676) ~[?:?] {}         at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1600) ~[?:?] {}         at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:223) ~[?:?] {}         at com.mojang.authlib.HttpAuthenticationService.performGetRequest(HttpAuthenticationService.java:140) ~[authlib-4.0.43.jar%2375!/:?] {}         at com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService.makeRequest(YggdrasilAuthenticationService.java:96) ~[authlib-4.0.43.jar%2375!/:?] {}         ... 9 more [09:52:31] [Server thread/WARN] [minecraft/MinecraftServer]: Can't keep up! Is the server overloaded? Running 5985ms or 119 ticks behind
    • Remove the mod tempad from the mods-folder
    • Hi, deleting the config folder did not appear to work, what mod are you referring to I could try to delete to fix the problem?
  • Topics

×
×
  • Create New...

Important Information

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