package zmaster587.advancedRocketry.world.util; import java.util.HashMap; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.common.util.ForgeDirection; import zmaster587.advancedRocketry.api.DataStorage; import zmaster587.advancedRocketry.api.DataStorage.DataType; import zmaster587.advancedRocketry.api.satellite.IDataHandler; /** * Object to store "data" and can track multiple different types * */ public class MultiData implements IDataHandler { HashMap<DataStorage.DataType, DataStorage> dataStorages; public MultiData() { dataStorages = new HashMap<DataStorage.DataType, DataStorage>(); reset(); } public void reset() { for(DataStorage.DataType type : DataStorage.DataType.values()) { if(type != DataStorage.DataType.UNDEFINED) dataStorages.put(type, new DataStorage(type)); } } public int getDataAmount(DataType type) { return dataStorages.get(type).getData(); } @Override public int extractData(int maxAmount, DataType type, ForgeDirection dir, boolean commit) { DataStorage storage = dataStorages.get(type); return storage.removeData(maxAmount, commit); } @Override public int addData(int maxAmount, DataType type, ForgeDirection dir, boolean commit) { DataStorage storage = dataStorages.get(type); return storage.addData(maxAmount, type, commit); } public void setMaxData(int amount) { for(DataStorage.DataType type : DataStorage.DataType.values()) { if(type != DataStorage.DataType.UNDEFINED) dataStorages.get(type).setMaxData(amount); } } public int getMaxData() { return dataStorages.get(DataStorage.DataType.ATMOSPHEREDENSITY).getMaxData(); } public void setDataAmount(int amount, DataType dataType) { if(dataType != DataType.UNDEFINED) dataStorages.get(dataType).setData(amount,dataType); } public void writeToNBT(NBTTagCompound nbt) { for(DataStorage.DataType type : DataStorage.DataType.values()) { if(type != DataStorage.DataType.UNDEFINED) { NBTTagCompound dataNBT = new NBTTagCompound(); dataStorages.get(type).writeToNBT(dataNBT); nbt.setTag(type.name(), dataNBT); } } } public void readFromNBT(NBTTagCompound nbt) { for(DataStorage.DataType type : DataStorage.DataType.values()) { if(type != DataStorage.DataType.UNDEFINED) { NBTTagCompound dataNBT = nbt.getCompoundTag(type.name()); dataStorages.get(type).readFromNBT(dataNBT); } } } }