Jump to content
  • Home
  • Files
  • Docs
Topics
  • All Content

  • This Topic
  • This Forum

  • Advanced Search
  • Existing user? Sign In  

    Sign In



    • Not recommended on shared computers


    • Forgot your password?

  • Sign Up
  • All Activity
  • Home
  • Mod Developer Central
  • Modder Support
  • Saving data to world data file
Currently Supported: 1.16.X (Latest) and 1.15.X (LTS)
Sign in to follow this  
Followers 0
Draco18s

Saving data to world data file

By Draco18s, May 14, 2013 in Modder Support

  • Reply to this topic
  • Start new topic

Recommended Posts

Draco18s    2414

Draco18s

Draco18s    2414

  • Reality Controller
  • Draco18s
  • Members
  • 2414
  • 15998 posts
Posted May 14, 2013

Alright, I'm trying to figure out how to handle data storage for information that needs to be accessible from the world.

It's essentially information about a player entity, but needs to be accessible from a tile entity while the player is offline, hence I can't use extended player data, I need to save it to either its own NBT file or to the main world data file.

 

Having trouble implementing this.

 

I found one solution that extends WorldSavedData, but there were a few errors (such as no providing a proper constructor) that I am not sure how to solve.

 

Eg. the constructor used was one that takes no parameters, but WorldSavedData doesn't have a matching constructor, as its only constructor takes a string paramter, but I am not sure what I should be passing.

 

I also am not sure if I should be instancing this class once for my entire mod and storing each player's info in it, or if I should be using one instance per player (and what the differences in construction would be; that is not the read and write NBT parts).

 

Help?

  • Quote

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.

Share this post


Link to post
Share on other sites

Mew    36

Mew

Mew    36

  • Dragon Slayer
  • Mew
  • Members
  • 36
  • 567 posts
Posted May 14, 2013

I know diesieben07 has done something similar. Here is his code on this matter:

https://github.com/diesieben07/Questology/blob/master/source/demonmodders/questology/QuestologyWorldData.java

 

Don't ask me how he does it.. As you know I am trying to figure this out but with Player data xD

  • Quote

I am Mew. The Legendary Psychic. I behave oddly and am always playing practical jokes.

 

I have also found that I really love making extremely long and extremely but sometimes not so descriptive variables. Sort of like what I just did there xD

Share this post


Link to post
Share on other sites

diesieben07    7696

diesieben07

diesieben07    7696

  • Reality Controller
  • diesieben07
  • Forum Team
  • 7696
  • 56382 posts
Posted May 14, 2013

Each WorldSavedData has a unique identifier (for maps this is map_0, map_1 and so on).

That is the parameter the constructor takes.

Also think about if you want actual per World (=per dimension) storage or just a per map (= per save) storage.

For per world use world.perWorldStorage and for per map use world.mapStorage.

Then to create a new data use

YourAwesomeData data = new YourAwesomeData("IDENTIFIER");
world.perWorldStorage.setData("IDENTIFIER", data); // or world.mapStorage

To get that data back any time use

YourAwesomeData data = (YourAwesomeData)world.perWorldStorage.loadData("IDENTIFIER");

loadData will return null if the data has not been created yet.

Thats it. Just be sure to always call markDirty() on your data when you change a value, otherwise MC will not save it.

If you want an example look at the link Mew posted.

  • Quote

Share this post


Link to post
Share on other sites

Draco18s    2414

Draco18s

Draco18s    2414

  • Reality Controller
  • Draco18s
  • Members
  • 2414
  • 15998 posts
Posted May 14, 2013

Each WorldSavedData has a unique identifier (for maps this is map_0, map_1 and so on).

That is the parameter the constructor takes.

Also think about if you want actual per World (=per dimension) storage or just a per map (= per save) storage.

For per world use world.perWorldStorage and for per map use world.mapStorage.

Then to create a new data use

YourAwesomeData data = new YourAwesomeData("IDENTIFIER");
world.perWorldStorage.setData("IDENTIFIER", data); // or world.mapStorage

To get that data back any time use

YourAwesomeData data = (YourAwesomeData)world.perWorldStorage.loadData("IDENTIFIER");

loadData will return null if the data has not been created yet.

Thats it. Just be sure to always call markDirty() on your data when you change a value, otherwise MC will not save it.

If you want an example look at the link Mew posted.

 

Ah ha.  Thanks.

 

I definitely don't need it per dimension, just per save. :)

  • Quote

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.

Share this post


Link to post
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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  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.

    • Insert image from URL
×
  • Desktop
  • Tablet
  • Phone
Sign in to follow this  
Followers 0
Go To Topic Listing



  • Recently Browsing

    No registered users viewing this page.

  • Posts

    • poopoodice
      [1.16.4] Null when OpenGUI

      By poopoodice · Posted 14 minutes ago

      https://github.com/Beardlessbrady/Currency-Mod/blob/master-1.16/src/main/java/com/beardlessbrady/gocurrency/blocks/vending/VendingTile.java#L68 This should not be null.
    • -MCS_Gaming-
      Matchmaking System?

      By -MCS_Gaming- · Posted 16 minutes ago

      I'm making an fps style mod and want to implement a matchmaking system, but I have absolutely no idea where to begin. Would anyone be able to give me some pointers as to how I would go about doing this?
    • BeardlessBrady
      [1.16.4] Null when OpenGUI

      By BeardlessBrady · Posted 39 minutes ago

      While trying to open a gui in my block my console returns with this error: https://pastebin.com/XNYzf9pe Its basically saying that something is null on line 51. I am checking if namedContainerProvider is null and its doubtful the player is null so that means the NetworkHooks is returning null? How does one fix that issue.   Below is a link to the line the error is referring to: https://github.com/Beardlessbrady/Currency-Mod/blob/master-1.16/src/main/java/com/beardlessbrady/gocurrency/blocks/vending/VendingBlock.java#L51
    • Beethoven92
      [1.16.5] Beacon Overwrite (Screen Error)

      By Beethoven92 · Posted 53 minutes ago

      The beacon container uses a proximity check to see if the player is near enough to open the container..unfortunately this check is hardcoded to only work with the vanilla Blocks.BEACON. So if you created your own beacon block this will be different from the vanilla one, and the proximity check will always fail leading to the behavior you described above. You need to override canInteractWith in your ModBeaconContainer (which i suppose directly inherits from the BeaconContainer class?) and allow interaction with your own Beacon block
    • ThisIsNotOriginal
      Error at load_registries event phase

      By ThisIsNotOriginal · Posted 1 hour ago

      I'm having a problem where when I run minecraft it shows error at load_registries event phase. Here is the error log and registry events. https://pastebin.com/zMVC8wTJ Registry Events https://pastebin.com/FtuVQLKq Log   Thank you in advance
  • Topics

    • BeardlessBrady
      1
      [1.16.4] Null when OpenGUI

      By BeardlessBrady
      Started 39 minutes ago

    • -MCS_Gaming-
      0
      Matchmaking System?

      By -MCS_Gaming-
      Started 16 minutes ago

    • Nyko
      1
      [1.16.5] Beacon Overwrite (Screen Error)

      By Nyko
      Started 15 hours ago

    • ThisIsNotOriginal
      0
      Error at load_registries event phase

      By ThisIsNotOriginal
      Started 1 hour ago

    • GhostGamesFSM
      1
      1.16 Ore generation.

      By GhostGamesFSM
      Started 3 hours ago

  • Who's Online (See full list)

    • -MCS_Gaming-
    • JackRaidenPH
    • Top_DawgsPM
    • Talp1
    • onyxwarrior117
  • All Activity
  • Home
  • Mod Developer Central
  • Modder Support
  • Saving data to world data file
  • Theme

Copyright © 2019 ForgeDevelopment LLC · Ads by Longitude Ads LLC Powered by Invision Community