package com.minelittlepony.unicopia.ability; import java.util.Optional; import org.jetbrains.annotations.Nullable; import com.minelittlepony.unicopia.Race; import com.minelittlepony.unicopia.USounds; import com.minelittlepony.unicopia.ability.data.Hit; import com.minelittlepony.unicopia.ability.magic.spell.CastingMethod; import com.minelittlepony.unicopia.ability.magic.spell.effect.SpellType; import com.minelittlepony.unicopia.block.state.StateMaps; import com.minelittlepony.unicopia.entity.player.Pony; import net.minecraft.particle.ParticleTypes; import net.minecraft.sound.SoundCategory; import net.minecraft.text.Text; /** * Kirin ability to transform into a nirik */ public class KirinRageAbility implements Ability { @Override public int getWarmupTime(Pony player) { return 30; } @Override public int getCooldownTime(Pony player) { return 60; } @Override public boolean canUse(Race race) { return race == Race.KIRIN; } @Nullable @Override public Optional prepare(Pony player) { return Hit.INSTANCE; } @Override public Hit.Serializer getSerializer() { return Hit.SERIALIZER; } @Override public double getCostEstimate(Pony player) { return 0; } @Override public boolean apply(Pony player, Hit data) { if (player.consumeSuperMove()) { player.getMagicalReserves().getCharge().set(0); SpellType.RAGE.withTraits().apply(player, CastingMethod.INNATE); } else { int type = 1 + player.asWorld().random.nextInt(4); player.asEntity().sendMessage(Text.translatable("ability.unicopia.too_calm." + type), true); if (type == 4) { player.getMagicalReserves().getCharge().addPercent(1); } player.asEntity().addExhaustion(1.5F); if (StateMaps.BURNABLE.convert(player.asWorld(), player.getOrigin().down())) { player.playSound(USounds.SPELL_FIRE_CRACKLE, 1); } } return true; } @Override public void warmUp(Pony player, AbilitySlot slot) { player.spawnParticles(ParticleTypes.LAVA, 4); player.getMagicalReserves().getEnergy().addPercent(1.03F); if (player.asEntity().age % 15 == 0) { player.asWorld().playSound(player.asEntity(), player.getOrigin(), USounds.ENTITY_PLAYER_KIRIN_RAGE, SoundCategory.PLAYERS, 1F, 0.0125F); } } @Override public void coolDown(Pony player, AbilitySlot slot) { } }