I'm trying to make some capabilities in 1.17 after moving from 1.16 and I can't figure out how I am supposed to do them now.
This is how I did them in 1.16.
public class Cooldowns implements ICooldowns {
private int summonCooldown = 0;
@Override
public void setSummonCooldown(int var) {
this.summonCooldown = var;
}
@Override
public int getSummonCooldown() {
return this.summonCooldown;
}
}
public class CooldownCapability implements ICapabilitySerializable<CompoundNBT> {
@CapabilityInject(ICooldowns.class)
public static final Capability<ICooldowns> CAPABILITY = null;
private LazyOptional<ICooldowns> instance = LazyOptional.of(CAPABILITY::getDefaultInstance);
@Override
public <T> LazyOptional<T> getCapability(Capability<T> cap, Direction side) {
return cap == CAPABILITY ? instance.cast() : LazyOptional.empty();
}
@Override
public CompoundNBT serializeNBT() {
return (CompoundNBT) CAPABILITY.getStorage().writeNBT(CAPABILITY, instance.orElseThrow(() -> new IllegalArgumentException("LazyOptional must not be empty!")), null);
}
@Override
public void deserializeNBT(CompoundNBT nbt) {
CAPABILITY.getStorage().readNBT(CAPABILITY, instance.orElseThrow(() -> new IllegalArgumentException("LazyOptional must not be empty!")), null, nbt);
}
}
public class CooldownStorage implements IStorage<ICooldowns> {
@Override
public CompoundNBT writeNBT(Capability<ICooldowns> capability, ICooldowns instance, Direction side) {
CompoundNBT cnbt = new CompoundNBT();
cnbt.putInt("summoncooldown",instance.getSummonCooldown());
return cnbt;
}
@Override
public void readNBT(Capability<ICooldowns> capability, ICooldowns instance, Direction side, INBT nbt) {
CompoundNBT inbt = (CompoundNBT) nbt;
instance.setSummonCooldown(inbt.getInt("summoncooldown"));
}
}
From I understand IStorage and getDefaultInstance are depreciated. What do I need to change in order to run this code on 1.17? I've tired to do a lot of research on this but it seems forge's read the docs for 1.17 is outdated as it still tells me to use IStorage.