aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/common/misc/spaceprojects/base
diff options
context:
space:
mode:
authorBlueWeabo <ilia.iliev2005@gmail.com>2023-02-26 13:16:07 +0200
committerGitHub <noreply@github.com>2023-02-26 12:16:07 +0100
commitb8d1ecf8b9b6348304392d09e4490d473dbb120d (patch)
tree1cdc59a1b660510fe2abd40686b2abed8b0ab40f /src/main/java/gregtech/common/misc/spaceprojects/base
parentebd7df3a1ddba9105df008d44ab046d159279628 (diff)
downloadGT5-Unofficial-b8d1ecf8b9b6348304392d09e4490d473dbb120d.tar.gz
GT5-Unofficial-b8d1ecf8b9b6348304392d09e4490d473dbb120d.tar.bz2
GT5-Unofficial-b8d1ecf8b9b6348304392d09e4490d473dbb120d.zip
Add a completely new system for late/endgame content (#1754)
* basic work * typo fixes * make an enum folder * location enums * space project manager * implement the space project teams * commands * move things around and new things * upgrade work * requirement work * if possible use an upgrades values * cleanup * more helpers in command * fix AOOBE * fix world saved data * builder for requirements * add command autocomplete * fix command npe * mark world saved data dirty * switch to saving to json string. this is fine * fix npe * fix files not saving correctly. serialization * spotless * part 1 of fixing json saving * working json file saving * rename fields * full implementation of SP_Upgrade * fixes * cleanup * texture prep * documentation part 1 * documentation part 2 and rework of json saving * fix the missed conversions * set texture when copying * more interface usage and fixes * rework saving. * Added rudimentary NEI handler for projects * Revert "Added rudimentary NEI handler for projects" This reverts commit 6d8210e25b27fee7dc1865d1afa91708a8d9b875. * address NPEs * some textures * higher quality textures, put in the moon as a temp texture * add a check to create a team if one smt weird happens * command work * add ability to localize the space bodies * Added disabled button and toggle button * Added possibility to not render the original stacksize of item stacks in NEI * Added NEI handler * Fixes item count on tooltip always rendering as 1 * Fix refactor * 5 new body textures * fix misspelled texture name --------- Co-authored-by: minecraft7771 <maxim235@gmx.de>
Diffstat (limited to 'src/main/java/gregtech/common/misc/spaceprojects/base')
-rw-r--r--src/main/java/gregtech/common/misc/spaceprojects/base/SP_Requirements.java77
-rw-r--r--src/main/java/gregtech/common/misc/spaceprojects/base/SP_Upgrade.java347
-rw-r--r--src/main/java/gregtech/common/misc/spaceprojects/base/SpaceProject.java440
3 files changed, 864 insertions, 0 deletions
diff --git a/src/main/java/gregtech/common/misc/spaceprojects/base/SP_Requirements.java b/src/main/java/gregtech/common/misc/spaceprojects/base/SP_Requirements.java
new file mode 100644
index 0000000000..0cce6f08f0
--- /dev/null
+++ b/src/main/java/gregtech/common/misc/spaceprojects/base/SP_Requirements.java
@@ -0,0 +1,77 @@
+package gregtech.common.misc.spaceprojects.base;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import gregtech.common.misc.spaceprojects.enums.SpaceBodyType;
+import gregtech.common.misc.spaceprojects.enums.StarType;
+import gregtech.common.misc.spaceprojects.interfaces.ISpaceProject;
+import gregtech.common.misc.spaceprojects.interfaces.ISpaceProject.ISP_Requirements;
+import gregtech.common.misc.spaceprojects.interfaces.ISpaceProject.ISP_Upgrade;
+
+/**
+ * @author BlueWeabo
+ */
+public class SP_Requirements implements ISP_Requirements {
+
+ // #region Variables
+
+ protected SpaceBodyType spaceBody = SpaceBodyType.NONE;
+ protected StarType star = StarType.NotAStar;
+ protected List<ISpaceProject> spaceProjects = new ArrayList<>();
+ protected List<ISP_Upgrade> upgrades = new ArrayList<>();
+
+ // #endregion
+
+ // #region Getters
+
+ @Override
+ public SpaceBodyType getBodyType() {
+ return spaceBody;
+ }
+
+ @Override
+ public StarType getStarType() {
+ return star;
+ }
+
+ @Override
+ public List<ISpaceProject> getProjects() {
+ return spaceProjects;
+ }
+
+ @Override
+ public List<ISP_Upgrade> getUpgrades() {
+ return upgrades;
+ }
+
+ // #endregion
+
+ // #region Setters/Builder
+
+ public SP_Requirements setSpaceBodyType(SpaceBodyType spaceBodyType) {
+ spaceBody = spaceBodyType;
+ return this;
+ }
+
+ public SP_Requirements setStarType(StarType starType) {
+ star = starType;
+ return this;
+ }
+
+ public SP_Requirements setUpgrades(ISP_Upgrade... requirementUpgrades) {
+ for (ISP_Upgrade upgrade : requirementUpgrades) {
+ upgrades.add(upgrade);
+ }
+ return this;
+ }
+
+ public SP_Requirements setSpaceProjects(ISpaceProject... requirementProjects) {
+ for (ISpaceProject project : requirementProjects) {
+ spaceProjects.add(project);
+ }
+ return this;
+ }
+
+ // #endregion
+}
diff --git a/src/main/java/gregtech/common/misc/spaceprojects/base/SP_Upgrade.java b/src/main/java/gregtech/common/misc/spaceprojects/base/SP_Upgrade.java
new file mode 100644
index 0000000000..6a1fe82791
--- /dev/null
+++ b/src/main/java/gregtech/common/misc/spaceprojects/base/SP_Upgrade.java
@@ -0,0 +1,347 @@
+package gregtech.common.misc.spaceprojects.base;
+
+import java.util.UUID;
+
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.StatCollector;
+import net.minecraftforge.fluids.FluidStack;
+
+import gregtech.common.misc.spaceprojects.SpaceProjectManager;
+import gregtech.common.misc.spaceprojects.enums.UpgradeStatus;
+import gregtech.common.misc.spaceprojects.interfaces.ISpaceProject;
+import gregtech.common.misc.spaceprojects.interfaces.ISpaceProject.ISP_Upgrade;
+
+/**
+ * @author BlueWeabo
+ */
+public class SP_Upgrade implements ISP_Upgrade {
+
+ // #region Variables
+
+ protected String name;
+ protected String unlocalizedName;
+ protected ItemStack[] itemsCost;
+ protected FluidStack[] fluidsCost;
+ protected int totalStages;
+ protected int currentStage;
+ protected int buildTime;
+ protected long voltage;
+ protected SP_Requirements requirements;
+ protected ISpaceProject projectBelongingTo;
+
+ // #endregion
+
+ // #region Getters
+
+ @Override
+ public String getUpgradeName() {
+ return name;
+ }
+
+ @Override
+ public String getUnlocalizedName() {
+ return unlocalizedName;
+ }
+
+ @Override
+ public String getLocalizedName() {
+ return StatCollector.translateToLocal(unlocalizedName);
+ }
+
+ @Override
+ public ItemStack[] getItemsCostPerStage() {
+ return itemsCost;
+ }
+
+ @Override
+ public ItemStack getItemCostPerStage(int index) {
+ if (itemsCost == null || index < 0 || index >= itemsCost.length) {
+ return null;
+ }
+
+ return itemsCost[index];
+ }
+
+ @Override
+ public ItemStack[] getCurrentItemsProgress() {
+ ItemStack[] currentItemsProgress = new ItemStack[itemsCost.length];
+ int index = 0;
+ for (ItemStack item : itemsCost) {
+ ItemStack copy = item.copy();
+ copy.stackSize *= getCurrentStage();
+ currentItemsProgress[index++] = copy;
+ }
+
+ return currentItemsProgress;
+ }
+
+ @Override
+ public ItemStack getCurrentItemProgress(int index) {
+ if (itemsCost == null || index < 0 || index >= itemsCost.length || itemsCost[index] == null) {
+ return null;
+ }
+
+ ItemStack item = itemsCost[index].copy();
+ item.stackSize *= getCurrentStage();
+ return item;
+ }
+
+ @Override
+ public ItemStack[] getTotalItemsCost() {
+ ItemStack[] totalItemsCost = new ItemStack[itemsCost.length];
+ int index = 0;
+ for (ItemStack item : itemsCost) {
+ ItemStack copy = item.copy();
+ copy.stackSize *= getTotalStages();
+ totalItemsCost[index++] = copy;
+ }
+
+ return totalItemsCost;
+ }
+
+ @Override
+ public ItemStack getTotalItemCost(int index) {
+ if (itemsCost == null || index < 0 || index >= itemsCost.length || itemsCost[index] == null) {
+ return null;
+ }
+
+ ItemStack item = itemsCost[index].copy();
+ item.stackSize *= getTotalStages();
+ return item;
+ }
+
+ @Override
+ public FluidStack[] getFluidsCostPerStage() {
+ return fluidsCost;
+ }
+
+ @Override
+ public FluidStack getFluidCostPerStage(int index) {
+ if (fluidsCost == null || index < 0 || index >= fluidsCost.length) {
+ return null;
+ }
+
+ return fluidsCost[index];
+ }
+
+ @Override
+ public FluidStack[] getCurrentFluidsProgress() {
+ if (fluidsCost == null) {
+ return null;
+ }
+
+ FluidStack[] currentFluidsProgress = new FluidStack[fluidsCost.length];
+ int index = 0;
+ for (FluidStack fluid : fluidsCost) {
+ FluidStack copy = fluid.copy();
+ copy.amount *= getCurrentStage();
+ currentFluidsProgress[index++] = copy;
+ }
+
+ return currentFluidsProgress;
+ }
+
+ @Override
+ public FluidStack getCurrentFluidProgress(int index) {
+ if (fluidsCost == null || index < 0 || index >= fluidsCost.length || fluidsCost[index] == null) {
+ return null;
+ }
+
+ FluidStack fluid = fluidsCost[index].copy();
+ fluid.amount *= getCurrentStage();
+ return fluid;
+ }
+
+ @Override
+ public FluidStack[] getTotalFluidsCost() {
+ if (fluidsCost == null) {
+ return null;
+ }
+
+ FluidStack[] totalFluidsCost = new FluidStack[fluidsCost.length];
+ int index = 0;
+ for (FluidStack fluid : fluidsCost) {
+ FluidStack copy = fluid.copy();
+ copy.amount *= getTotalStages();
+ totalFluidsCost[index++] = copy;
+ }
+
+ return totalFluidsCost;
+ }
+
+ @Override
+ public FluidStack getTotalFluidCost(int index) {
+ if (fluidsCost == null || index < 0 || index >= fluidsCost.length || fluidsCost[index] == null) {
+ return null;
+ }
+
+ FluidStack fluid = fluidsCost[index].copy();
+ fluid.amount *= getTotalStages();
+ return fluid;
+ }
+
+ @Override
+ public int getTotalStages() {
+ return totalStages;
+ }
+
+ @Override
+ public int getUpgradeBuildTime() {
+ return buildTime;
+ }
+
+ @Override
+ public int getCurrentStage() {
+ return currentStage;
+ }
+
+ @Override
+ public float getCurrentProgress() {
+ return currentStage / totalStages * 100.0f;
+ }
+
+ @Override
+ public long getVoltage() {
+ return voltage;
+ }
+
+ @Override
+ public UpgradeStatus getStatus() {
+ if (requirements == null) {
+ return UpgradeStatus.Unlocked;
+ }
+
+ if (isFinished()) {
+ return UpgradeStatus.Finished;
+ }
+ return UpgradeStatus.Locked;
+ }
+
+ @Override
+ public SP_Requirements getUpgradeRequirements() {
+ return requirements;
+ }
+
+ @Override
+ public ISpaceProject getParentProject() {
+ return projectBelongingTo;
+ }
+
+ // #endregion
+
+ // #region Setter/Builder
+
+ public SP_Upgrade() {}
+
+ public SP_Upgrade setUpgradeName(String upgradeName) {
+ name = upgradeName;
+ return this;
+ }
+
+ public SP_Upgrade setUpgradeUnlocalizedName(String upgradeUnlocalizedName) {
+ unlocalizedName = upgradeUnlocalizedName;
+ return this;
+ }
+
+ public SP_Upgrade setUpgradeItemsCost(ItemStack... upgradeItemsCost) {
+ itemsCost = upgradeItemsCost;
+ return this;
+ }
+
+ public SP_Upgrade setUpgradeFluidsCost(FluidStack... upgradeFluidsCost) {
+ fluidsCost = upgradeFluidsCost;
+ return this;
+ }
+
+ public SP_Upgrade setUpgradeRequirements(SP_Requirements upgradeRequirements) {
+ requirements = upgradeRequirements;
+ return this;
+ }
+
+ public SP_Upgrade setUpgradeTotalStages(int upgradeTotalStages) {
+ totalStages = upgradeTotalStages;
+ return this;
+ }
+
+ public SP_Upgrade setUpgradeBuildTime(int upgradeBuildTime) {
+ buildTime = upgradeBuildTime;
+ return this;
+ }
+
+ public SP_Upgrade setUpgradeVoltage(long upgradeVoltage) {
+ voltage = upgradeVoltage;
+ return this;
+ }
+
+ @Override
+ public void setUpgradeProject(ISpaceProject project) {
+ projectBelongingTo = project;
+ }
+
+ @Override
+ public void setUpgradeCurrentStage(int stage) {
+ currentStage = stage;
+ }
+
+ // #endregion
+
+ // #region Other
+
+ @Override
+ public boolean meetsRequirements(UUID aTeam) {
+ if (requirements == null) {
+ return true;
+ }
+
+ if (requirements.getBodyType() != null) {
+ if (!requirements.getBodyType().equals(projectBelongingTo.getProjectLocation().getType())) {
+ return false;
+ }
+ }
+
+ if (requirements.getStarType() != null) {
+ if (!requirements.getStarType().equals(projectBelongingTo.getProjectLocation().getStarType())) {
+ return false;
+ }
+ }
+
+ if (requirements.getProjects() != null) {
+ for (ISpaceProject tProject : requirements.getProjects()) {
+ if (!SpaceProjectManager.teamHasProject(aTeam, tProject)) {
+ return false;
+ }
+ }
+ }
+
+ if (requirements.getUpgrades() != null) {
+ for (ISP_Upgrade upgrade : requirements.getUpgrades()) {
+ if (!projectBelongingTo.hasUpgrade(upgrade.getUpgradeName())) {
+ return false;
+ }
+ }
+ }
+
+ return true;
+ }
+
+ @Override
+ public SP_Upgrade copy() {
+ SP_Upgrade copy = new SP_Upgrade().setUpgradeName(name).setUpgradeUnlocalizedName(unlocalizedName)
+ .setUpgradeBuildTime(buildTime).setUpgradeFluidsCost(fluidsCost).setUpgradeItemsCost(itemsCost)
+ .setUpgradeRequirements(requirements).setUpgradeTotalStages(totalStages).setUpgradeVoltage(voltage);
+ return copy;
+ }
+
+ @Override
+ public void goToNextStage() {
+ currentStage++;
+ }
+
+ @Override
+ public boolean isFinished() {
+ return currentStage == totalStages;
+ }
+
+ // #endregion
+
+}
diff --git a/src/main/java/gregtech/common/misc/spaceprojects/base/SpaceProject.java b/src/main/java/gregtech/common/misc/spaceprojects/base/SpaceProject.java
new file mode 100644
index 0000000000..57625f083e
--- /dev/null
+++ b/src/main/java/gregtech/common/misc/spaceprojects/base/SpaceProject.java
@@ -0,0 +1,440 @@
+package gregtech.common.misc.spaceprojects.base;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.StatCollector;
+import net.minecraftforge.fluids.FluidStack;
+
+import com.gtnewhorizons.modularui.api.drawable.UITexture;
+
+import gregtech.common.misc.spaceprojects.SpaceProjectManager;
+import gregtech.common.misc.spaceprojects.interfaces.ISpaceBody;
+import gregtech.common.misc.spaceprojects.interfaces.ISpaceProject;
+
+/**
+ * @author BlueWeabo
+ */
+public class SpaceProject implements ISpaceProject {
+
+ // #region Variables
+
+ protected String name;
+ protected String unlocalizedName;
+ protected long voltage;
+ protected int buildTime;
+ protected int projectTier;
+ protected int currentStage;
+ protected int totalStage;
+ protected Map<String, ISP_Upgrade> upgradesAvailable = new HashMap<>();
+ protected Map<String, ISP_Upgrade> upgradesInstalled = new HashMap<>();
+ protected ISP_Requirements requirements;
+ protected ISP_Upgrade currentUpgrade;
+ protected ItemStack[] itemsCost;
+ protected FluidStack[] fluidsCost;
+ protected ISpaceBody location;
+ protected UITexture texture;
+
+ // #endregion
+
+ // #region Getters
+
+ @Override
+ public String getProjectName() {
+ return name;
+ }
+
+ @Override
+ public String getUnlocalizedName() {
+ return unlocalizedName;
+ }
+
+ public String getLocalizedName() {
+ return StatCollector.translateToLocal(unlocalizedName);
+ }
+
+ @Override
+ public long getProjectVoltage() {
+ return voltage;
+ }
+
+ @Override
+ public int getProjectBuildTime() {
+ return buildTime;
+ }
+
+ @Override
+ public float getProjectCurrentProgress() {
+ return currentStage / totalStage * 100.0f;
+ }
+
+ @Override
+ public int getProjectTier() {
+ return projectTier;
+ }
+
+ @Override
+ public int getCurrentStage() {
+ return currentStage;
+ }
+
+ @Override
+ public int getTotalStages() {
+ return totalStage;
+ }
+
+ @Override
+ public Collection<ISP_Upgrade> getAllUpgrades() {
+ return upgradesAvailable.values();
+ }
+
+ @Override
+ public Map<String, ISP_Upgrade> getUpgradesBuiltMap() {
+ return upgradesInstalled;
+ }
+
+ @Override
+ public Collection<ISP_Upgrade> getAllBuiltUpgrades() {
+ return upgradesInstalled.values();
+ }
+
+ @Override
+ public ISP_Upgrade getUpgrade(String upgradeName) {
+ return upgradesAvailable.get(upgradeName);
+ }
+
+ @Override
+ public ItemStack[] getItemsCostPerStage() {
+ return itemsCost;
+ }
+
+ @Override
+ public ItemStack getItemCostPerStage(int index) {
+ if (itemsCost == null || index < 0 || index >= itemsCost.length) {
+ return null;
+ }
+
+ return itemsCost[index];
+ }
+
+ @Override
+ public ItemStack[] getCurrentItemsProgress() {
+ ItemStack[] currentItemsProgress = new ItemStack[itemsCost.length];
+ int index = 0;
+ for (ItemStack item : itemsCost) {
+ if (item == null) {
+ currentItemsProgress[index++] = null;
+ continue;
+ }
+ ItemStack copy = item.copy();
+ copy.stackSize *= getCurrentStage();
+ currentItemsProgress[index++] = copy;
+ }
+
+ return currentItemsProgress;
+ }
+
+ @Override
+ public ItemStack getCurrentItemProgress(int index) {
+ if (itemsCost == null || index < 0 || index >= itemsCost.length || itemsCost[index] == null) {
+ return null;
+ }
+
+ ItemStack item = itemsCost[index].copy();
+ item.stackSize *= getCurrentStage();
+ return item;
+ }
+
+ @Override
+ public ItemStack[] getTotalItemsCost() {
+ ItemStack[] totalItemsCost = new ItemStack[itemsCost.length];
+ int index = 0;
+ for (ItemStack item : itemsCost) {
+ if (item == null) {
+ totalItemsCost[index++] = null;
+ continue;
+ }
+ ItemStack copy = item.copy();
+ copy.stackSize *= getTotalStages();
+ totalItemsCost[index++] = copy;
+ }
+
+ return totalItemsCost;
+ }
+
+ @Override
+ public ItemStack getTotalItemCost(int index) {
+ if (itemsCost == null || index < 0 || index >= itemsCost.length || itemsCost[index] == null) {
+ return null;
+ }
+
+ ItemStack item = itemsCost[index].copy();
+ item.stackSize *= getTotalStages();
+ return item;
+ }
+
+ @Override
+ public FluidStack[] getFluidsCostPerStage() {
+ return fluidsCost;
+ }
+
+ @Override
+ public FluidStack getFluidCostPerStage(int index) {
+ if (fluidsCost == null || index < 0 || index >= fluidsCost.length || fluidsCost[index] == null) {
+ return null;
+ }
+
+ return fluidsCost[index];
+ }
+
+ @Override
+ public FluidStack[] getCurrentFluidsProgress() {
+ if (fluidsCost == null) {
+ return null;
+ }
+
+ FluidStack[] currentFluidsProgress = new FluidStack[fluidsCost.length];
+ int index = 0;
+ for (FluidStack fluid : fluidsCost) {
+ if (fluid == null) {
+ currentFluidsProgress[index++] = null;
+ continue;
+ }
+ FluidStack copy = fluid.copy();
+ copy.amount *= getCurrentStage();
+ currentFluidsProgress[index++] = copy;
+ }
+
+ return currentFluidsProgress;
+ }
+
+ @Override
+ public FluidStack getCurrentFluidProgress(int index) {
+ if (fluidsCost == null || index < 0 || index >= fluidsCost.length || fluidsCost[index] == null) {
+ return null;
+ }
+
+ FluidStack fluid = fluidsCost[index].copy();
+ fluid.amount *= getCurrentStage();
+ return fluid;
+ }
+
+ @Override
+ public FluidStack[] getTotalFluidsCost() {
+ if (fluidsCost == null) {
+ return null;
+ }
+
+ FluidStack[] totalFluidsCost = new FluidStack[fluidsCost.length];
+ int index = 0;
+ for (FluidStack fluid : fluidsCost) {
+ if (fluid == null) {
+ totalFluidsCost[index++] = null;
+ continue;
+ }
+ FluidStack copy = fluid.copy();
+ copy.amount *= getTotalStages();
+ totalFluidsCost[index++] = copy;
+ }
+
+ return totalFluidsCost;
+ }
+
+ @Override
+ public FluidStack getTotalFluidCost(int index) {
+ if (fluidsCost == null || index < 0 || index >= fluidsCost.length) {
+ return null;
+ }
+
+ FluidStack fluid = fluidsCost[index].copy();
+ fluid.amount *= getTotalStages();
+ return fluid;
+ }
+
+ @Override
+ public ISP_Upgrade getUpgradeBeingBuilt() {
+ return currentUpgrade;
+ }
+
+ @Override
+ public ISpaceBody getProjectLocation() {
+ return location;
+ }
+
+ @Override
+ public UITexture getTexture() {
+ return texture;
+ }
+
+ // #endregion
+
+ // #region Setter/Builder
+
+ public SpaceProject setProjectName(String spaceProjectName) {
+ name = spaceProjectName;
+ return this;
+ }
+
+ public SpaceProject setProjectUnlocalizedName(String spaceProjectUnlocalizedName) {
+ unlocalizedName = spaceProjectUnlocalizedName;
+ return this;
+ }
+
+ public SpaceProject setProjectVoltage(long spaceProjectVoltage) {
+ voltage = spaceProjectVoltage;
+ return this;
+ }
+
+ public SpaceProject setProjectBuildTime(int spaceProjectBuildTime) {
+ buildTime = spaceProjectBuildTime;
+ return this;
+ }
+
+ public SpaceProject setProjectStages(int spaceProjectTotalStages) {
+ totalStage = spaceProjectTotalStages;
+ return this;
+ }
+
+ public SpaceProject setProjectItemsCost(ItemStack... spaceProjectItemsCost) {
+ itemsCost = spaceProjectItemsCost;
+ return this;
+ }
+
+ public SpaceProject setProjectFluidsCost(FluidStack... spaceProjectFluidsCost) {
+ fluidsCost = spaceProjectFluidsCost;
+ return this;
+ }
+
+ public SpaceProject setProjectUpgrades(ISP_Upgrade... spaceProjectUpgrades) {
+ for (ISP_Upgrade upgrade : spaceProjectUpgrades) {
+ upgradesAvailable.put(upgrade.getUpgradeName(), upgrade);
+ }
+ return this;
+ }
+
+ public SpaceProject setProjectTexture(UITexture projectTexture) {
+ texture = projectTexture;
+ return this;
+ }
+
+ public SpaceProject setProjectRequirements(ISP_Requirements projectRequirements) {
+ requirements = projectRequirements;
+ return this;
+ }
+
+ @Override
+ public void setCurrentUpgradeBeingBuilt(ISP_Upgrade newCurrentUpgrade) {
+ if (newCurrentUpgrade == null) {
+ return;
+ }
+
+ if (totalStage == currentStage) {
+ currentUpgrade = newCurrentUpgrade.copy();
+ currentUpgrade.setUpgradeProject(this);
+ }
+ }
+
+ @Override
+ public void setProjectCurrentStage(int newCurrentStage) {
+ currentStage = newCurrentStage;
+ }
+
+ @Override
+ public void setProjectLocation(ISpaceBody newLocation) {
+ location = newLocation;
+ }
+
+ @Override
+ public void setBuiltUpgrade(ISP_Upgrade... upgrades) {
+ if (upgrades == null) {
+ return;
+ }
+
+ for (ISP_Upgrade upgrade : upgrades) {
+ upgradesInstalled.put(upgrade.getUpgradeName(), upgrade);
+ }
+ }
+
+ // #endregion
+
+ // #region Other
+
+ @Override
+ public ISpaceProject copy() {
+ SpaceProject copy = new SpaceProject().setProjectName(name).setProjectUnlocalizedName(unlocalizedName)
+ .setProjectVoltage(voltage).setProjectBuildTime(buildTime).setProjectItemsCost(itemsCost)
+ .setProjectFluidsCost(fluidsCost).setProjectStages(totalStage).setProjectTexture(texture)
+ .setProjectRequirements(requirements);
+ if (upgradesAvailable != null) {
+ ISP_Upgrade[] upgrades = new SP_Upgrade[upgradesAvailable.size()];
+ int index = 0;
+ for (ISP_Upgrade upgrade : upgradesAvailable.values()) {
+ upgrades[index++] = upgrade.copy();
+ }
+ copy.setProjectUpgrades(upgrades);
+ }
+ return copy;
+ }
+
+ @Override
+ public void goToNextStage() {
+ currentStage++;
+ }
+
+ @Override
+ public boolean meetsRequirements(UUID team) {
+ return meetsRequirements(team, true);
+ }
+
+ @Override
+ public boolean meetsRequirements(UUID team, boolean checkLocation) {
+ if (requirements == null) {
+ return true;
+ }
+
+ if (requirements.getBodyType() != null && checkLocation) {
+ if (!requirements.getBodyType().equals(location.getType())) {
+ return false;
+ }
+ }
+
+ if (requirements.getStarType() != null && checkLocation) {
+ if (!requirements.getStarType().equals(location.getStarType())) {
+ return false;
+ }
+ }
+
+ if (requirements.getProjects() != null) {
+ for (ISpaceProject project : requirements.getProjects()) {
+ if (!SpaceProjectManager.teamHasProject(team, project)) {
+ return false;
+ }
+ }
+ }
+
+ return true;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (!(obj instanceof SpaceProject)) {
+ return false;
+ }
+ return getProjectName().equals(((SpaceProject) obj).getProjectName());
+ }
+
+ @Override
+ public boolean isFinished() {
+ return currentStage == totalStage;
+ }
+
+ @Override
+ public boolean hasUpgrade(String upgradeName) {
+ return upgradesInstalled.containsKey(upgradeName);
+ }
+
+ // #endregion
+}