diff options
| author | BlueWeabo <ilia.iliev2005@gmail.com> | 2023-02-26 13:16:07 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-02-26 12:16:07 +0100 |
| commit | b8d1ecf8b9b6348304392d09e4490d473dbb120d (patch) | |
| tree | 1cdc59a1b660510fe2abd40686b2abed8b0ab40f /src/main/java/gregtech/common/misc/spaceprojects/commands | |
| parent | ebd7df3a1ddba9105df008d44ab046d159279628 (diff) | |
| download | GT5-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.java | 233 | ||||
| -rw-r--r-- | src/main/java/gregtech/common/misc/spaceprojects/commands/SP_Command.java | 120 |
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); + } + } + +} |
