Jump to content

Recommended Posts

Posted (edited)

So I made a volume slider and it I can make it change values however ,when I close the screen the slider doesn't save the value into my items nbt. Supposedly the void onChangesSliderValue should automatically work to change the values right?


https://github.com/NindyBun/BurnerGun_1.16.5/blob/master/src/main/java/com/nindybun/burnergun/client/screens/settingsScreen.java

Edited by NindyBun
Posted

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Posted
3 hours ago, diesieben07 said:

Screens are client side. Data saving must be done server side. Your screen needs to send a packet to the server with the new value. The server then needs to validate that everything makes sense (value within range, player can actually change the volume right now, i.e. they are holding the item, etc.). Once this is done, the server stores the new value in the NBT.

See Draco's link for documentation on network packets.

I was already using packets to send the changes to the server but it still doesn't seem to change values.

Posted (edited)
4 minutes ago, diesieben07 said:

Use the debugger. Is the packet received? Does it do the correct thing?

Yes the packet does in fact work on the client, just not when playing on the server.

Edited by NindyBun
Posted
1 minute ago, diesieben07 said:

That is not what I asked. Do you mean it works in single player, but not when playing on a dedicated server?

Yea, that's what I meant.

Posted
7 hours ago, diesieben07 said:

Is the packet not sent when on a server? Is it not received? Please elaborate on "not working".

If I could figure out how I could see that in the Debug function that's be great. In any case, When I close the screen I send a packet to the server to change set the new nbt value, but I can't tell if it was sent or received from the server; I can tell it was sent and received when debugged on the client but how can I debug the server?

Posted (edited)
10 hours ago, diesieben07 said:

Just like you do on the client? Use debug from your IDE just like you did with the client.

I tried running the server with the debug option but it doesn't seem to debug anything. Then I tried running debug on both client and server, and client can debug but server still can't...I swear I've done it a year ago...

Edited by NindyBun
Posted
10 hours ago, diesieben07 said:

This is a result of your broken getShareTag/readShareTag implementation. readShareTag never sets the "base tag" on the ItemStack.

Additionally this implementation is questionable anyways:

  • Why does getShareTag set the tag on the stack? It should be a purely read-only method. This also means it should not call getOrCreateTag.
  • Why are you copying data from the capability data into the "base tag" in both methods?
  • Data in the "base tag" should be namespaced under your ModID. This tag is shared between all mods.

So what im getting at is that I should only have the "base tag" there and none of that other stuff I added? And to set/get nbt I should just directly call getOrCreateTag and send a packet to the server everytime I want to change an nbt data? Or am I completely off.

Posted

I'm not getting what you mean when,

Quote

getShareTag should only add data, not change the used format.

So am I not supposed to add stuff to the "base tag" and I should make a new tag under my ModID?
 

Quote

Sometimes it can make sense to put the capability data in the share tag. But then don't duplicate it like you are.

Okay...so where have I been duplicating the tags? In the readShareTag when I'm setting the values? Then how can I properly set/get nbt tags, is there someplace I can look into to help understand how I should approach this?

Posted

So I got the debug to work when running the server, and the slider does change the nbt values, the only problem here is that the slider doesn't show the current value; it just shows zero even though the nbt value is not zero.

Posted
6 hours ago, NindyBun said:

So I got the debug to work when running the server, and the slider does change the nbt values, the only problem here is that the slider doesn't show the current value; it just shows zero even though the nbt value is not zero.

Now I have it working using the way i set the other nbt, but now every time I open my inventory in creative mode (haven't tried survival mode), it resets all of my nbt values which didn't usually happen if I recall. So at this point I don't even know why nbt resets when I open my inventory.

Posted

https://github.com/NindyBun/BurnerGun_1.16.5/blob/master/src/main/java/com/nindybun/burnergun/common/items/Burner_Gun/BurnerGun.java
So I made a new tag, set all the data into there, and put it into "combinedTag"; and other than not working in creative mode, the slider works on a server.
 

Quote

Then later you also serialize the capability into "capabilityTag" and store that into "combinedTag". Now you have the capability data stored twice

The "capabilityTag" is part of the ItemHandler capability, I have a seperate capability that stores the nbt data. Not sure if I had to do that though.

Posted

This is confusing the heck out of me.

Quote

getShareTag still modifies the ItemStack (getOrCreateTag).

How is it still modifying the getOrCreateTag, in what way, where is it doing that?

Quote

getShareTag still modifies the fundamental structure of the NBT tag.

What is the fundamental structure of the NBT tag?  Is there a reference I can refer to?

Quote

You still duplicate the BurnerGunInfo capability data. You store it once in CAPABILITY_NBT_TAG and once you copy the values over into the "base" nbt tag.

How am I storing the BurnerGunInfo data in the CAPABILITY_NBT_TAG and the "base" nbt tag if I'm not adding anything to it. Should I have just returned the nbt values from BurnerGunInfo capability?  Should I store the BurnerGunInfoProvider.burnergunInfoCapability.writeNBT() into a tag and return that since I also set the data over there? Is that what you meant when I had already stored the data in the CAPABILITY_NBT_TAG? 

Posted
12 minutes ago, diesieben07 said:

It is calling getOrCreateTag, which will modify the ItemStack if it doesn't have a tag yet.

Whatever ItemStack#getTag returns.

Since I already have tags setup in my capability elsewhere in BurnerGunInfoStorage, then there is no reason to call getOrCreateTag; I'd just need to call the capability like this?

14 minutes ago, diesieben07 said:

You are right, I misread the code. I still do not understand why you do this.

Originally I did that because I wasn't sure if the nbt values from BurnerGunInfo carried so I put it into the itemStack as well. But if there wasn't a reason to do that and I could've just called the capabilities .writeNBT() and returned that then it would made more sense.
 

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.