I am trying to store data through my ItemStack capability storage, but I stumbled upon a roadblock.
My ItemStack Capability Storage:
public class WandItemStorage implements Capability.IStorage<IWandCap>
{
@Nullable
@Override
public INBT writeNBT(Capability<IWandCap> capability, IWandCap instance, Direction side)
{
CompoundNBT tag = new CompoundNBT();
tag.put("spells", instance.getSpells());
return tag;
}
@Override
public void readNBT(Capability<IWandCap> capability, IWandCap instance, Direction side, INBT nbt)
{
}
}
My ItemStack Capability:
public class WandCap implements IWandCap
{
private List<Spell> spells;
public WandCap ()
{
spells = new ArrayList<>();
}
@Override
public List<Spell> getSpells()
{
return this.spells;
}
@Override
public void addSpells(Spell... spells)
{
this.spells.addAll(Arrays.asList(spells));
}
@Override
public void addSpell(Spell spell)
{
this.spells.add(spell);
}
@Override
public void removeSpells(Spell... spells)
{
this.spells.removeAll(Arrays.asList(spells));
}
@Override
public void removeSpell(Spell spell)
{
this.spells.remove(spell);
}
@Override
public boolean containsSpell(Spell spell)
{
return this.spells.contains(spell);
}
}
I'm currently trying to put a List of Spells (my custom object) to the Write and Read NBT methods of my ItemStack cap storage, but CompoundNBT doesn't have a method for putting a custom object into a tag. All it has is the put() method from what I'm seeing, however the put() method requires an INBT for the second parameter, which I do not have. Would I need to convert my List of Spells to an INBT, and how would I go about doing that?