diff --git a/src/main/java/ti4/discord/interactions/buttons/handlers/faction/homebrew/theodisi/Arcanum/ArcanumLeadersHandler.java b/src/main/java/ti4/discord/interactions/buttons/handlers/faction/homebrew/theodisi/Arcanum/ArcanumLeadersHandler.java index e8057b3a21..ac6f43dbe0 100644 --- a/src/main/java/ti4/discord/interactions/buttons/handlers/faction/homebrew/theodisi/Arcanum/ArcanumLeadersHandler.java +++ b/src/main/java/ti4/discord/interactions/buttons/handlers/faction/homebrew/theodisi/Arcanum/ArcanumLeadersHandler.java @@ -1,24 +1,47 @@ package ti4.discord.interactions.buttons.handlers.faction.homebrew.theodisi.Arcanum; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Objects; +import java.util.Set; import lombok.experimental.UtilityClass; import net.dv8tion.jda.api.components.buttons.Button; +import net.dv8tion.jda.api.events.interaction.GenericInteractionCreateEvent; import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent; import ti4.discord.interactions.buttons.Buttons; import ti4.discord.interactions.routing.ButtonHandler; import ti4.game.Game; +import ti4.game.Leader; import ti4.game.Player; import ti4.game.Tile; import ti4.helpers.ButtonHelper; import ti4.helpers.ButtonHelperModifyUnits; +import ti4.helpers.Constants; import ti4.helpers.NewStuffHelper; +import ti4.image.Mapper; import ti4.message.MessageHelper; +import ti4.model.ExploreModel; +import ti4.model.TechnologyModel; +import ti4.service.emoji.ExploreEmojis; +import ti4.service.leader.ExhaustLeaderService; +import ti4.service.tech.PlayerTechService; @UtilityClass public class ArcanumLeadersHandler { private static final String PLACE_COMMANDER_FIGHTER = "arcanumCommanderPlaceFighter_"; + private static final String RETURN_TECH_HERO = "arcanumHeroReturnTech_"; + private static final String DONE_RETURNING_TECHS = "arcanumHeroFinishTechReturn_"; + private static final String GAIN_PURGED_FRAGMENT_HERO = "arcanumHeroGainPurgedFragment_"; + private static final String USE_VEYLA = "arcanumVeylaUse_"; + private static final String USE_VEYLA_ON_OTHER = "arcanumVeylaUseOnOther"; + private static final String CHOOSE_VEYLA_TARGET = "arcanumVeylaTarget_"; + private static final String SELECT_VEYLA_RETURN_TECH = "arcanumVeylaReturnTech_"; + private static final String GAIN_VEYLA_TECH = "arcanumVeylaGainTech_"; + private static final List EXPLORE_TYPES = + List.of(Constants.CULTURAL, Constants.HAZARDOUS, Constants.INDUSTRIAL, Constants.FRONTIER); + // Commander public static void offerArcanumTechExhaustCommanderButtons(Player player) { if (player == null || player.getGame() == null @@ -91,4 +114,542 @@ private static String getCommanderFighterMessage(Player player) { return player.getRepresentation() + ", you may use Orthis Lithon, the Arcanum commander, to place 1 fighter in a system that contains 1 or more of your ships."; } + + // Agent + public static void offerVeylaTheKeeperButtons(Game game, Player target, String gainedTechID) { + TechnologyModel gainedTech = Mapper.getTech(gainedTechID); + if (game == null + || target == null + || "setup".equalsIgnoreCase(game.getPhaseOfGame()) + || "playerSetup".equalsIgnoreCase(game.getPhaseOfGame()) + || gainedTech == null + || gainedTech.isFactionTech() + || !target.hasTech(gainedTechID) + || !target.hasUnexhaustedLeader("arcanumagent") + || getVeylaReplacementButtons(game, target, gainedTechID).isEmpty()) { + return; + } + + MessageHelper.sendMessageToChannelWithButtons( + target.getCorrectChannel(), + target.getRepresentationUnfogged() + + " gained " + + gainedTech.getNameRepresentation() + + ". You may use _Veyla, the Arcanum agent_ to replace it.", + List.of( + Buttons.gray( + target.factionButtonChecker() + USE_VEYLA + target.getFaction() + "|" + gainedTechID, + "Use Arcanum Agent"), + Buttons.red("deleteButtons", "Decline"))); + } + + public static Button getVeylaCardsInfoButton(Player player) { + return Buttons.gray(player.factionButtonChecker() + USE_VEYLA_ON_OTHER, "Use Arcanum Agent"); + } + + @ButtonHandler(USE_VEYLA_ON_OTHER) + public static void selectVeylaTarget(ButtonInteractionEvent event, Game game, Player agentOwner) { + if (game == null + || agentOwner == null + || "setup".equalsIgnoreCase(game.getPhaseOfGame()) + || !agentOwner.hasUnexhaustedLeader("arcanumagent")) { + ButtonHelper.deleteButtonAndDeleteMessageIfEmpty(event); + return; + } + + List