Fix: timer is already cancelled.

This commit is contained in:
gentlespoon 2022-05-08 01:09:53 -07:00 committed by Melledy
parent 9020ee5b2a
commit eab964de5c

View File

@ -29,9 +29,7 @@ public class StaminaManager {
private Position previousCoordinates = new Position(0, 0, 0); private Position previousCoordinates = new Position(0, 0, 0);
private MotionState currentState = MotionState.MOTION_STANDBY; private MotionState currentState = MotionState.MOTION_STANDBY;
private MotionState previousState = MotionState.MOTION_STANDBY; private MotionState previousState = MotionState.MOTION_STANDBY;
private final Timer sustainedStaminaHandlerTimer = new Timer(); private Timer sustainedStaminaHandlerTimer;
private final SustainedStaminaHandler handleSustainedStamina = new SustainedStaminaHandler();
private boolean timerRunning = false;
private GameSession cachedSession = null; private GameSession cachedSession = null;
private GameEntity cachedEntity = null; private GameEntity cachedEntity = null;
private int staminaRecoverDelay = 0; private int staminaRecoverDelay = 0;
@ -136,21 +134,21 @@ public class StaminaManager {
entity.getWorld().broadcastPacket(new PacketEntityFightPropUpdateNotify(entity, FightProperty.FIGHT_PROP_CUR_HP)); entity.getWorld().broadcastPacket(new PacketEntityFightPropUpdateNotify(entity, FightProperty.FIGHT_PROP_CUR_HP));
entity.getWorld().broadcastPacket(new PacketLifeStateChangeNotify(0, entity, LifeState.LIFE_DEAD)); entity.getWorld().broadcastPacket(new PacketLifeStateChangeNotify(0, entity, LifeState.LIFE_DEAD));
player.getScene().removeEntity(entity); player.getScene().removeEntity(entity);
((EntityAvatar)entity).onDeath(dieType, 0); ((EntityAvatar) entity).onDeath(dieType, 0);
} }
public void startSustainedStaminaHandler() { public void startSustainedStaminaHandler() {
if (!player.isPaused() && !timerRunning) { if (!player.isPaused() && sustainedStaminaHandlerTimer == null) {
timerRunning = true; sustainedStaminaHandlerTimer = new Timer();
sustainedStaminaHandlerTimer.scheduleAtFixedRate(handleSustainedStamina, 0, 200); sustainedStaminaHandlerTimer.scheduleAtFixedRate(new SustainedStaminaHandler(), 0, 200);
// Grasscutter.getLogger().debug("[MovementManager] SustainedStaminaHandlerTimer started"); // Grasscutter.getLogger().debug("[MovementManager] SustainedStaminaHandlerTimer started");
} }
} }
public void stopSustainedStaminaHandler() { public void stopSustainedStaminaHandler() {
if (timerRunning) { if (sustainedStaminaHandlerTimer != null) {
timerRunning = false;
sustainedStaminaHandlerTimer.cancel(); sustainedStaminaHandlerTimer.cancel();
sustainedStaminaHandlerTimer = null;
// Grasscutter.getLogger().debug("[MovementManager] SustainedStaminaHandlerTimer stopped"); // Grasscutter.getLogger().debug("[MovementManager] SustainedStaminaHandlerTimer stopped");
} }
} }