diff --git a/pom.xml b/pom.xml
index fec992a..8334b12 100644
--- a/pom.xml
+++ b/pom.xml
@@ -21,14 +21,14 @@
com.evacipated.cardcrawl
ModTheSpire
- 2.8.0
+ 3.0.0
system
${basedir}/../lib/ModTheSpire.jar
com.evacipated.cardcrawl
BaseMod
- 2.14.0
+ 3.0.0
system
${basedir}/../lib/BaseMod.jar
diff --git a/src/main/java/Initializer.java b/src/main/java/kobting/friendlyminions/Initializer.java
similarity index 77%
rename from src/main/java/Initializer.java
rename to src/main/java/kobting/friendlyminions/Initializer.java
index 40c6fd6..dc65ff4 100644
--- a/src/main/java/Initializer.java
+++ b/src/main/java/kobting/friendlyminions/Initializer.java
@@ -1,17 +1,18 @@
+package kobting.friendlyminions;
+
import basemod.BaseMod;
import basemod.interfaces.*;
-import cards.MonsterCard;
-import characters.AbstractPlayerWithMinions;
-import com.badlogic.gdx.graphics.g2d.SpriteBatch;
+import kobting.friendlyminions.cards.MonsterCard;
+import kobting.friendlyminions.characters.AbstractPlayerWithMinions;
import com.evacipated.cardcrawl.modthespire.lib.SpireInitializer;
-import com.megacrit.cardcrawl.core.CardCrawlGame;
import com.megacrit.cardcrawl.dungeons.AbstractDungeon;
-import com.megacrit.cardcrawl.monsters.AbstractMonster;
import com.megacrit.cardcrawl.rooms.AbstractRoom;
-import helpers.BasePlayerMinionHelper;
+import kobting.friendlyminions.helpers.BasePlayerMinionHelper;
@SpireInitializer
-public class Initializer implements EditCardsSubscriber, PostBattleSubscriber, EditKeywordsSubscriber {
+public class Initializer implements
+ EditCardsSubscriber, PostBattleSubscriber,
+ EditKeywordsSubscriber {
//Used by @SpireInitializer
public static void initialize(){
@@ -45,4 +46,5 @@ public void receiveEditKeywords() {
BaseMod.addKeyword(minionKeyword, "A friendly monster that fights for you and has a chance to receive #yVulnerable, #yWeak, #yFrail, or #yStrength loss instead of you.");
}
+
}
diff --git a/src/main/java/actions/ChooseAction.java b/src/main/java/kobting/friendlyminions/actions/ChooseAction.java
similarity index 98%
rename from src/main/java/actions/ChooseAction.java
rename to src/main/java/kobting/friendlyminions/actions/ChooseAction.java
index 047ba71..57cc842 100644
--- a/src/main/java/actions/ChooseAction.java
+++ b/src/main/java/kobting/friendlyminions/actions/ChooseAction.java
@@ -1,4 +1,4 @@
-package actions;
+package kobting.friendlyminions.actions;
import com.megacrit.cardcrawl.actions.AbstractGameAction;
import com.megacrit.cardcrawl.cards.AbstractCard;
diff --git a/src/main/java/actions/ChooseActionInfo.java b/src/main/java/kobting/friendlyminions/actions/ChooseActionInfo.java
similarity index 92%
rename from src/main/java/actions/ChooseActionInfo.java
rename to src/main/java/kobting/friendlyminions/actions/ChooseActionInfo.java
index 16a8303..e9ec7b8 100644
--- a/src/main/java/actions/ChooseActionInfo.java
+++ b/src/main/java/kobting/friendlyminions/actions/ChooseActionInfo.java
@@ -1,4 +1,4 @@
-package actions;
+package kobting.friendlyminions.actions;
public class ChooseActionInfo {
diff --git a/src/main/java/cards/CustomSummonCard.java b/src/main/java/kobting/friendlyminions/cards/CustomSummonCard.java
similarity index 54%
rename from src/main/java/cards/CustomSummonCard.java
rename to src/main/java/kobting/friendlyminions/cards/CustomSummonCard.java
index fa05d68..88e8f99 100644
--- a/src/main/java/cards/CustomSummonCard.java
+++ b/src/main/java/kobting/friendlyminions/cards/CustomSummonCard.java
@@ -1,13 +1,9 @@
-package cards;
+package kobting.friendlyminions.cards;
import basemod.abstracts.CustomCard;
public abstract class CustomSummonCard extends CustomCard {
- public CustomSummonCard(String id, String name, String img, int cost, String rawDescription, CardType type, CardColor color, CardRarity rarity, CardTarget target, int cardPool) {
- super(id, name, img, cost, rawDescription, type, color, rarity, target, cardPool);
- }
-
public CustomSummonCard(String id, String name, String img, int cost, String rawDescription, CardType type, CardColor color, CardRarity rarity, CardTarget target) {
super(id, name, img, cost, rawDescription, type, color, rarity, target);
}
diff --git a/src/main/java/cards/MonsterCard.java b/src/main/java/kobting/friendlyminions/cards/MonsterCard.java
similarity index 95%
rename from src/main/java/cards/MonsterCard.java
rename to src/main/java/kobting/friendlyminions/cards/MonsterCard.java
index 8fe83e2..3c3c894 100644
--- a/src/main/java/cards/MonsterCard.java
+++ b/src/main/java/kobting/friendlyminions/cards/MonsterCard.java
@@ -1,4 +1,4 @@
-package cards;
+package kobting.friendlyminions.cards;
import basemod.abstracts.CustomCard;
import com.megacrit.cardcrawl.cards.AbstractCard;
@@ -21,6 +21,7 @@ public void upgrade() {
}
+
@Override
public AbstractCard makeCopy() {
return new MonsterCard();
diff --git a/src/main/java/characters/AbstractPlayerWithMinions.java b/src/main/java/kobting/friendlyminions/characters/AbstractPlayerWithMinions.java
similarity index 75%
rename from src/main/java/characters/AbstractPlayerWithMinions.java
rename to src/main/java/kobting/friendlyminions/characters/AbstractPlayerWithMinions.java
index e3bb39a..eb4a881 100644
--- a/src/main/java/characters/AbstractPlayerWithMinions.java
+++ b/src/main/java/kobting/friendlyminions/characters/AbstractPlayerWithMinions.java
@@ -1,33 +1,22 @@
-package characters;
+package kobting.friendlyminions.characters;
import basemod.abstracts.CustomPlayer;
import basemod.animations.AbstractAnimation;
import basemod.animations.G3DJAnimation;
-import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
-import com.evacipated.cardcrawl.modthespire.lib.SpirePatch;
import com.megacrit.cardcrawl.actions.AbstractGameAction;
import com.megacrit.cardcrawl.actions.common.DamageAction;
import com.megacrit.cardcrawl.cards.DamageInfo;
-import com.megacrit.cardcrawl.characters.AbstractPlayer;
-import com.megacrit.cardcrawl.core.CardCrawlGame;
-import com.megacrit.cardcrawl.core.EnergyManager;
-import com.megacrit.cardcrawl.core.Settings;
import com.megacrit.cardcrawl.dungeons.AbstractDungeon;
-import com.megacrit.cardcrawl.helpers.Hitbox;
import com.megacrit.cardcrawl.monsters.AbstractMonster;
import com.megacrit.cardcrawl.monsters.MonsterGroup;
-import com.megacrit.cardcrawl.powers.*;
-import com.megacrit.cardcrawl.screens.CharSelectInfo;
-import enums.MonsterIntentEnum;
-import monsters.AbstractFriendlyMonster;
+import kobting.friendlyminions.enums.MonsterIntentEnum;
+import kobting.friendlyminions.helpers.MonsterHelper;
+import kobting.friendlyminions.monsters.AbstractFriendlyMonster;
-import java.util.ArrayList;
import java.util.Objects;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-public abstract class AbstractPlayerWithMinions extends CustomPlayer {
+public abstract class AbstractPlayerWithMinions extends CustomPlayer{
public MonsterGroup minions;
private AbstractFriendlyMonster[] p_minions;
@@ -61,6 +50,11 @@ public void preBattlePrep() {
clearMinions();
}
+ @Override
+ public void applyStartOfTurnRelics() {
+ super.applyStartOfTurnRelics();
+ }
+
@Override
public void damage(DamageInfo info) {
@@ -72,7 +66,13 @@ public void damage(DamageInfo info) {
}
if(attackingMonster && minions.monsters.size() > 0) {
- damageFriendlyMonster(info);
+ AbstractDungeon.actionManager.addToBottom(new DamageAction(MonsterHelper.getTarget((AbstractMonster) info.owner), info, AbstractGameAction.AttackEffect.NONE));
+ //damageFriendlyMonster(info);
+ }
+ else if(attackingMonster && minions.monsters.size() <= 0) {
+ MonsterHelper.switchTarget((AbstractMonster) info.owner, null);
+ info.applyPowers(info.owner, this);
+ super.damage(info);
}
else {
super.damage(info);
@@ -152,7 +152,7 @@ public boolean addMinion(AbstractFriendlyMonster minion){
} else {
minion.init();
minion.usePreBattleAction();
- minion.useUniversalPreBattleAction();
+ //minion.useUniversalPreBattleAction(); //This might be causing blights to effect minions
minion.showHealthBar();
minions.add(minion);
return true;
@@ -173,10 +173,10 @@ public void clearMinions(){
private boolean checkAttackMonsterIntent(AbstractMonster.Intent intent) {
- if(intent == MonsterIntentEnum.ATTACK_MONSTER
- || intent == MonsterIntentEnum.ATTACK_MONSTER_BUFF
- || intent == MonsterIntentEnum.ATTACK_MONSTER_DEBUFF
- || intent == MonsterIntentEnum.ATTACK_MONSTER_DEFEND) {
+ if(intent == MonsterIntentEnum.ATTACK_MINION
+ || intent == MonsterIntentEnum.ATTACK_MINION_BUFF
+ || intent == MonsterIntentEnum.ATTACK_MINION_DEBUFF
+ || intent == MonsterIntentEnum.ATTACK_MINION_DEFEND) {
return true;
}
@@ -185,18 +185,6 @@ private boolean checkAttackMonsterIntent(AbstractMonster.Intent intent) {
}
- /* This causes a delay when attacking the monster but I can't find another way around it other
- * than patching every monsters attacks. Which isn't realistic.
- *
- * This is needed because if the player is blocking or intangible or has any effects applied it
- * would count towards how the minions are damaged.
- */
- private void damageFriendlyMonster(DamageInfo info){
- int randomMinionIndex = AbstractDungeon.aiRng.random(minions.monsters.size() - 1);
- AbstractFriendlyMonster minion = (AbstractFriendlyMonster) minions.monsters.get(randomMinionIndex);
- info.applyPowers(info.owner, minion);
- AbstractDungeon.actionManager.addToBottom(new DamageAction(minions.monsters.get(randomMinionIndex), info, AbstractGameAction.AttackEffect.NONE));
- }
public boolean hasMinions() {
return minions.monsters.size() > 0;
diff --git a/src/main/java/characters/CustomCharSelectInfo.java b/src/main/java/kobting/friendlyminions/characters/CustomCharSelectInfo.java
similarity index 96%
rename from src/main/java/characters/CustomCharSelectInfo.java
rename to src/main/java/kobting/friendlyminions/characters/CustomCharSelectInfo.java
index 349e02e..71e7fd6 100644
--- a/src/main/java/characters/CustomCharSelectInfo.java
+++ b/src/main/java/kobting/friendlyminions/characters/CustomCharSelectInfo.java
@@ -1,4 +1,4 @@
-package characters;
+package kobting.friendlyminions.characters;
import com.megacrit.cardcrawl.characters.AbstractPlayer;
import com.megacrit.cardcrawl.screens.CharSelectInfo;
diff --git a/src/main/java/enums/MonsterIntentEnum.java b/src/main/java/kobting/friendlyminions/enums/MonsterIntentEnum.java
similarity index 61%
rename from src/main/java/enums/MonsterIntentEnum.java
rename to src/main/java/kobting/friendlyminions/enums/MonsterIntentEnum.java
index fbbf2d2..820718c 100644
--- a/src/main/java/enums/MonsterIntentEnum.java
+++ b/src/main/java/kobting/friendlyminions/enums/MonsterIntentEnum.java
@@ -1,4 +1,4 @@
-package enums;
+package kobting.friendlyminions.enums;
import com.evacipated.cardcrawl.modthespire.lib.SpireEnum;
import com.megacrit.cardcrawl.monsters.AbstractMonster;
@@ -6,16 +6,16 @@
public class MonsterIntentEnum {
@SpireEnum
- public static AbstractMonster.Intent ATTACK_MONSTER;
+ public static AbstractMonster.Intent ATTACK_MINION;
@SpireEnum
- public static AbstractMonster.Intent ATTACK_MONSTER_BUFF;
+ public static AbstractMonster.Intent ATTACK_MINION_BUFF;
@SpireEnum
- public static AbstractMonster.Intent ATTACK_MONSTER_DEBUFF;
+ public static AbstractMonster.Intent ATTACK_MINION_DEBUFF;
@SpireEnum
- public static AbstractMonster.Intent ATTACK_MONSTER_DEFEND;
+ public static AbstractMonster.Intent ATTACK_MINION_DEFEND;
@SpireEnum
public static AbstractMonster.Intent DEBUFF_MONSTER;
diff --git a/src/main/java/helpers/BasePlayerMinionHelper.java b/src/main/java/kobting/friendlyminions/helpers/BasePlayerMinionHelper.java
similarity index 85%
rename from src/main/java/helpers/BasePlayerMinionHelper.java
rename to src/main/java/kobting/friendlyminions/helpers/BasePlayerMinionHelper.java
index d3002d5..b35adcb 100644
--- a/src/main/java/helpers/BasePlayerMinionHelper.java
+++ b/src/main/java/kobting/friendlyminions/helpers/BasePlayerMinionHelper.java
@@ -1,15 +1,11 @@
-package helpers;
+package kobting.friendlyminions.helpers;
import com.megacrit.cardcrawl.characters.AbstractPlayer;
-import com.megacrit.cardcrawl.dungeons.AbstractDungeon;
-import com.megacrit.cardcrawl.monsters.AbstractMonster;
import com.megacrit.cardcrawl.monsters.MonsterGroup;
-import monsters.AbstractFriendlyMonster;
-import patches.PlayerAddFieldsPatch;
+import kobting.friendlyminions.monsters.AbstractFriendlyMonster;
+import kobting.friendlyminions.patches.PlayerAddFieldsPatch;
-import java.util.ArrayList;
import java.util.Objects;
-import java.util.Optional;
public class BasePlayerMinionHelper {
@@ -30,7 +26,7 @@ public static boolean addMinion(AbstractPlayer player, AbstractFriendlyMonster m
} else {
minionToAdd.init();
minionToAdd.usePreBattleAction();
- minionToAdd.useUniversalPreBattleAction();
+ //minionToAdd.useUniversalPreBattleAction();
minionToAdd.showHealthBar();
minions.add(minionToAdd);
return true;
diff --git a/src/main/java/helpers/MinionConfigHelper.java b/src/main/java/kobting/friendlyminions/helpers/MinionConfigHelper.java
similarity index 78%
rename from src/main/java/helpers/MinionConfigHelper.java
rename to src/main/java/kobting/friendlyminions/helpers/MinionConfigHelper.java
index 532cdbb..5170187 100644
--- a/src/main/java/helpers/MinionConfigHelper.java
+++ b/src/main/java/kobting/friendlyminions/helpers/MinionConfigHelper.java
@@ -1,4 +1,4 @@
-package helpers;
+package kobting.friendlyminions.helpers;
public class MinionConfigHelper {
diff --git a/src/main/java/kobting/friendlyminions/helpers/MonsterHelper.java b/src/main/java/kobting/friendlyminions/helpers/MonsterHelper.java
new file mode 100644
index 0000000..3d6f48d
--- /dev/null
+++ b/src/main/java/kobting/friendlyminions/helpers/MonsterHelper.java
@@ -0,0 +1,48 @@
+package kobting.friendlyminions.helpers;
+
+import com.megacrit.cardcrawl.monsters.AbstractMonster;
+import kobting.friendlyminions.enums.MonsterIntentEnum;
+import kobting.friendlyminions.monsters.AbstractFriendlyMonster;
+import kobting.friendlyminions.patches.MonsterAddFieldsPatch;
+
+public class MonsterHelper {
+
+ public static void setTarget(AbstractMonster monster, AbstractFriendlyMonster target) {
+ MonsterAddFieldsPatch.f_target.set(monster, target);
+ }
+
+ public static AbstractFriendlyMonster getTarget(AbstractMonster monster) {
+ return MonsterAddFieldsPatch.f_target.get(monster);
+ }
+
+
+ /**
+ * Use to switch a monsters current target to someone else. Passing in null will cause
+ * the target to be the player.
+ * @param monster
+ * @param newTarget
+ */
+ public static void switchTarget(AbstractMonster monster, AbstractFriendlyMonster newTarget) {
+
+ AbstractMonster.Intent intent = monster.intent;
+
+ if(newTarget == null) {
+ if(intent == MonsterIntentEnum.ATTACK_MINION) {
+ monster.intent = AbstractMonster.Intent.ATTACK;
+ }
+ else if(intent == MonsterIntentEnum.ATTACK_MINION_BUFF) {
+ monster.intent = AbstractMonster.Intent.ATTACK_BUFF;
+ }
+ else if(intent == MonsterIntentEnum.ATTACK_MINION_DEBUFF) {
+ monster.intent = AbstractMonster.Intent.ATTACK_DEBUFF;
+ }
+ else if(intent == MonsterIntentEnum.ATTACK_MINION_DEFEND) {
+ monster.intent = AbstractMonster.Intent.ATTACK_DEFEND;
+ }
+
+ }
+
+ setTarget(monster, newTarget);
+ monster.applyPowers();
+ }
+}
diff --git a/src/main/java/monsters/AbstractFriendlyMonster.java b/src/main/java/kobting/friendlyminions/monsters/AbstractFriendlyMonster.java
similarity index 88%
rename from src/main/java/monsters/AbstractFriendlyMonster.java
rename to src/main/java/kobting/friendlyminions/monsters/AbstractFriendlyMonster.java
index 14d1dab..fe5535d 100644
--- a/src/main/java/monsters/AbstractFriendlyMonster.java
+++ b/src/main/java/kobting/friendlyminions/monsters/AbstractFriendlyMonster.java
@@ -1,17 +1,16 @@
-package monsters;
+package kobting.friendlyminions.monsters;
-import actions.ChooseAction;
-import actions.ChooseActionInfo;
-import cards.MonsterCard;
-import characters.AbstractPlayerWithMinions;
-import com.badlogic.gdx.graphics.Color;
+import kobting.friendlyminions.actions.ChooseAction;
+import kobting.friendlyminions.actions.ChooseActionInfo;
+import kobting.friendlyminions.cards.MonsterCard;
+import kobting.friendlyminions.characters.AbstractPlayerWithMinions;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.megacrit.cardcrawl.cards.AbstractCard;
import com.megacrit.cardcrawl.dungeons.AbstractDungeon;
import com.megacrit.cardcrawl.monsters.AbstractMonster;
import com.megacrit.cardcrawl.vfx.TintEffect;
-import helpers.BasePlayerMinionHelper;
+import kobting.friendlyminions.helpers.BasePlayerMinionHelper;
import java.util.ArrayList;
@@ -63,9 +62,10 @@ public void die() {
if(!(AbstractDungeon.player instanceof AbstractPlayerWithMinions)){
BasePlayerMinionHelper.removeMinion(AbstractDungeon.player, this);
} else {
+ this.isDead = true;
((AbstractPlayerWithMinions)AbstractDungeon.player).removeMinion(this);
}
- super.die();
+ super.die(false);
}
@Override
diff --git a/src/main/java/patches/ApplyPowerActionPatch.java b/src/main/java/kobting/friendlyminions/patches/ApplyPowerActionPatch.java
similarity index 92%
rename from src/main/java/patches/ApplyPowerActionPatch.java
rename to src/main/java/kobting/friendlyminions/patches/ApplyPowerActionPatch.java
index 8b6ef58..78ac826 100644
--- a/src/main/java/patches/ApplyPowerActionPatch.java
+++ b/src/main/java/kobting/friendlyminions/patches/ApplyPowerActionPatch.java
@@ -1,6 +1,6 @@
-package patches;
+package kobting.friendlyminions.patches;
-import characters.AbstractPlayerWithMinions;
+import kobting.friendlyminions.characters.AbstractPlayerWithMinions;
import com.evacipated.cardcrawl.modthespire.lib.SpirePatch;
import com.evacipated.cardcrawl.modthespire.lib.SpireReturn;
import com.megacrit.cardcrawl.actions.AbstractGameAction;
@@ -10,10 +10,9 @@
import com.megacrit.cardcrawl.monsters.AbstractMonster;
import com.megacrit.cardcrawl.monsters.MonsterGroup;
import com.megacrit.cardcrawl.powers.*;
-import enums.MonsterIntentEnum;
-import helpers.BasePlayerMinionHelper;
-import helpers.MinionConfigHelper;
-import monsters.AbstractFriendlyMonster;
+import kobting.friendlyminions.helpers.BasePlayerMinionHelper;
+import kobting.friendlyminions.helpers.MinionConfigHelper;
+import kobting.friendlyminions.monsters.AbstractFriendlyMonster;
import java.lang.reflect.Field;
diff --git a/src/main/java/patches/CardPatch.java b/src/main/java/kobting/friendlyminions/patches/CardPatch.java
similarity index 86%
rename from src/main/java/patches/CardPatch.java
rename to src/main/java/kobting/friendlyminions/patches/CardPatch.java
index 84e3fcf..5ecf914 100644
--- a/src/main/java/patches/CardPatch.java
+++ b/src/main/java/kobting/friendlyminions/patches/CardPatch.java
@@ -1,13 +1,13 @@
-package patches;
+package kobting.friendlyminions.patches;
-import cards.CustomSummonCard;
-import characters.AbstractPlayerWithMinions;
+import kobting.friendlyminions.cards.CustomSummonCard;
+import kobting.friendlyminions.characters.AbstractPlayerWithMinions;
import com.evacipated.cardcrawl.modthespire.lib.SpirePatch;
import com.evacipated.cardcrawl.modthespire.lib.SpireReturn;
import com.megacrit.cardcrawl.cards.AbstractCard;
import com.megacrit.cardcrawl.characters.AbstractPlayer;
import com.megacrit.cardcrawl.dungeons.AbstractDungeon;
-import helpers.BasePlayerMinionHelper;
+import kobting.friendlyminions.helpers.BasePlayerMinionHelper;
@SpirePatch(
cls = "com.megacrit.cardcrawl.cards.AbstractCard",
diff --git a/src/main/java/kobting/friendlyminions/patches/MonsterAddFieldsPatch.java b/src/main/java/kobting/friendlyminions/patches/MonsterAddFieldsPatch.java
new file mode 100644
index 0000000..34747cb
--- /dev/null
+++ b/src/main/java/kobting/friendlyminions/patches/MonsterAddFieldsPatch.java
@@ -0,0 +1,15 @@
+package kobting.friendlyminions.patches;
+
+import com.evacipated.cardcrawl.modthespire.lib.SpireField;
+import com.evacipated.cardcrawl.modthespire.lib.SpirePatch;
+import kobting.friendlyminions.monsters.AbstractFriendlyMonster;
+
+@SpirePatch(
+ cls = "com.megacrit.cardcrawl.monsters.AbstractMonster",
+ method = SpirePatch.CLASS
+)
+public class MonsterAddFieldsPatch {
+
+ public static SpireField f_target = new SpireField<>(()-> null);
+
+}
diff --git a/src/main/java/kobting/friendlyminions/patches/MonsterIntentPatch.java b/src/main/java/kobting/friendlyminions/patches/MonsterIntentPatch.java
new file mode 100644
index 0000000..04b0987
--- /dev/null
+++ b/src/main/java/kobting/friendlyminions/patches/MonsterIntentPatch.java
@@ -0,0 +1,432 @@
+package kobting.friendlyminions.patches;
+
+
+import com.badlogic.gdx.Gdx;
+import com.badlogic.gdx.graphics.Texture;
+import com.badlogic.gdx.math.MathUtils;
+import com.evacipated.cardcrawl.modthespire.lib.*;
+import com.evacipated.cardcrawl.modthespire.patcher.PatchingException;
+import com.megacrit.cardcrawl.cards.AbstractCard;
+import com.megacrit.cardcrawl.cards.DamageInfo;
+import com.megacrit.cardcrawl.dungeons.AbstractDungeon;
+import com.megacrit.cardcrawl.helpers.ImageMaster;
+import com.megacrit.cardcrawl.helpers.PowerTip;
+import com.megacrit.cardcrawl.monsters.AbstractMonster;
+import com.megacrit.cardcrawl.monsters.EnemyMoveInfo;
+import com.megacrit.cardcrawl.monsters.MonsterGroup;
+import com.megacrit.cardcrawl.powers.AbstractPower;
+import com.megacrit.cardcrawl.vfx.AbstractGameEffect;
+import com.megacrit.cardcrawl.vfx.DebuffParticleEffect;
+import com.megacrit.cardcrawl.vfx.ShieldParticleEffect;
+import com.megacrit.cardcrawl.vfx.combat.BuffParticleEffect;
+import javassist.CannotCompileException;
+import javassist.CtBehavior;
+import kobting.friendlyminions.cards.MonsterCard;
+import kobting.friendlyminions.characters.AbstractPlayerWithMinions;
+import kobting.friendlyminions.enums.MonsterIntentEnum;
+import kobting.friendlyminions.helpers.BasePlayerMinionHelper;
+import kobting.friendlyminions.helpers.MonsterHelper;
+import kobting.friendlyminions.monsters.AbstractFriendlyMonster;
+
+import javax.swing.text.AbstractDocument;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+
+
+public class MonsterIntentPatch {
+
+ @SpirePatch(
+ cls = "com.megacrit.cardcrawl.monsters.AbstractMonster",
+ method = "createIntent"
+ )
+ public static class CreateIntentPatch{
+
+ @SpireInsertPatch(
+ locator = Locator.class
+ )
+ public static void Insert(AbstractMonster __instance) {
+ AbstractMonster.Intent _intent = __instance.intent;
+ if(((AbstractPlayerWithMinions)AbstractDungeon.player).hasMinions() || BasePlayerMinionHelper.hasMinions(AbstractDungeon.player)){
+ if((_intent == MonsterIntentEnum.ATTACK_MINION
+ || _intent == MonsterIntentEnum.ATTACK_MINION_BUFF
+ || _intent == MonsterIntentEnum.ATTACK_MINION_DEBUFF
+ || _intent == MonsterIntentEnum.ATTACK_MINION_DEFEND)
+ && MonsterHelper.getTarget(__instance) == null) {
+ if(AbstractDungeon.player instanceof AbstractPlayerWithMinions) {
+ AbstractPlayerWithMinions player = (AbstractPlayerWithMinions) AbstractDungeon.player;
+ AbstractFriendlyMonster target = (AbstractFriendlyMonster) player.minions.getRandomMonster();
+ MonsterHelper.setTarget(__instance, target);
+ } else {
+ AbstractFriendlyMonster target = (AbstractFriendlyMonster) BasePlayerMinionHelper.getMinions(AbstractDungeon.player).getRandomMonster();
+ MonsterHelper.setTarget(__instance, target);
+ }
+ }
+ }
+ }
+
+ public static void Prefix(AbstractMonster __instance) {
+ MonsterHelper.setTarget(__instance, null);
+ }
+
+ public static class Locator extends SpireInsertLocator {
+ public int[] Locate(CtBehavior ctMethodToPatch) throws CannotCompileException, PatchingException {
+
+ Matcher finalMatcher = new Matcher.MethodCallMatcher("com.megacrit.cardcrawl.monsters.AbstractMonster", "updateIntentTip");
+ return LineFinder.findInOrder(ctMethodToPatch, new ArrayList(), finalMatcher);
+
+ }
+ }
+ }
+
+
+
+ @SpirePatch(
+ cls = "com.megacrit.cardcrawl.monsters.AbstractMonster",
+ method = "getIntentImg"
+ )
+ public static class GetIntentImagePatch {
+
+ public static SpireReturn Prefix(AbstractMonster __instance){
+
+ AbstractMonster.Intent intent = __instance.intent;
+
+ if(intent == MonsterIntentEnum.ATTACK_MINION
+ || intent == MonsterIntentEnum.ATTACK_MINION_BUFF
+ || intent == MonsterIntentEnum.ATTACK_MINION_DEBUFF
+ || intent == MonsterIntentEnum.ATTACK_MINION_DEFEND) {
+ return SpireReturn.Return(getAttackIntent(__instance));
+ }
+
+ return SpireReturn.Continue();
+ }
+
+ private static Texture getAttackIntent(AbstractMonster monster) {
+
+ try {
+ Field isMultiDmg = AbstractMonster.class.getDeclaredField("isMultiDmg");
+ Field intentDmg = AbstractMonster.class.getDeclaredField("intentDmg");
+ Field intentMultiAmt = AbstractMonster.class.getDeclaredField("intentMultiAmt");
+ isMultiDmg.setAccessible(true);
+ intentDmg.setAccessible(true);
+ intentMultiAmt.setAccessible(true);
+
+ int tmp;
+ if (isMultiDmg.getBoolean(monster)) {
+ tmp = intentDmg.getInt(monster) * intentMultiAmt.getInt(monster);
+ } else {
+ tmp = intentDmg.getInt(monster);
+ }
+
+ if (tmp < 5) {
+ return new Texture("images/intents/attack_monster_intent_1.png");
+ } else if (tmp < 10) {
+ return new Texture("images/intents/attack_monster_intent_2.png");
+ } else if (tmp < 15) {
+ return new Texture("images/intents/attack_monster_intent_3.png");
+ } else if (tmp < 20) {
+ return new Texture("images/intents/attack_monster_intent_4.png");
+ } else if (tmp < 25) {
+ return new Texture("images/intents/attack_monster_intent_5.png");
+ } else {
+ return tmp < 30 ? new Texture("images/intents/attack_monster_intent_6.png") : new Texture("images/intents/attack_monster_intent_7.png");
+ }
+ } catch (NoSuchFieldException e) {
+ e.printStackTrace();
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ }
+
+ return null;
+
+ }
+
+ }
+
+ @SpirePatch(
+ cls = "com.megacrit.cardcrawl.monsters.AbstractMonster",
+ method = "updateIntentVFX"
+ )
+ public static class UpdateIntentVFXPatch {
+
+ public static SpireReturn Prefix(AbstractMonster __instance) {
+
+ try {
+ Field intentParticleTimer = AbstractMonster.class.getDeclaredField("intentParticleTimer");
+ intentParticleTimer.setAccessible(true);
+
+ Field intentVfx = AbstractMonster.class.getDeclaredField("intentVfx");
+ intentVfx.setAccessible(true);
+
+ if(__instance.intentAlpha > 0.0f) {
+ if(__instance.intent == MonsterIntentEnum.ATTACK_MINION_DEFEND){
+ intentParticleTimer.setFloat(__instance, intentParticleTimer.getFloat(__instance) - Gdx.graphics.getDeltaTime());
+ float valIntentParticleTime = intentParticleTimer.getFloat(__instance);
+ if (valIntentParticleTime < 0.0F) {
+ intentParticleTimer.setFloat(__instance, 0.5f);
+ ((ArrayList)intentVfx.get(__instance)).add(new ShieldParticleEffect(__instance.intentHb.cX, __instance.intentHb.cY));
+ return SpireReturn.Return(null);
+ }
+ }
+ else if(__instance.intent == MonsterIntentEnum.ATTACK_MINION_BUFF) {
+ intentParticleTimer.setFloat(__instance, intentParticleTimer.getFloat(__instance) - Gdx.graphics.getDeltaTime());
+ float valIntentParticleTime = intentParticleTimer.getFloat(__instance);
+ if(valIntentParticleTime < 0.0F) {
+ intentParticleTimer.setFloat(__instance, 0.1f);
+ ((ArrayList)intentVfx.get(__instance)).add(new BuffParticleEffect(__instance.intentHb.cX, __instance.intentHb.cY));
+ return SpireReturn.Return(null);
+ }
+ }
+ else if(__instance.intent == MonsterIntentEnum.ATTACK_MINION_DEBUFF) {
+ intentParticleTimer.setFloat(__instance, intentParticleTimer.getFloat(__instance) - Gdx.graphics.getDeltaTime());
+ float valIntentParticleTime = intentParticleTimer.getFloat(__instance);
+ if(valIntentParticleTime < 0.0F) {
+ intentParticleTimer.setFloat(__instance, 1.0f);
+ ((ArrayList)intentVfx.get(__instance)).add(new DebuffParticleEffect(__instance.intentHb.cX, __instance.intentHb.cY));
+ return SpireReturn.Return(null);
+ }
+ }
+ }
+
+ return SpireReturn.Continue();
+ } catch (NoSuchFieldException e) {
+ e.printStackTrace();
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ }
+
+ return SpireReturn.Continue();
+ }
+
+ }
+
+ @SpirePatch(
+ cls = "com.megacrit.cardcrawl.monsters.AbstractMonster",
+ method = "updateIntentTip"
+ )
+ public static class UpdateIntentTipPatch {
+
+
+ public static SpireReturn Prefix(AbstractMonster __instance) {
+
+ try {
+
+ PowerTip intentTip;
+ boolean isMultiDamage;
+ int intentDmg;
+ int intentMultiAmt;
+
+ Field f_intentTip = AbstractMonster.class.getDeclaredField("intentTip");
+ f_intentTip.setAccessible(true);
+ Field f_isMultiDamage = AbstractMonster.class.getDeclaredField("isMultiDmg");
+ f_isMultiDamage.setAccessible(true);
+ Field f_intentDmg = AbstractMonster.class.getDeclaredField("intentDmg");
+ f_intentDmg.setAccessible(true);
+ Field f_intentMultiAmt = AbstractMonster.class.getDeclaredField("intentMultiAmt");
+ f_intentMultiAmt.setAccessible(true);
+
+
+ intentTip = (PowerTip) f_intentTip.get(__instance);
+ isMultiDamage = f_isMultiDamage.getBoolean(__instance);
+ intentDmg = f_intentDmg.getInt(__instance);
+ intentMultiAmt = f_intentMultiAmt.getInt(__instance);
+
+ AbstractMonster.Intent intent = __instance.intent;
+ AbstractPlayerWithMinions player = (AbstractPlayerWithMinions) AbstractDungeon.player;
+ MonsterGroup playerMinions = player.minions;
+ MonsterGroup playerMinion2 = BasePlayerMinionHelper.getMinions(AbstractDungeon.player);
+ AbstractFriendlyMonster target = MonsterHelper.getTarget(__instance);
+
+ if(MonsterHelper.getTarget(__instance) != null) {
+
+ if (intent == MonsterIntentEnum.ATTACK_MINION) {
+ String targetName = MonsterHelper.getTarget(__instance).name;
+ intentTip.header = "Aggressive";
+ if(isMultiDamage) {
+ intentTip.body = "This enemy intends to NL #yAttack a #y" + targetName + " for #b" + intentDmg + " damage #b" + intentMultiAmt + " times.";
+ } else {
+ intentTip.body = "This enemy intends to NL #yAttack a #y" + targetName + " for #b" + intentDmg + " damage";
+ }
+ Method method = AbstractMonster.class.getDeclaredMethod("getAttackIntentTip");
+ method.setAccessible(true);
+ intentTip.img = (Texture) method.invoke(__instance);
+ }
+ else if (intent == MonsterIntentEnum.ATTACK_MINION_BUFF) {
+ String targetName = MonsterHelper.getTarget(__instance).name;
+ intentTip.header = "Aggressive";
+
+ if(isMultiDamage) {
+ intentTip.body = "This enemy intends to use a #yBuff and #yAttack a #y " + targetName + " for #b" + intentDmg + " damage #b" + intentMultiAmt + " times.";
+ } else {
+ intentTip.body = "This enemy intends to use a #yBuff and #yAttack a #y" + targetName + " for #b" + intentDmg + " damage.";
+ }
+
+ intentTip.img = ImageMaster.INTENT_ATTACK_BUFF;
+
+ }
+ else if (intent == MonsterIntentEnum.ATTACK_MINION_DEBUFF) {
+ String targetName = MonsterHelper.getTarget(__instance).name;
+ intentTip.header = "Strategic";
+ intentTip.body = "This enemy intends to inflict a #yNegative #yEffect on you and #yAttack a #y" + targetName + " for #b" + intentDmg + " damage.";
+ intentTip.img = ImageMaster.INTENT_ATTACK_DEBUFF;
+
+ }
+ else if (intent == MonsterIntentEnum.ATTACK_MINION_DEFEND) {
+ String targetName = MonsterHelper.getTarget(__instance).name;
+ intentTip.header = "Aggressive";
+
+ if(isMultiDamage) {
+ intentTip.body = "This enemy intends to #yBlock and #yAttack a #y" + targetName + " for #b" + intentDmg + " damage #b" + intentMultiAmt + " times.";
+ } else {
+ intentTip.body = "This enemy intends to #yBlock and #yAttack a #y" + targetName + " for #b" + intentDmg + " damage.";
+ }
+ intentTip.img = ImageMaster.INTENT_ATTACK_DEFEND;
+
+ } else {
+ return SpireReturn.Continue();
+ }
+ } else if(
+ (MonsterHelper.getTarget(__instance) == null
+ || !playerMinions.monsters.contains(target)
+ || !playerMinion2.monsters.contains(target))
+ &&
+ (intent == MonsterIntentEnum.ATTACK_MINION
+ || intent == MonsterIntentEnum.ATTACK_MINION_DEFEND
+ || intent == MonsterIntentEnum.ATTACK_MINION_DEBUFF
+ || intent == MonsterIntentEnum.ATTACK_MINION_BUFF
+ )){
+ MonsterHelper.switchTarget(__instance, null);
+ return SpireReturn.Return(null);
+ } else {
+ return SpireReturn.Continue();
+ }
+
+
+ f_intentTip.set(__instance, intentTip);
+ return SpireReturn.Return(null);
+ } catch (NoSuchFieldException e) {
+ e.printStackTrace();
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ } catch (NoSuchMethodException e) {
+ e.printStackTrace();
+ } catch (InvocationTargetException e) {
+ e.printStackTrace();
+ }
+
+ return SpireReturn.Continue();
+ }
+ }
+
+ @SpirePatch(
+ cls = "com.megacrit.cardcrawl.monsters.AbstractMonster",
+ method = "calculateDamage",
+ paramtypes = {"int"}
+ )
+ public static class CalculateDamagePatch{
+
+ public static SpireReturn Prefix(AbstractMonster __instance, int dmg) {
+
+ try {
+ Field f_intentDmg = AbstractMonster.class.getDeclaredField("intentDmg");
+ f_intentDmg.setAccessible(true);
+
+ AbstractMonster.Intent intent = __instance.intent;
+
+ if(intent == MonsterIntentEnum.ATTACK_MINION
+ || intent == MonsterIntentEnum.ATTACK_MINION_BUFF
+ || intent == MonsterIntentEnum.ATTACK_MINION_DEBUFF
+ || intent == MonsterIntentEnum.ATTACK_MINION_DEFEND) {
+
+ AbstractFriendlyMonster target = MonsterHelper.getTarget(__instance);
+
+ if(target == null) {
+ return SpireReturn.Continue();
+ } else {
+ float tmp = dmg;
+ for(final AbstractPower p : __instance.powers) {
+ tmp = p.atDamageGive(tmp, DamageInfo.DamageType.NORMAL);
+ }
+ for(final AbstractPower p: target.powers) {
+ tmp = p.atDamageReceive(tmp, DamageInfo.DamageType.NORMAL);
+ }
+ for(final AbstractPower p: __instance.powers) {
+ tmp = p.atDamageFinalGive(tmp, DamageInfo.DamageType.NORMAL);
+ }
+ for(final AbstractPower p: target.powers) {
+ tmp = p.atDamageFinalReceive(tmp, DamageInfo.DamageType.NORMAL);
+ }
+ dmg = MathUtils.floor(tmp);
+ if(dmg < 0) dmg = 0;
+ f_intentDmg.set(__instance, dmg);
+ }
+ return SpireReturn.Return(null);
+ } else {
+ return SpireReturn.Continue();
+ }
+ } catch (NoSuchFieldException e) {
+ e.printStackTrace();
+ return SpireReturn.Continue();
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ return SpireReturn.Continue();
+ }
+ }
+
+ }
+
+ @SpirePatch(
+ cls = "com.megacrit.cardcrawl.monsters.AbstractMonster",
+ method = "applyPowers"
+ )
+ public static class ApplyPowersPatch{
+
+ public static SpireReturn Prefix(AbstractMonster __instance) {
+
+ try {
+ Field f_move = AbstractMonster.class.getDeclaredField("move");
+ f_move.setAccessible(true);
+ Field f_intentImg = AbstractMonster.class.getDeclaredField("intentImg");
+ f_intentImg.setAccessible(true);
+ Method m_calcDmg = AbstractMonster.class.getDeclaredMethod("calculateDamage", int.class);
+ m_calcDmg.setAccessible(true);
+ Method m_getIntentImg = AbstractMonster.class.getDeclaredMethod("getIntentImg");
+ m_getIntentImg.setAccessible(true);
+ Method m_updateIntentTip = AbstractMonster.class.getDeclaredMethod("updateIntentTip");
+ m_updateIntentTip.setAccessible(true);
+
+ EnemyMoveInfo move = (EnemyMoveInfo) f_move.get(__instance);
+
+ AbstractFriendlyMonster target = MonsterHelper.getTarget(__instance);
+
+ if(target != null) {
+ for(final DamageInfo dmg: __instance.damage) {
+ dmg.applyPowers(__instance, target);
+ }
+ if(move.baseDamage > -1) {
+ m_calcDmg.invoke(__instance, move.baseDamage);
+ }
+
+ f_intentImg.set(__instance, m_getIntentImg.invoke(__instance));
+ m_updateIntentTip.invoke(__instance);
+ return SpireReturn.Return(null);
+ } else {
+ return SpireReturn.Continue();
+ }
+ } catch (NoSuchFieldException e) {
+ e.printStackTrace();
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ } catch (NoSuchMethodException e) {
+ e.printStackTrace();
+ } catch (InvocationTargetException e) {
+ e.printStackTrace();
+ }
+
+ return SpireReturn.Continue();
+ }
+
+ }
+
+}
diff --git a/src/main/java/patches/MonsterSetMovePatch.java b/src/main/java/kobting/friendlyminions/patches/MonsterSetMovePatch.java
similarity index 68%
rename from src/main/java/patches/MonsterSetMovePatch.java
rename to src/main/java/kobting/friendlyminions/patches/MonsterSetMovePatch.java
index 7f382bb..f2516d2 100644
--- a/src/main/java/patches/MonsterSetMovePatch.java
+++ b/src/main/java/kobting/friendlyminions/patches/MonsterSetMovePatch.java
@@ -1,39 +1,43 @@
-package patches;
+package kobting.friendlyminions.patches;
-import characters.AbstractPlayerWithMinions;
-import com.badlogic.gdx.graphics.Texture;
+import com.evacipated.cardcrawl.modthespire.lib.SpirePostfixPatch;
+import kobting.friendlyminions.characters.AbstractPlayerWithMinions;
import com.evacipated.cardcrawl.modthespire.lib.SpirePatch;
import com.megacrit.cardcrawl.dungeons.AbstractDungeon;
import com.megacrit.cardcrawl.monsters.AbstractMonster;
import com.megacrit.cardcrawl.monsters.EnemyMoveInfo;
-import enums.MonsterIntentEnum;
-import helpers.BasePlayerMinionHelper;
-import helpers.MinionConfigHelper;
+import kobting.friendlyminions.enums.MonsterIntentEnum;
+import kobting.friendlyminions.helpers.BasePlayerMinionHelper;
+import kobting.friendlyminions.helpers.MinionConfigHelper;
+import kobting.friendlyminions.helpers.MonsterHelper;
+import kobting.friendlyminions.monsters.AbstractFriendlyMonster;
import java.lang.reflect.Field;
@SpirePatch(
- cls = "com.megacrit.cardcrawl.monsters.AbstractMonster",
- method = "setMove"
+ clz = AbstractMonster.class,
+ method = "setMove",
+ paramtypez = {String.class, byte.class, AbstractMonster.Intent.class, int.class, int.class, boolean.class}
)
public class MonsterSetMovePatch {
+ @SpirePostfixPatch
public static void Postfix(AbstractMonster monster, String moveName, byte nextMove, AbstractMonster.Intent intent, int baseDamage, int multiplier, boolean isMultiDamage) {
if(BasePlayerMinionHelper.hasMinions(AbstractDungeon.player) ||
(AbstractDungeon.player instanceof AbstractPlayerWithMinions && ((AbstractPlayerWithMinions)AbstractDungeon.player).hasMinions())){
switch (intent) {
case ATTACK:
- maybeChangeIntent(monster, MonsterIntentEnum.ATTACK_MONSTER, nextMove, baseDamage, multiplier, isMultiDamage);
+ maybeChangeIntent(monster, MonsterIntentEnum.ATTACK_MINION, nextMove, baseDamage, multiplier, isMultiDamage);
break;
case ATTACK_BUFF:
- maybeChangeIntent(monster, MonsterIntentEnum.ATTACK_MONSTER_BUFF, nextMove, baseDamage, multiplier, isMultiDamage);
+ maybeChangeIntent(monster, MonsterIntentEnum.ATTACK_MINION_BUFF, nextMove, baseDamage, multiplier, isMultiDamage);
break;
case ATTACK_DEBUFF:
- maybeChangeIntent(monster, MonsterIntentEnum.ATTACK_MONSTER_DEBUFF, nextMove, baseDamage, multiplier, isMultiDamage);
+ maybeChangeIntent(monster, MonsterIntentEnum.ATTACK_MINION_DEBUFF, nextMove, baseDamage, multiplier, isMultiDamage);
break;
case ATTACK_DEFEND:
- maybeChangeIntent(monster, MonsterIntentEnum.ATTACK_MONSTER_DEFEND, nextMove, baseDamage, multiplier, isMultiDamage);
+ maybeChangeIntent(monster, MonsterIntentEnum.ATTACK_MINION_DEFEND, nextMove, baseDamage, multiplier, isMultiDamage);
break;
}
}
@@ -56,6 +60,8 @@ private static void maybeChangeIntent(AbstractMonster monster, AbstractMonster.I
moveInfo.set(monster, newInfo);
+ } else {
+ MonsterHelper.setTarget(monster, null);
}
System.out.println("-------- End Change Intent -------------");
@@ -67,8 +73,4 @@ private static void maybeChangeIntent(AbstractMonster monster, AbstractMonster.I
}
- private static void switchIntentType(AbstractMonster.Intent originalIntent) {
-
- }
-
}
diff --git a/src/main/java/patches/PlayerAddFieldsPatch.java b/src/main/java/kobting/friendlyminions/patches/PlayerAddFieldsPatch.java
similarity index 64%
rename from src/main/java/patches/PlayerAddFieldsPatch.java
rename to src/main/java/kobting/friendlyminions/patches/PlayerAddFieldsPatch.java
index ebf189a..8564998 100644
--- a/src/main/java/patches/PlayerAddFieldsPatch.java
+++ b/src/main/java/kobting/friendlyminions/patches/PlayerAddFieldsPatch.java
@@ -1,16 +1,9 @@
-package patches;
+package kobting.friendlyminions.patches;
import com.evacipated.cardcrawl.modthespire.lib.SpireField;
import com.evacipated.cardcrawl.modthespire.lib.SpirePatch;
-import com.evacipated.cardcrawl.modthespire.lib.SpirePatches;
-import com.megacrit.cardcrawl.characters.AbstractPlayer;
-import com.megacrit.cardcrawl.dungeons.AbstractDungeon;
-import com.megacrit.cardcrawl.monsters.AbstractMonster;
import com.megacrit.cardcrawl.monsters.MonsterGroup;
-import monsters.AbstractFriendlyMonster;
-
-import java.lang.reflect.Field;
-import java.util.Objects;
+import kobting.friendlyminions.monsters.AbstractFriendlyMonster;
@SpirePatch(
cls = "com.megacrit.cardcrawl.characters.AbstractPlayer",
@@ -22,8 +15,8 @@ public class PlayerAddFieldsPatch {
private static AbstractFriendlyMonster[] p_minions = new AbstractFriendlyMonster[maxMinions];
private static MonsterGroup minions = new MonsterGroup(p_minions);
- public static SpireField f_baseMinions = new SpireField<>(maxMinions);
- public static SpireField f_maxMinions = new SpireField<>(maxMinions);
- public static SpireField f_minions = new SpireField<>(minions);
+ public static SpireField f_baseMinions = new SpireField<>(() ->maxMinions);
+ public static SpireField f_maxMinions = new SpireField<>(() ->maxMinions);
+ public static SpireField f_minions = new SpireField<>(() ->minions);
}
diff --git a/src/main/java/patches/PlayerMethodPatches.java b/src/main/java/kobting/friendlyminions/patches/PlayerMethodPatches.java
similarity index 91%
rename from src/main/java/patches/PlayerMethodPatches.java
rename to src/main/java/kobting/friendlyminions/patches/PlayerMethodPatches.java
index c842ab1..fca90b7 100644
--- a/src/main/java/patches/PlayerMethodPatches.java
+++ b/src/main/java/kobting/friendlyminions/patches/PlayerMethodPatches.java
@@ -1,10 +1,8 @@
-package patches;
+package kobting.friendlyminions.patches;
import basemod.BaseMod;
-import characters.AbstractPlayerWithMinions;
+import kobting.friendlyminions.characters.AbstractPlayerWithMinions;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
-import com.evacipated.cardcrawl.modthespire.lib.ByRef;
-import com.evacipated.cardcrawl.modthespire.lib.SpireField;
import com.evacipated.cardcrawl.modthespire.lib.SpirePatch;
import com.evacipated.cardcrawl.modthespire.lib.SpireReturn;
import com.megacrit.cardcrawl.actions.AbstractGameAction;
@@ -16,13 +14,10 @@
import com.megacrit.cardcrawl.monsters.AbstractMonster;
import com.megacrit.cardcrawl.monsters.MonsterGroup;
import com.megacrit.cardcrawl.rooms.MonsterRoom;
-import enums.MonsterIntentEnum;
-import helpers.BasePlayerMinionHelper;
-import monsters.AbstractFriendlyMonster;
-
-import java.lang.reflect.Field;
-import java.util.Objects;
-import java.util.Optional;
+import kobting.friendlyminions.enums.MonsterIntentEnum;
+import kobting.friendlyminions.helpers.BasePlayerMinionHelper;
+import kobting.friendlyminions.helpers.MonsterHelper;
+import kobting.friendlyminions.monsters.AbstractFriendlyMonster;
/*
* All of these are checking against AbstractPlayerWithMinions to avoid double calling of those if
@@ -59,7 +54,8 @@ public static SpireReturn Prefix(AbstractPlayer _instance, DamageInfo info) {
attackingMonster = checkAttackMonsterIntent(owner.intent);
}
if (attackingMonster) {
- damageFriendlyMonster(info);
+ //damageFriendlyMonster(info);
+ AbstractDungeon.actionManager.addToBottom(new DamageAction(MonsterHelper.getTarget((AbstractFriendlyMonster)info.owner), info, AbstractGameAction.AttackEffect.NONE));
return SpireReturn.Return(null);
} else {
return SpireReturn.Continue();
@@ -70,10 +66,10 @@ public static SpireReturn Prefix(AbstractPlayer _instance, DamageInfo info) {
private static boolean checkAttackMonsterIntent(AbstractMonster.Intent intent) {
- if(intent == MonsterIntentEnum.ATTACK_MONSTER
- || intent == MonsterIntentEnum.ATTACK_MONSTER_BUFF
- || intent == MonsterIntentEnum.ATTACK_MONSTER_DEBUFF
- || intent == MonsterIntentEnum.ATTACK_MONSTER_DEFEND) {
+ if(intent == MonsterIntentEnum.ATTACK_MINION
+ || intent == MonsterIntentEnum.ATTACK_MINION_BUFF
+ || intent == MonsterIntentEnum.ATTACK_MINION_DEBUFF
+ || intent == MonsterIntentEnum.ATTACK_MINION_DEFEND) {
return true;
}
diff --git a/src/main/java/patches/MonsterIntentPatch.java b/src/main/java/patches/MonsterIntentPatch.java
deleted file mode 100644
index 45d130c..0000000
--- a/src/main/java/patches/MonsterIntentPatch.java
+++ /dev/null
@@ -1,139 +0,0 @@
-package patches;
-
-
-import com.badlogic.gdx.Gdx;
-import com.badlogic.gdx.graphics.Texture;
-import com.evacipated.cardcrawl.modthespire.lib.SpirePatch;
-import com.evacipated.cardcrawl.modthespire.lib.SpireReturn;
-import com.megacrit.cardcrawl.monsters.AbstractMonster;
-import com.megacrit.cardcrawl.vfx.AbstractGameEffect;
-import com.megacrit.cardcrawl.vfx.DebuffParticleEffect;
-import com.megacrit.cardcrawl.vfx.ShieldParticleEffect;
-import com.megacrit.cardcrawl.vfx.combat.BuffParticleEffect;
-import enums.MonsterIntentEnum;
-
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-
-
-public class MonsterIntentPatch {
-
-
- @SpirePatch(
- cls = "com.megacrit.cardcrawl.monsters.AbstractMonster",
- method = "getIntentImg"
- )
- public static class GetIntentImagePatch {
-
- public static SpireReturn Prefix(AbstractMonster __instance){
-
- AbstractMonster.Intent intent = __instance.intent;
-
- if(intent == MonsterIntentEnum.ATTACK_MONSTER
- || intent == MonsterIntentEnum.ATTACK_MONSTER_BUFF
- || intent == MonsterIntentEnum.ATTACK_MONSTER_DEBUFF
- || intent == MonsterIntentEnum.ATTACK_MONSTER_DEFEND) {
- return SpireReturn.Return(getAttackIntent(__instance));
- }
-
- return SpireReturn.Continue();
- }
-
- private static Texture getAttackIntent(AbstractMonster monster) {
-
- try {
- Field isMultiDmg = AbstractMonster.class.getDeclaredField("isMultiDmg");
- Field intentDmg = AbstractMonster.class.getDeclaredField("intentDmg");
- Field intentMultiAmt = AbstractMonster.class.getDeclaredField("intentMultiAmt");
- isMultiDmg.setAccessible(true);
- intentDmg.setAccessible(true);
- intentMultiAmt.setAccessible(true);
-
- int tmp;
- if (isMultiDmg.getBoolean(monster)) {
- tmp = intentDmg.getInt(monster) * intentMultiAmt.getInt(monster);
- } else {
- tmp = intentDmg.getInt(monster);
- }
-
- if (tmp < 5) {
- return new Texture("images/intents/attack_monster_intent_1.png");
- } else if (tmp < 10) {
- return new Texture("images/intents/attack_monster_intent_2.png");
- } else if (tmp < 15) {
- return new Texture("images/intents/attack_monster_intent_3.png");
- } else if (tmp < 20) {
- return new Texture("images/intents/attack_monster_intent_4.png");
- } else if (tmp < 25) {
- return new Texture("images/intents/attack_monster_intent_5.png");
- } else {
- return tmp < 30 ? new Texture("images/intents/attack_monster_intent_6.png") : new Texture("images/intents/attack_monster_intent_7.png");
- }
- } catch (NoSuchFieldException e) {
- e.printStackTrace();
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- }
-
- return null;
-
- }
-
- }
-
- @SpirePatch(
- cls = "com.megacrit.cardcrawl.monsters.AbstractMonster",
- method = "updateIntentVFX"
- )
- public static class UpdateIntentVFXPatch {
-
- public static SpireReturn Prefix(AbstractMonster __instance) {
-
- try {
- Field intentParticleTimer = AbstractMonster.class.getDeclaredField("intentParticleTimer");
- intentParticleTimer.setAccessible(true);
-
- Field intentVfx = AbstractMonster.class.getDeclaredField("intentVfx");
- intentVfx.setAccessible(true);
-
- if(__instance.intentAlpha > 0.0f) {
- if(__instance.intent == MonsterIntentEnum.ATTACK_MONSTER_DEFEND){
- intentParticleTimer.setFloat(__instance, intentParticleTimer.getFloat(__instance) - Gdx.graphics.getDeltaTime());
- float valIntentParticleTime = intentParticleTimer.getFloat(__instance);
- if (valIntentParticleTime < 0.0F) {
- intentParticleTimer.setFloat(__instance, 0.5f);
- ((ArrayList)intentVfx.get(__instance)).add(new ShieldParticleEffect(__instance.intentHb.cX, __instance.intentHb.cY));
- return SpireReturn.Return(null);
- }
- }
- else if(__instance.intent == MonsterIntentEnum.ATTACK_MONSTER_BUFF) {
- intentParticleTimer.setFloat(__instance, intentParticleTimer.getFloat(__instance) - Gdx.graphics.getDeltaTime());
- float valIntentParticleTime = intentParticleTimer.getFloat(__instance);
- if(valIntentParticleTime < 0.0F) {
- ((ArrayList)intentVfx.get(__instance)).add(new BuffParticleEffect(__instance.intentHb.cX, __instance.intentHb.cY));
- return SpireReturn.Return(null);
- }
- }
- else if(__instance.intent == MonsterIntentEnum.ATTACK_MONSTER_DEBUFF) {
- intentParticleTimer.setFloat(__instance, intentParticleTimer.getFloat(__instance) - Gdx.graphics.getDeltaTime());
- float valIntentParticleTime = intentParticleTimer.getFloat(__instance);
- if(valIntentParticleTime < 0.0F) {
- ((ArrayList)intentVfx.get(__instance)).add(new DebuffParticleEffect(__instance.intentHb.cX, __instance.intentHb.cY));
- return SpireReturn.Return(null);
- }
- }
- }
-
- return SpireReturn.Continue();
- } catch (NoSuchFieldException e) {
- e.printStackTrace();
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- }
-
- return SpireReturn.Continue();
- }
-
- }
-
-}
diff --git a/src/main/resources/ModTheSpire.json b/src/main/resources/ModTheSpire.json
index 7506355..0796d4c 100644
--- a/src/main/resources/ModTheSpire.json
+++ b/src/main/resources/ModTheSpire.json
@@ -4,6 +4,6 @@
"author_list": ["Kobting"],
"description": "Library for creating friendly minions and custom characters that can use friendly minions.",
"version": "0.1",
- "sts_version": "7-8-2018",
- "mts_version": "2.7.0"
+ "sts_version": "08-23-2018",
+ "mts_version": "3.0.0"
}
\ No newline at end of file