package uk.co.wehavecookies56.kk.common.capability; import java.util.ArrayList; import java.util.List; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.util.Constants; import uk.co.wehavecookies56.kk.common.core.helper.LogHelper; import uk.co.wehavecookies56.kk.common.item.ModItems; import uk.co.wehavecookies56.kk.common.util.Utils; /** * Created by Toby on 08/02/2017. */ public class OrganizationXIIICapability { List<Item> unlockedWeapons = new ArrayList<>(); public interface IOrganizationXIII { //Utils.OrgMember current(); Utils.OrgMember getMember(); Item currentWeapon(); boolean summonedWeapon(); boolean getOpenedGUI(); double getPortalX(); double getPortalY(); double getPortalZ(); int getUnlockPoints(); List<Item> unlockedWeapons(); void setMember(Utils.OrgMember member); void setCurrentWeapon(Item weapon); void setUnlockedWeapons(List<Item> list); void addUnlockedWeapon(Item item); void removeUnlockedWeapon(Item item); void setWeaponSummoned(boolean summoned); void setOpenedGUI(boolean opened); void setPortalX(double x); void setPortalY(double y); void setPortalZ(double z); void setUnlockPoints(int points); void removePoints(int points); void addPoints(int points); } public static class Storage implements Capability.IStorage<IOrganizationXIII> { @Override public NBTBase writeNBT(Capability<IOrganizationXIII> capability, IOrganizationXIII instance, EnumFacing side) { NBTTagCompound properties = new NBTTagCompound(); properties.setInteger("Member", instance.getMember().ordinal()); new ItemStack(instance.currentWeapon()).writeToNBT(properties); NBTTagList tagList = new NBTTagList(); for (int i = 0; i < instance.unlockedWeapons().size(); i++) { Item item = instance.unlockedWeapons().get(i); if (item != null) { NBTTagCompound weapons = new NBTTagCompound(); new ItemStack(item).writeToNBT(weapons); tagList.appendTag(weapons); } } properties.setTag("UnlockedWeapons", tagList); properties.setBoolean("Summoned", instance.summonedWeapon()); properties.setBoolean("Opened", instance.getOpenedGUI()); properties.setDouble("PortalX", instance.getPortalX()); properties.setDouble("PortalY", instance.getPortalY()); properties.setDouble("PortalZ", instance.getPortalZ()); properties.setInteger("UnlockPoints", instance.getUnlockPoints()); return properties; } @Override public void readNBT(Capability<IOrganizationXIII> capability, IOrganizationXIII instance, EnumFacing side, NBTBase nbt) { NBTTagCompound properties = (NBTTagCompound) nbt; instance.setMember(Utils.OrgMember.values()[properties.getInteger("Member")]); instance.setCurrentWeapon(ItemStack.loadItemStackFromNBT(properties).getItem()); NBTTagList tagList = properties.getTagList("UnlockedWeapons", Constants.NBT.TAG_COMPOUND); for (int i = 0; i < tagList.tagCount(); i++) { NBTTagCompound weapons = tagList.getCompoundTagAt(i); if (!instance.unlockedWeapons().contains(ItemStack.loadItemStackFromNBT(weapons).getItem())) { instance.addUnlockedWeapon(ItemStack.loadItemStackFromNBT(weapons).getItem()); LogHelper.info("Loaded unlocked weapon: " + ItemStack.loadItemStackFromNBT(weapons).getDisplayName()); } } instance.setWeaponSummoned(properties.getBoolean("Summoned")); instance.setOpenedGUI(properties.getBoolean("Opened")); instance.setPortalX(properties.getDouble("PortalX")); instance.setPortalY(properties.getDouble("PortalY")); instance.setPortalZ(properties.getDouble("PortalZ")); instance.setUnlockPoints(properties.getInteger("UnlockPoints")); } } public static class Default implements IOrganizationXIII { private Utils.OrgMember member = Utils.OrgMember.NONE; private Item weapon = ModItems.KingdomKey; private List<Item> weapons = new ArrayList<>(); private boolean summoned, openedGui=false; private double orgPortalX = 0; private double orgPortalY = 0; private double orgPortalZ = 0; private int unlockPoints = 0; @Override public Utils.OrgMember getMember() { return member; } @Override public Item currentWeapon() { return weapon; } @Override public void setMember(Utils.OrgMember member) { this.member = member; } @Override public void setCurrentWeapon(Item weapon) { this.weapon = weapon; } @Override public List<Item> unlockedWeapons() { return weapons; } @Override public void setUnlockedWeapons(List<Item> list) { this.weapons = list; } @Override public void addUnlockedWeapon(Item item) { this.weapons.add(item); } @Override public void removeUnlockedWeapon(Item item) { this.weapons.remove(this.weapons.indexOf(item)); } @Override public boolean summonedWeapon() { return this.summoned; } @Override public void setWeaponSummoned(boolean summoned) { this.summoned = summoned; } @Override public boolean getOpenedGUI() { return openedGui; } @Override public void setOpenedGUI(boolean opened) { this.openedGui=opened; } @Override public double getPortalX() { return orgPortalX; } @Override public double getPortalY() { return orgPortalY; } @Override public double getPortalZ() { return orgPortalZ; } @Override public void setPortalX(double x) { this.orgPortalX = x; } @Override public void setPortalY(double y) { this.orgPortalY = y; } @Override public void setPortalZ(double z) { this.orgPortalZ = z; } @Override public int getUnlockPoints() { return unlockPoints; } @Override public void setUnlockPoints(int points) { this.unlockPoints = points; } @Override public void removePoints(int points) { this.unlockPoints-= points; } @Override public void addPoints(int points) { this.unlockPoints+= points; } } }