Posted January 31, 201510 yr Hey everybody, I have some information which I'm currently storing in a global variable in my block's class. The idea is that every time the block is placed down, a number stored in this global variable increments. This is important for reasons which I won't explain here Problem is, the global variable is deleted when the game is quit (as I had expected) and I need this value to stick around for when the game is next re-opened. I also need the value to be stored per world, so it can be say 7 in one and 12 in another. I know some mods use txt files in the the world save to store info, so maybe I could do something like that? Otherwise, is there something like a Javascript Cookie or localStorage storage object in Java which I could use to store this value? Thanks in advance -Toastrackenigma
January 31, 201510 yr Use WorldSavedData to store data on a per-world basis. http://i.imgur.com/NdrFdld.png[/img]
January 31, 201510 yr Author Use WorldSavedData to store data on a per-world basis. I can't seem to find much info about this online - any pointers towards a tutorial, etc which could help me with this?
January 31, 201510 yr diesieben07 has a implementation here. Don't PM me with questions. They will be ignored! Make a thread on the appropriate board for support. 1.12 -> 1.13 primer by williewillus. 1.7.10 and older versions of Minecraft are no longer supported due to it's age! Update to the latest version for support. http://www.howoldisminecraft1710.today/
January 31, 201510 yr Author Ok, so I've got this worldSave class written now with no errors but how to I go about actually storing things in it?
January 31, 201510 yr You make a field in it. Then in the readFromNBT/writeToNBT you read/write your fields to NBT. Don't PM me with questions. They will be ignored! Make a thread on the appropriate board for support. 1.12 -> 1.13 primer by williewillus. 1.7.10 and older versions of Minecraft are no longer supported due to it's age! Update to the latest version for support. http://www.howoldisminecraft1710.today/
January 31, 201510 yr Author Well, because say I want a block to output an int I have stored in it to the chat (just as a test), this isn't working: public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int par6, float par7, float par8, float par9) { int testthis = worldSave.readFromNBT("testthis"); if (world.isRemote) { player.addChatMessage(new ChatComponentTranslation("Number: "+testthis)); } return true; } Here's the worldSave.java file: package com.toastrackenigma.techcraft; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.WorldSavedData; import net.minecraft.world.World; public class worldSave extends WorldSavedData{ private static final String ID = "techcraft"; private int loadstoneChannels = 0; public worldSave() { super(ID); } public worldSave(String identifier) { super(identifier); } @Override public void readFromNBT(NBTTagCompound nbt) { loadstoneChannels = nbt.getInteger("loadstoneChannels"); } @Override public void writeToNBT(NBTTagCompound nbt) { nbt.setInteger("loadstoneChannels", loadstoneChannels); } public int newChannel() { markDirty(); return loadstoneChannels++; } public static worldSave get(World world) { worldSave data = (worldSave)world.loadItemData(worldSave.class, ID); if (data == null) { data = new worldSave(); world.setItemData(ID, data); } return data; } } I know it's because the readFromNBT function has a void return type, but when I change it from void to int and add a return statement it throws errors at me.
February 2, 201510 yr Author You never call the NBT methods (readFromNBT, writeToNBT) yourself. Minecraft does that for you. Good to know. You get your WorldSavedData from the world and the read the data you want from it, using the fields you declared. So how do I actually do that? I've got this far: worldSave worldsave = worldSave.get(world); This gives me back a random string which looks like this com.toastrackenigma.techcraft.worldSave@26d68a6e (the number on the end is different on the client then it is on the server). How do I use this?
February 2, 201510 yr Author ****Insert quote here, none of the editor buttons are working, who knows why?**** I know that, I just wasn't thinking about this worldSave thing the same way for some reason. I now have: worldSave worldsave = worldSave.get(world); int thesave = worldsave.newChannel(); While this counts up from zero every time it's called, when I close the game and reopen it the variable's forgotten, which kindof defeats the whole point.
February 2, 201510 yr Author ****Editor buttons still not working**** markDirty() is being called. Here's the worldsave.newChannel() code: public int newChannel() { markDirty(); return loadstoneChannels++; } I think I've posted the whole worldSave file earlier this post.
February 2, 201510 yr Author Whenever I'm on a site and the editor buttons don't work it makes me cringe because one of the first projects I did when I learnt how to program was make one that worked properly. It only took me < 1 hour and it never did this to anyone I've sorta fixed the problem myself, I put that code into my item and used onRightClick and it worked (incremented each time I right clicked and when I opened MC again continued where it left off). However, what would I do if I wanted it in my Mod's main class (where I had it initially)? I get that there is no reference to world in there, so how do I give it one? Thanks for all of your help
February 2, 201510 yr Author I'm trying to make something a little similar to the way Applied Energistics's Quantum Entangled Singularities work: I want it to be that every time that you perform the crafting recipe the item's damage value goes up one, i.e. GameRegistry.addShapelessRecipe(new ItemStack(Techcraft.magnetHalf, 2, , new Object[] { Techcraft.magnetItem}); Replacing 8 with the damage value. So, the first time you craft this the damage on both of these is 1, then the next time it's 2, etc. Pretty much only two are ever going to have the same damage, so they're a linked pair. I was going to store the damage in the WorldSavedData part
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.