diff --git a/src/main/java/emu/grasscutter/game/managers/stamina/StaminaManager.java b/src/main/java/emu/grasscutter/game/managers/stamina/StaminaManager.java index b0556763815..8a0a86b1095 100644 --- a/src/main/java/emu/grasscutter/game/managers/stamina/StaminaManager.java +++ b/src/main/java/emu/grasscutter/game/managers/stamina/StaminaManager.java @@ -389,6 +389,9 @@ public void handleCombatInvocationsNotify(@NotNull GameSession session, @NotNull return; } + // Update previous motion state + this.previousState = currentState; + // Update the current state. this.currentState = motionState; // logger.trace(currentState + "\t" + (notifyEntityId == currentAvatarEntityId ? "character" : "vehicle")); @@ -417,6 +420,11 @@ public void handleVehicleInteractReq(GameSession session, int vehicleId, Vehicle // Internal handler private void handleImmediateStamina(GameSession session, @NotNull MotionState motionState) { + // Don't double dip on sustained stamina start costs + if (previousState == currentState) { + return; + } + switch (motionState) { case MOTION_STATE_CLIMB -> updateStaminaRelative(session, new Consumption(ConsumptionType.CLIMB_START), true);