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 00000000..7144e5b8 Binary files /dev/null and b/src/main/resources/assets/unicopia/textures/gui/ability/kirin_cast.png differ 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 00000000..33be07ce Binary files /dev/null and b/src/main/resources/assets/unicopia/textures/gui/race/kirin.png differ