package micdoodle8.mods.galacticraft.core.entities.player; import com.google.common.collect.Maps; import micdoodle8.mods.galacticraft.api.recipe.ISchematicPage; import micdoodle8.mods.galacticraft.api.recipe.SchematicRegistry; import micdoodle8.mods.galacticraft.api.vector.BlockVec3; import micdoodle8.mods.galacticraft.api.vector.Vector3; import micdoodle8.mods.galacticraft.core.GCBlocks; import micdoodle8.mods.galacticraft.core.GalacticraftCore; import micdoodle8.mods.galacticraft.core.blocks.BlockPanelLighting; import micdoodle8.mods.galacticraft.core.command.CommandGCInv; import micdoodle8.mods.galacticraft.core.inventory.InventoryExtended; import micdoodle8.mods.galacticraft.core.tile.TileEntityPanelLight; import micdoodle8.mods.galacticraft.core.util.ColorUtil; import micdoodle8.mods.galacticraft.core.util.GCLog; import micdoodle8.mods.galacticraft.core.util.WorldUtil; import micdoodle8.mods.galacticraft.planets.asteroids.tick.AsteroidsTickHandlerServer; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.init.Blocks; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.LinkedList; import java.util.List; public class StatsCapability extends GCPlayerStats { public WeakReference<EntityPlayerMP> player; public InventoryExtended extendedInventory = new InventoryExtended(); public int airRemaining; public int airRemaining2; public int thermalLevel; public boolean thermalLevelNormalising; public int damageCounter; // temporary data while player is in planet selection GUI public int spaceshipTier = 1; public ItemStack[] rocketStacks = new ItemStack[2]; public int rocketType; public int fuelLevel; public Item rocketItem; public ItemStack launchpadStack; public int astroMinerCount = 0; private List<BlockVec3> activeAstroMinerChunks = new LinkedList<>(); public boolean usingParachute; public ItemStack parachuteInSlot; public ItemStack lastParachuteInSlot; public ItemStack frequencyModuleInSlot; public ItemStack lastFrequencyModuleInSlot; public ItemStack maskInSlot; public ItemStack lastMaskInSlot; public ItemStack gearInSlot; public ItemStack lastGearInSlot; public ItemStack tankInSlot1; public ItemStack lastTankInSlot1; public ItemStack tankInSlot2; public ItemStack lastTankInSlot2; public ItemStack thermalHelmetInSlot; public ItemStack lastThermalHelmetInSlot; public ItemStack thermalChestplateInSlot; public ItemStack lastThermalChestplateInSlot; public ItemStack thermalLeggingsInSlot; public ItemStack lastThermalLeggingsInSlot; public ItemStack thermalBootsInSlot; public ItemStack lastThermalBootsInSlot; public ItemStack shieldControllerInSlot; public ItemStack lastShieldControllerInSlot; public int launchAttempts = 0; public int spaceRaceInviteTeamID; public boolean usingPlanetSelectionGui; public String savedPlanetList = ""; public int openPlanetSelectionGuiCooldown; public boolean hasOpenedPlanetSelectionGui = false; public int chestSpawnCooldown; public micdoodle8.mods.galacticraft.api.vector.Vector3 chestSpawnVector; public int teleportCooldown; public int chatCooldown; public double distanceSinceLastStep; public int lastStep; public double coordsTeleportedFromX; public double coordsTeleportedFromZ; public HashMap<Integer, Integer> spaceStationDimensionData = Maps.newHashMap(); public boolean oxygenSetupValid; public boolean lastOxygenSetupValid; public boolean touchedGround; public boolean lastOnGround; public boolean inLander; public boolean justLanded; public List<ISchematicPage> unlockedSchematics = new LinkedList<>(); public List<ISchematicPage> lastUnlockedSchematics = new LinkedList<>(); public int cryogenicChamberCooldown; public boolean receivedSoundWarning; public boolean receivedBedWarning; public boolean openedSpaceRaceManager = false; public boolean sentFlags = false; public boolean newInOrbit = true; public boolean newAdventureSpawn; public int buildFlags = 0; public int incrementalDamage = 0; public String startDimension = ""; public int glassColor1 = -1; public int glassColor2 = -1; public int glassColor3 = -1; private IBlockState[] panelLightingBases = new IBlockState[BlockPanelLighting.PANELTYPES_LENGTH]; private int panelLightingColor = 0xf0f0e0; @Override public WeakReference<EntityPlayerMP> getPlayer() { return player; } @Override public void setPlayer(WeakReference<EntityPlayerMP> player) { this.player = player; } @Override public InventoryExtended getExtendedInventory() { return extendedInventory; } @Override public void setExtendedInventory(InventoryExtended extendedInventory) { this.extendedInventory = extendedInventory; } @Override public int getAirRemaining() { return airRemaining; } @Override public void setAirRemaining(int airRemaining) { this.airRemaining = airRemaining; } @Override public int getAirRemaining2() { return airRemaining2; } @Override public void setAirRemaining2(int airRemaining2) { this.airRemaining2 = airRemaining2; } @Override public int getThermalLevel() { return thermalLevel; } @Override public void setThermalLevel(int thermalLevel) { this.thermalLevel = thermalLevel; } @Override public boolean isThermalLevelNormalising() { return thermalLevelNormalising; } @Override public void setThermalLevelNormalising(boolean thermalLevelNormalising) { this.thermalLevelNormalising = thermalLevelNormalising; } @Override public int getDamageCounter() { return damageCounter; } @Override public void setDamageCounter(int damageCounter) { this.damageCounter = damageCounter; } @Override public int getSpaceshipTier() { return spaceshipTier; } @Override public void setSpaceshipTier(int spaceshipTier) { this.spaceshipTier = spaceshipTier; } @Override public ItemStack[] getRocketStacks() { return rocketStacks; } @Override public void setRocketStacks(ItemStack[] rocketStacks) { this.rocketStacks = rocketStacks; } @Override public int getRocketType() { return rocketType; } @Override public void setRocketType(int rocketType) { this.rocketType = rocketType; } @Override public int getFuelLevel() { return fuelLevel; } @Override public void setFuelLevel(int fuelLevel) { this.fuelLevel = fuelLevel; } @Override public Item getRocketItem() { return rocketItem; } @Override public void setRocketItem(Item rocketItem) { this.rocketItem = rocketItem; } @Override public ItemStack getLaunchpadStack() { return launchpadStack; } @Override public void setLaunchpadStack(ItemStack launchpadStack) { this.launchpadStack = launchpadStack; } @Override public int getAstroMinerCount() { return astroMinerCount; } @Override public void setAstroMinerCount(int astroMinerCount) { this.astroMinerCount = astroMinerCount; } @Override public List<BlockVec3> getActiveAstroMinerChunks() { return this.activeAstroMinerChunks; } @Override public boolean isUsingParachute() { return usingParachute; } @Override public void setUsingParachute(boolean usingParachute) { this.usingParachute = usingParachute; } @Override public ItemStack getParachuteInSlot() { return parachuteInSlot; } @Override public void setParachuteInSlot(ItemStack parachuteInSlot) { this.parachuteInSlot = parachuteInSlot; } @Override public ItemStack getLastParachuteInSlot() { return lastParachuteInSlot; } @Override public void setLastParachuteInSlot(ItemStack lastParachuteInSlot) { this.lastParachuteInSlot = lastParachuteInSlot; } @Override public ItemStack getFrequencyModuleInSlot() { return frequencyModuleInSlot; } @Override public void setFrequencyModuleInSlot(ItemStack frequencyModuleInSlot) { this.frequencyModuleInSlot = frequencyModuleInSlot; } @Override public ItemStack getLastFrequencyModuleInSlot() { return lastFrequencyModuleInSlot; } @Override public void setLastFrequencyModuleInSlot(ItemStack lastFrequencyModuleInSlot) { this.lastFrequencyModuleInSlot = lastFrequencyModuleInSlot; } @Override public ItemStack getMaskInSlot() { return maskInSlot; } @Override public void setMaskInSlot(ItemStack maskInSlot) { this.maskInSlot = maskInSlot; } @Override public ItemStack getLastMaskInSlot() { return lastMaskInSlot; } @Override public void setLastMaskInSlot(ItemStack lastMaskInSlot) { this.lastMaskInSlot = lastMaskInSlot; } @Override public ItemStack getGearInSlot() { return gearInSlot; } @Override public void setGearInSlot(ItemStack gearInSlot) { this.gearInSlot = gearInSlot; } @Override public ItemStack getLastGearInSlot() { return lastGearInSlot; } @Override public void setLastGearInSlot(ItemStack lastGearInSlot) { this.lastGearInSlot = lastGearInSlot; } @Override public ItemStack getTankInSlot1() { return tankInSlot1; } @Override public void setTankInSlot1(ItemStack tankInSlot1) { this.tankInSlot1 = tankInSlot1; } @Override public ItemStack getLastTankInSlot1() { return lastTankInSlot1; } @Override public void setLastTankInSlot1(ItemStack lastTankInSlot1) { this.lastTankInSlot1 = lastTankInSlot1; } @Override public ItemStack getTankInSlot2() { return tankInSlot2; } @Override public void setTankInSlot2(ItemStack tankInSlot2) { this.tankInSlot2 = tankInSlot2; } @Override public ItemStack getLastTankInSlot2() { return lastTankInSlot2; } @Override public void setLastTankInSlot2(ItemStack lastTankInSlot2) { this.lastTankInSlot2 = lastTankInSlot2; } @Override public ItemStack getThermalHelmetInSlot() { return thermalHelmetInSlot; } @Override public void setThermalHelmetInSlot(ItemStack thermalHelmetInSlot) { this.thermalHelmetInSlot = thermalHelmetInSlot; } @Override public ItemStack getLastThermalHelmetInSlot() { return lastThermalHelmetInSlot; } @Override public void setLastThermalHelmetInSlot(ItemStack lastThermalHelmetInSlot) { this.lastThermalHelmetInSlot = lastThermalHelmetInSlot; } @Override public ItemStack getThermalChestplateInSlot() { return thermalChestplateInSlot; } @Override public void setThermalChestplateInSlot(ItemStack thermalChestplateInSlot) { this.thermalChestplateInSlot = thermalChestplateInSlot; } @Override public ItemStack getLastThermalChestplateInSlot() { return lastThermalChestplateInSlot; } @Override public void setLastThermalChestplateInSlot(ItemStack lastThermalChestplateInSlot) { this.lastThermalChestplateInSlot = lastThermalChestplateInSlot; } @Override public ItemStack getThermalLeggingsInSlot() { return thermalLeggingsInSlot; } @Override public void setThermalLeggingsInSlot(ItemStack thermalLeggingsInSlot) { this.thermalLeggingsInSlot = thermalLeggingsInSlot; } @Override public ItemStack getLastThermalLeggingsInSlot() { return lastThermalLeggingsInSlot; } @Override public void setLastThermalLeggingsInSlot(ItemStack lastThermalLeggingsInSlot) { this.lastThermalLeggingsInSlot = lastThermalLeggingsInSlot; } @Override public ItemStack getThermalBootsInSlot() { return thermalBootsInSlot; } @Override public void setThermalBootsInSlot(ItemStack thermalBootsInSlot) { this.thermalBootsInSlot = thermalBootsInSlot; } @Override public ItemStack getLastThermalBootsInSlot() { return lastThermalBootsInSlot; } @Override public void setLastThermalBootsInSlot(ItemStack lastThermalBootsInSlot) { this.lastThermalBootsInSlot = lastThermalBootsInSlot; } @Override public ItemStack getShieldControllerInSlot() { return shieldControllerInSlot; } @Override public void setShieldControllerInSlot(ItemStack shieldControllerInSlot) { this.shieldControllerInSlot = shieldControllerInSlot; } @Override public ItemStack getLastShieldControllerInSlot() { return lastShieldControllerInSlot; } @Override public void setLastShieldControllerInSlot(ItemStack lastShieldControllerInSlot) { this.lastShieldControllerInSlot = lastShieldControllerInSlot; } @Override public int getLaunchAttempts() { return launchAttempts; } @Override public void setLaunchAttempts(int launchAttempts) { this.launchAttempts = launchAttempts; } @Override public int getSpaceRaceInviteTeamID() { return spaceRaceInviteTeamID; } @Override public void setSpaceRaceInviteTeamID(int spaceRaceInviteTeamID) { this.spaceRaceInviteTeamID = spaceRaceInviteTeamID; } @Override public boolean isUsingPlanetSelectionGui() { return usingPlanetSelectionGui; } @Override public void setUsingPlanetSelectionGui(boolean usingPlanetSelectionGui) { this.usingPlanetSelectionGui = usingPlanetSelectionGui; } @Override public String getSavedPlanetList() { return savedPlanetList; } @Override public void setSavedPlanetList(String savedPlanetList) { this.savedPlanetList = savedPlanetList; } @Override public int getOpenPlanetSelectionGuiCooldown() { return openPlanetSelectionGuiCooldown; } @Override public void setOpenPlanetSelectionGuiCooldown(int openPlanetSelectionGuiCooldown) { this.openPlanetSelectionGuiCooldown = openPlanetSelectionGuiCooldown; } @Override public boolean hasOpenedPlanetSelectionGui() { return hasOpenedPlanetSelectionGui; } @Override public void setHasOpenedPlanetSelectionGui(boolean hasOpenedPlanetSelectionGui) { this.hasOpenedPlanetSelectionGui = hasOpenedPlanetSelectionGui; } @Override public int getChestSpawnCooldown() { return chestSpawnCooldown; } @Override public void setChestSpawnCooldown(int chestSpawnCooldown) { this.chestSpawnCooldown = chestSpawnCooldown; } @Override public Vector3 getChestSpawnVector() { return chestSpawnVector; } @Override public void setChestSpawnVector(Vector3 chestSpawnVector) { this.chestSpawnVector = chestSpawnVector; } @Override public int getTeleportCooldown() { return teleportCooldown; } @Override public void setTeleportCooldown(int teleportCooldown) { this.teleportCooldown = teleportCooldown; } @Override public int getChatCooldown() { return chatCooldown; } @Override public void setChatCooldown(int chatCooldown) { this.chatCooldown = chatCooldown; } @Override public double getDistanceSinceLastStep() { return distanceSinceLastStep; } @Override public void setDistanceSinceLastStep(double distanceSinceLastStep) { this.distanceSinceLastStep = distanceSinceLastStep; } @Override public int getLastStep() { return lastStep; } @Override public void setLastStep(int lastStep) { this.lastStep = lastStep; } @Override public double getCoordsTeleportedFromX() { return coordsTeleportedFromX; } @Override public void setCoordsTeleportedFromX(double coordsTeleportedFromX) { this.coordsTeleportedFromX = coordsTeleportedFromX; } @Override public double getCoordsTeleportedFromZ() { return coordsTeleportedFromZ; } @Override public void setCoordsTeleportedFromZ(double coordsTeleportedFromZ) { this.coordsTeleportedFromZ = coordsTeleportedFromZ; } @Override public HashMap<Integer, Integer> getSpaceStationDimensionData() { return spaceStationDimensionData; } @Override public void setSpaceStationDimensionData(HashMap<Integer, Integer> spaceStationDimensionData) { this.spaceStationDimensionData = spaceStationDimensionData; } @Override public boolean isOxygenSetupValid() { return oxygenSetupValid; } @Override public void setOxygenSetupValid(boolean oxygenSetupValid) { this.oxygenSetupValid = oxygenSetupValid; } @Override public boolean isLastOxygenSetupValid() { return lastOxygenSetupValid; } @Override public void setLastOxygenSetupValid(boolean lastOxygenSetupValid) { this.lastOxygenSetupValid = lastOxygenSetupValid; } @Override public boolean isTouchedGround() { return touchedGround; } @Override public void setTouchedGround(boolean touchedGround) { this.touchedGround = touchedGround; } @Override public boolean isLastOnGround() { return lastOnGround; } @Override public void setLastOnGround(boolean lastOnGround) { this.lastOnGround = lastOnGround; } @Override public boolean isInLander() { return inLander; } @Override public void setInLander(boolean inLander) { this.inLander = inLander; } @Override public boolean hasJustLanded() { return justLanded; } @Override public void setJustLanded(boolean justLanded) { this.justLanded = justLanded; } @Override public List<ISchematicPage> getUnlockedSchematics() { return unlockedSchematics; } @Override public void setUnlockedSchematics(List<ISchematicPage> unlockedSchematics) { this.unlockedSchematics = unlockedSchematics; } @Override public List<ISchematicPage> getLastUnlockedSchematics() { return lastUnlockedSchematics; } @Override public void setLastUnlockedSchematics(List<ISchematicPage> lastUnlockedSchematics) { this.lastUnlockedSchematics = lastUnlockedSchematics; } @Override public int getCryogenicChamberCooldown() { return cryogenicChamberCooldown; } @Override public void setCryogenicChamberCooldown(int cryogenicChamberCooldown) { this.cryogenicChamberCooldown = cryogenicChamberCooldown; } @Override public boolean hasReceivedSoundWarning() { return receivedSoundWarning; } @Override public void setReceivedSoundWarning(boolean receivedSoundWarning) { this.receivedSoundWarning = receivedSoundWarning; } @Override public boolean hasReceivedBedWarning() { return receivedBedWarning; } @Override public void setReceivedBedWarning(boolean receivedBedWarning) { this.receivedBedWarning = receivedBedWarning; } @Override public boolean hasOpenedSpaceRaceManager() { return openedSpaceRaceManager; } @Override public void setOpenedSpaceRaceManager(boolean openedSpaceRaceManager) { this.openedSpaceRaceManager = openedSpaceRaceManager; } @Override public boolean hasSentFlags() { return sentFlags; } @Override public void setSentFlags(boolean sentFlags) { this.sentFlags = sentFlags; } @Override public boolean isNewInOrbit() { return newInOrbit; } @Override public void setNewInOrbit(boolean newInOrbit) { this.newInOrbit = newInOrbit; } @Override public boolean isNewAdventureSpawn() { return newAdventureSpawn; } @Override public void setNewAdventureSpawn(boolean newAdventureSpawn) { this.newAdventureSpawn = newAdventureSpawn; } @Override public int getBuildFlags() { return buildFlags; } @Override public void setBuildFlags(int buildFlags) { this.buildFlags = buildFlags; } @Override public int getIncrementalDamage() { return incrementalDamage; } @Override public void setIncrementalDamage(int incrementalDamage) { this.incrementalDamage = incrementalDamage; } @Override public String getStartDimension() { return startDimension; } @Override public void setStartDimension(String startDimension) { this.startDimension = startDimension; } @Override public void saveNBTData(NBTTagCompound nbt) { nbt.setTag("ExtendedInventoryGC", this.extendedInventory.writeToNBT(new NBTTagList())); nbt.setInteger("playerAirRemaining", this.airRemaining); nbt.setInteger("damageCounter", this.damageCounter); nbt.setBoolean("OxygenSetupValid", this.oxygenSetupValid); nbt.setBoolean("usingParachute2", this.usingParachute); nbt.setBoolean("usingPlanetSelectionGui", this.usingPlanetSelectionGui); nbt.setInteger("teleportCooldown", this.teleportCooldown); nbt.setDouble("coordsTeleportedFromX", this.coordsTeleportedFromX); nbt.setDouble("coordsTeleportedFromZ", this.coordsTeleportedFromZ); nbt.setString("startDimension", this.startDimension); nbt.setString("spaceStationDimensionInfo", WorldUtil.spaceStationDataToString(this.spaceStationDimensionData)); nbt.setInteger("thermalLevel", this.thermalLevel); Collections.sort(this.unlockedSchematics); NBTTagList tagList = new NBTTagList(); for (ISchematicPage page : this.unlockedSchematics) { if (page != null) { final NBTTagCompound nbttagcompound = new NBTTagCompound(); nbttagcompound.setInteger("UnlockedPage", page.getPageID()); tagList.appendTag(nbttagcompound); } } nbt.setTag("Schematics", tagList); nbt.setInteger("rocketStacksLength", this.rocketStacks.length); nbt.setInteger("SpaceshipTier", this.spaceshipTier); nbt.setInteger("FuelLevel", this.fuelLevel); if (this.rocketItem != null) { ItemStack returnRocket = new ItemStack(this.rocketItem, 1, this.rocketType); nbt.setTag("ReturnRocket", returnRocket.writeToNBT(new NBTTagCompound())); } final NBTTagList var2 = new NBTTagList(); for (int var3 = 0; var3 < this.rocketStacks.length; ++var3) { if (this.rocketStacks[var3] != null) { final NBTTagCompound var4 = new NBTTagCompound(); var4.setByte("Slot", (byte) var3); this.rocketStacks[var3].writeToNBT(var4); var2.appendTag(var4); } } nbt.setTag("RocketItems", var2); final NBTTagCompound var4 = new NBTTagCompound(); if (this.launchpadStack != null) { nbt.setTag("LaunchpadStack", this.launchpadStack.writeToNBT(var4)); } else { nbt.setTag("LaunchpadStack", var4); } nbt.setInteger("CryogenicChamberCooldown", this.cryogenicChamberCooldown); nbt.setBoolean("ReceivedSoundWarning", this.receivedSoundWarning); nbt.setBoolean("ReceivedBedWarning", this.receivedBedWarning); nbt.setInteger("BuildFlags", this.buildFlags); nbt.setBoolean("ShownSpaceRace", this.openedSpaceRaceManager); nbt.setInteger("AstroMinerCount", this.astroMinerCount); NBTTagList astroList = new NBTTagList(); for (BlockVec3 data : this.activeAstroMinerChunks) { if (data != null) { astroList.appendTag(data.writeToNBT(new NBTTagCompound())); } } nbt.setTag("AstroData", astroList); nbt.setInteger("GlassColor1", this.glassColor1); nbt.setInteger("GlassColor2", this.glassColor2); nbt.setInteger("GlassColor3", this.glassColor3); NBTTagList panelList = new NBTTagList(); for (int i = 0; i < BlockPanelLighting.PANELTYPES_LENGTH; ++i) { final NBTTagCompound stateNBT = new NBTTagCompound(); IBlockState bs = this.panelLightingBases[i]; if (bs != null) { TileEntityPanelLight.writeBlockState(stateNBT, bs); } panelList.appendTag(stateNBT); } nbt.setTag("PanLi", panelList); nbt.setInteger("PanCo", this.panelLightingColor); } @Override public void loadNBTData(NBTTagCompound nbt) { try { this.airRemaining = nbt.getInteger("playerAirRemaining"); this.damageCounter = nbt.getInteger("damageCounter"); this.oxygenSetupValid = this.lastOxygenSetupValid = nbt.getBoolean("OxygenSetupValid"); this.thermalLevel = nbt.getInteger("thermalLevel"); // Backwards compatibility NBTTagList nbttaglist = nbt.getTagList("Inventory", 10); this.extendedInventory.readFromNBTOld(nbttaglist); if (nbt.hasKey("ExtendedInventoryGC")) { this.extendedInventory.readFromNBT(nbt.getTagList("ExtendedInventoryGC", 10)); } // Added for GCInv command - if tried to load an offline player's // inventory, load it now // (if there was no offline load, then the dontload flag in doLoad() // will make sure nothing happens) EntityPlayerMP p = this.player.get(); if (p != null) { ItemStack[] saveinv = CommandGCInv.getSaveData(p.getGameProfile().getName().toLowerCase()); if (saveinv != null) { CommandGCInv.doLoad(p); } } if (nbt.hasKey("SpaceshipTier")) { this.spaceshipTier = nbt.getInteger("SpaceshipTier"); } //New keys in version 3.0.5.220 if (nbt.hasKey("FuelLevel")) { this.fuelLevel = nbt.getInteger("FuelLevel"); } if (nbt.hasKey("ReturnRocket")) { ItemStack returnRocket = ItemStack.loadItemStackFromNBT(nbt.getCompoundTag("ReturnRocket")); if (returnRocket != null) { this.rocketItem = returnRocket.getItem(); this.rocketType = returnRocket.getItemDamage(); } } this.usingParachute = nbt.getBoolean("usingParachute2"); this.usingPlanetSelectionGui = nbt.getBoolean("usingPlanetSelectionGui"); this.teleportCooldown = nbt.getInteger("teleportCooldown"); this.coordsTeleportedFromX = nbt.getDouble("coordsTeleportedFromX"); this.coordsTeleportedFromZ = nbt.getDouble("coordsTeleportedFromZ"); this.startDimension = nbt.hasKey("startDimension") ? nbt.getString("startDimension") : ""; if (nbt.hasKey("spaceStationDimensionID")) { // If loading from an old save file, the home space station is always the overworld, so use 0 as home planet this.spaceStationDimensionData = WorldUtil.stringToSpaceStationData("0$" + nbt.getInteger("spaceStationDimensionID")); } else { this.spaceStationDimensionData = WorldUtil.stringToSpaceStationData(nbt.getString("spaceStationDimensionInfo")); } if (nbt.getBoolean("usingPlanetSelectionGui")) { this.openPlanetSelectionGuiCooldown = 20; } if (nbt.hasKey("RocketItems") && nbt.hasKey("rocketStacksLength")) { final NBTTagList var23 = nbt.getTagList("RocketItems", 10); int length = nbt.getInteger("rocketStacksLength"); this.rocketStacks = new ItemStack[length]; for (int var3 = 0; var3 < var23.tagCount(); ++var3) { final NBTTagCompound var4 = var23.getCompoundTagAt(var3); final int var5 = var4.getByte("Slot") & 255; if (var5 < this.rocketStacks.length) { this.rocketStacks[var5] = ItemStack.loadItemStackFromNBT(var4); } } } this.unlockedSchematics = new ArrayList<ISchematicPage>(); if (p != null) { for (int i = 0; i < nbt.getTagList("Schematics", 10).tagCount(); ++i) { final NBTTagCompound nbttagcompound = nbt.getTagList("Schematics", 10).getCompoundTagAt(i); final int j = nbttagcompound.getInteger("UnlockedPage"); SchematicRegistry.addUnlockedPage(p, SchematicRegistry.getMatchingRecipeForID(j)); } } Collections.sort(this.unlockedSchematics); this.cryogenicChamberCooldown = nbt.getInteger("CryogenicChamberCooldown"); if (nbt.hasKey("ReceivedSoundWarning")) { this.receivedSoundWarning = nbt.getBoolean("ReceivedSoundWarning"); } if (nbt.hasKey("ReceivedBedWarning")) { this.receivedBedWarning = nbt.getBoolean("ReceivedBedWarning"); } if (nbt.hasKey("LaunchpadStack")) { this.launchpadStack = ItemStack.loadItemStackFromNBT(nbt.getCompoundTag("LaunchpadStack")); if (this.launchpadStack != null && this.launchpadStack.stackSize == 0) { this.launchpadStack = null; } } else { // for backwards compatibility with saves which don't have this tag - players can't lose launchpads this.launchpadStack = new ItemStack(GCBlocks.landingPad, 9, 0); } if (nbt.hasKey("BuildFlags")) { this.buildFlags = nbt.getInteger("BuildFlags"); } if (nbt.hasKey("ShownSpaceRace")) { this.openedSpaceRaceManager = nbt.getBoolean("ShownSpaceRace"); } if (nbt.hasKey("AstroMinerCount")) { this.astroMinerCount = nbt.getInteger("AstroMinerCount"); } if (nbt.hasKey("AstroData")) { this.activeAstroMinerChunks.clear(); NBTTagList astroList = nbt.getTagList("AstroData", 10); for (int i = 0; i < astroList.tagCount(); ++i) { final NBTTagCompound nbttagcompound = astroList.getCompoundTagAt(i); BlockVec3 data = BlockVec3.readFromNBT(nbttagcompound); this.activeAstroMinerChunks.add(data); } if (GalacticraftCore.isPlanetsLoaded) { AsteroidsTickHandlerServer.loadAstroChunkList(this.activeAstroMinerChunks); } } if (nbt.hasKey("GlassColor1")) { this.glassColor1 = nbt.getInteger("GlassColor1"); this.glassColor2 = nbt.getInteger("GlassColor2"); this.glassColor3 = nbt.getInteger("GlassColor3"); } if (nbt.hasKey("PanLi")) { final NBTTagList panels = nbt.getTagList("PanLi", 10); for (int i = 0; i < panels.tagCount(); ++i) { if (i == BlockPanelLighting.PANELTYPES_LENGTH) break; final NBTTagCompound stateNBT = panels.getCompoundTagAt(i); IBlockState bs = TileEntityPanelLight.readBlockState(stateNBT); this.panelLightingBases[i] = (bs.getBlock() == Blocks.air) ? null : bs; } } if (nbt.hasKey("PanCo")) { this.panelLightingColor = nbt.getInteger("PanCo"); } GCLog.debug("Loading GC player data for " + player.get().getGameProfile().getName() + " : " + this.buildFlags); this.sentFlags = false; } catch (Exception e) { GCLog.severe("Found error in saved Galacticraft player data for " + player.get().getGameProfile().getName() + " - this should fix itself next relog."); e.printStackTrace(); } GCLog.debug("Finished loading GC player data for " + player.get().getGameProfile().getName() + " : " + this.buildFlags); } @Override public void copyFrom(GCPlayerStats oldData, boolean keepInv) { if (keepInv) { this.extendedInventory.copyInventory(oldData.getExtendedInventory()); } this.spaceStationDimensionData = oldData.getSpaceStationDimensionData(); this.unlockedSchematics = oldData.getUnlockedSchematics(); this.receivedSoundWarning = oldData.hasReceivedSoundWarning(); this.receivedBedWarning = oldData.hasReceivedBedWarning(); this.openedSpaceRaceManager = oldData.hasOpenedSpaceRaceManager(); this.spaceRaceInviteTeamID = oldData.getSpaceRaceInviteTeamID(); this.buildFlags = oldData.getBuildFlags(); this.glassColor1 = oldData.getGlassColor1(); this.glassColor2 = oldData.getGlassColor2(); this.glassColor3 = oldData.getGlassColor3(); this.panelLightingBases = oldData.getPanelLightingBases(); this.panelLightingColor = oldData.getPanelLightingColor(); this.astroMinerCount = oldData.getAstroMinerCount(); this.activeAstroMinerChunks = oldData.getActiveAstroMinerChunks(); this.sentFlags = false; } @Override public void setGlassColors(int color1, int color2, int color3) { boolean changes = false; if (this.glassColor1 != color1) { changes = true; this.glassColor1 = color1; } if (this.glassColor2 != color2) { changes = true; this.glassColor2 = color2; } if (this.glassColor3 != color3) { changes = true; this.glassColor3 = color3; } if (changes) ColorUtil.sendUpdatedColorsToPlayer(this); } @Override public int getGlassColor1() { return glassColor1; } @Override public int getGlassColor2() { return glassColor2; } @Override public int getGlassColor3() { return glassColor3; } @Override public IBlockState[] getPanelLightingBases() { return panelLightingBases; } @Override public int getPanelLightingColor() { return panelLightingColor; } @Override public void setPanelLightingColor(int color) { panelLightingColor = color; } @Override public Object[] getMiscNetworkedStats() { int length = 2 + BlockPanelLighting.PANELTYPES_LENGTH * 2; Object[] result = new Object[length]; result[0] = this.getBuildFlags(); BlockPanelLighting.getNetworkedData(result, this.panelLightingBases); result[length - 1] = this.panelLightingColor; return result; } }