diff --git a/src/main/java/com/sekwah/narutomod/abilities/Ability.java b/src/main/java/com/sekwah/narutomod/abilities/Ability.java index 87d39c30..f0755186 100644 --- a/src/main/java/com/sekwah/narutomod/abilities/Ability.java +++ b/src/main/java/com/sekwah/narutomod/abilities/Ability.java @@ -45,7 +45,7 @@ public long defaultCombo() { * * If this fails and is above 0 for charge amount the last successful will call perform. * - * If channeled and chargeAmount is 0, it will either be a minCast (if enabled) or the stop packet is + * If channeled and chargeAmount is -1, it will either be a minCast (if enabled) or the stop packet is * received at the same time. If this returns false then perform will not be called. * * @param player @@ -82,6 +82,14 @@ public SoundEvent castingSound() { return NarutoSounds.JUTSU_CAST.get(); } + /** + * Sound to play when an ability fails to cast. + * @return + */ + public SoundEvent castingFailSound() { + return NarutoSounds.JUTSU_FAIL.get(); + } + public String getTranslationKey(INinjaData ninjaData) { return this.getTranslationKey(ninjaData, 0); } diff --git a/src/main/java/com/sekwah/narutomod/abilities/jutsus/SubstitutionJutsuAbility.java b/src/main/java/com/sekwah/narutomod/abilities/jutsus/SubstitutionJutsuAbility.java index 93623018..2c5d3dc3 100644 --- a/src/main/java/com/sekwah/narutomod/abilities/jutsus/SubstitutionJutsuAbility.java +++ b/src/main/java/com/sekwah/narutomod/abilities/jutsus/SubstitutionJutsuAbility.java @@ -3,9 +3,12 @@ import com.sekwah.narutomod.abilities.Ability; import com.sekwah.narutomod.capabilities.INinjaData; import com.sekwah.narutomod.entity.SubstitutionLogEntity; +import com.sekwah.narutomod.sounds.NarutoSounds; +import net.minecraft.ChatFormatting; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.network.chat.TranslatableComponent; import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundSource; import net.minecraft.util.Mth; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.effect.MobEffects; @@ -25,6 +28,11 @@ public long defaultCombo() { @Override public boolean handleCost(Player player, INinjaData ninjaData, int chargeAmount) { + if (ninjaData.getSubstitutionCount() < 1 && chargeAmount == -1) { + player.displayClientMessage(new TranslatableComponent("jutsu.fail.notenoughcharges", new TranslatableComponent(this.getTranslationKey(ninjaData)).withStyle(ChatFormatting.YELLOW)), true); + player.playNotifySound( NarutoSounds.JUTSU_FAIL.get(), SoundSource.PLAYERS, 0.5f, 1.0f); + return false; + } return true; } @@ -42,7 +50,7 @@ public String getTranslationKey(INinjaData ninjaData, int ticksActive) { */ @Override public void performServer(Player player, INinjaData ninjaData, int ticksActive) { - if(ticksActive == 0) { + if(ticksActive == -1) { // Activate ninjaData.useSubstitution(1); Vec3 loc = ninjaData.getSubstitutionLoc(); diff --git a/src/main/java/com/sekwah/narutomod/abilities/utility/LeapAbility.java b/src/main/java/com/sekwah/narutomod/abilities/utility/LeapAbility.java index bd89f759..cdc0f3e0 100644 --- a/src/main/java/com/sekwah/narutomod/abilities/utility/LeapAbility.java +++ b/src/main/java/com/sekwah/narutomod/abilities/utility/LeapAbility.java @@ -22,10 +22,16 @@ public boolean logInChat() { return false; } + @Override public SoundEvent castingSound() { return null; } + @Override + public SoundEvent castingFailSound() { + return null; + } + @Override public boolean handleCost(Player player, INinjaData ninjaData, int chargeAmount) { if(!player.isOnGround()) { diff --git a/src/main/java/com/sekwah/narutomod/network/c2s/ServerAbilityActivatePacket.java b/src/main/java/com/sekwah/narutomod/network/c2s/ServerAbilityActivatePacket.java index 54101a06..b5188143 100644 --- a/src/main/java/com/sekwah/narutomod/network/c2s/ServerAbilityActivatePacket.java +++ b/src/main/java/com/sekwah/narutomod/network/c2s/ServerAbilityActivatePacket.java @@ -4,6 +4,7 @@ import com.sekwah.narutomod.abilities.NarutoAbilities; import com.sekwah.narutomod.capabilities.NinjaCapabilityHandler; import com.sekwah.narutomod.capabilities.toggleabilitydata.ToggleAbilityData; +import com.sekwah.narutomod.sounds.NarutoSounds; import net.minecraft.ChatFormatting; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.chat.TranslatableComponent; @@ -70,6 +71,8 @@ public static void handle(ServerAbilityActivatePacket msg, Supplier SEAL_C = register("seal_c"); public static final RegistryObject JUTSU_CAST = register("jutsu_cast"); + public static final RegistryObject JUTSU_FAIL = register("jutsu_fail"); public static final RegistryObject FIREBALL_EXPLODE = register("fireball.explosion"); public static final RegistryObject FIREBALL_SHOOT = register("fireball.shoot"); diff --git a/src/main/resources/assets/narutomod/lang/en_us.json b/src/main/resources/assets/narutomod/lang/en_us.json index 6df95f4c..5a895842 100644 --- a/src/main/resources/assets/narutomod/lang/en_us.json +++ b/src/main/resources/assets/narutomod/lang/en_us.json @@ -47,6 +47,7 @@ "narutomod.subtitle.needle_hit": "Needle Hit", "narutomod.subtitle.jutsu_seal": "Jutsu Seal", "narutomod.subtitle.jutsu_cast": "Jutsu Cast", + "narutomod.subtitle.jutsu_fail": "Jutsu Fail", "narutomod.subtitle.fireball.shoot": "Fireball Shoot", "narutomod.subtitle.fireball.explosion": "Fireball Explosion", "narutomod.subtitle.waterbullet.shoot": "Water Bullet Shoot", @@ -62,6 +63,7 @@ "jutsu.fail.notonground": "You must be on the ground to use %s", "jutsu.fail.notenoughstamina": "You do not have enough stamina to use %s", "jutsu.fail.notenoughchakra": "You do not have enough chakra to use %s", + "jutsu.fail.notenoughcharges": "You do not have enough charges to use %s", "ability.double_jump": "Double Jump", "jutsu.leap": "Leap", "jutsu.waterwalk": "Water Walking", diff --git a/src/main/resources/assets/narutomod/sounds.json b/src/main/resources/assets/narutomod/sounds.json index 16646b45..723376d4 100644 --- a/src/main/resources/assets/narutomod/sounds.json +++ b/src/main/resources/assets/narutomod/sounds.json @@ -31,6 +31,12 @@ ], "subtitle": "narutomod.subtitle.jutsu_cast" }, + "jutsu_fail": { + "sounds": [ + "narutomod:jutsu/jutsu_fail" + ], + "subtitle": "narutomod.subtitle.jutsu_fail" + }, "seal_c": { "sounds": [ "narutomod:jutsu/seal_c" diff --git a/src/main/resources/assets/narutomod/sounds/jutsu/jutsu_fail.ogg b/src/main/resources/assets/narutomod/sounds/jutsu/jutsu_fail.ogg new file mode 100644 index 00000000..54d0a9e0 Binary files /dev/null and b/src/main/resources/assets/narutomod/sounds/jutsu/jutsu_fail.ogg differ