diff options
author | Maxim <maxim235@gmx.de> | 2023-04-13 20:56:59 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-13 20:56:59 +0200 |
commit | dd2906de782751357d7ab4b307b47db5359b4fcd (patch) | |
tree | fab0c52dec1ff6c9e432295201d83ba04d8a5e4e | |
parent | 6cefcfb2b152fa66124b6c0f2443290f1f289ac9 (diff) | |
download | GT5-Unofficial-dd2906de782751357d7ab4b307b47db5359b4fcd.tar.gz GT5-Unofficial-dd2906de782751357d7ab4b307b47db5359b4fcd.tar.bz2 GT5-Unofficial-dd2906de782751357d7ab4b307b47db5359b4fcd.zip |
Space Project fixes (#1881)
* Added more null checks
* Added command to unlock project upgrade
-rw-r--r-- | src/main/java/gregtech/common/misc/spaceprojects/SpaceProjectWorldSavedData.java | 28 | ||||
-rw-r--r-- | src/main/java/gregtech/common/misc/spaceprojects/commands/SPM_Command.java | 59 |
2 files changed, 74 insertions, 13 deletions
diff --git a/src/main/java/gregtech/common/misc/spaceprojects/SpaceProjectWorldSavedData.java b/src/main/java/gregtech/common/misc/spaceprojects/SpaceProjectWorldSavedData.java index 5afa1b5ef1..4370e5f919 100644 --- a/src/main/java/gregtech/common/misc/spaceprojects/SpaceProjectWorldSavedData.java +++ b/src/main/java/gregtech/common/misc/spaceprojects/SpaceProjectWorldSavedData.java @@ -100,6 +100,10 @@ public class SpaceProjectWorldSavedData extends WorldSavedData { e.printStackTrace(); } + if (spaceTeamProjects == null) { + spaceTeamProjects = new HashMap<>(); + } + if (spaceTeams == null) { spaceTeams = new HashMap<>(); } @@ -107,18 +111,22 @@ public class SpaceProjectWorldSavedData extends WorldSavedData { @Override public void writeToNBT(NBTTagCompound aNBT) { - try (JsonWriter writer = new JsonWriter(new FileWriter(teamProjectsFile))) { - GSON_SPACE_PROJECT.toJson(spaceTeamProjects, spaceTeamProjects.getClass(), writer); - } catch (Exception ex) { - System.out.print("FAILED TO SAVE: " + SPACE_TEAM_PROJECTS_JSON); - ex.printStackTrace(); + if (spaceTeamProjects != null) { + try (JsonWriter writer = new JsonWriter(new FileWriter(teamProjectsFile))) { + GSON_SPACE_PROJECT.toJson(spaceTeamProjects, spaceTeamProjects.getClass(), writer); + } catch (Exception ex) { + System.out.print("FAILED TO SAVE: " + SPACE_TEAM_PROJECTS_JSON); + ex.printStackTrace(); + } } - try (JsonWriter writer = new JsonWriter(new FileWriter(spaceTeamsFile))) { - GSON_TEAMS.toJson(spaceTeams, spaceTeams.getClass(), writer); - } catch (Exception ex) { - System.out.print("FAILED TO SAVE: " + SPACE_TEAMS_JSON); - ex.printStackTrace(); + if (spaceTeams != null) { + try (JsonWriter writer = new JsonWriter(new FileWriter(spaceTeamsFile))) { + GSON_TEAMS.toJson(spaceTeams, spaceTeams.getClass(), writer); + } catch (Exception ex) { + System.out.print("FAILED TO SAVE: " + SPACE_TEAMS_JSON); + ex.printStackTrace(); + } } } 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 bb08ad47fb..6009f77d0c 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 @@ -24,6 +24,7 @@ public class SPM_Command extends CommandBase { private static final String RESET = "reset"; private static final String UNLOCK = "unlock"; + private static final String UNLOCK_UPGRADE = "unlock_upgrade"; private static final String LOCK = "lock"; private static final String LIST = "list"; private static final String ALL = "-all"; @@ -78,6 +79,25 @@ public class SPM_Command extends CommandBase { arguments[2], arguments.length >= 4 ? arguments[3] : sender.getCommandSenderName()); break; + case UNLOCK_UPGRADE: + if (!sender.canCommandSenderUseCommand(4, getCommandName())) { + sender.addChatMessage( + new ChatComponentText("You don't have the permissions to execute this command")); + return; + } + if (arguments.length < 4) { + sender.addChatMessage( + new ChatComponentText( + "Not enough arguments. Needs to mention a project a location and an upgrade name")); + return; + } + processUnlock( + sender, + arguments[1], + arguments[2], + arguments[3], + arguments.length >= 5 ? arguments[4] : sender.getCommandSenderName()); + break; case LOCK: if (!sender.canCommandSenderUseCommand(4, getCommandName())) { sender.addChatMessage( @@ -144,7 +164,18 @@ public class SPM_Command extends CommandBase { } case 4 -> { filter = arguments.length == 3 ? "" : arguments[3].trim(); - autoComplete.addAll(Arrays.asList(getPlayers())); + if (arguments[0].equals(UNLOCK_UPGRADE)) { + ISpaceProject project = SpaceProjectManager.getProject(arguments[2]); + if (project != null) { + autoComplete.addAll( + project.getAllUpgrades() + .stream() + .map(ISpaceProject.ISP_Upgrade::getUnlocalizedName) + .collect(Collectors.toList())); + } + } else { + autoComplete.addAll(Arrays.asList(getPlayers())); + } } } String finalFilter = filter; @@ -170,7 +201,7 @@ public class SPM_Command extends CommandBase { } private String[] getSubCommands() { - return new String[] { RESET, COPY, UNLOCK, LOCK, LIST }; + return new String[] { RESET, COPY, UNLOCK, UNLOCK_UPGRADE, LOCK, LIST }; } private String[] getListArguments() { @@ -178,7 +209,8 @@ public class SPM_Command extends CommandBase { } private void processReset(ICommandSender sender, String playerName) { - SpaceProjectManager.spaceTeamProjects.clear(); + UUID tID = SpaceProjectManager.getPlayerUUIDFromName(playerName); + SpaceProjectManager.spaceTeamProjects.put(tID, null); SpaceProjectWorldSavedData.INSTANCE.markDirty(); sender.addChatMessage(new ChatComponentText("Cleared away map")); } @@ -201,6 +233,27 @@ public class SPM_Command extends CommandBase { } } + private void processUnlock(ICommandSender sender, String projectName, String location, String upgradeName, + String playerName) { + UUID tID = SpaceProjectManager.getPlayerUUIDFromName(playerName); + ISpaceProject tProject = SpaceProjectManager.getTeamProjectOrCopy(tID, projectName, getLocation(location)); + if (tProject != null) { + ISpaceProject.ISP_Upgrade upgrade = tProject.getUpgrade(upgradeName); + if (upgrade == null) { + sender.addChatMessage(new ChatComponentText("Incorrect internal project upgrade name. Try again")); + return; + } + if (!tProject.isFinished()) { + tProject.setProjectCurrentStage(tProject.getTotalStages()); + SpaceProjectManager.addTeamProject(tID, getLocation(location), projectName, tProject); + } + tProject.setBuiltUpgrade(upgrade); + sender.addChatMessage(new ChatComponentText("Project Upgrade unlocked")); + } else { + sender.addChatMessage(new ChatComponentText("Incorrect internal project name. Try again")); + } + } + private void processList(ICommandSender sender, String argument, String playerName) { UUID tID = SpaceProjectManager.getPlayerUUIDFromName(playerName); switch (argument) { |