Cleaner solution for starting listener once.
This commit is contained in:
		@@ -18,7 +18,6 @@ package handlers.effecthandlers;
 | 
			
		||||
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
import java.util.concurrent.ConcurrentHashMap;
 | 
			
		||||
import java.util.concurrent.atomic.AtomicBoolean;
 | 
			
		||||
 | 
			
		||||
import org.l2jmobius.gameserver.enums.StatModifierType;
 | 
			
		||||
import org.l2jmobius.gameserver.model.StatSet;
 | 
			
		||||
@@ -41,10 +40,11 @@ import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager;
 | 
			
		||||
 */
 | 
			
		||||
public class NightStatModify extends AbstractEffect
 | 
			
		||||
{
 | 
			
		||||
	private static final AtomicBoolean DAY_TIME = new AtomicBoolean(GameTimeTaskManager.getInstance().isNight());
 | 
			
		||||
	private static final Set<Creature> NIGHT_STAT_CHARACTERS = ConcurrentHashMap.newKeySet();
 | 
			
		||||
	private static final int SHADOW_SENSE = 294;
 | 
			
		||||
	
 | 
			
		||||
	private static boolean START_LISTENER = true;
 | 
			
		||||
	
 | 
			
		||||
	private final Stat _stat;
 | 
			
		||||
	private final int _amount;
 | 
			
		||||
	protected final StatModifierType _mode;
 | 
			
		||||
@@ -55,9 +55,15 @@ public class NightStatModify extends AbstractEffect
 | 
			
		||||
		_amount = params.getInt("amount");
 | 
			
		||||
		_mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF);
 | 
			
		||||
		
 | 
			
		||||
		// Init a global day-night change listener.
 | 
			
		||||
		final ListenersContainer container = Containers.Global();
 | 
			
		||||
		container.addListener(new ConsumerEventListener(container, EventType.ON_DAY_NIGHT_CHANGE, (OnDayNightChange event) -> onDayNightChange(event), this));
 | 
			
		||||
		// Run only once per daytime change.
 | 
			
		||||
		if (START_LISTENER)
 | 
			
		||||
		{
 | 
			
		||||
			START_LISTENER = false;
 | 
			
		||||
			
 | 
			
		||||
			// Init a global day-night change listener.
 | 
			
		||||
			final ListenersContainer container = Containers.Global();
 | 
			
		||||
			container.addListener(new ConsumerEventListener(container, EventType.ON_DAY_NIGHT_CHANGE, (OnDayNightChange event) -> onDayNightChange(event), this));
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	@Override
 | 
			
		||||
@@ -99,31 +105,19 @@ public class NightStatModify extends AbstractEffect
 | 
			
		||||
	
 | 
			
		||||
	public void onDayNightChange(OnDayNightChange event)
 | 
			
		||||
	{
 | 
			
		||||
		synchronized (DAY_TIME)
 | 
			
		||||
		// System message for Shadow Sense.
 | 
			
		||||
		final SystemMessage msg = new SystemMessage(event.isNight() ? SystemMessageId.IT_IS_NOW_MIDNIGHT_AND_THE_EFFECT_OF_S1_CAN_BE_FELT : SystemMessageId.IT_IS_DAWN_AND_THE_EFFECT_OF_S1_WILL_NOW_DISAPPEAR);
 | 
			
		||||
		msg.addSkillName(SHADOW_SENSE);
 | 
			
		||||
		
 | 
			
		||||
		for (Creature creature : NIGHT_STAT_CHARACTERS)
 | 
			
		||||
		{
 | 
			
		||||
			final boolean isNight = event.isNight();
 | 
			
		||||
			// Pump again.
 | 
			
		||||
			creature.getStat().recalculateStats(true);
 | 
			
		||||
			
 | 
			
		||||
			// Run only once per daytime change.
 | 
			
		||||
			if (isNight == DAY_TIME.get())
 | 
			
		||||
			// Send Shadow Sense message when player has skill.
 | 
			
		||||
			if (creature.getKnownSkill(SHADOW_SENSE) != null)
 | 
			
		||||
			{
 | 
			
		||||
				return;
 | 
			
		||||
			}
 | 
			
		||||
			DAY_TIME.set(isNight);
 | 
			
		||||
			
 | 
			
		||||
			// System message for Shadow Sense.
 | 
			
		||||
			final SystemMessage msg = new SystemMessage(isNight ? SystemMessageId.IT_IS_NOW_MIDNIGHT_AND_THE_EFFECT_OF_S1_CAN_BE_FELT : SystemMessageId.IT_IS_DAWN_AND_THE_EFFECT_OF_S1_WILL_NOW_DISAPPEAR);
 | 
			
		||||
			msg.addSkillName(SHADOW_SENSE);
 | 
			
		||||
			
 | 
			
		||||
			for (Creature creature : NIGHT_STAT_CHARACTERS)
 | 
			
		||||
			{
 | 
			
		||||
				// Pump again.
 | 
			
		||||
				creature.getStat().recalculateStats(true);
 | 
			
		||||
				
 | 
			
		||||
				// Send Shadow Sense message when player has skill.
 | 
			
		||||
				if (creature.getKnownSkill(SHADOW_SENSE) != null)
 | 
			
		||||
				{
 | 
			
		||||
					creature.sendPacket(msg);
 | 
			
		||||
				}
 | 
			
		||||
				creature.sendPacket(msg);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user