11package net .swofty .type .skyblockgeneric .event .actions .player .mobdamage ;
22
3- import net .kyori .adventure .key .Key ;
4- import net .kyori .adventure .sound .Sound ;
53import net .minestom .server .entity .Entity ;
64import net .minestom .server .entity .EntityType ;
75import net .minestom .server .entity .LivingEntity ;
8- import net .minestom .server .entity .damage .Damage ;
9- import net .minestom .server .entity .damage .DamageType ;
106import net .minestom .server .event .entity .EntityAttackEvent ;
117import net .swofty .commons .skyblock .statistics .ItemStatistic ;
128import net .swofty .commons .skyblock .statistics .ItemStatistics ;
2521import net .swofty .type .skyblockgeneric .item .components .ItemRequirementsComponent ;
2622import net .swofty .type .skyblockgeneric .item .updater .PlayerItemOrigin ;
2723import net .swofty .type .skyblockgeneric .user .SkyBlockPlayer ;
28- import net .swofty .type .skyblockgeneric .utility .DamageIndicator ;
24+ import net .swofty .type .skyblockgeneric .utility .AttackService ;
2925
3026import java .util .HashMap ;
3127import java .util .Map ;
32- import java .util .Random ;
3328import java .util .UUID ;
3429
3530public class PlayerActionDamageMob implements HypixelEventClass {
36- private static final Random random = new Random ();
3731 private static final Map <UUID , Long > COOLDOWN = new HashMap <>();
3832
3933 @ PhasedEvent (node = EventNodes .ALL , requireDataLoaded = false , phase = EventPhase .GAMEPLAY )
@@ -52,8 +46,6 @@ public void run(EntityAttackEvent event) {
5246 else return ;
5347 LivingEntity targetLivingEntity = (LivingEntity ) targetEntity ;
5448
55- player .playSound (Sound .sound (Key .key ("entity." + mob .getEntityType ().name ().toLowerCase ().replace ("minecraft:" , "" ) + ".hurt" ), Sound .Source .PLAYER , 1f , 1f ), Sound .Emitter .self ());
56-
5749 ItemStatistics entityStats = mob .getStatistics ();
5850 Map .Entry <Double , Boolean > hit = player .getStatistics ().runPrimaryDamageFormula (entityStats , player , targetLivingEntity );
5951
@@ -69,31 +61,16 @@ public void run(EntityAttackEvent event) {
6961 COOLDOWN .put (player .getUuid (), System .currentTimeMillis () +
7062 MathUtility .ticksToMilliseconds (player .getStatistics ().getInvulnerabilityTime ()));
7163
72- new DamageIndicator ()
73- .damage ((float ) valueEvent .getValue ())
74- .pos (targetEntity .getPosition ())
75- .critical (critical )
76- .display (targetEntity .getInstance ());
77-
78- targetLivingEntity .damage (new Damage (DamageType .PLAYER_ATTACK , player , player , player .getPosition (), (float ) valueEvent .getValue ()));
64+ float damageAmount = ((Number ) valueEvent .getValue ()).floatValue ();
65+ if (!AttackService .applyHit (player , mob , damageAmount , critical )) return ;
7966
8067 double ferocity = player .getStatistics ().allStatistics ().getOverall (ItemStatistic .FEROCITY );
81- int extraAttacks = (int ) (ferocity / 100 );
82- double extraAttackChance = (ferocity % 100 ) / 100.0 ;
83-
84- // Extra attacks that are guaranteed because ferocity overflowed 100
85- for (int i = 0 ; i < extraAttacks ; i ++) {
86- targetLivingEntity .damage (new Damage (DamageType .PLAYER_ATTACK , player , player , player .getPosition (), (float ) valueEvent .getValue ()));
87- }
88-
89- // Extra attacks that have a chance to occur based on the remaining ferocity
90- if (random .nextDouble () < extraAttackChance ) {
91- targetLivingEntity .damage (new Damage (DamageType .PLAYER_ATTACK , player , player , player .getPosition (), (float ) valueEvent .getValue ()));
92- }
68+ if (player .getPosition ().distance (mob .getPosition ()) <= AttackService .MAX_MELEE_FEROCITY_DISTANCE )
69+ AttackService .scheduleExtraHits (player , mob , damageAmount , critical , ferocity );
9370
9471 // Handle damage event enchantments
9572 SkyBlockItem mainHandItem = PlayerItemOrigin .getFromCache (player .getUuid ()).get (PlayerItemOrigin .MAIN_HAND );
96- double damageValue = (( Number ) valueEvent . getValue ()). doubleValue () ;
73+ double damageValue = damageAmount ;
9774
9875 for (SkyBlockEnchantment enchantment : mainHandItem .getAttributeHandler ().getEnchantments ().toList ()) {
9976 if (enchantment .type ().getEnch () instanceof DamageEventEnchant damageEventEnchant ) {
0 commit comments