From 8961cc2cffd670256438c9766b473cf306113975 Mon Sep 17 00:00:00 2001 From: Sollace Date: Mon, 9 Oct 2023 23:43:59 +0100 Subject: [PATCH] Add casting abilities for kirins --- .../com/minelittlepony/unicopia/Race.java | 2 +- .../unicopia/ability/Abilities.java | 1 + .../ability/AbstractSpellCastingAbility.java | 2 +- .../unicopia/ability/KirinCastingAbility.java | 23 ++++++++++++++++++ .../ability/UnicornCastingAbility.java | 12 +++++++-- .../ability/UnicornTeleportAbility.java | 2 +- .../resources/assets/unicopia/lang/en_us.json | 5 ++++ .../textures/gui/ability/kirin_cast.png | Bin 0 -> 4483 bytes .../unicopia/textures/gui/race/kirin.png | Bin 0 -> 6550 bytes 9 files changed, 42 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/minelittlepony/unicopia/ability/KirinCastingAbility.java create mode 100644 src/main/resources/assets/unicopia/textures/gui/ability/kirin_cast.png create mode 100644 src/main/resources/assets/unicopia/textures/gui/race/kirin.png diff --git a/src/main/java/com/minelittlepony/unicopia/Race.java b/src/main/java/com/minelittlepony/unicopia/Race.java index 4a84d806..e45fec10 100644 --- a/src/main/java/com/minelittlepony/unicopia/Race.java +++ b/src/main/java/com/minelittlepony/unicopia/Race.java @@ -54,7 +54,7 @@ public record Race (Supplier compositeSupplier, boolean canCast, Flig public static final Race BAT = register("bat", false, FlightType.AVIAN, false, true, true); public static final Race ALICORN = register("alicorn", true, FlightType.AVIAN, true, false, false); public static final Race CHANGELING = register("changeling", false, FlightType.INSECTOID, false, false, true); - public static final Race KIRIN = register("kirin", false, FlightType.NONE, false, false, false); + public static final Race KIRIN = register("kirin", true, FlightType.NONE, false, false, false); public static void bootstrap() {} diff --git a/src/main/java/com/minelittlepony/unicopia/ability/Abilities.java b/src/main/java/com/minelittlepony/unicopia/ability/Abilities.java index 137bb64a..d4fc9a3d 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/Abilities.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/Abilities.java @@ -55,6 +55,7 @@ public interface Abilities { // kirin Ability RAGE = register(new KirinRageAbility(), "rage", AbilitySlot.PRIMARY); + Ability KIRIN_CAST = register(new KirinCastingAbility(), "kirin_cast", AbilitySlot.SECONDARY); static > T register(T power, String name, AbilitySlot slot) { Identifier id = Unicopia.id(name); diff --git a/src/main/java/com/minelittlepony/unicopia/ability/AbstractSpellCastingAbility.java b/src/main/java/com/minelittlepony/unicopia/ability/AbstractSpellCastingAbility.java index 628ddc5e..2ff33f62 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/AbstractSpellCastingAbility.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/AbstractSpellCastingAbility.java @@ -19,7 +19,7 @@ abstract class AbstractSpellCastingAbility implements Ability { @Override public boolean canUse(Race race) { - return race.canCast(); + return race.canCast() && race != Race.KIRIN; } @Override diff --git a/src/main/java/com/minelittlepony/unicopia/ability/KirinCastingAbility.java b/src/main/java/com/minelittlepony/unicopia/ability/KirinCastingAbility.java new file mode 100644 index 00000000..5b82e4cc --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/ability/KirinCastingAbility.java @@ -0,0 +1,23 @@ +package com.minelittlepony.unicopia.ability; + +import com.minelittlepony.unicopia.Race; +import com.minelittlepony.unicopia.ability.magic.spell.effect.SpellType; +import com.minelittlepony.unicopia.entity.player.Pony; +import net.minecraft.particle.ParticleTypes; + +public class KirinCastingAbility extends UnicornCastingAbility { + @Override + public boolean canUse(Race race) { + return race == Race.KIRIN; + } + + @Override + public void coolDown(Pony player, AbilitySlot slot) { + player.spawnParticles(ParticleTypes.FLAME, 5); + } + + @Override + protected boolean canCast(SpellType type) { + return type == SpellType.FIRE_BOLT || type == SpellType.FLAME || type == SpellType.INFERNAL; + } +} diff --git a/src/main/java/com/minelittlepony/unicopia/ability/UnicornCastingAbility.java b/src/main/java/com/minelittlepony/unicopia/ability/UnicornCastingAbility.java index 61df0029..3d3dbc00 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/UnicornCastingAbility.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/UnicornCastingAbility.java @@ -42,7 +42,11 @@ public class UnicornCastingAbility extends AbstractSpellCastingAbility { @Override public Optional prepare(Pony player) { - return Hit.of(player.canCast() && player.getMagicalReserves().getMana().get() >= getCostEstimate(player)); + TypedActionResult> spell = player.getCharms().getSpellInHand(false); + return Hit.of(player.canCast() + && player.getMagicalReserves().getMana().get() >= getCostEstimate(player) + && (!spell.getResult().isAccepted() || canCast(spell.getValue().type())) + ); } @Override @@ -94,7 +98,7 @@ public class UnicornCastingAbility extends AbstractSpellCastingAbility { } else { TypedActionResult> newSpell = player.getCharms().getSpellInHand(true); - if (newSpell.getResult() != ActionResult.FAIL) { + if (newSpell.getResult() != ActionResult.FAIL && canCast(newSpell.getValue().type())) { CustomisedSpellType spell = newSpell.getValue(); boolean removed = player.getSpellSlot().removeWhere(s -> { @@ -122,6 +126,10 @@ public class UnicornCastingAbility extends AbstractSpellCastingAbility { return true; } + protected boolean canCast(SpellType type) { + return true; + } + private TypedActionResult getAmulet(Pony player) { ItemStack stack = player.asEntity().getStackInHand(Hand.MAIN_HAND); diff --git a/src/main/java/com/minelittlepony/unicopia/ability/UnicornTeleportAbility.java b/src/main/java/com/minelittlepony/unicopia/ability/UnicornTeleportAbility.java index d3ee138f..0e305e88 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/UnicornTeleportAbility.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/UnicornTeleportAbility.java @@ -57,7 +57,7 @@ public class UnicornTeleportAbility implements Ability { @Override public boolean canUse(Race race) { - return race.canCast(); + return race.canCast() && race != Race.KIRIN; } @Override diff --git a/src/main/resources/assets/unicopia/lang/en_us.json b/src/main/resources/assets/unicopia/lang/en_us.json index 5e296ca2..cda863e5 100644 --- a/src/main/resources/assets/unicopia/lang/en_us.json +++ b/src/main/resources/assets/unicopia/lang/en_us.json @@ -380,6 +380,11 @@ "ability.unicopia.cast.with_spell.active": "Casting %s", "ability.unicopia.cast.with_spell.hand": "Casting %s from hand", "ability.unicopia.cast.with_spell.replacing": "Replace %s with %s", + "ability.unicopia.kirin_cast": "Cast Spell", + "ability.unicopia.kirin_cast.with_spell": "Cast %s", + "ability.unicopia.kirin_cast.with_spell.active": "Casting %s", + "ability.unicopia.kirin_cast.with_spell.hand": "Casting %s from hand", + "ability.unicopia.kirin_cast.with_spell.replacing": "Replace %s with %s", "ability.unicopia.dispell": "Dispell Magic", "ability.unicopia.teleport": "Teleport", "ability.unicopia.teleport.far": "Teleport (Far)", diff --git a/src/main/resources/assets/unicopia/textures/gui/ability/kirin_cast.png b/src/main/resources/assets/unicopia/textures/gui/ability/kirin_cast.png new file mode 100644 index 0000000000000000000000000000000000000000..7144e5b830bab6bba6c92661d33ffa0e2cdaf210 GIT binary patch literal 4483 zcmeHKZEzFE89vz%8wFDAQk)t?j|%}~N4h(GS-MKLsb!GBG7i>YhlZ)|Q@&c#3Ejz( z6_U6D(-;`zG_(nzCN4}Eiqo_SxZ$f{hPXJ6Gn3ZP#%1DhNC`>Y0Bs3`G!ET6$+F#M zrsJ9BpHH*e_jaH6+1+Q~eWh)!s$4ZkovVf*XpYliUk7SfE}8d$Z!sFZ397f*S|{gp z7C@Qc1t3*3AeD>(MK!@rQ>8=cplur{*}#@Da>-TARO+3;UXZkR13N#7Ndq>nN`vNr zIu42s*z-Vr7!>};iLp)tTYfT?j{{gT^H{yg>8gTtS{&2r4Zt7M=?NSoFbgajIzo>D zw5nr#Ml#cz?Xv+^wUsX`t8$i=!GWN_@m>~!BJszcwmHs~=Joub`o#@}_s!4R)LZrQ zzwJlby42-|=Kio{{lW_EXl&^m=k^^3hBpLm(64+veEFr$EuC=Y6V1m?n3tb$wBB8# z)=)O{weu$*+jTPBT!rf2`gpr)uYcb!?T_{|H9g&hu@8IZeh&Bc>pobrytVE9kwwL) zhsvAQUlpHhd&20!yO(93e~$di>kD4j@B8i9rWefp+h1M1xzbAhac1jxj=voF;`hgg zU+vbP;|Sy0yruK+^}TcyFWj5^cf%(8MX4`Gx2QAznz`XhLBr59XRzG^H9tFEDbAbq z5H%~?o_}cnR-M<*Uv$3GzJD~5ardc_XM104@0_u+ZKk_pMdRr3lQ&L&zp%vk(St3Q zOK9<(?g_1_zSaEZ!n)7i zXm<_%^b14F=0%Z`143Wgme)!HZ;kxw_^yEr*tPLNp?OPL-Ko;Sk%dF=4h&s7e#bYZSQ8C%agqCvJgTIr^v4YY+pN{ZFi2muIutVF^QpVu!E5gVfL62O+5Q3O^X zQiBbt1#wg+1XjojwPC$h2zpT5 zVzHo@4%O*20HG0^{1O?__{9fgiUfz973m-!ka)ol%bX-7gd`h+fPQ#ve!hUqm7@2H zNfm$|XoL))xE4cwK6IjoD3vz?lH`QG(nEAN1z2<)D+-|?&6YQ^e(8aU6bzm64}^kV zWjPFuvR>8)pduI*pERU=;!+;61RmZOP`rTHlaLb6jf*vDZgP*ZoQV?w?kV0$=&`jc zV1RPD2)jUsHbfquU<8_H2*u>|6i(5&S%VoVPGc|>88jqiq%&SIkUlm#b^21cP`Xkw)h^pRjYc^~Ov(SYBh zbjX4eE2^9}M5o2ZTdKUI!~q8zQo;K}k?{^U?_;YaQdSc;SxjcL#c0IzdV{gZG!9zN z21O8wGN+O|l^%Ip2(TC+EGfq+AW+)DT8OeBOG-k}EeKv4lFGWNZWlOC3@MRzQepvV zDi6EI@^B%B6If#UGM!6cc&_Pxq2m5o|H86B=?d$~S^iTnG`V0@ z&KYAXwxa)~iB$niNHV}L(FT$i$c1Ps874IY^Zh!X zz|+w+E!UJ3m=bt8y8dr+smHHVtRMUf3WLj1xCZJ57p;4!HLL8r~35E-s|6%2f;}9ZO1hvHu#gy=fmfZh#&3Lm%g#--Gi<7?+bo@ zaO6%jjahs_Dy}OoscAA@>T+e6_f$2Gz8AgwPTScTy&s&59=LPp8;7k&va>E-c>Y!~ zkly4b$~BVZT^ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/unicopia/textures/gui/race/kirin.png b/src/main/resources/assets/unicopia/textures/gui/race/kirin.png new file mode 100644 index 0000000000000000000000000000000000000000..33be07ce36037ad660129e341a1d821a5991f4fc GIT binary patch literal 6550 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 literal 0 HcmV?d00001