Jump to content

[1.12] Advanced usage of INBTSerializable


Franckyi

Recommended Posts

Hi !
I'm using different types of maps that I have to Serialize to NBT, because they'll be saved in a TileEntity data.

So, I decided to create a generic interface for my tables called ITable :
 

package com.github.franckyi.netcraft.logic.tables;

import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;

import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraftforge.common.util.INBTSerializable;

public interface ITable<T extends Map<? extends INBTSerializable<? extends NBTBase>, ? extends INBTSerializable<? extends NBTBase>>>
		extends INBTSerializable<NBTTagList> {

	public T getTable();

	@Override
	default NBTTagList serializeNBT() {
		NBTTagList nbt = new NBTTagList();
		for (Entry<? extends INBTSerializable<? extends NBTBase>, ? extends INBTSerializable<? extends NBTBase>> entry : getTable()
				.entrySet()) {
			NBTTagCompound c = new NBTTagCompound();
			c.setTag("Key", entry.getKey().serializeNBT());
			c.setTag("Value", entry.getValue().serializeNBT());
			nbt.appendTag(c);
		}
		return nbt;
	}

	@Override
	default void deserializeNBT(NBTTagList nbt) {
		for (Iterator<NBTBase> i = nbt.iterator(); i.hasNext();) {
			NBTTagCompound c = (NBTTagCompound) i.next();
			INBTSerializable<NBTBase> key; // I don't know what to do from here
			INBTSerializable<NBTBase> value;
			key.deserializeNBT(c.getTag("Key"));
			value.deserializeNBT(c.getTag("Value"));
			getTable().put(key, value);
		}
	}

}

 

But I'm having trouble deserializing the NBT tag to my Table.

Should I let the subclass implementing ITable override deserializeNBT, or is there a direct solution in the interface itself ?

Edited by Franckyi
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.