aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxim <maxim235@gmx.de>2023-04-13 20:56:59 +0200
committerGitHub <noreply@github.com>2023-04-13 20:56:59 +0200
commitdd2906de782751357d7ab4b307b47db5359b4fcd (patch)
treefab0c52dec1ff6c9e432295201d83ba04d8a5e4e
parent6cefcfb2b152fa66124b6c0f2443290f1f289ac9 (diff)
downloadGT5-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.java28
-rw-r--r--src/main/java/gregtech/common/misc/spaceprojects/commands/SPM_Command.java59
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) {