diff options
author | Maxim <maxim235@gmx.de> | 2023-03-04 14:56:54 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-04 14:56:54 +0100 |
commit | 3baa08c9f4363303fd8ad35e3f7a210d9bffb11a (patch) | |
tree | 00c474b6bb333d7d73b27bd46edb1510d583a09f /src/main | |
parent | 0c32f2b4a5c0a2a11fd8f2a0044fd28ebabc2b19 (diff) | |
download | GT5-Unofficial-3baa08c9f4363303fd8ad35e3f7a210d9bffb11a.tar.gz GT5-Unofficial-3baa08c9f4363303fd8ad35e3f7a210d9bffb11a.tar.bz2 GT5-Unofficial-3baa08c9f4363303fd8ad35e3f7a210d9bffb11a.zip |
Fix space project upgrades not working (#1783)
* Fix upgrade requirements being always wrong/causing NPE
* Fix unlock command only unlocking unstarted projects
* Fixed upgrades never finishing
* Fixed upgrades not loading
* Delete upgrade being build if finished
* Fix built upgrades not being loaded
* Address review
* Addressed new reviews
Diffstat (limited to 'src/main')
4 files changed, 18 insertions, 7 deletions
diff --git a/src/main/java/gregtech/common/misc/spaceprojects/SpaceProjectWorldSavedData.java b/src/main/java/gregtech/common/misc/spaceprojects/SpaceProjectWorldSavedData.java index 6dc80db3ec..d24ead8f88 100644 --- a/src/main/java/gregtech/common/misc/spaceprojects/SpaceProjectWorldSavedData.java +++ b/src/main/java/gregtech/common/misc/spaceprojects/SpaceProjectWorldSavedData.java @@ -43,7 +43,7 @@ import gregtech.common.misc.spaceprojects.interfaces.ISpaceProject.ISP_Upgrade; /** * This class is used so that I can write and read to a json file before the world is opened. On server starting is too * late for this as the data stored in the files is needed before entities load their nbt data - * + * * @author BlueWeabo */ public class SpaceProjectWorldSavedData extends WorldSavedData { @@ -185,15 +185,16 @@ public class SpaceProjectWorldSavedData extends WorldSavedData { String projectName = obj.get(PROJECT_NAME).getAsString(); ISpaceProject project = SpaceProjectManager.getProject(projectName); int projectCurrentStage = obj.get(PROJECT_CURRENT_STAGE).getAsInt(); - ISP_Upgrade[] projectUpgradesBuilt = context - .deserialize(obj.get(PROJECT_UPGRADES_BUILT), ISP_Upgrade.class); + ISP_Upgrade[] projectUpgradesBuilt = new ISP_Upgrade[0]; + projectUpgradesBuilt = context + .deserialize(obj.get(PROJECT_UPGRADES_BUILT), projectUpgradesBuilt.getClass()); ISP_Upgrade projectCurrentUpgrade = context .deserialize(obj.get(PROJECT_CURRENT_UPGRADE), ISP_Upgrade.class); ISpaceBody projectLocation = SpaceProjectManager.getLocation(obj.get(PROJECT_LOCATION).getAsString()); project.setBuiltUpgrade(projectUpgradesBuilt); - project.setCurrentUpgradeBeingBuilt(projectCurrentUpgrade); project.setProjectLocation(projectLocation); project.setProjectCurrentStage(projectCurrentStage); + project.setCurrentUpgradeBeingBuilt(projectCurrentUpgrade); return project; } } 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 index 6a1fe82791..18540c429a 100644 --- a/src/main/java/gregtech/common/misc/spaceprojects/base/SP_Upgrade.java +++ b/src/main/java/gregtech/common/misc/spaceprojects/base/SP_Upgrade.java @@ -7,6 +7,7 @@ import net.minecraft.util.StatCollector; import net.minecraftforge.fluids.FluidStack; import gregtech.common.misc.spaceprojects.SpaceProjectManager; +import gregtech.common.misc.spaceprojects.enums.SpaceBodyType; import gregtech.common.misc.spaceprojects.enums.UpgradeStatus; import gregtech.common.misc.spaceprojects.interfaces.ISpaceProject; import gregtech.common.misc.spaceprojects.interfaces.ISpaceProject.ISP_Upgrade; @@ -293,7 +294,7 @@ public class SP_Upgrade implements ISP_Upgrade { return true; } - if (requirements.getBodyType() != null) { + if (requirements.getBodyType() != null && !requirements.getBodyType().equals(SpaceBodyType.NONE)) { if (!requirements.getBodyType().equals(projectBelongingTo.getProjectLocation().getType())) { return false; } @@ -335,6 +336,9 @@ public class SP_Upgrade implements ISP_Upgrade { @Override public void goToNextStage() { currentStage++; + if (isFinished()) { + projectBelongingTo.setBuiltUpgrade(this); + } } @Override diff --git a/src/main/java/gregtech/common/misc/spaceprojects/base/SpaceProject.java b/src/main/java/gregtech/common/misc/spaceprojects/base/SpaceProject.java index 57625f083e..0095ece5b1 100644 --- a/src/main/java/gregtech/common/misc/spaceprojects/base/SpaceProject.java +++ b/src/main/java/gregtech/common/misc/spaceprojects/base/SpaceProject.java @@ -310,6 +310,7 @@ public class SpaceProject implements ISpaceProject { public SpaceProject setProjectUpgrades(ISP_Upgrade... spaceProjectUpgrades) { for (ISP_Upgrade upgrade : spaceProjectUpgrades) { + upgrade.setUpgradeProject(this); upgradesAvailable.put(upgrade.getUpgradeName(), upgrade); } return this; @@ -354,6 +355,9 @@ public class SpaceProject implements ISpaceProject { } for (ISP_Upgrade upgrade : upgrades) { + if (upgrade.equals(currentUpgrade)) { + currentUpgrade = null; + } upgradesInstalled.put(upgrade.getUpgradeName(), upgrade); } } diff --git a/src/main/java/gregtech/common/misc/spaceprojects/commands/SPM_Command.java b/src/main/java/gregtech/common/misc/spaceprojects/commands/SPM_Command.java index c7346319a9..59f7a2dd13 100644 --- a/src/main/java/gregtech/common/misc/spaceprojects/commands/SPM_Command.java +++ b/src/main/java/gregtech/common/misc/spaceprojects/commands/SPM_Command.java @@ -190,10 +190,12 @@ public class SPM_Command extends CommandBase { private void processUnlock(ICommandSender sender, String projectName, String location, String playerName) { UUID tID = SpaceProjectManager.getPlayerUUIDFromName(playerName); - ISpaceProject tProject = SpaceProjectManager.getProject(projectName); + ISpaceProject tProject = SpaceProjectManager.getTeamProjectOrCopy(tID, projectName, getLocation(location)); if (tProject != null) { tProject.setProjectCurrentStage(tProject.getTotalStages()); - SpaceProjectManager.addTeamProject(tID, getLocation(location), projectName, tProject); + if (!SpaceProjectManager.teamHasProject(tID, tProject)) { + SpaceProjectManager.addTeamProject(tID, getLocation(location), projectName, tProject); + } sender.addChatMessage(new ChatComponentText("Project unlocked")); } else { sender.addChatMessage(new ChatComponentText("Incorrect internal project name. Try again")); |