Jump to content

SOLVED - Quick Question - 1.8 - saving client side data


BioAndy

Recommended Posts

Good Afternoon Everyone!

 

So I have been writing my first mod for Minecraft using Forge 1.8.

My son comes up with the idea and I help him implement it. He's only 9, but really interested in software development and I think this is a good way for him to experience it and gives us some fun times together.

 

I have worked with c++ for the past 15 years in a professional setting, so if you can help with my problem, pointing me in the right direction should be good enough. I highly doubt I would need full code examples, and really dislike going through other peoples code anyway! ;D

 

The problem - Saving state information between sessions.

Example - Lets say I have a simple GUI (no inventory attached and client side only) that when opened lets the user re-position an overlay onto the screen. Now this overlay needs to have it's X and Y coords. saved between sessions.

 

I'm just not really sure where I would be saving this information ->

Config File - From what I've read it's mostly for Block and Item ID's.

NBTData - Seems like overkill to save what little information I need saving in here.

 

Now I have only been digging through the Forge API for a couple days now, so I'm sure that I am missing something.

 

Questions?

Am I missing some other way Forge easily enables the saving of client side data?

With something as generic as x and y coords. that is not an item, block, or entity do I just need to write my own input / output handler that does what i need and saves it in my mod folder?

 

I guess before writing my own, I'm just wondering if Forge already implements an easy to use Interface for this.

 

Thanks everyone and I'm looking forward to being a part of the Minecraft modding community!

Link to comment
Share on other sites

I'd say big NOPE to NBT here.

 

First of all - NBT is a compression tool designed to save "data" not configuration, ESPECIALLY not Client configs (World saving, player saving, it's all server-side).

 

If you are planning on doing this all on Client I'd suggest using Forge Configuration. It's not just for blocks and items as you read. You can have there pretty much everything. Calling "save" can be done pretty much everywhere. Just keep in mind that is Client config - you should load it from client proxy, what use would it be on server. ;p

 

Anyway, if you would use e.g GuiScreen you will probably want to call config.save() from ActionPerformed (just don't do it per-render, that would be as much as your FPS) of some kind, that I'll leave to you.

 

Here's example of not-block-or-item config:

public class ConfigGeneral
{
public static Configuration config;

public static void init(File file)
{
	config = new Configuration(file, true);
	try
	{
		config.load();
		config.setCategoryComment("General", ServerReference.GENERAL_CONFIG_COMMENT);

		Registry.setPointsPerLevel(config.get("General", "PointsPerLevel", 10).getInt());

		for (String attribute : config.get("General", "BaseAttributes", new String[] {"B10.0", "A10.0", "I10.0", "V10.0", "T10.0"}, "Shared player basic attributes.").getStringList())
		{
			Registry.appendBaseAttribute(Attribute.decode(attribute));
		}
	}
	catch (Exception e)
	{
		Main.log.log(Level.ERROR, "Could not properly load General config file!");
	}
	finally
	{
		if (config.hasChanged()) config.save();
	}
}
}

This one is actually server-side, loads some values which are then used in construction of player or leveling.

 

Whole Configuration is pretty well documented.

 

Second idea would to totally leave forge for a while and use custom system, or as suggested NBT, but on client side. Your choice.

1.7.10 is no longer supported by forge, you are on your own.

Link to comment
Share on other sites

Hi

 

>Config File - From what I've read it's mostly for Block and Item ID's.

 

Not anymore :)  Block and Item IDs went out the window around 1.6

 

I think the key is - if you want the storage to be local on the client's machine, completely independent of the server, and to carry over from one world to another, then use a config file.

 

Otherwise - I'd suggest to store it on the server using per-player storage, with NBT.  Never had to do that, but I have heard talk of IExtendedEntityProperties.

http://www.minecraftforge.net/forum/index.php?topic=6999.0

 

Much easier than trying to roll your own.

 

-TGG

Link to comment
Share on other sites

Thanks for all the replies everyone. I will edit my post and mark it solved.

 

I ended up using config files. I was just worried about storing information in them that should not be stored in them.

NBT just seemed like overkill for my purposes.

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



×
×
  • Create New...

Important Information

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