diff --git a/constructTheArena/src/main/java/constructTheArena/ConstructTheArena.java b/constructTheArena/src/main/java/constructTheArena/ConstructTheArena.java index 7611135..95135d3 100644 --- a/constructTheArena/src/main/java/constructTheArena/ConstructTheArena.java +++ b/constructTheArena/src/main/java/constructTheArena/ConstructTheArena.java @@ -3,7 +3,9 @@ package constructTheArena; import basemod.BaseMod; import basemod.ModLabeledToggleButton; import basemod.ModPanel; +import basemod.helpers.RelicType; import basemod.interfaces.AddCustomModeModsSubscriber; +import basemod.interfaces.EditRelicsSubscriber; import basemod.interfaces.EditStringsSubscriber; import basemod.interfaces.PostInitializeSubscriber; import com.badlogic.gdx.Gdx; @@ -16,8 +18,11 @@ import com.google.gson.Gson; import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.helpers.CardHelper; import com.megacrit.cardcrawl.helpers.FontHelper; +import com.megacrit.cardcrawl.localization.RelicStrings; import com.megacrit.cardcrawl.localization.RunModStrings; +import com.megacrit.cardcrawl.localization.UIStrings; import com.megacrit.cardcrawl.screens.custom.CustomMod; +import constructTheArena.relics.ConstructorsBurden; import constructTheArena.util.IDCheckDontTouchPls; import constructTheArena.util.ResUtil; import constructTheArena.util.TextureLoader; @@ -60,6 +65,7 @@ import java.util.Properties; public class ConstructTheArena implements AddCustomModeModsSubscriber, EditStringsSubscriber, + EditRelicsSubscriber, PostInitializeSubscriber { // Make sure to implement the subscribers *you* are using (read basemod wiki). Editing cards? EditCardsSubscriber. // Making relics? EditRelicsSubscriber. etc., etc., for a full list and how to make your own, visit the basemod wiki. @@ -90,12 +96,7 @@ public class ConstructTheArena implements // =============== SUBSCRIBE, CREATE THE COLOR_GRAY, INITIALIZE ================= public ConstructTheArena() { - logger.info("Subscribe to BaseMod hooks"); - setModID("constructTheArena"); - - logger.info("Adding mod settings"); - constructTheArenaSettings.setProperty(ENABLE_PLACEHOLDER_SETTINGS, "FALSE"); // This is the default setting. It's actually set... try { @@ -118,7 +119,6 @@ public class ConstructTheArena implements // String IDjson = Gdx.files.internal("IDCheckStringsDONT-EDIT-AT-ALL.json").readString(String.valueOf(StandardCharsets.UTF_8)); // i hate u Gdx.files InputStream in = ConstructTheArena.class.getResourceAsStream("/IDCheckStringsDONT-EDIT-AT-ALL.json"); // DON'T EDIT THIS ETHER IDCheckDontTouchPls EXCEPTION_STRINGS = coolG.fromJson(new InputStreamReader(in, StandardCharsets.UTF_8), IDCheckDontTouchPls.class); // OR THIS, DON'T EDIT IT - logger.info("You are attempting to set your mod ID as: " + ID); // NO WHY if (ID.equals(EXCEPTION_STRINGS.DEFAULTID)) { // DO *NOT* CHANGE THIS ESPECIALLY, TO EDIT YOUR MOD ID, SCROLL UP JUST A LITTLE, IT'S JUST ABOVE throw new RuntimeException(EXCEPTION_STRINGS.EXCEPTION); // THIS ALSO DON'T EDIT } else if (ID.equals(EXCEPTION_STRINGS.DEVID)) { // NO @@ -126,7 +126,6 @@ public class ConstructTheArena implements } else { // NO EDIT AREA modID = ID; // DON'T WRITE OR CHANGE THINGS HERE NOT EVEN A LITTLE } // NO - logger.info("Success! ID is " + modID); // WHY WOULD U WANT IT NOT TO LOG?? DON'T EDIT THIS. } // NO public static String getModID() { // NO @@ -232,8 +231,26 @@ public class ConstructTheArena implements @Override public void receiveEditStrings() { BaseMod.loadCustomStringsFile(RunModStrings.class, ResUtil.getLocRes("eng", "constructTheArena-RunModStrings.json")); + BaseMod.loadCustomStringsFile(RelicStrings.class, ResUtil.getLocRes("eng", "constructTheArena-RelicStrings.json")); + BaseMod.loadCustomStringsFile(UIStrings.class, ResUtil.getLocRes("eng", "constructTheArena-UIStrings.json")); } + // + /*====================================================================================== + Add Relics + ======================================================================================*/ + + + + @Override + public void receiveEditRelics() { + BaseMod.addRelic(new ConstructorsBurden(), RelicType.SHARED); + } + + // + + + // } diff --git a/constructTheArena/src/main/java/constructTheArena/patches/CArenaPatch.java b/constructTheArena/src/main/java/constructTheArena/patches/CArenaPatch.java index e90ce40..7b60c44 100644 --- a/constructTheArena/src/main/java/constructTheArena/patches/CArenaPatch.java +++ b/constructTheArena/src/main/java/constructTheArena/patches/CArenaPatch.java @@ -27,7 +27,6 @@ public class CArenaPatch { public static void Insert(CustomModeScreen __instance, CustomTrial trial, ArrayList modIds, String modId) { if (modId.equals("constructTheArena:constructTheArena")) { //do nothing for now - logger.info("Patched dailymods insert"); enabled = true; ArrayList mods = ModHelper.getEnabledModIDs(); mods.add("SealedDeck"); diff --git a/constructTheArena/src/main/java/constructTheArena/patches/CArenaStartingDeckPatch.java b/constructTheArena/src/main/java/constructTheArena/patches/CArenaSkipMasterDeckPatch.java similarity index 83% rename from constructTheArena/src/main/java/constructTheArena/patches/CArenaStartingDeckPatch.java rename to constructTheArena/src/main/java/constructTheArena/patches/CArenaSkipMasterDeckPatch.java index d5b6e68..9fc1534 100644 --- a/constructTheArena/src/main/java/constructTheArena/patches/CArenaStartingDeckPatch.java +++ b/constructTheArena/src/main/java/constructTheArena/patches/CArenaSkipMasterDeckPatch.java @@ -11,9 +11,7 @@ import org.apache.logging.log4j.Logger; clz = AbstractPlayer.class, method = "initializeStarterDeck" ) -public class CArenaStartingDeckPatch { - private final static Logger logger = LogManager.getLogger(CArenaStartingDeckPatch.class.getName()); - +public class CArenaSkipMasterDeckPatch { @SpireInsertPatch( loc = 409, localvars = {"addBaseCards"} diff --git a/constructTheArena/src/main/java/constructTheArena/patches/ConstructDraftPatch.java b/constructTheArena/src/main/java/constructTheArena/patches/ConstructDraftPatch.java index ce8ad24..73df98a 100644 --- a/constructTheArena/src/main/java/constructTheArena/patches/ConstructDraftPatch.java +++ b/constructTheArena/src/main/java/constructTheArena/patches/ConstructDraftPatch.java @@ -4,18 +4,22 @@ import com.evacipated.cardcrawl.modthespire.lib.SpirePatch; import com.evacipated.cardcrawl.modthespire.lib.SpirePrefixPatch; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.cards.CardGroup; +import com.megacrit.cardcrawl.core.CardCrawlGame; +import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.helpers.CardLibrary; import com.megacrit.cardcrawl.helpers.ModHelper; +import com.megacrit.cardcrawl.localization.UIStrings; import com.megacrit.cardcrawl.neow.NeowEvent; -import com.megacrit.cardcrawl.screens.custom.CustomModeScreen; -import com.megacrit.cardcrawl.trials.CustomTrial; import com.megacrit.cardcrawl.unlock.UnlockTracker; +import constructTheArena.relics.ConstructorsBurden; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import java.util.ArrayList; +import java.util.Comparator; import java.util.Iterator; -import java.util.List; +import java.util.TreeSet; @SpirePatch( clz = NeowEvent.class, @@ -24,31 +28,53 @@ import java.util.List; public class ConstructDraftPatch { private final static Logger logger = LogManager.getLogger(ConstructDraftPatch.class.getName()); + private final static int CardLimit = 40; + private static final UIStrings uiStrings = CardCrawlGame.languagePack.getUIString("ConstructModeInstructions"); + @SpirePrefixPatch public static void Prefix() { - logger.info("Hit dailymods prefix"); if (CArenaPatch.isEnabled()) { ArrayList mods = ModHelper.getEnabledModIDs(); mods.remove("SealedDeck"); ModHelper.setMods(mods); - CardGroup sealedGroup = new CardGroup(CardGroup.CardGroupType.UNSPECIFIED); - AbstractCard card; - for (int i = 0; i < 30; ++i) { - card = AbstractDungeon.getCard(AbstractDungeon.rollRarity()); + CardGroup constructGroup = new CardGroup(CardGroup.CardGroupType.UNSPECIFIED); - sealedGroup.addToBottom(card.makeCopy()); + //add master deck to draw pool + TreeSet dedupedMasterDeck = new TreeSet<>(AbstractDungeon.player.getStartingDeck()); + + for (String cardName : dedupedMasterDeck) { + AbstractCard card = CardLibrary.getCard(AbstractDungeon.player.chosenClass, cardName); + for (int i = 0; i < 4; i++) { + constructGroup.addToTop(card.makeCopy()); + } } - Iterator cards = sealedGroup.group.iterator(); + //add all other eligible cards to the draw pool + ArrayList cardPool = new ArrayList<>(); + AbstractDungeon.player.getCardPool(cardPool); + + //sort it so it's all pretty + cardPool.sort(Comparator.comparing(card -> card.name)); + + for (AbstractCard card : cardPool) { + for (int i = 0; i < 4; i++) { + constructGroup.addToTop(card.makeCopy()); + } + } + + + Iterator cards = constructGroup.group.iterator(); + AbstractCard c; while (cards.hasNext()) { - AbstractCard c = cards.next(); + c = cards.next(); UnlockTracker.markCardAsSeen(c.cardID); } - AbstractDungeon.gridSelectScreen.open(sealedGroup, 10, "Whatever", false); + AbstractDungeon.gridSelectScreen.open(constructGroup, 40, true, uiStrings.TEXT[0]+CardLimit+uiStrings.TEXT[1]); + AbstractDungeon.getCurrRoom().spawnRelicAndObtain(Settings.WIDTH / 2.0F, Settings.HEIGHT / 2.0F, new ConstructorsBurden()); } } diff --git a/constructTheArena/src/main/java/constructTheArena/relics/ConstructorsBurden.java b/constructTheArena/src/main/java/constructTheArena/relics/ConstructorsBurden.java new file mode 100644 index 0000000..99b9727 --- /dev/null +++ b/constructTheArena/src/main/java/constructTheArena/relics/ConstructorsBurden.java @@ -0,0 +1,45 @@ +package constructTheArena.relics; + +import com.fasterxml.jackson.core.type.ResolvedType; +import com.megacrit.cardcrawl.characters.AbstractPlayer; +import com.megacrit.cardcrawl.dungeons.AbstractDungeon; +import com.megacrit.cardcrawl.helpers.ImageMaster; +import com.megacrit.cardcrawl.relics.AbstractRelic; +import constructTheArena.util.ResUtil; + +public class ConstructorsBurden extends AbstractRelic { + + private final static String imgPathLarge = ResUtil.getImageRes("relics", "constructorsBurdenLarge.png"); + private final static String imgPath = ResUtil.getImageRes("relics", "constructorsBurden.png"); + + public ConstructorsBurden() { + super("constructTheArena:ConstructorsBurden", "", RelicTier.SPECIAL, LandingSound.HEAVY); + + imgUrl = imgPath; + img = ImageMaster.loadImage(imgPath); + largeImg = ImageMaster.loadImage(imgPathLarge); + outlineImg = ImageMaster.loadImage(imgPath); + } + + @Override + public AbstractRelic makeCopy() { + return new ConstructorsBurden(); + } + + @Override + public int changeNumberOfCardsInReward(int NumberOfCards) { + return -10; + } + + @Override + public String getUpdatedDescription() { + if (AbstractDungeon.player != null) { + return setDescription(AbstractDungeon.player.chosenClass); + } + return setDescription((AbstractPlayer.PlayerClass) null); + } + + private String setDescription(AbstractPlayer.PlayerClass c) { + return this.DESCRIPTIONS[0]; + } +} diff --git a/constructTheArena/src/main/java/constructTheArena/util/ResUtil.java b/constructTheArena/src/main/java/constructTheArena/util/ResUtil.java index 4384c41..5ca02ed 100644 --- a/constructTheArena/src/main/java/constructTheArena/util/ResUtil.java +++ b/constructTheArena/src/main/java/constructTheArena/util/ResUtil.java @@ -34,4 +34,10 @@ public class ResUtil { return getResource(localization, resourceName); } + + public static String getImageRes(String category, String resourceName) { + String localization = "images/" + category; + + return getResource(localization, resourceName); + } } diff --git a/constructTheArena/src/main/java/constructTheArena/util/TextureLoader.java b/constructTheArena/src/main/java/constructTheArena/util/TextureLoader.java index 1a381af..d099e81 100644 --- a/constructTheArena/src/main/java/constructTheArena/util/TextureLoader.java +++ b/constructTheArena/src/main/java/constructTheArena/util/TextureLoader.java @@ -15,7 +15,7 @@ import java.util.HashMap; public class TextureLoader { - private static HashMap textures = new HashMap(); + private final static HashMap textures = new HashMap<>(); public static final Logger logger = LogManager.getLogger(TextureLoader.class.getName()); /** @@ -43,7 +43,6 @@ public class TextureLoader { * @throws GdxRuntimeException */ private static void loadTexture(final String textureString) throws GdxRuntimeException { - logger.info("DefaultMod | Loading Texture: " + textureString); Texture texture = new Texture(textureString); texture.setFilter(TextureFilter.Linear, TextureFilter.Linear); textures.put(textureString, texture); diff --git a/constructTheArena/src/main/resources/constructTheArenaResources/localization/eng/constructTheArena-RelicStrings.json b/constructTheArena/src/main/resources/constructTheArenaResources/localization/eng/constructTheArena-RelicStrings.json new file mode 100644 index 0000000..50ba810 --- /dev/null +++ b/constructTheArena/src/main/resources/constructTheArenaResources/localization/eng/constructTheArena-RelicStrings.json @@ -0,0 +1,9 @@ +{ + "constructTheArena:ConstructorsBurden": { + "NAME": "Constructor's Burden", + "FLAVOR": "You no longer receive card rewards.", + "DESCRIPTIONS": [ + "Number of card rewards set to 0." + ] + } +} \ No newline at end of file diff --git a/constructTheArena/src/main/resources/constructTheArenaResources/localization/eng/constructTheArena-UIStrings.json b/constructTheArena/src/main/resources/constructTheArenaResources/localization/eng/constructTheArena-UIStrings.json new file mode 100644 index 0000000..79c104b --- /dev/null +++ b/constructTheArena/src/main/resources/constructTheArenaResources/localization/eng/constructTheArena-UIStrings.json @@ -0,0 +1,9 @@ +{ + "ConstructModeInstructions": { + "TEXT": [ + "Select up to ", + " cards." + + ] + } +} \ No newline at end of file