aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/common/misc/spaceprojects/commands
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/commands
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/commands')
-rw-r--r--src/main/java/gregtech/common/misc/spaceprojects/commands/SPM_Command.java233
-rw-r--r--src/main/java/gregtech/common/misc/spaceprojects/commands/SP_Command.java120
2 files changed, 353 insertions, 0 deletions
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
new file mode 100644
index 0000000000..c7346319a9
--- /dev/null
+++ b/src/main/java/gregtech/common/misc/spaceprojects/commands/SPM_Command.java
@@ -0,0 +1,233 @@
+package gregtech.common.misc.spaceprojects.commands;
+
+import static gregtech.common.misc.spaceprojects.SpaceProjectManager.getLocation;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.UUID;
+import java.util.stream.Collectors;
+
+import net.minecraft.command.CommandBase;
+import net.minecraft.command.ICommandSender;
+import net.minecraft.server.MinecraftServer;
+import net.minecraft.util.ChatComponentText;
+
+import gregtech.common.misc.spaceprojects.SpaceProjectManager;
+import gregtech.common.misc.spaceprojects.SpaceProjectWorldSavedData;
+import gregtech.common.misc.spaceprojects.interfaces.ISpaceProject;
+
+/**
+ * @author BlueWeabo
+ */
+public class SPM_Command extends CommandBase {
+
+ private static final String RESET = "reset";
+ private static final String UNLOCK = "unlock";
+ private static final String LOCK = "lock";
+ private static final String LIST = "list";
+ private static final String ALL = "-all";
+ private static final String AVAILABLE = "-available";
+ private static final String UNLOCKED = "-unlocked";
+ private static final String COPY = "copy";
+
+ @Override
+ public String getCommandName() {
+ return "spm";
+ }
+
+ @Override
+ public int getRequiredPermissionLevel() {
+ return 0;
+ }
+
+ @Override
+ public String getCommandUsage(ICommandSender sender) {
+ return "/" + this.getCommandName() + " <subCommand>. Available subCommands: reset, unlock, lock, list, copy";
+ }
+
+ @Override
+ public void processCommand(ICommandSender sender, String[] arguments) {
+ if (arguments.length < 1) {
+ printHelp(sender);
+ return;
+ }
+ switch (arguments[0]) {
+ case RESET:
+ if (!sender.canCommandSenderUseCommand(4, getCommandName())) {
+ sender.addChatMessage(
+ new ChatComponentText("You don't have the permissions to execute this command"));
+ return;
+ }
+ processReset(sender, arguments.length >= 2 ? arguments[1] : sender.getCommandSenderName());
+ break;
+ case UNLOCK:
+ if (!sender.canCommandSenderUseCommand(4, getCommandName())) {
+ sender.addChatMessage(
+ new ChatComponentText("You don't have the permissions to execute this command"));
+ return;
+ }
+ if (arguments.length < 3) {
+ sender.addChatMessage(
+ new ChatComponentText("Not enough arguments. Needs to mention a project and a location"));
+ return;
+ }
+ processUnlock(
+ sender,
+ arguments[1],
+ arguments[2],
+ arguments.length >= 4 ? arguments[3] : sender.getCommandSenderName());
+ break;
+ case LOCK:
+ if (!sender.canCommandSenderUseCommand(4, getCommandName())) {
+ sender.addChatMessage(
+ new ChatComponentText("You don't have the permissions to execute this command"));
+ return;
+ }
+ if (arguments.length < 3) {
+ sender.addChatMessage(
+ new ChatComponentText("Not enough arguments. Needs to mention a project and a location"));
+ return;
+ }
+ processLock(
+ sender,
+ arguments[1],
+ arguments[2],
+ arguments.length >= 4 ? arguments[3] : sender.getCommandSenderName());
+ case LIST:
+ if (arguments.length < 2) {
+ sender.addChatMessage(
+ new ChatComponentText(
+ "No Argument for list subCommand. Usage /spm list -all, -available or -unlocked"));
+ return;
+ }
+ processList(sender, arguments[1], arguments.length >= 3 ? arguments[2] : sender.getCommandSenderName());
+ break;
+ case COPY:
+ if (!sender.canCommandSenderUseCommand(4, getCommandName())) {
+ sender.addChatMessage(
+ new ChatComponentText("You don't have the permissions to execute this command"));
+ return;
+ }
+ if (arguments.length < 3) {
+ sender.addChatMessage(new ChatComponentText("Not enough arguments. Needs to mention 2 players"));
+ return;
+ }
+ processCopy(sender, arguments[1], arguments[2]);
+ break;
+ }
+ }
+
+ @Override
+ public List<String> addTabCompletionOptions(ICommandSender sender, String[] arguments) {
+ List<String> autoComplete = new ArrayList<>();
+ String filter = arguments.length == 0 ? "" : arguments[0].trim();
+ switch (arguments.length) {
+ case 1:
+ autoComplete.addAll(Arrays.asList(getSubCommands()));
+ break;
+ case 2:
+ filter = arguments.length == 1 ? "" : arguments[1].trim();
+ if (arguments[0].equals(LIST)) {
+ autoComplete.addAll(Arrays.asList(getListArguments()));
+ } else if (arguments[0].equals(COPY) || arguments[0].equals(RESET)) {
+ autoComplete.addAll(Arrays.asList(getPlayers()));
+ } else {
+ autoComplete.addAll(Arrays.asList(getProjects()));
+ }
+ break;
+ case 3:
+ filter = arguments.length == 2 ? "" : arguments[2].trim();
+ if (arguments[1].equals(ALL)) {
+ break;
+ } else if (arguments[0].equals(LIST)) {
+ autoComplete.addAll(Arrays.asList(getPlayers()));
+ } else {
+ autoComplete.addAll(Arrays.asList(getLocations()));
+ }
+ break;
+ case 4:
+ filter = arguments.length == 3 ? "" : arguments[3].trim();
+ autoComplete.addAll(Arrays.asList(getPlayers()));
+ break;
+ }
+ String finalFilter = filter;
+ return autoComplete.stream().filter(s -> finalFilter.isEmpty() || s.startsWith(finalFilter))
+ .collect(Collectors.toList());
+ }
+
+ private String[] getPlayers() {
+ return MinecraftServer.getServer().getAllUsernames();
+ }
+
+ private String[] getLocations() {
+ return SpaceProjectManager.getLocationNames().toArray(new String[0]);
+ }
+
+ private String[] getProjects() {
+ return SpaceProjectManager.getProjectsMap().keySet().toArray(new String[0]);
+ }
+
+ private String[] getSubCommands() {
+ return new String[] { RESET, COPY, UNLOCK, LOCK, LIST };
+ }
+
+ private String[] getListArguments() {
+ return new String[] { ALL, AVAILABLE, UNLOCKED };
+ }
+
+ private void processReset(ICommandSender sender, String playerName) {
+ SpaceProjectManager.spaceTeamProjects.clear();
+ SpaceProjectWorldSavedData.INSTANCE.markDirty();
+ sender.addChatMessage(new ChatComponentText("Cleared away map"));
+ }
+
+ private void processLock(ICommandSender sender, String projectName, String location, String playerName) {
+ UUID tID = SpaceProjectManager.getPlayerUUIDFromName(playerName);
+ SpaceProjectManager.addTeamProject(tID, getLocation(location), projectName, null);
+ sender.addChatMessage(new ChatComponentText("Project locked"));
+ }
+
+ private void processUnlock(ICommandSender sender, String projectName, String location, String playerName) {
+ UUID tID = SpaceProjectManager.getPlayerUUIDFromName(playerName);
+ ISpaceProject tProject = SpaceProjectManager.getProject(projectName);
+ if (tProject != null) {
+ tProject.setProjectCurrentStage(tProject.getTotalStages());
+ SpaceProjectManager.addTeamProject(tID, getLocation(location), projectName, tProject);
+ sender.addChatMessage(new ChatComponentText("Project 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) {
+ case ALL:
+ for (String project : SpaceProjectManager.getProjectsMap().keySet()) {
+ sender.addChatMessage(new ChatComponentText(project));
+ }
+ break;
+ case AVAILABLE:
+ for (ISpaceProject project : SpaceProjectManager.getAllProjects()) {
+ if (project.meetsRequirements(tID, false)) {
+ sender.addChatMessage(new ChatComponentText(project.getProjectName()));
+ }
+ }
+ break;
+ case UNLOCKED:
+ for (ISpaceProject project : SpaceProjectManager.getTeamSpaceProjects(tID)) {
+ sender.addChatMessage(new ChatComponentText(project.getProjectName()));
+ }
+ break;
+ }
+ }
+
+ private void processCopy(ICommandSender sender, String playerToCopyFrom, String playerCopyingTo) {
+ // This will take a while
+ }
+
+ private void printHelp(ICommandSender sender) {
+
+ }
+}
diff --git a/src/main/java/gregtech/common/misc/spaceprojects/commands/SP_Command.java b/src/main/java/gregtech/common/misc/spaceprojects/commands/SP_Command.java
new file mode 100644
index 0000000000..ba673640c2
--- /dev/null
+++ b/src/main/java/gregtech/common/misc/spaceprojects/commands/SP_Command.java
@@ -0,0 +1,120 @@
+package gregtech.common.misc.spaceprojects.commands;
+
+import java.util.Collections;
+import java.util.Set;
+import java.util.WeakHashMap;
+
+import net.minecraft.command.CommandBase;
+import net.minecraft.command.ICommandSender;
+import net.minecraft.entity.player.EntityPlayerMP;
+import net.minecraft.util.EnumChatFormatting;
+
+import org.apache.commons.lang3.tuple.Pair;
+
+import gregtech.api.util.GT_Utility;
+import gregtech.common.misc.spaceprojects.SpaceProjectManager;
+
+/**
+ * @author BlueWeabo
+ */
+public class SP_Command extends CommandBase {
+
+ private static Set<Pair<EntityPlayerMP, EntityPlayerMP>> invite = Collections
+ .newSetFromMap(new WeakHashMap<Pair<EntityPlayerMP, EntityPlayerMP>, Boolean>());
+ private static Set<EntityPlayerMP> confirm = Collections.newSetFromMap(new WeakHashMap<EntityPlayerMP, Boolean>());
+
+ private static final String INVITE = "invite";
+ private static final String ACCEPT = "accept";
+ private static final String LEAVE = "leave";
+ private static final String CONFIRM = "confirm";
+
+ @Override
+ public String getCommandName() {
+ return "sp";
+ }
+
+ @Override
+ public int getRequiredPermissionLevel() {
+ return 0;
+ }
+
+ @Override
+ public String getCommandUsage(ICommandSender sender) {
+ return "/" + getCommandName() + "<subCommand> [PlayerName]";
+ }
+
+ @Override
+ public void processCommand(ICommandSender sender, String[] arguments) {
+ if (arguments.length < 1) {
+ return;
+ }
+ switch (arguments[0]) {
+ case INVITE:
+ if (arguments.length < 2) {
+ return;
+ }
+ processInvite(sender, arguments[1]);
+ break;
+ case ACCEPT:
+ if (arguments.length < 2) {
+ return;
+ }
+ processAccept(sender, arguments[1]);
+ break;
+ case LEAVE:
+ processLeave(sender);
+ break;
+ case CONFIRM:
+ processConfirm(sender);
+ break;
+ }
+ }
+
+ private void processInvite(ICommandSender sender, String playerInvited) {
+ EntityPlayerMP teamLeader = getCommandSenderAsPlayer(sender);
+ EntityPlayerMP teamMember = getPlayer(sender, playerInvited);
+ invite.add(Pair.of(teamMember, teamLeader));
+ String message = EnumChatFormatting.GOLD + teamLeader.getCommandSenderName()
+ + EnumChatFormatting.RESET
+ + " has sent you an invite to join their team. Accept it with"
+ + EnumChatFormatting.GOLD
+ + " /sp accept "
+ + teamLeader.getCommandSenderName();
+ GT_Utility.sendChatToPlayer(teamMember, message);
+ }
+
+ private void processAccept(ICommandSender sender, String playerInviter) {
+ EntityPlayerMP teamMember = getCommandSenderAsPlayer(sender);
+ EntityPlayerMP teamLeader = getPlayer(sender, playerInviter);
+ if (invite.contains(Pair.of(teamMember, teamLeader))) {
+ String message = EnumChatFormatting.GOLD + teamMember.getCommandSenderName()
+ + EnumChatFormatting.RESET
+ + " has accepted the invite.";
+ SpaceProjectManager.putInTeam(teamMember.getUniqueID(), teamLeader.getUniqueID());
+ GT_Utility.sendChatToPlayer(teamLeader, message);
+ invite.remove(Pair.of(teamMember, teamLeader));
+ }
+ }
+
+ private void processLeave(ICommandSender sender) {
+ EntityPlayerMP player = getCommandSenderAsPlayer(sender);
+ String message = "Are you sure you want to leave the team. You will lose all progress. Use "
+ + EnumChatFormatting.GOLD
+ + "/sp confirm"
+ + EnumChatFormatting.RESET
+ + " to confirm this. This does nothing if you are the team leader.";
+ GT_Utility.sendChatToPlayer(player, message);
+ confirm.add(player);
+ }
+
+ private void processConfirm(ICommandSender sender) {
+ EntityPlayerMP player = getCommandSenderAsPlayer(sender);
+ if (confirm.contains(player)) {
+ String message = "Successfully left the team.";
+ SpaceProjectManager.putInTeam(player.getUniqueID(), player.getUniqueID());
+ GT_Utility.sendChatToPlayer(player, message);
+ confirm.remove(player);
+ }
+ }
+
+}