package uk.co.wehavecookies56.kk.common.capability; import java.util.ArrayList; import java.util.List; import net.minecraft.nbt.NBTBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.Capability.IStorage; import uk.co.wehavecookies56.kk.api.driveforms.DriveForm; import uk.co.wehavecookies56.kk.common.container.inventory.InventoryDriveForms; import uk.co.wehavecookies56.kk.common.lib.Strings; public class DriveStateCapability { public interface IDriveState { boolean getInDrive(); String getActiveDriveName(); int getAntiPoints(); int getDriveLevel(String drive); int getDriveExp(String drive); void setInDrive(boolean drive); void setActiveDriveName(String drive); void setAntiPoints(int points); void setDriveLevel(String drive, int level); void setDriveExp(String drive, int exp); void learnDriveForm(DriveForm form); InventoryDriveForms getInventoryDriveForms(); } public static class Storage implements IStorage<IDriveState> { @Override public NBTBase writeNBT(Capability<IDriveState> capability, IDriveState instance, EnumFacing side) { NBTTagCompound properties = new NBTTagCompound(); properties.setBoolean("InDrive", instance.getInDrive()); properties.setString("ActiveDriveName", instance.getActiveDriveName()); properties.setInteger("AntiPoints", instance.getAntiPoints()); properties.setInteger("DriveLevelValor", instance.getDriveLevel(Strings.Form_Valor)); properties.setInteger("DriveLevelWisdom", instance.getDriveLevel(Strings.Form_Wisdom)); properties.setInteger("DriveLevelLimit", instance.getDriveLevel(Strings.Form_Limit)); properties.setInteger("DriveLevelMaster", instance.getDriveLevel(Strings.Form_Master)); properties.setInteger("DriveLevelFinal", instance.getDriveLevel(Strings.Form_Final)); properties.setInteger("DriveExpValor", instance.getDriveExp(Strings.Form_Valor)); properties.setInteger("DriveExpWisdom", instance.getDriveExp(Strings.Form_Wisdom)); properties.setInteger("DriveExpLimit", instance.getDriveExp(Strings.Form_Limit)); properties.setInteger("DriveExpMaster", instance.getDriveExp(Strings.Form_Master)); properties.setInteger("DriveExpFinal", instance.getDriveExp(Strings.Form_Final)); instance.getInventoryDriveForms().writeToNBT(properties); return properties; } @Override public void readNBT(Capability<IDriveState> capability, IDriveState instance, EnumFacing side, NBTBase nbt) { NBTTagCompound properties = (NBTTagCompound) nbt; instance.setInDrive(properties.getBoolean("InDrive")); instance.setActiveDriveName(properties.getString("ActiveDriveName")); instance.setAntiPoints(properties.getInteger("AntiPoints")); instance.setDriveLevel(Strings.Form_Valor, properties.getInteger("DriveLevelValor")); instance.setDriveLevel(Strings.Form_Wisdom, properties.getInteger("DriveLevelWisdom")); instance.setDriveLevel(Strings.Form_Limit, properties.getInteger("DriveLevelLimit")); instance.setDriveLevel(Strings.Form_Master, properties.getInteger("DriveLevelMaster")); instance.setDriveLevel(Strings.Form_Final, properties.getInteger("DriveLevelFinal")); instance.setDriveExp(Strings.Form_Valor, properties.getInteger("DriveExpValor")); instance.setDriveExp(Strings.Form_Wisdom, properties.getInteger("DriveExpWisdom")); instance.setDriveExp(Strings.Form_Limit, properties.getInteger("DriveExpLimit")); instance.setDriveExp(Strings.Form_Master, properties.getInteger("DriveExpMaster")); instance.setDriveExp(Strings.Form_Final, properties.getInteger("DriveExpFinal")); instance.getInventoryDriveForms().readFromNBT(properties); } } public static class Default implements IDriveState { private boolean inDrive = false; private String activeDrive = "none"; int antiPoints = 0; private final InventoryDriveForms inventoryDrive = new InventoryDriveForms(); private static List<String> driveForms = new ArrayList<String>(); int valor, wisdom, limit, master, Final; int valorExp, wisdomExp, limitExp, masterExp, FinalExp; @Override public boolean getInDrive() { return inDrive; } @Override public String getActiveDriveName() { return activeDrive; } @Override public int getAntiPoints() { return antiPoints; } @Override public int getDriveLevel(String drive) { switch(drive) { case Strings.Form_Valor: return valor; case Strings.Form_Wisdom: return wisdom; case Strings.Form_Limit: return limit; case Strings.Form_Master: return master; case Strings.Form_Final: return Final; } return 0; } @Override public void setInDrive(boolean drive) { this.inDrive = drive; } @Override public void setActiveDriveName(String drive) { this.activeDrive = drive; } @Override public void setAntiPoints(int points) { this.antiPoints = points; } @Override public void setDriveLevel(String drive, int level) { switch (drive) { case Strings.Form_Valor: valor = level; break; case Strings.Form_Wisdom: wisdom = level; break; case Strings.Form_Limit: limit = level; break; case Strings.Form_Master: master = level; break; case Strings.Form_Final: Final = level; break; } } @Override public void learnDriveForm(DriveForm form) { driveForms.add(form.getName()); } @Override public InventoryDriveForms getInventoryDriveForms(){return this.inventoryDrive;} @Override public int getDriveExp(String drive) { switch(drive) { case Strings.Form_Valor: return valorExp; case Strings.Form_Wisdom: return wisdomExp; case Strings.Form_Limit: return limitExp; case Strings.Form_Master: return masterExp; case Strings.Form_Final: return FinalExp; } return 0; } @Override public void setDriveExp(String drive, int exp) { switch (drive) { case Strings.Form_Valor: valorExp = exp; break; case Strings.Form_Wisdom: wisdomExp = exp; break; case Strings.Form_Limit: limitExp = exp; break; case Strings.Form_Master: masterExp = exp; break; case Strings.Form_Final: FinalExp = exp; break; } } } }