Deprecated bad practice StatSet setters with returning values.

Also using simple HashMap instead of ConcurrentHashMap.
This commit is contained in:
MobiusDevelopment
2020-01-28 13:48:46 +00:00
parent 8dbfd09e0c
commit e5bd883546
83 changed files with 917 additions and 2262 deletions

View File

@@ -180,8 +180,9 @@ public class CeremonyOfChaosManager extends AbstractEventManager<CeremonyOfChaos
} }
} }
} }
final StatSet params = new StatSet();
getTimers().addTimer("count_down", StatSet.valueOf("time", 60), 60 * 1000, null, null); params.set("time", 60);
getTimers().addTimer("count_down", params, 60 * 1000, null, null);
} }
@ScheduleTarget @ScheduleTarget
@@ -268,15 +269,18 @@ public class CeremonyOfChaosManager extends AbstractEventManager<CeremonyOfChaos
// Reschedule // Reschedule
if (time == 60) if (time == 60)
{ {
getTimers().addTimer(event, params.set("time", 10), 50 * 1000, null, null); params.set("time", 10);
getTimers().addTimer(event, params, 50 * 1000, null, null);
} }
else if (time == 10) else if (time == 10)
{ {
getTimers().addTimer(event, params.set("time", 5), 5 * 1000, null, null); params.set("time", 5);
getTimers().addTimer(event, params, 5 * 1000, null, null);
} }
else if ((time > 1) && (time <= 5)) else if ((time > 1) && (time <= 5))
{ {
getTimers().addTimer(event, params.set("time", time - 1), 1000, null, null); params.set("time", time - 1);
getTimers().addTimer(event, params, 1000, null, null);
} }
break; break;
} }

View File

@@ -70,10 +70,7 @@ public class GlobalVariablesManager extends AbstractVariables
LOGGER.warning(getClass().getSimpleName() + ": Couldn't restore global variables."); LOGGER.warning(getClass().getSimpleName() + ": Couldn't restore global variables.");
return false; return false;
} }
finally
{
compareAndSetChanges(true, false);
}
LOGGER.info(getClass().getSimpleName() + ": Loaded " + getSet().size() + " variables."); LOGGER.info(getClass().getSimpleName() + ": Loaded " + getSet().size() + " variables.");
return true; return true;
} }
@@ -81,12 +78,6 @@ public class GlobalVariablesManager extends AbstractVariables
@Override @Override
public boolean storeMe() public boolean storeMe()
{ {
// No changes, nothing to store.
if (!hasChanges())
{
return false;
}
try (Connection con = DatabaseFactory.getConnection(); try (Connection con = DatabaseFactory.getConnection();
Statement del = con.createStatement(); Statement del = con.createStatement();
PreparedStatement st = con.prepareStatement(INSERT_QUERY)) PreparedStatement st = con.prepareStatement(INSERT_QUERY))
@@ -108,10 +99,7 @@ public class GlobalVariablesManager extends AbstractVariables
LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Couldn't save global variables to database.", e); LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Couldn't save global variables to database.", e);
return false; return false;
} }
finally
{
compareAndSetChanges(true, false);
}
LOGGER.info(getClass().getSimpleName() + ": Stored " + getSet().size() + " variables."); LOGGER.info(getClass().getSimpleName() + ": Stored " + getSet().size() + " variables.");
return true; return true;
} }

View File

@@ -19,10 +19,9 @@ package org.l2jmobius.gameserver.model;
import java.time.Duration; import java.time.Duration;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Supplier; import java.util.function.Supplier;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
@@ -49,7 +48,7 @@ public class StatSet implements IParserAdvUtils
public StatSet() public StatSet()
{ {
this(ConcurrentHashMap::new); this(HashMap::new);
} }
public StatSet(Supplier<Map<String, Object>> mapFactory) public StatSet(Supplier<Map<String, Object>> mapFactory)
@@ -98,7 +97,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public boolean getBoolean(String key) public boolean getBoolean(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -127,7 +125,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public boolean getBoolean(String key, boolean defaultValue) public boolean getBoolean(String key, boolean defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -150,7 +147,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public byte getByte(String key) public byte getByte(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -173,7 +169,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public byte getByte(String key, byte defaultValue) public byte getByte(String key, byte defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -209,8 +204,6 @@ public class StatSet implements IParserAdvUtils
public byte[] getByteArray(String key, String splitOn) public byte[] getByteArray(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -242,8 +235,6 @@ public class StatSet implements IParserAdvUtils
public List<Byte> getByteList(String key, String splitOn) public List<Byte> getByteList(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final List<Byte> result = new ArrayList<>(); final List<Byte> result = new ArrayList<>();
for (Byte i : getByteArray(key, splitOn)) for (Byte i : getByteArray(key, splitOn))
{ {
@@ -255,7 +246,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public short getShort(String key) public short getShort(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -278,7 +268,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public short getShort(String key, short defaultValue) public short getShort(String key, short defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -315,7 +304,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public int getInt(String key) public int getInt(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -340,7 +328,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public int getInt(String key, int defaultValue) public int getInt(String key, int defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -376,8 +363,6 @@ public class StatSet implements IParserAdvUtils
public int[] getIntArray(String key, String splitOn) public int[] getIntArray(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -409,8 +394,6 @@ public class StatSet implements IParserAdvUtils
public List<Integer> getIntegerList(String key, String splitOn) public List<Integer> getIntegerList(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final List<Integer> result = new ArrayList<>(); final List<Integer> result = new ArrayList<>();
for (int i : getIntArray(key, splitOn)) for (int i : getIntArray(key, splitOn))
{ {
@@ -422,7 +405,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public long getLong(String key) public long getLong(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -445,7 +427,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public long getLong(String key, long defaultValue) public long getLong(String key, long defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -482,7 +463,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public float getFloat(String key) public float getFloat(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -505,7 +485,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public float getFloat(String key, float defaultValue) public float getFloat(String key, float defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -542,7 +521,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public double getDouble(String key) public double getDouble(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -565,7 +543,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public double getDouble(String key, double defaultValue) public double getDouble(String key, double defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -602,7 +579,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public String getString(String key) public String getString(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -614,7 +590,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public String getString(String key, String defaultValue) public String getString(String key, String defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -626,7 +601,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public Duration getDuration(String key) public Duration getDuration(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -638,7 +612,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public Duration getDuration(String key, Duration defaultValue) public Duration getDuration(String key, Duration defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -651,8 +624,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass) public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(enumClass);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -676,8 +647,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass, T defaultValue) public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass, T defaultValue)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(enumClass);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -700,8 +669,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <A> A getObject(String name, Class<A> type) public <A> A getObject(String name, Class<A> type)
{ {
Objects.requireNonNull(name);
Objects.requireNonNull(type);
final Object obj = _set.get(name); final Object obj = _set.get(name);
if ((obj == null) || !type.isAssignableFrom(obj.getClass())) if ((obj == null) || !type.isAssignableFrom(obj.getClass()))
{ {
@@ -714,8 +681,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <A> A getObject(String name, Class<A> type, A defaultValue) public <A> A getObject(String name, Class<A> type, A defaultValue)
{ {
Objects.requireNonNull(name);
Objects.requireNonNull(type);
final Object obj = _set.get(name); final Object obj = _set.get(name);
if ((obj == null) || !type.isAssignableFrom(obj.getClass())) if ((obj == null) || !type.isAssignableFrom(obj.getClass()))
{ {
@@ -727,7 +692,6 @@ public class StatSet implements IParserAdvUtils
public SkillHolder getSkillHolder(String key) public SkillHolder getSkillHolder(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof SkillHolder)) if (!(obj instanceof SkillHolder))
{ {
@@ -739,7 +703,6 @@ public class StatSet implements IParserAdvUtils
public Location getLocation(String key) public Location getLocation(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof Location)) if (!(obj instanceof Location))
{ {
@@ -751,7 +714,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public List<MinionHolder> getMinionList(String key) public List<MinionHolder> getMinionList(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof List<?>)) if (!(obj instanceof List<?>))
{ {
@@ -764,8 +726,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T> List<T> getList(String key, Class<T> clazz) public <T> List<T> getList(String key, Class<T> clazz)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(clazz);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof List<?>)) if (!(obj instanceof List<?>))
{ {
@@ -871,83 +831,61 @@ public class StatSet implements IParserAdvUtils
return (Map<K, V>) obj; return (Map<K, V>) obj;
} }
public StatSet set(String name, Object value) public void set(String name, Object value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(name, value); _set.put(name, value);
return this;
} }
public StatSet set(String key, boolean value) public void set(String key, byte value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, byte value) public void set(String key, short value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, short value) public void set(String key, int value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, int value) public void set(String key, long value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, long value) public void set(String key, float value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, float value) public void set(String key, double value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, double value) public void set(String key, String value)
{
_set.put(key, value);
return this;
}
public StatSet set(String key, String value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, Enum<?> value) public void set(String key, Enum<?> value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(key, value); _set.put(key, value);
return this;
}
public static StatSet valueOf(String key, Object value)
{
final StatSet set = new StatSet();
set.set(key, value);
return set;
} }
public void remove(String key) public void remove(String key)

View File

@@ -244,7 +244,9 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
player.teleToLocation(_instance.getEnterLocations().get(index++), 0, _instance); player.teleToLocation(_instance.getEnterLocations().get(index++), 0, _instance);
} }
getTimers().addTimer("match_start_countdown", StatSet.valueOf("time", 60), 100, null, null); final StatSet params = new StatSet();
params.set("time", 60);
getTimers().addTimer("match_start_countdown", params, 100, null, null);
getTimers().addTimer("teleport_message1", 10000, null, null); getTimers().addTimer("teleport_message1", 10000, null, null);
getTimers().addTimer("teleport_message2", 14000, null, null); getTimers().addTimer("teleport_message2", 14000, null, null);
@@ -400,7 +402,9 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
} }
} }
getTimers().cancelTimer("update", null, null); getTimers().cancelTimer("update", null, null);
getTimers().addTimer("match_end_countdown", StatSet.valueOf("time", 30), 30 * 1000, null, null); final StatSet params = new StatSet();
params.set("time", 30);
getTimers().addTimer("match_end_countdown", params, 30 * 1000, null, null);
EventDispatcher.getInstance().notifyEvent(new OnCeremonyOfChaosMatchResult(winners, members)); EventDispatcher.getInstance().notifyEvent(new OnCeremonyOfChaosMatchResult(winners, members));
} }
@@ -536,19 +540,23 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
// Reschedule // Reschedule
if (time == 60) if (time == 60)
{ {
getTimers().addTimer(event, params.set("time", 30), 30 * 1000, null, null); params.set("time", 30);
getTimers().addTimer(event, params, 30 * 1000, null, null);
} }
else if ((time == 30) || (time == 20)) else if ((time == 30) || (time == 20))
{ {
getTimers().addTimer(event, params.set("time", time - 10), 10 * 1000, null, null); params.set("time", time - 10);
getTimers().addTimer(event, params, 10 * 1000, null, null);
} }
else if (time == 10) else if (time == 10)
{ {
getTimers().addTimer(event, params.set("time", 5), 5 * 1000, null, null); params.set("time", 5);
getTimers().addTimer(event, params, 5 * 1000, null, null);
} }
else if ((time > 1) && (time <= 5)) else if ((time > 1) && (time <= 5))
{ {
getTimers().addTimer(event, params.set("time", time - 1), 1000, null, null); params.set("time", time - 1);
getTimers().addTimer(event, params, 1000, null, null);
} }
break; break;
} }
@@ -562,11 +570,13 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
// Reschedule // Reschedule
if ((time == 30) || (time == 20)) if ((time == 30) || (time == 20))
{ {
getTimers().addTimer(event, params.set("time", time - 10), 10 * 1000, null, null); params.set("time", time - 10);
getTimers().addTimer(event, params, 10 * 1000, null, null);
} }
else if ((time > 0) && (time <= 10)) else if ((time > 0) && (time <= 10))
{ {
getTimers().addTimer(event, params.set("time", time - 1), 1000, null, null); params.set("time", time - 1);
getTimers().addTimer(event, params, 1000, null, null);
} }
else if (time == 0) else if (time == 0)
{ {

View File

@@ -16,7 +16,6 @@
*/ */
package org.l2jmobius.gameserver.model.variables; package org.l2jmobius.gameserver.model.variables;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
@@ -31,55 +30,43 @@ public abstract class AbstractVariables extends StatSet implements IRestorable,
{ {
private final AtomicBoolean _hasChanges = new AtomicBoolean(false); private final AtomicBoolean _hasChanges = new AtomicBoolean(false);
public AbstractVariables()
{
super(new ConcurrentHashMap<>());
}
/** /**
* Overriding following methods to prevent from doing useless database operations if there is no changes since player's login. * Overriding following methods to prevent from doing useless database operations if there is no changes since player's login.
*/ */
@Override @Override
public StatSet set(String name, boolean value) public void set(String name, double value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, double value) public void set(String name, Enum<?> value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, Enum<?> value) public void set(String name, int value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, int value) public void set(String name, long value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, long value) public void set(String name, String value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
}
@Override
public StatSet set(String name, String value)
{
_hasChanges.compareAndSet(false, true);
return super.set(name, value);
} }
/** /**
@@ -87,15 +74,14 @@ public abstract class AbstractVariables extends StatSet implements IRestorable,
* @param name * @param name
* @param value * @param value
* @param markAsChanged * @param markAsChanged
* @return
*/ */
public StatSet set(String name, String value, boolean markAsChanged) public void set(String name, String value, boolean markAsChanged)
{ {
if (markAsChanged) if (markAsChanged)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
} }
return super.set(name, value); super.set(name, value);
} }
/** /**

View File

@@ -180,8 +180,9 @@ public class CeremonyOfChaosManager extends AbstractEventManager<CeremonyOfChaos
} }
} }
} }
final StatSet params = new StatSet();
getTimers().addTimer("count_down", StatSet.valueOf("time", 60), 60 * 1000, null, null); params.set("time", 60);
getTimers().addTimer("count_down", params, 60 * 1000, null, null);
} }
@ScheduleTarget @ScheduleTarget
@@ -268,15 +269,18 @@ public class CeremonyOfChaosManager extends AbstractEventManager<CeremonyOfChaos
// Reschedule // Reschedule
if (time == 60) if (time == 60)
{ {
getTimers().addTimer(event, params.set("time", 10), 50 * 1000, null, null); params.set("time", 10);
getTimers().addTimer(event, params, 50 * 1000, null, null);
} }
else if (time == 10) else if (time == 10)
{ {
getTimers().addTimer(event, params.set("time", 5), 5 * 1000, null, null); params.set("time", 5);
getTimers().addTimer(event, params, 5 * 1000, null, null);
} }
else if ((time > 1) && (time <= 5)) else if ((time > 1) && (time <= 5))
{ {
getTimers().addTimer(event, params.set("time", time - 1), 1000, null, null); params.set("time", time - 1);
getTimers().addTimer(event, params, 1000, null, null);
} }
break; break;
} }

View File

@@ -70,10 +70,7 @@ public class GlobalVariablesManager extends AbstractVariables
LOGGER.warning(getClass().getSimpleName() + ": Couldn't restore global variables."); LOGGER.warning(getClass().getSimpleName() + ": Couldn't restore global variables.");
return false; return false;
} }
finally
{
compareAndSetChanges(true, false);
}
LOGGER.info(getClass().getSimpleName() + ": Loaded " + getSet().size() + " variables."); LOGGER.info(getClass().getSimpleName() + ": Loaded " + getSet().size() + " variables.");
return true; return true;
} }
@@ -81,12 +78,6 @@ public class GlobalVariablesManager extends AbstractVariables
@Override @Override
public boolean storeMe() public boolean storeMe()
{ {
// No changes, nothing to store.
if (!hasChanges())
{
return false;
}
try (Connection con = DatabaseFactory.getConnection(); try (Connection con = DatabaseFactory.getConnection();
Statement del = con.createStatement(); Statement del = con.createStatement();
PreparedStatement st = con.prepareStatement(INSERT_QUERY)) PreparedStatement st = con.prepareStatement(INSERT_QUERY))
@@ -108,10 +99,7 @@ public class GlobalVariablesManager extends AbstractVariables
LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Couldn't save global variables to database.", e); LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Couldn't save global variables to database.", e);
return false; return false;
} }
finally
{
compareAndSetChanges(true, false);
}
LOGGER.info(getClass().getSimpleName() + ": Stored " + getSet().size() + " variables."); LOGGER.info(getClass().getSimpleName() + ": Stored " + getSet().size() + " variables.");
return true; return true;
} }

View File

@@ -19,10 +19,9 @@ package org.l2jmobius.gameserver.model;
import java.time.Duration; import java.time.Duration;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Supplier; import java.util.function.Supplier;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
@@ -49,7 +48,7 @@ public class StatSet implements IParserAdvUtils
public StatSet() public StatSet()
{ {
this(ConcurrentHashMap::new); this(HashMap::new);
} }
public StatSet(Supplier<Map<String, Object>> mapFactory) public StatSet(Supplier<Map<String, Object>> mapFactory)
@@ -98,7 +97,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public boolean getBoolean(String key) public boolean getBoolean(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -127,7 +125,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public boolean getBoolean(String key, boolean defaultValue) public boolean getBoolean(String key, boolean defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -150,7 +147,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public byte getByte(String key) public byte getByte(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -173,7 +169,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public byte getByte(String key, byte defaultValue) public byte getByte(String key, byte defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -209,8 +204,6 @@ public class StatSet implements IParserAdvUtils
public byte[] getByteArray(String key, String splitOn) public byte[] getByteArray(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -242,8 +235,6 @@ public class StatSet implements IParserAdvUtils
public List<Byte> getByteList(String key, String splitOn) public List<Byte> getByteList(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final List<Byte> result = new ArrayList<>(); final List<Byte> result = new ArrayList<>();
for (Byte i : getByteArray(key, splitOn)) for (Byte i : getByteArray(key, splitOn))
{ {
@@ -255,7 +246,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public short getShort(String key) public short getShort(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -278,7 +268,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public short getShort(String key, short defaultValue) public short getShort(String key, short defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -315,7 +304,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public int getInt(String key) public int getInt(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -340,7 +328,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public int getInt(String key, int defaultValue) public int getInt(String key, int defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -376,8 +363,6 @@ public class StatSet implements IParserAdvUtils
public int[] getIntArray(String key, String splitOn) public int[] getIntArray(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -409,8 +394,6 @@ public class StatSet implements IParserAdvUtils
public List<Integer> getIntegerList(String key, String splitOn) public List<Integer> getIntegerList(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final List<Integer> result = new ArrayList<>(); final List<Integer> result = new ArrayList<>();
for (int i : getIntArray(key, splitOn)) for (int i : getIntArray(key, splitOn))
{ {
@@ -422,7 +405,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public long getLong(String key) public long getLong(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -445,7 +427,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public long getLong(String key, long defaultValue) public long getLong(String key, long defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -482,7 +463,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public float getFloat(String key) public float getFloat(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -505,7 +485,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public float getFloat(String key, float defaultValue) public float getFloat(String key, float defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -542,7 +521,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public double getDouble(String key) public double getDouble(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -565,7 +543,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public double getDouble(String key, double defaultValue) public double getDouble(String key, double defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -602,7 +579,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public String getString(String key) public String getString(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -614,7 +590,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public String getString(String key, String defaultValue) public String getString(String key, String defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -626,7 +601,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public Duration getDuration(String key) public Duration getDuration(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -638,7 +612,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public Duration getDuration(String key, Duration defaultValue) public Duration getDuration(String key, Duration defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -651,8 +624,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass) public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(enumClass);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -676,8 +647,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass, T defaultValue) public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass, T defaultValue)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(enumClass);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -700,8 +669,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <A> A getObject(String name, Class<A> type) public <A> A getObject(String name, Class<A> type)
{ {
Objects.requireNonNull(name);
Objects.requireNonNull(type);
final Object obj = _set.get(name); final Object obj = _set.get(name);
if ((obj == null) || !type.isAssignableFrom(obj.getClass())) if ((obj == null) || !type.isAssignableFrom(obj.getClass()))
{ {
@@ -714,8 +681,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <A> A getObject(String name, Class<A> type, A defaultValue) public <A> A getObject(String name, Class<A> type, A defaultValue)
{ {
Objects.requireNonNull(name);
Objects.requireNonNull(type);
final Object obj = _set.get(name); final Object obj = _set.get(name);
if ((obj == null) || !type.isAssignableFrom(obj.getClass())) if ((obj == null) || !type.isAssignableFrom(obj.getClass()))
{ {
@@ -727,7 +692,6 @@ public class StatSet implements IParserAdvUtils
public SkillHolder getSkillHolder(String key) public SkillHolder getSkillHolder(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof SkillHolder)) if (!(obj instanceof SkillHolder))
{ {
@@ -739,7 +703,6 @@ public class StatSet implements IParserAdvUtils
public Location getLocation(String key) public Location getLocation(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof Location)) if (!(obj instanceof Location))
{ {
@@ -751,7 +714,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public List<MinionHolder> getMinionList(String key) public List<MinionHolder> getMinionList(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof List<?>)) if (!(obj instanceof List<?>))
{ {
@@ -764,8 +726,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T> List<T> getList(String key, Class<T> clazz) public <T> List<T> getList(String key, Class<T> clazz)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(clazz);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof List<?>)) if (!(obj instanceof List<?>))
{ {
@@ -871,83 +831,61 @@ public class StatSet implements IParserAdvUtils
return (Map<K, V>) obj; return (Map<K, V>) obj;
} }
public StatSet set(String name, Object value) public void set(String name, Object value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(name, value); _set.put(name, value);
return this;
} }
public StatSet set(String key, boolean value) public void set(String key, byte value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, byte value) public void set(String key, short value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, short value) public void set(String key, int value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, int value) public void set(String key, long value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, long value) public void set(String key, float value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, float value) public void set(String key, double value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, double value) public void set(String key, String value)
{
_set.put(key, value);
return this;
}
public StatSet set(String key, String value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, Enum<?> value) public void set(String key, Enum<?> value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(key, value); _set.put(key, value);
return this;
}
public static StatSet valueOf(String key, Object value)
{
final StatSet set = new StatSet();
set.set(key, value);
return set;
} }
public void remove(String key) public void remove(String key)

View File

@@ -244,7 +244,9 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
player.teleToLocation(_instance.getEnterLocations().get(index++), 0, _instance); player.teleToLocation(_instance.getEnterLocations().get(index++), 0, _instance);
} }
getTimers().addTimer("match_start_countdown", StatSet.valueOf("time", 60), 100, null, null); final StatSet params = new StatSet();
params.set("time", 60);
getTimers().addTimer("match_start_countdown", params, 100, null, null);
getTimers().addTimer("teleport_message1", 10000, null, null); getTimers().addTimer("teleport_message1", 10000, null, null);
getTimers().addTimer("teleport_message2", 14000, null, null); getTimers().addTimer("teleport_message2", 14000, null, null);
@@ -400,7 +402,9 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
} }
} }
getTimers().cancelTimer("update", null, null); getTimers().cancelTimer("update", null, null);
getTimers().addTimer("match_end_countdown", StatSet.valueOf("time", 30), 30 * 1000, null, null); final StatSet params = new StatSet();
params.set("time", 30);
getTimers().addTimer("match_end_countdown", params, 30 * 1000, null, null);
EventDispatcher.getInstance().notifyEvent(new OnCeremonyOfChaosMatchResult(winners, members)); EventDispatcher.getInstance().notifyEvent(new OnCeremonyOfChaosMatchResult(winners, members));
} }
@@ -536,19 +540,23 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
// Reschedule // Reschedule
if (time == 60) if (time == 60)
{ {
getTimers().addTimer(event, params.set("time", 30), 30 * 1000, null, null); params.set("time", 30);
getTimers().addTimer(event, params, 30 * 1000, null, null);
} }
else if ((time == 30) || (time == 20)) else if ((time == 30) || (time == 20))
{ {
getTimers().addTimer(event, params.set("time", time - 10), 10 * 1000, null, null); params.set("time", time - 10);
getTimers().addTimer(event, params, 10 * 1000, null, null);
} }
else if (time == 10) else if (time == 10)
{ {
getTimers().addTimer(event, params.set("time", 5), 5 * 1000, null, null); params.set("time", 5);
getTimers().addTimer(event, params, 5 * 1000, null, null);
} }
else if ((time > 1) && (time <= 5)) else if ((time > 1) && (time <= 5))
{ {
getTimers().addTimer(event, params.set("time", time - 1), 1000, null, null); params.set("time", time - 1);
getTimers().addTimer(event, params, 1000, null, null);
} }
break; break;
} }
@@ -562,11 +570,13 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
// Reschedule // Reschedule
if ((time == 30) || (time == 20)) if ((time == 30) || (time == 20))
{ {
getTimers().addTimer(event, params.set("time", time - 10), 10 * 1000, null, null); params.set("time", time - 10);
getTimers().addTimer(event, params, 10 * 1000, null, null);
} }
else if ((time > 0) && (time <= 10)) else if ((time > 0) && (time <= 10))
{ {
getTimers().addTimer(event, params.set("time", time - 1), 1000, null, null); params.set("time", time - 1);
getTimers().addTimer(event, params, 1000, null, null);
} }
else if (time == 0) else if (time == 0)
{ {

View File

@@ -16,7 +16,6 @@
*/ */
package org.l2jmobius.gameserver.model.variables; package org.l2jmobius.gameserver.model.variables;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
@@ -31,55 +30,43 @@ public abstract class AbstractVariables extends StatSet implements IRestorable,
{ {
private final AtomicBoolean _hasChanges = new AtomicBoolean(false); private final AtomicBoolean _hasChanges = new AtomicBoolean(false);
public AbstractVariables()
{
super(new ConcurrentHashMap<>());
}
/** /**
* Overriding following methods to prevent from doing useless database operations if there is no changes since player's login. * Overriding following methods to prevent from doing useless database operations if there is no changes since player's login.
*/ */
@Override @Override
public StatSet set(String name, boolean value) public void set(String name, double value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, double value) public void set(String name, Enum<?> value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, Enum<?> value) public void set(String name, int value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, int value) public void set(String name, long value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, long value) public void set(String name, String value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
}
@Override
public StatSet set(String name, String value)
{
_hasChanges.compareAndSet(false, true);
return super.set(name, value);
} }
/** /**
@@ -87,15 +74,14 @@ public abstract class AbstractVariables extends StatSet implements IRestorable,
* @param name * @param name
* @param value * @param value
* @param markAsChanged * @param markAsChanged
* @return
*/ */
public StatSet set(String name, String value, boolean markAsChanged) public void set(String name, String value, boolean markAsChanged)
{ {
if (markAsChanged) if (markAsChanged)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
} }
return super.set(name, value); super.set(name, value);
} }
/** /**

View File

@@ -180,8 +180,9 @@ public class CeremonyOfChaosManager extends AbstractEventManager<CeremonyOfChaos
} }
} }
} }
final StatSet params = new StatSet();
getTimers().addTimer("count_down", StatSet.valueOf("time", 60), 60 * 1000, null, null); params.set("time", 60);
getTimers().addTimer("count_down", params, 60 * 1000, null, null);
} }
@ScheduleTarget @ScheduleTarget
@@ -268,15 +269,18 @@ public class CeremonyOfChaosManager extends AbstractEventManager<CeremonyOfChaos
// Reschedule // Reschedule
if (time == 60) if (time == 60)
{ {
getTimers().addTimer(event, params.set("time", 10), 50 * 1000, null, null); params.set("time", 10);
getTimers().addTimer(event, params, 50 * 1000, null, null);
} }
else if (time == 10) else if (time == 10)
{ {
getTimers().addTimer(event, params.set("time", 5), 5 * 1000, null, null); params.set("time", 5);
getTimers().addTimer(event, params, 5 * 1000, null, null);
} }
else if ((time > 1) && (time <= 5)) else if ((time > 1) && (time <= 5))
{ {
getTimers().addTimer(event, params.set("time", time - 1), 1000, null, null); params.set("time", time - 1);
getTimers().addTimer(event, params, 1000, null, null);
} }
break; break;
} }

View File

@@ -70,10 +70,7 @@ public class GlobalVariablesManager extends AbstractVariables
LOGGER.warning(getClass().getSimpleName() + ": Couldn't restore global variables."); LOGGER.warning(getClass().getSimpleName() + ": Couldn't restore global variables.");
return false; return false;
} }
finally
{
compareAndSetChanges(true, false);
}
LOGGER.info(getClass().getSimpleName() + ": Loaded " + getSet().size() + " variables."); LOGGER.info(getClass().getSimpleName() + ": Loaded " + getSet().size() + " variables.");
return true; return true;
} }
@@ -81,12 +78,6 @@ public class GlobalVariablesManager extends AbstractVariables
@Override @Override
public boolean storeMe() public boolean storeMe()
{ {
// No changes, nothing to store.
if (!hasChanges())
{
return false;
}
try (Connection con = DatabaseFactory.getConnection(); try (Connection con = DatabaseFactory.getConnection();
Statement del = con.createStatement(); Statement del = con.createStatement();
PreparedStatement st = con.prepareStatement(INSERT_QUERY)) PreparedStatement st = con.prepareStatement(INSERT_QUERY))
@@ -108,10 +99,7 @@ public class GlobalVariablesManager extends AbstractVariables
LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Couldn't save global variables to database.", e); LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Couldn't save global variables to database.", e);
return false; return false;
} }
finally
{
compareAndSetChanges(true, false);
}
LOGGER.info(getClass().getSimpleName() + ": Stored " + getSet().size() + " variables."); LOGGER.info(getClass().getSimpleName() + ": Stored " + getSet().size() + " variables.");
return true; return true;
} }

View File

@@ -19,10 +19,9 @@ package org.l2jmobius.gameserver.model;
import java.time.Duration; import java.time.Duration;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Supplier; import java.util.function.Supplier;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
@@ -49,7 +48,7 @@ public class StatSet implements IParserAdvUtils
public StatSet() public StatSet()
{ {
this(ConcurrentHashMap::new); this(HashMap::new);
} }
public StatSet(Supplier<Map<String, Object>> mapFactory) public StatSet(Supplier<Map<String, Object>> mapFactory)
@@ -98,7 +97,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public boolean getBoolean(String key) public boolean getBoolean(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -127,7 +125,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public boolean getBoolean(String key, boolean defaultValue) public boolean getBoolean(String key, boolean defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -150,7 +147,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public byte getByte(String key) public byte getByte(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -173,7 +169,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public byte getByte(String key, byte defaultValue) public byte getByte(String key, byte defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -209,8 +204,6 @@ public class StatSet implements IParserAdvUtils
public byte[] getByteArray(String key, String splitOn) public byte[] getByteArray(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -242,8 +235,6 @@ public class StatSet implements IParserAdvUtils
public List<Byte> getByteList(String key, String splitOn) public List<Byte> getByteList(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final List<Byte> result = new ArrayList<>(); final List<Byte> result = new ArrayList<>();
for (Byte i : getByteArray(key, splitOn)) for (Byte i : getByteArray(key, splitOn))
{ {
@@ -255,7 +246,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public short getShort(String key) public short getShort(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -278,7 +268,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public short getShort(String key, short defaultValue) public short getShort(String key, short defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -315,7 +304,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public int getInt(String key) public int getInt(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -340,7 +328,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public int getInt(String key, int defaultValue) public int getInt(String key, int defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -376,8 +363,6 @@ public class StatSet implements IParserAdvUtils
public int[] getIntArray(String key, String splitOn) public int[] getIntArray(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -409,8 +394,6 @@ public class StatSet implements IParserAdvUtils
public List<Integer> getIntegerList(String key, String splitOn) public List<Integer> getIntegerList(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final List<Integer> result = new ArrayList<>(); final List<Integer> result = new ArrayList<>();
for (int i : getIntArray(key, splitOn)) for (int i : getIntArray(key, splitOn))
{ {
@@ -422,7 +405,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public long getLong(String key) public long getLong(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -445,7 +427,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public long getLong(String key, long defaultValue) public long getLong(String key, long defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -482,7 +463,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public float getFloat(String key) public float getFloat(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -505,7 +485,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public float getFloat(String key, float defaultValue) public float getFloat(String key, float defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -542,7 +521,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public double getDouble(String key) public double getDouble(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -565,7 +543,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public double getDouble(String key, double defaultValue) public double getDouble(String key, double defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -602,7 +579,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public String getString(String key) public String getString(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -614,7 +590,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public String getString(String key, String defaultValue) public String getString(String key, String defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -626,7 +601,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public Duration getDuration(String key) public Duration getDuration(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -638,7 +612,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public Duration getDuration(String key, Duration defaultValue) public Duration getDuration(String key, Duration defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -651,8 +624,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass) public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(enumClass);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -676,8 +647,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass, T defaultValue) public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass, T defaultValue)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(enumClass);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -700,8 +669,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <A> A getObject(String name, Class<A> type) public <A> A getObject(String name, Class<A> type)
{ {
Objects.requireNonNull(name);
Objects.requireNonNull(type);
final Object obj = _set.get(name); final Object obj = _set.get(name);
if ((obj == null) || !type.isAssignableFrom(obj.getClass())) if ((obj == null) || !type.isAssignableFrom(obj.getClass()))
{ {
@@ -714,8 +681,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <A> A getObject(String name, Class<A> type, A defaultValue) public <A> A getObject(String name, Class<A> type, A defaultValue)
{ {
Objects.requireNonNull(name);
Objects.requireNonNull(type);
final Object obj = _set.get(name); final Object obj = _set.get(name);
if ((obj == null) || !type.isAssignableFrom(obj.getClass())) if ((obj == null) || !type.isAssignableFrom(obj.getClass()))
{ {
@@ -727,7 +692,6 @@ public class StatSet implements IParserAdvUtils
public SkillHolder getSkillHolder(String key) public SkillHolder getSkillHolder(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof SkillHolder)) if (!(obj instanceof SkillHolder))
{ {
@@ -739,7 +703,6 @@ public class StatSet implements IParserAdvUtils
public Location getLocation(String key) public Location getLocation(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof Location)) if (!(obj instanceof Location))
{ {
@@ -751,7 +714,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public List<MinionHolder> getMinionList(String key) public List<MinionHolder> getMinionList(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof List<?>)) if (!(obj instanceof List<?>))
{ {
@@ -764,8 +726,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T> List<T> getList(String key, Class<T> clazz) public <T> List<T> getList(String key, Class<T> clazz)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(clazz);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof List<?>)) if (!(obj instanceof List<?>))
{ {
@@ -871,83 +831,61 @@ public class StatSet implements IParserAdvUtils
return (Map<K, V>) obj; return (Map<K, V>) obj;
} }
public StatSet set(String name, Object value) public void set(String name, Object value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(name, value); _set.put(name, value);
return this;
} }
public StatSet set(String key, boolean value) public void set(String key, byte value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, byte value) public void set(String key, short value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, short value) public void set(String key, int value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, int value) public void set(String key, long value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, long value) public void set(String key, float value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, float value) public void set(String key, double value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, double value) public void set(String key, String value)
{
_set.put(key, value);
return this;
}
public StatSet set(String key, String value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, Enum<?> value) public void set(String key, Enum<?> value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(key, value); _set.put(key, value);
return this;
}
public static StatSet valueOf(String key, Object value)
{
final StatSet set = new StatSet();
set.set(key, value);
return set;
} }
public void remove(String key) public void remove(String key)

View File

@@ -244,7 +244,9 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
player.teleToLocation(_instance.getEnterLocations().get(index++), 0, _instance); player.teleToLocation(_instance.getEnterLocations().get(index++), 0, _instance);
} }
getTimers().addTimer("match_start_countdown", StatSet.valueOf("time", 60), 100, null, null); final StatSet params = new StatSet();
params.set("time", 60);
getTimers().addTimer("match_start_countdown", params, 100, null, null);
getTimers().addTimer("teleport_message1", 10000, null, null); getTimers().addTimer("teleport_message1", 10000, null, null);
getTimers().addTimer("teleport_message2", 14000, null, null); getTimers().addTimer("teleport_message2", 14000, null, null);
@@ -400,7 +402,9 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
} }
} }
getTimers().cancelTimer("update", null, null); getTimers().cancelTimer("update", null, null);
getTimers().addTimer("match_end_countdown", StatSet.valueOf("time", 30), 30 * 1000, null, null); final StatSet params = new StatSet();
params.set("time", 30);
getTimers().addTimer("match_end_countdown", params, 30 * 1000, null, null);
EventDispatcher.getInstance().notifyEvent(new OnCeremonyOfChaosMatchResult(winners, members)); EventDispatcher.getInstance().notifyEvent(new OnCeremonyOfChaosMatchResult(winners, members));
} }
@@ -536,19 +540,23 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
// Reschedule // Reschedule
if (time == 60) if (time == 60)
{ {
getTimers().addTimer(event, params.set("time", 30), 30 * 1000, null, null); params.set("time", 30);
getTimers().addTimer(event, params, 30 * 1000, null, null);
} }
else if ((time == 30) || (time == 20)) else if ((time == 30) || (time == 20))
{ {
getTimers().addTimer(event, params.set("time", time - 10), 10 * 1000, null, null); params.set("time", time - 10);
getTimers().addTimer(event, params, 10 * 1000, null, null);
} }
else if (time == 10) else if (time == 10)
{ {
getTimers().addTimer(event, params.set("time", 5), 5 * 1000, null, null); params.set("time", 5);
getTimers().addTimer(event, params, 5 * 1000, null, null);
} }
else if ((time > 1) && (time <= 5)) else if ((time > 1) && (time <= 5))
{ {
getTimers().addTimer(event, params.set("time", time - 1), 1000, null, null); params.set("time", time - 1);
getTimers().addTimer(event, params, 1000, null, null);
} }
break; break;
} }
@@ -562,11 +570,13 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
// Reschedule // Reschedule
if ((time == 30) || (time == 20)) if ((time == 30) || (time == 20))
{ {
getTimers().addTimer(event, params.set("time", time - 10), 10 * 1000, null, null); params.set("time", time - 10);
getTimers().addTimer(event, params, 10 * 1000, null, null);
} }
else if ((time > 0) && (time <= 10)) else if ((time > 0) && (time <= 10))
{ {
getTimers().addTimer(event, params.set("time", time - 1), 1000, null, null); params.set("time", time - 1);
getTimers().addTimer(event, params, 1000, null, null);
} }
else if (time == 0) else if (time == 0)
{ {

View File

@@ -16,7 +16,6 @@
*/ */
package org.l2jmobius.gameserver.model.variables; package org.l2jmobius.gameserver.model.variables;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
@@ -31,55 +30,43 @@ public abstract class AbstractVariables extends StatSet implements IRestorable,
{ {
private final AtomicBoolean _hasChanges = new AtomicBoolean(false); private final AtomicBoolean _hasChanges = new AtomicBoolean(false);
public AbstractVariables()
{
super(new ConcurrentHashMap<>());
}
/** /**
* Overriding following methods to prevent from doing useless database operations if there is no changes since player's login. * Overriding following methods to prevent from doing useless database operations if there is no changes since player's login.
*/ */
@Override @Override
public StatSet set(String name, boolean value) public void set(String name, double value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, double value) public void set(String name, Enum<?> value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, Enum<?> value) public void set(String name, int value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, int value) public void set(String name, long value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, long value) public void set(String name, String value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
}
@Override
public StatSet set(String name, String value)
{
_hasChanges.compareAndSet(false, true);
return super.set(name, value);
} }
/** /**
@@ -87,15 +74,14 @@ public abstract class AbstractVariables extends StatSet implements IRestorable,
* @param name * @param name
* @param value * @param value
* @param markAsChanged * @param markAsChanged
* @return
*/ */
public StatSet set(String name, String value, boolean markAsChanged) public void set(String name, String value, boolean markAsChanged)
{ {
if (markAsChanged) if (markAsChanged)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
} }
return super.set(name, value); super.set(name, value);
} }
/** /**

View File

@@ -180,8 +180,9 @@ public class CeremonyOfChaosManager extends AbstractEventManager<CeremonyOfChaos
} }
} }
} }
final StatSet params = new StatSet();
getTimers().addTimer("count_down", StatSet.valueOf("time", 60), 60 * 1000, null, null); params.set("time", 60);
getTimers().addTimer("count_down", params, 60 * 1000, null, null);
} }
@ScheduleTarget @ScheduleTarget
@@ -268,15 +269,18 @@ public class CeremonyOfChaosManager extends AbstractEventManager<CeremonyOfChaos
// Reschedule // Reschedule
if (time == 60) if (time == 60)
{ {
getTimers().addTimer(event, params.set("time", 10), 50 * 1000, null, null); params.set("time", 10);
getTimers().addTimer(event, params, 50 * 1000, null, null);
} }
else if (time == 10) else if (time == 10)
{ {
getTimers().addTimer(event, params.set("time", 5), 5 * 1000, null, null); params.set("time", 5);
getTimers().addTimer(event, params, 5 * 1000, null, null);
} }
else if ((time > 1) && (time <= 5)) else if ((time > 1) && (time <= 5))
{ {
getTimers().addTimer(event, params.set("time", time - 1), 1000, null, null); params.set("time", time - 1);
getTimers().addTimer(event, params, 1000, null, null);
} }
break; break;
} }

View File

@@ -70,10 +70,7 @@ public class GlobalVariablesManager extends AbstractVariables
LOGGER.warning(getClass().getSimpleName() + ": Couldn't restore global variables."); LOGGER.warning(getClass().getSimpleName() + ": Couldn't restore global variables.");
return false; return false;
} }
finally
{
compareAndSetChanges(true, false);
}
LOGGER.info(getClass().getSimpleName() + ": Loaded " + getSet().size() + " variables."); LOGGER.info(getClass().getSimpleName() + ": Loaded " + getSet().size() + " variables.");
return true; return true;
} }
@@ -81,12 +78,6 @@ public class GlobalVariablesManager extends AbstractVariables
@Override @Override
public boolean storeMe() public boolean storeMe()
{ {
// No changes, nothing to store.
if (!hasChanges())
{
return false;
}
try (Connection con = DatabaseFactory.getConnection(); try (Connection con = DatabaseFactory.getConnection();
Statement del = con.createStatement(); Statement del = con.createStatement();
PreparedStatement st = con.prepareStatement(INSERT_QUERY)) PreparedStatement st = con.prepareStatement(INSERT_QUERY))
@@ -108,10 +99,7 @@ public class GlobalVariablesManager extends AbstractVariables
LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Couldn't save global variables to database.", e); LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Couldn't save global variables to database.", e);
return false; return false;
} }
finally
{
compareAndSetChanges(true, false);
}
LOGGER.info(getClass().getSimpleName() + ": Stored " + getSet().size() + " variables."); LOGGER.info(getClass().getSimpleName() + ": Stored " + getSet().size() + " variables.");
return true; return true;
} }

View File

@@ -19,10 +19,9 @@ package org.l2jmobius.gameserver.model;
import java.time.Duration; import java.time.Duration;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Supplier; import java.util.function.Supplier;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
@@ -49,7 +48,7 @@ public class StatSet implements IParserAdvUtils
public StatSet() public StatSet()
{ {
this(ConcurrentHashMap::new); this(HashMap::new);
} }
public StatSet(Supplier<Map<String, Object>> mapFactory) public StatSet(Supplier<Map<String, Object>> mapFactory)
@@ -98,7 +97,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public boolean getBoolean(String key) public boolean getBoolean(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -127,7 +125,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public boolean getBoolean(String key, boolean defaultValue) public boolean getBoolean(String key, boolean defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -150,7 +147,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public byte getByte(String key) public byte getByte(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -173,7 +169,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public byte getByte(String key, byte defaultValue) public byte getByte(String key, byte defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -209,8 +204,6 @@ public class StatSet implements IParserAdvUtils
public byte[] getByteArray(String key, String splitOn) public byte[] getByteArray(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -242,8 +235,6 @@ public class StatSet implements IParserAdvUtils
public List<Byte> getByteList(String key, String splitOn) public List<Byte> getByteList(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final List<Byte> result = new ArrayList<>(); final List<Byte> result = new ArrayList<>();
for (Byte i : getByteArray(key, splitOn)) for (Byte i : getByteArray(key, splitOn))
{ {
@@ -255,7 +246,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public short getShort(String key) public short getShort(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -278,7 +268,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public short getShort(String key, short defaultValue) public short getShort(String key, short defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -315,7 +304,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public int getInt(String key) public int getInt(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -340,7 +328,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public int getInt(String key, int defaultValue) public int getInt(String key, int defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -376,8 +363,6 @@ public class StatSet implements IParserAdvUtils
public int[] getIntArray(String key, String splitOn) public int[] getIntArray(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -409,8 +394,6 @@ public class StatSet implements IParserAdvUtils
public List<Integer> getIntegerList(String key, String splitOn) public List<Integer> getIntegerList(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final List<Integer> result = new ArrayList<>(); final List<Integer> result = new ArrayList<>();
for (int i : getIntArray(key, splitOn)) for (int i : getIntArray(key, splitOn))
{ {
@@ -422,7 +405,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public long getLong(String key) public long getLong(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -445,7 +427,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public long getLong(String key, long defaultValue) public long getLong(String key, long defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -482,7 +463,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public float getFloat(String key) public float getFloat(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -505,7 +485,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public float getFloat(String key, float defaultValue) public float getFloat(String key, float defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -542,7 +521,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public double getDouble(String key) public double getDouble(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -565,7 +543,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public double getDouble(String key, double defaultValue) public double getDouble(String key, double defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -602,7 +579,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public String getString(String key) public String getString(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -614,7 +590,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public String getString(String key, String defaultValue) public String getString(String key, String defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -626,7 +601,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public Duration getDuration(String key) public Duration getDuration(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -638,7 +612,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public Duration getDuration(String key, Duration defaultValue) public Duration getDuration(String key, Duration defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -651,8 +624,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass) public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(enumClass);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -676,8 +647,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass, T defaultValue) public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass, T defaultValue)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(enumClass);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -700,8 +669,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <A> A getObject(String name, Class<A> type) public <A> A getObject(String name, Class<A> type)
{ {
Objects.requireNonNull(name);
Objects.requireNonNull(type);
final Object obj = _set.get(name); final Object obj = _set.get(name);
if ((obj == null) || !type.isAssignableFrom(obj.getClass())) if ((obj == null) || !type.isAssignableFrom(obj.getClass()))
{ {
@@ -714,8 +681,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <A> A getObject(String name, Class<A> type, A defaultValue) public <A> A getObject(String name, Class<A> type, A defaultValue)
{ {
Objects.requireNonNull(name);
Objects.requireNonNull(type);
final Object obj = _set.get(name); final Object obj = _set.get(name);
if ((obj == null) || !type.isAssignableFrom(obj.getClass())) if ((obj == null) || !type.isAssignableFrom(obj.getClass()))
{ {
@@ -727,7 +692,6 @@ public class StatSet implements IParserAdvUtils
public SkillHolder getSkillHolder(String key) public SkillHolder getSkillHolder(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof SkillHolder)) if (!(obj instanceof SkillHolder))
{ {
@@ -739,7 +703,6 @@ public class StatSet implements IParserAdvUtils
public Location getLocation(String key) public Location getLocation(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof Location)) if (!(obj instanceof Location))
{ {
@@ -751,7 +714,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public List<MinionHolder> getMinionList(String key) public List<MinionHolder> getMinionList(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof List<?>)) if (!(obj instanceof List<?>))
{ {
@@ -764,8 +726,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T> List<T> getList(String key, Class<T> clazz) public <T> List<T> getList(String key, Class<T> clazz)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(clazz);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof List<?>)) if (!(obj instanceof List<?>))
{ {
@@ -871,83 +831,61 @@ public class StatSet implements IParserAdvUtils
return (Map<K, V>) obj; return (Map<K, V>) obj;
} }
public StatSet set(String name, Object value) public void set(String name, Object value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(name, value); _set.put(name, value);
return this;
} }
public StatSet set(String key, boolean value) public void set(String key, byte value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, byte value) public void set(String key, short value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, short value) public void set(String key, int value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, int value) public void set(String key, long value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, long value) public void set(String key, float value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, float value) public void set(String key, double value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, double value) public void set(String key, String value)
{
_set.put(key, value);
return this;
}
public StatSet set(String key, String value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, Enum<?> value) public void set(String key, Enum<?> value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(key, value); _set.put(key, value);
return this;
}
public static StatSet valueOf(String key, Object value)
{
final StatSet set = new StatSet();
set.set(key, value);
return set;
} }
public void remove(String key) public void remove(String key)

View File

@@ -244,7 +244,9 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
player.teleToLocation(_instance.getEnterLocations().get(index++), 0, _instance); player.teleToLocation(_instance.getEnterLocations().get(index++), 0, _instance);
} }
getTimers().addTimer("match_start_countdown", StatSet.valueOf("time", 60), 100, null, null); final StatSet params = new StatSet();
params.set("time", 60);
getTimers().addTimer("match_start_countdown", params, 100, null, null);
getTimers().addTimer("teleport_message1", 10000, null, null); getTimers().addTimer("teleport_message1", 10000, null, null);
getTimers().addTimer("teleport_message2", 14000, null, null); getTimers().addTimer("teleport_message2", 14000, null, null);
@@ -400,7 +402,9 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
} }
} }
getTimers().cancelTimer("update", null, null); getTimers().cancelTimer("update", null, null);
getTimers().addTimer("match_end_countdown", StatSet.valueOf("time", 30), 30 * 1000, null, null); final StatSet params = new StatSet();
params.set("time", 30);
getTimers().addTimer("match_end_countdown", params, 30 * 1000, null, null);
EventDispatcher.getInstance().notifyEvent(new OnCeremonyOfChaosMatchResult(winners, members)); EventDispatcher.getInstance().notifyEvent(new OnCeremonyOfChaosMatchResult(winners, members));
} }
@@ -536,19 +540,23 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
// Reschedule // Reschedule
if (time == 60) if (time == 60)
{ {
getTimers().addTimer(event, params.set("time", 30), 30 * 1000, null, null); params.set("time", 30);
getTimers().addTimer(event, params, 30 * 1000, null, null);
} }
else if ((time == 30) || (time == 20)) else if ((time == 30) || (time == 20))
{ {
getTimers().addTimer(event, params.set("time", time - 10), 10 * 1000, null, null); params.set("time", time - 10);
getTimers().addTimer(event, params, 10 * 1000, null, null);
} }
else if (time == 10) else if (time == 10)
{ {
getTimers().addTimer(event, params.set("time", 5), 5 * 1000, null, null); params.set("time", 5);
getTimers().addTimer(event, params, 5 * 1000, null, null);
} }
else if ((time > 1) && (time <= 5)) else if ((time > 1) && (time <= 5))
{ {
getTimers().addTimer(event, params.set("time", time - 1), 1000, null, null); params.set("time", time - 1);
getTimers().addTimer(event, params, 1000, null, null);
} }
break; break;
} }
@@ -562,11 +570,13 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
// Reschedule // Reschedule
if ((time == 30) || (time == 20)) if ((time == 30) || (time == 20))
{ {
getTimers().addTimer(event, params.set("time", time - 10), 10 * 1000, null, null); params.set("time", time - 10);
getTimers().addTimer(event, params, 10 * 1000, null, null);
} }
else if ((time > 0) && (time <= 10)) else if ((time > 0) && (time <= 10))
{ {
getTimers().addTimer(event, params.set("time", time - 1), 1000, null, null); params.set("time", time - 1);
getTimers().addTimer(event, params, 1000, null, null);
} }
else if (time == 0) else if (time == 0)
{ {

View File

@@ -16,7 +16,6 @@
*/ */
package org.l2jmobius.gameserver.model.variables; package org.l2jmobius.gameserver.model.variables;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
@@ -31,55 +30,43 @@ public abstract class AbstractVariables extends StatSet implements IRestorable,
{ {
private final AtomicBoolean _hasChanges = new AtomicBoolean(false); private final AtomicBoolean _hasChanges = new AtomicBoolean(false);
public AbstractVariables()
{
super(new ConcurrentHashMap<>());
}
/** /**
* Overriding following methods to prevent from doing useless database operations if there is no changes since player's login. * Overriding following methods to prevent from doing useless database operations if there is no changes since player's login.
*/ */
@Override @Override
public StatSet set(String name, boolean value) public void set(String name, double value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, double value) public void set(String name, Enum<?> value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, Enum<?> value) public void set(String name, int value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, int value) public void set(String name, long value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, long value) public void set(String name, String value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
}
@Override
public StatSet set(String name, String value)
{
_hasChanges.compareAndSet(false, true);
return super.set(name, value);
} }
/** /**
@@ -87,15 +74,14 @@ public abstract class AbstractVariables extends StatSet implements IRestorable,
* @param name * @param name
* @param value * @param value
* @param markAsChanged * @param markAsChanged
* @return
*/ */
public StatSet set(String name, String value, boolean markAsChanged) public void set(String name, String value, boolean markAsChanged)
{ {
if (markAsChanged) if (markAsChanged)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
} }
return super.set(name, value); super.set(name, value);
} }
/** /**

View File

@@ -180,8 +180,9 @@ public class CeremonyOfChaosManager extends AbstractEventManager<CeremonyOfChaos
} }
} }
} }
final StatSet params = new StatSet();
getTimers().addTimer("count_down", StatSet.valueOf("time", 60), 60 * 1000, null, null); params.set("time", 60);
getTimers().addTimer("count_down", params, 60 * 1000, null, null);
} }
@ScheduleTarget @ScheduleTarget
@@ -268,15 +269,18 @@ public class CeremonyOfChaosManager extends AbstractEventManager<CeremonyOfChaos
// Reschedule // Reschedule
if (time == 60) if (time == 60)
{ {
getTimers().addTimer(event, params.set("time", 10), 50 * 1000, null, null); params.set("time", 10);
getTimers().addTimer(event, params, 50 * 1000, null, null);
} }
else if (time == 10) else if (time == 10)
{ {
getTimers().addTimer(event, params.set("time", 5), 5 * 1000, null, null); params.set("time", 5);
getTimers().addTimer(event, params, 5 * 1000, null, null);
} }
else if ((time > 1) && (time <= 5)) else if ((time > 1) && (time <= 5))
{ {
getTimers().addTimer(event, params.set("time", time - 1), 1000, null, null); params.set("time", time - 1);
getTimers().addTimer(event, params, 1000, null, null);
} }
break; break;
} }

View File

@@ -70,10 +70,7 @@ public class GlobalVariablesManager extends AbstractVariables
LOGGER.warning(getClass().getSimpleName() + ": Couldn't restore global variables."); LOGGER.warning(getClass().getSimpleName() + ": Couldn't restore global variables.");
return false; return false;
} }
finally
{
compareAndSetChanges(true, false);
}
LOGGER.info(getClass().getSimpleName() + ": Loaded " + getSet().size() + " variables."); LOGGER.info(getClass().getSimpleName() + ": Loaded " + getSet().size() + " variables.");
return true; return true;
} }
@@ -81,12 +78,6 @@ public class GlobalVariablesManager extends AbstractVariables
@Override @Override
public boolean storeMe() public boolean storeMe()
{ {
// No changes, nothing to store.
if (!hasChanges())
{
return false;
}
try (Connection con = DatabaseFactory.getConnection(); try (Connection con = DatabaseFactory.getConnection();
Statement del = con.createStatement(); Statement del = con.createStatement();
PreparedStatement st = con.prepareStatement(INSERT_QUERY)) PreparedStatement st = con.prepareStatement(INSERT_QUERY))
@@ -108,10 +99,7 @@ public class GlobalVariablesManager extends AbstractVariables
LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Couldn't save global variables to database.", e); LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Couldn't save global variables to database.", e);
return false; return false;
} }
finally
{
compareAndSetChanges(true, false);
}
LOGGER.info(getClass().getSimpleName() + ": Stored " + getSet().size() + " variables."); LOGGER.info(getClass().getSimpleName() + ": Stored " + getSet().size() + " variables.");
return true; return true;
} }

View File

@@ -19,10 +19,9 @@ package org.l2jmobius.gameserver.model;
import java.time.Duration; import java.time.Duration;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Supplier; import java.util.function.Supplier;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
@@ -49,7 +48,7 @@ public class StatSet implements IParserAdvUtils
public StatSet() public StatSet()
{ {
this(ConcurrentHashMap::new); this(HashMap::new);
} }
public StatSet(Supplier<Map<String, Object>> mapFactory) public StatSet(Supplier<Map<String, Object>> mapFactory)
@@ -98,7 +97,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public boolean getBoolean(String key) public boolean getBoolean(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -127,7 +125,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public boolean getBoolean(String key, boolean defaultValue) public boolean getBoolean(String key, boolean defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -150,7 +147,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public byte getByte(String key) public byte getByte(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -173,7 +169,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public byte getByte(String key, byte defaultValue) public byte getByte(String key, byte defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -209,8 +204,6 @@ public class StatSet implements IParserAdvUtils
public byte[] getByteArray(String key, String splitOn) public byte[] getByteArray(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -242,8 +235,6 @@ public class StatSet implements IParserAdvUtils
public List<Byte> getByteList(String key, String splitOn) public List<Byte> getByteList(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final List<Byte> result = new ArrayList<>(); final List<Byte> result = new ArrayList<>();
for (Byte i : getByteArray(key, splitOn)) for (Byte i : getByteArray(key, splitOn))
{ {
@@ -255,7 +246,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public short getShort(String key) public short getShort(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -278,7 +268,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public short getShort(String key, short defaultValue) public short getShort(String key, short defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -315,7 +304,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public int getInt(String key) public int getInt(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -340,7 +328,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public int getInt(String key, int defaultValue) public int getInt(String key, int defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -376,8 +363,6 @@ public class StatSet implements IParserAdvUtils
public int[] getIntArray(String key, String splitOn) public int[] getIntArray(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -409,8 +394,6 @@ public class StatSet implements IParserAdvUtils
public List<Integer> getIntegerList(String key, String splitOn) public List<Integer> getIntegerList(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final List<Integer> result = new ArrayList<>(); final List<Integer> result = new ArrayList<>();
for (int i : getIntArray(key, splitOn)) for (int i : getIntArray(key, splitOn))
{ {
@@ -422,7 +405,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public long getLong(String key) public long getLong(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -445,7 +427,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public long getLong(String key, long defaultValue) public long getLong(String key, long defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -482,7 +463,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public float getFloat(String key) public float getFloat(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -505,7 +485,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public float getFloat(String key, float defaultValue) public float getFloat(String key, float defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -542,7 +521,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public double getDouble(String key) public double getDouble(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -565,7 +543,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public double getDouble(String key, double defaultValue) public double getDouble(String key, double defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -602,7 +579,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public String getString(String key) public String getString(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -614,7 +590,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public String getString(String key, String defaultValue) public String getString(String key, String defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -626,7 +601,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public Duration getDuration(String key) public Duration getDuration(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -638,7 +612,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public Duration getDuration(String key, Duration defaultValue) public Duration getDuration(String key, Duration defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -651,8 +624,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass) public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(enumClass);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -676,8 +647,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass, T defaultValue) public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass, T defaultValue)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(enumClass);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -700,8 +669,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <A> A getObject(String name, Class<A> type) public <A> A getObject(String name, Class<A> type)
{ {
Objects.requireNonNull(name);
Objects.requireNonNull(type);
final Object obj = _set.get(name); final Object obj = _set.get(name);
if ((obj == null) || !type.isAssignableFrom(obj.getClass())) if ((obj == null) || !type.isAssignableFrom(obj.getClass()))
{ {
@@ -714,8 +681,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <A> A getObject(String name, Class<A> type, A defaultValue) public <A> A getObject(String name, Class<A> type, A defaultValue)
{ {
Objects.requireNonNull(name);
Objects.requireNonNull(type);
final Object obj = _set.get(name); final Object obj = _set.get(name);
if ((obj == null) || !type.isAssignableFrom(obj.getClass())) if ((obj == null) || !type.isAssignableFrom(obj.getClass()))
{ {
@@ -727,7 +692,6 @@ public class StatSet implements IParserAdvUtils
public SkillHolder getSkillHolder(String key) public SkillHolder getSkillHolder(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof SkillHolder)) if (!(obj instanceof SkillHolder))
{ {
@@ -739,7 +703,6 @@ public class StatSet implements IParserAdvUtils
public Location getLocation(String key) public Location getLocation(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof Location)) if (!(obj instanceof Location))
{ {
@@ -751,7 +714,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public List<MinionHolder> getMinionList(String key) public List<MinionHolder> getMinionList(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof List<?>)) if (!(obj instanceof List<?>))
{ {
@@ -764,8 +726,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T> List<T> getList(String key, Class<T> clazz) public <T> List<T> getList(String key, Class<T> clazz)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(clazz);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof List<?>)) if (!(obj instanceof List<?>))
{ {
@@ -871,83 +831,61 @@ public class StatSet implements IParserAdvUtils
return (Map<K, V>) obj; return (Map<K, V>) obj;
} }
public StatSet set(String name, Object value) public void set(String name, Object value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(name, value); _set.put(name, value);
return this;
} }
public StatSet set(String key, boolean value) public void set(String key, byte value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, byte value) public void set(String key, short value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, short value) public void set(String key, int value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, int value) public void set(String key, long value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, long value) public void set(String key, float value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, float value) public void set(String key, double value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, double value) public void set(String key, String value)
{
_set.put(key, value);
return this;
}
public StatSet set(String key, String value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, Enum<?> value) public void set(String key, Enum<?> value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(key, value); _set.put(key, value);
return this;
}
public static StatSet valueOf(String key, Object value)
{
final StatSet set = new StatSet();
set.set(key, value);
return set;
} }
public void remove(String key) public void remove(String key)

View File

@@ -244,7 +244,9 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
player.teleToLocation(_instance.getEnterLocations().get(index++), 0, _instance); player.teleToLocation(_instance.getEnterLocations().get(index++), 0, _instance);
} }
getTimers().addTimer("match_start_countdown", StatSet.valueOf("time", 60), 100, null, null); final StatSet params = new StatSet();
params.set("time", 60);
getTimers().addTimer("match_start_countdown", params, 100, null, null);
getTimers().addTimer("teleport_message1", 10000, null, null); getTimers().addTimer("teleport_message1", 10000, null, null);
getTimers().addTimer("teleport_message2", 14000, null, null); getTimers().addTimer("teleport_message2", 14000, null, null);
@@ -400,7 +402,9 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
} }
} }
getTimers().cancelTimer("update", null, null); getTimers().cancelTimer("update", null, null);
getTimers().addTimer("match_end_countdown", StatSet.valueOf("time", 30), 30 * 1000, null, null); final StatSet params = new StatSet();
params.set("time", 30);
getTimers().addTimer("match_end_countdown", params, 30 * 1000, null, null);
EventDispatcher.getInstance().notifyEvent(new OnCeremonyOfChaosMatchResult(winners, members)); EventDispatcher.getInstance().notifyEvent(new OnCeremonyOfChaosMatchResult(winners, members));
} }
@@ -536,19 +540,23 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
// Reschedule // Reschedule
if (time == 60) if (time == 60)
{ {
getTimers().addTimer(event, params.set("time", 30), 30 * 1000, null, null); params.set("time", 30);
getTimers().addTimer(event, params, 30 * 1000, null, null);
} }
else if ((time == 30) || (time == 20)) else if ((time == 30) || (time == 20))
{ {
getTimers().addTimer(event, params.set("time", time - 10), 10 * 1000, null, null); params.set("time", time - 10);
getTimers().addTimer(event, params, 10 * 1000, null, null);
} }
else if (time == 10) else if (time == 10)
{ {
getTimers().addTimer(event, params.set("time", 5), 5 * 1000, null, null); params.set("time", 5);
getTimers().addTimer(event, params, 5 * 1000, null, null);
} }
else if ((time > 1) && (time <= 5)) else if ((time > 1) && (time <= 5))
{ {
getTimers().addTimer(event, params.set("time", time - 1), 1000, null, null); params.set("time", time - 1);
getTimers().addTimer(event, params, 1000, null, null);
} }
break; break;
} }
@@ -562,11 +570,13 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
// Reschedule // Reschedule
if ((time == 30) || (time == 20)) if ((time == 30) || (time == 20))
{ {
getTimers().addTimer(event, params.set("time", time - 10), 10 * 1000, null, null); params.set("time", time - 10);
getTimers().addTimer(event, params, 10 * 1000, null, null);
} }
else if ((time > 0) && (time <= 10)) else if ((time > 0) && (time <= 10))
{ {
getTimers().addTimer(event, params.set("time", time - 1), 1000, null, null); params.set("time", time - 1);
getTimers().addTimer(event, params, 1000, null, null);
} }
else if (time == 0) else if (time == 0)
{ {

View File

@@ -16,7 +16,6 @@
*/ */
package org.l2jmobius.gameserver.model.variables; package org.l2jmobius.gameserver.model.variables;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
@@ -31,55 +30,43 @@ public abstract class AbstractVariables extends StatSet implements IRestorable,
{ {
private final AtomicBoolean _hasChanges = new AtomicBoolean(false); private final AtomicBoolean _hasChanges = new AtomicBoolean(false);
public AbstractVariables()
{
super(new ConcurrentHashMap<>());
}
/** /**
* Overriding following methods to prevent from doing useless database operations if there is no changes since player's login. * Overriding following methods to prevent from doing useless database operations if there is no changes since player's login.
*/ */
@Override @Override
public StatSet set(String name, boolean value) public void set(String name, double value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, double value) public void set(String name, Enum<?> value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, Enum<?> value) public void set(String name, int value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, int value) public void set(String name, long value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, long value) public void set(String name, String value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
}
@Override
public StatSet set(String name, String value)
{
_hasChanges.compareAndSet(false, true);
return super.set(name, value);
} }
/** /**
@@ -87,15 +74,14 @@ public abstract class AbstractVariables extends StatSet implements IRestorable,
* @param name * @param name
* @param value * @param value
* @param markAsChanged * @param markAsChanged
* @return
*/ */
public StatSet set(String name, String value, boolean markAsChanged) public void set(String name, String value, boolean markAsChanged)
{ {
if (markAsChanged) if (markAsChanged)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
} }
return super.set(name, value); super.set(name, value);
} }
/** /**

View File

@@ -180,8 +180,9 @@ public class CeremonyOfChaosManager extends AbstractEventManager<CeremonyOfChaos
} }
} }
} }
final StatSet params = new StatSet();
getTimers().addTimer("count_down", StatSet.valueOf("time", 60), 60 * 1000, null, null); params.set("time", 60);
getTimers().addTimer("count_down", params, 60 * 1000, null, null);
} }
@ScheduleTarget @ScheduleTarget
@@ -268,15 +269,18 @@ public class CeremonyOfChaosManager extends AbstractEventManager<CeremonyOfChaos
// Reschedule // Reschedule
if (time == 60) if (time == 60)
{ {
getTimers().addTimer(event, params.set("time", 10), 50 * 1000, null, null); params.set("time", 10);
getTimers().addTimer(event, params, 50 * 1000, null, null);
} }
else if (time == 10) else if (time == 10)
{ {
getTimers().addTimer(event, params.set("time", 5), 5 * 1000, null, null); params.set("time", 5);
getTimers().addTimer(event, params, 5 * 1000, null, null);
} }
else if ((time > 1) && (time <= 5)) else if ((time > 1) && (time <= 5))
{ {
getTimers().addTimer(event, params.set("time", time - 1), 1000, null, null); params.set("time", time - 1);
getTimers().addTimer(event, params, 1000, null, null);
} }
break; break;
} }

View File

@@ -70,10 +70,7 @@ public class GlobalVariablesManager extends AbstractVariables
LOGGER.warning(getClass().getSimpleName() + ": Couldn't restore global variables."); LOGGER.warning(getClass().getSimpleName() + ": Couldn't restore global variables.");
return false; return false;
} }
finally
{
compareAndSetChanges(true, false);
}
LOGGER.info(getClass().getSimpleName() + ": Loaded " + getSet().size() + " variables."); LOGGER.info(getClass().getSimpleName() + ": Loaded " + getSet().size() + " variables.");
return true; return true;
} }
@@ -81,12 +78,6 @@ public class GlobalVariablesManager extends AbstractVariables
@Override @Override
public boolean storeMe() public boolean storeMe()
{ {
// No changes, nothing to store.
if (!hasChanges())
{
return false;
}
try (Connection con = DatabaseFactory.getConnection(); try (Connection con = DatabaseFactory.getConnection();
Statement del = con.createStatement(); Statement del = con.createStatement();
PreparedStatement st = con.prepareStatement(INSERT_QUERY)) PreparedStatement st = con.prepareStatement(INSERT_QUERY))
@@ -108,10 +99,7 @@ public class GlobalVariablesManager extends AbstractVariables
LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Couldn't save global variables to database.", e); LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Couldn't save global variables to database.", e);
return false; return false;
} }
finally
{
compareAndSetChanges(true, false);
}
LOGGER.info(getClass().getSimpleName() + ": Stored " + getSet().size() + " variables."); LOGGER.info(getClass().getSimpleName() + ": Stored " + getSet().size() + " variables.");
return true; return true;
} }

View File

@@ -19,10 +19,9 @@ package org.l2jmobius.gameserver.model;
import java.time.Duration; import java.time.Duration;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Supplier; import java.util.function.Supplier;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
@@ -49,7 +48,7 @@ public class StatSet implements IParserAdvUtils
public StatSet() public StatSet()
{ {
this(ConcurrentHashMap::new); this(HashMap::new);
} }
public StatSet(Supplier<Map<String, Object>> mapFactory) public StatSet(Supplier<Map<String, Object>> mapFactory)
@@ -98,7 +97,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public boolean getBoolean(String key) public boolean getBoolean(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -127,7 +125,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public boolean getBoolean(String key, boolean defaultValue) public boolean getBoolean(String key, boolean defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -150,7 +147,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public byte getByte(String key) public byte getByte(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -173,7 +169,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public byte getByte(String key, byte defaultValue) public byte getByte(String key, byte defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -209,8 +204,6 @@ public class StatSet implements IParserAdvUtils
public byte[] getByteArray(String key, String splitOn) public byte[] getByteArray(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -242,8 +235,6 @@ public class StatSet implements IParserAdvUtils
public List<Byte> getByteList(String key, String splitOn) public List<Byte> getByteList(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final List<Byte> result = new ArrayList<>(); final List<Byte> result = new ArrayList<>();
for (Byte i : getByteArray(key, splitOn)) for (Byte i : getByteArray(key, splitOn))
{ {
@@ -255,7 +246,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public short getShort(String key) public short getShort(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -278,7 +268,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public short getShort(String key, short defaultValue) public short getShort(String key, short defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -315,7 +304,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public int getInt(String key) public int getInt(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -340,7 +328,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public int getInt(String key, int defaultValue) public int getInt(String key, int defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -376,8 +363,6 @@ public class StatSet implements IParserAdvUtils
public int[] getIntArray(String key, String splitOn) public int[] getIntArray(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -409,8 +394,6 @@ public class StatSet implements IParserAdvUtils
public List<Integer> getIntegerList(String key, String splitOn) public List<Integer> getIntegerList(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final List<Integer> result = new ArrayList<>(); final List<Integer> result = new ArrayList<>();
for (int i : getIntArray(key, splitOn)) for (int i : getIntArray(key, splitOn))
{ {
@@ -422,7 +405,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public long getLong(String key) public long getLong(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -445,7 +427,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public long getLong(String key, long defaultValue) public long getLong(String key, long defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -482,7 +463,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public float getFloat(String key) public float getFloat(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -505,7 +485,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public float getFloat(String key, float defaultValue) public float getFloat(String key, float defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -542,7 +521,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public double getDouble(String key) public double getDouble(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -565,7 +543,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public double getDouble(String key, double defaultValue) public double getDouble(String key, double defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -602,7 +579,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public String getString(String key) public String getString(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -614,7 +590,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public String getString(String key, String defaultValue) public String getString(String key, String defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -626,7 +601,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public Duration getDuration(String key) public Duration getDuration(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -638,7 +612,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public Duration getDuration(String key, Duration defaultValue) public Duration getDuration(String key, Duration defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -651,8 +624,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass) public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(enumClass);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -676,8 +647,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass, T defaultValue) public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass, T defaultValue)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(enumClass);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -700,8 +669,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <A> A getObject(String name, Class<A> type) public <A> A getObject(String name, Class<A> type)
{ {
Objects.requireNonNull(name);
Objects.requireNonNull(type);
final Object obj = _set.get(name); final Object obj = _set.get(name);
if ((obj == null) || !type.isAssignableFrom(obj.getClass())) if ((obj == null) || !type.isAssignableFrom(obj.getClass()))
{ {
@@ -714,8 +681,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <A> A getObject(String name, Class<A> type, A defaultValue) public <A> A getObject(String name, Class<A> type, A defaultValue)
{ {
Objects.requireNonNull(name);
Objects.requireNonNull(type);
final Object obj = _set.get(name); final Object obj = _set.get(name);
if ((obj == null) || !type.isAssignableFrom(obj.getClass())) if ((obj == null) || !type.isAssignableFrom(obj.getClass()))
{ {
@@ -727,7 +692,6 @@ public class StatSet implements IParserAdvUtils
public SkillHolder getSkillHolder(String key) public SkillHolder getSkillHolder(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof SkillHolder)) if (!(obj instanceof SkillHolder))
{ {
@@ -739,7 +703,6 @@ public class StatSet implements IParserAdvUtils
public Location getLocation(String key) public Location getLocation(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof Location)) if (!(obj instanceof Location))
{ {
@@ -751,7 +714,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public List<MinionHolder> getMinionList(String key) public List<MinionHolder> getMinionList(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof List<?>)) if (!(obj instanceof List<?>))
{ {
@@ -764,8 +726,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T> List<T> getList(String key, Class<T> clazz) public <T> List<T> getList(String key, Class<T> clazz)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(clazz);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof List<?>)) if (!(obj instanceof List<?>))
{ {
@@ -871,83 +831,61 @@ public class StatSet implements IParserAdvUtils
return (Map<K, V>) obj; return (Map<K, V>) obj;
} }
public StatSet set(String name, Object value) public void set(String name, Object value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(name, value); _set.put(name, value);
return this;
} }
public StatSet set(String key, boolean value) public void set(String key, byte value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, byte value) public void set(String key, short value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, short value) public void set(String key, int value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, int value) public void set(String key, long value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, long value) public void set(String key, float value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, float value) public void set(String key, double value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, double value) public void set(String key, String value)
{
_set.put(key, value);
return this;
}
public StatSet set(String key, String value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, Enum<?> value) public void set(String key, Enum<?> value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(key, value); _set.put(key, value);
return this;
}
public static StatSet valueOf(String key, Object value)
{
final StatSet set = new StatSet();
set.set(key, value);
return set;
} }
public void remove(String key) public void remove(String key)

View File

@@ -244,7 +244,9 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
player.teleToLocation(_instance.getEnterLocations().get(index++), 0, _instance); player.teleToLocation(_instance.getEnterLocations().get(index++), 0, _instance);
} }
getTimers().addTimer("match_start_countdown", StatSet.valueOf("time", 60), 100, null, null); final StatSet params = new StatSet();
params.set("time", 60);
getTimers().addTimer("match_start_countdown", params, 100, null, null);
getTimers().addTimer("teleport_message1", 10000, null, null); getTimers().addTimer("teleport_message1", 10000, null, null);
getTimers().addTimer("teleport_message2", 14000, null, null); getTimers().addTimer("teleport_message2", 14000, null, null);
@@ -400,7 +402,9 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
} }
} }
getTimers().cancelTimer("update", null, null); getTimers().cancelTimer("update", null, null);
getTimers().addTimer("match_end_countdown", StatSet.valueOf("time", 30), 30 * 1000, null, null); final StatSet params = new StatSet();
params.set("time", 30);
getTimers().addTimer("match_end_countdown", params, 30 * 1000, null, null);
EventDispatcher.getInstance().notifyEvent(new OnCeremonyOfChaosMatchResult(winners, members)); EventDispatcher.getInstance().notifyEvent(new OnCeremonyOfChaosMatchResult(winners, members));
} }
@@ -536,19 +540,23 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
// Reschedule // Reschedule
if (time == 60) if (time == 60)
{ {
getTimers().addTimer(event, params.set("time", 30), 30 * 1000, null, null); params.set("time", 30);
getTimers().addTimer(event, params, 30 * 1000, null, null);
} }
else if ((time == 30) || (time == 20)) else if ((time == 30) || (time == 20))
{ {
getTimers().addTimer(event, params.set("time", time - 10), 10 * 1000, null, null); params.set("time", time - 10);
getTimers().addTimer(event, params, 10 * 1000, null, null);
} }
else if (time == 10) else if (time == 10)
{ {
getTimers().addTimer(event, params.set("time", 5), 5 * 1000, null, null); params.set("time", 5);
getTimers().addTimer(event, params, 5 * 1000, null, null);
} }
else if ((time > 1) && (time <= 5)) else if ((time > 1) && (time <= 5))
{ {
getTimers().addTimer(event, params.set("time", time - 1), 1000, null, null); params.set("time", time - 1);
getTimers().addTimer(event, params, 1000, null, null);
} }
break; break;
} }
@@ -562,11 +570,13 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
// Reschedule // Reschedule
if ((time == 30) || (time == 20)) if ((time == 30) || (time == 20))
{ {
getTimers().addTimer(event, params.set("time", time - 10), 10 * 1000, null, null); params.set("time", time - 10);
getTimers().addTimer(event, params, 10 * 1000, null, null);
} }
else if ((time > 0) && (time <= 10)) else if ((time > 0) && (time <= 10))
{ {
getTimers().addTimer(event, params.set("time", time - 1), 1000, null, null); params.set("time", time - 1);
getTimers().addTimer(event, params, 1000, null, null);
} }
else if (time == 0) else if (time == 0)
{ {

View File

@@ -16,7 +16,6 @@
*/ */
package org.l2jmobius.gameserver.model.variables; package org.l2jmobius.gameserver.model.variables;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
@@ -31,55 +30,43 @@ public abstract class AbstractVariables extends StatSet implements IRestorable,
{ {
private final AtomicBoolean _hasChanges = new AtomicBoolean(false); private final AtomicBoolean _hasChanges = new AtomicBoolean(false);
public AbstractVariables()
{
super(new ConcurrentHashMap<>());
}
/** /**
* Overriding following methods to prevent from doing useless database operations if there is no changes since player's login. * Overriding following methods to prevent from doing useless database operations if there is no changes since player's login.
*/ */
@Override @Override
public StatSet set(String name, boolean value) public void set(String name, double value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, double value) public void set(String name, Enum<?> value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, Enum<?> value) public void set(String name, int value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, int value) public void set(String name, long value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, long value) public void set(String name, String value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
}
@Override
public StatSet set(String name, String value)
{
_hasChanges.compareAndSet(false, true);
return super.set(name, value);
} }
/** /**
@@ -87,15 +74,14 @@ public abstract class AbstractVariables extends StatSet implements IRestorable,
* @param name * @param name
* @param value * @param value
* @param markAsChanged * @param markAsChanged
* @return
*/ */
public StatSet set(String name, String value, boolean markAsChanged) public void set(String name, String value, boolean markAsChanged)
{ {
if (markAsChanged) if (markAsChanged)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
} }
return super.set(name, value); super.set(name, value);
} }
/** /**

View File

@@ -180,8 +180,9 @@ public class CeremonyOfChaosManager extends AbstractEventManager<CeremonyOfChaos
} }
} }
} }
final StatSet params = new StatSet();
getTimers().addTimer("count_down", StatSet.valueOf("time", 60), 60 * 1000, null, null); params.set("time", 60);
getTimers().addTimer("count_down", params, 60 * 1000, null, null);
} }
@ScheduleTarget @ScheduleTarget
@@ -268,15 +269,18 @@ public class CeremonyOfChaosManager extends AbstractEventManager<CeremonyOfChaos
// Reschedule // Reschedule
if (time == 60) if (time == 60)
{ {
getTimers().addTimer(event, params.set("time", 10), 50 * 1000, null, null); params.set("time", 10);
getTimers().addTimer(event, params, 50 * 1000, null, null);
} }
else if (time == 10) else if (time == 10)
{ {
getTimers().addTimer(event, params.set("time", 5), 5 * 1000, null, null); params.set("time", 5);
getTimers().addTimer(event, params, 5 * 1000, null, null);
} }
else if ((time > 1) && (time <= 5)) else if ((time > 1) && (time <= 5))
{ {
getTimers().addTimer(event, params.set("time", time - 1), 1000, null, null); params.set("time", time - 1);
getTimers().addTimer(event, params, 1000, null, null);
} }
break; break;
} }

View File

@@ -70,10 +70,7 @@ public class GlobalVariablesManager extends AbstractVariables
LOGGER.warning(getClass().getSimpleName() + ": Couldn't restore global variables."); LOGGER.warning(getClass().getSimpleName() + ": Couldn't restore global variables.");
return false; return false;
} }
finally
{
compareAndSetChanges(true, false);
}
LOGGER.info(getClass().getSimpleName() + ": Loaded " + getSet().size() + " variables."); LOGGER.info(getClass().getSimpleName() + ": Loaded " + getSet().size() + " variables.");
return true; return true;
} }
@@ -81,12 +78,6 @@ public class GlobalVariablesManager extends AbstractVariables
@Override @Override
public boolean storeMe() public boolean storeMe()
{ {
// No changes, nothing to store.
if (!hasChanges())
{
return false;
}
try (Connection con = DatabaseFactory.getConnection(); try (Connection con = DatabaseFactory.getConnection();
Statement del = con.createStatement(); Statement del = con.createStatement();
PreparedStatement st = con.prepareStatement(INSERT_QUERY)) PreparedStatement st = con.prepareStatement(INSERT_QUERY))
@@ -108,10 +99,7 @@ public class GlobalVariablesManager extends AbstractVariables
LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Couldn't save global variables to database.", e); LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Couldn't save global variables to database.", e);
return false; return false;
} }
finally
{
compareAndSetChanges(true, false);
}
LOGGER.info(getClass().getSimpleName() + ": Stored " + getSet().size() + " variables."); LOGGER.info(getClass().getSimpleName() + ": Stored " + getSet().size() + " variables.");
return true; return true;
} }

View File

@@ -19,10 +19,9 @@ package org.l2jmobius.gameserver.model;
import java.time.Duration; import java.time.Duration;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Supplier; import java.util.function.Supplier;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
@@ -49,7 +48,7 @@ public class StatSet implements IParserAdvUtils
public StatSet() public StatSet()
{ {
this(ConcurrentHashMap::new); this(HashMap::new);
} }
public StatSet(Supplier<Map<String, Object>> mapFactory) public StatSet(Supplier<Map<String, Object>> mapFactory)
@@ -98,7 +97,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public boolean getBoolean(String key) public boolean getBoolean(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -127,7 +125,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public boolean getBoolean(String key, boolean defaultValue) public boolean getBoolean(String key, boolean defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -150,7 +147,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public byte getByte(String key) public byte getByte(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -173,7 +169,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public byte getByte(String key, byte defaultValue) public byte getByte(String key, byte defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -209,8 +204,6 @@ public class StatSet implements IParserAdvUtils
public byte[] getByteArray(String key, String splitOn) public byte[] getByteArray(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -242,8 +235,6 @@ public class StatSet implements IParserAdvUtils
public List<Byte> getByteList(String key, String splitOn) public List<Byte> getByteList(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final List<Byte> result = new ArrayList<>(); final List<Byte> result = new ArrayList<>();
for (Byte i : getByteArray(key, splitOn)) for (Byte i : getByteArray(key, splitOn))
{ {
@@ -255,7 +246,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public short getShort(String key) public short getShort(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -278,7 +268,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public short getShort(String key, short defaultValue) public short getShort(String key, short defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -315,7 +304,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public int getInt(String key) public int getInt(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -340,7 +328,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public int getInt(String key, int defaultValue) public int getInt(String key, int defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -376,8 +363,6 @@ public class StatSet implements IParserAdvUtils
public int[] getIntArray(String key, String splitOn) public int[] getIntArray(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -409,8 +394,6 @@ public class StatSet implements IParserAdvUtils
public List<Integer> getIntegerList(String key, String splitOn) public List<Integer> getIntegerList(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final List<Integer> result = new ArrayList<>(); final List<Integer> result = new ArrayList<>();
for (int i : getIntArray(key, splitOn)) for (int i : getIntArray(key, splitOn))
{ {
@@ -422,7 +405,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public long getLong(String key) public long getLong(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -445,7 +427,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public long getLong(String key, long defaultValue) public long getLong(String key, long defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -482,7 +463,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public float getFloat(String key) public float getFloat(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -505,7 +485,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public float getFloat(String key, float defaultValue) public float getFloat(String key, float defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -542,7 +521,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public double getDouble(String key) public double getDouble(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -565,7 +543,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public double getDouble(String key, double defaultValue) public double getDouble(String key, double defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -602,7 +579,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public String getString(String key) public String getString(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -614,7 +590,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public String getString(String key, String defaultValue) public String getString(String key, String defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -626,7 +601,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public Duration getDuration(String key) public Duration getDuration(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -638,7 +612,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public Duration getDuration(String key, Duration defaultValue) public Duration getDuration(String key, Duration defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -651,8 +624,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass) public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(enumClass);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -676,8 +647,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass, T defaultValue) public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass, T defaultValue)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(enumClass);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -700,8 +669,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <A> A getObject(String name, Class<A> type) public <A> A getObject(String name, Class<A> type)
{ {
Objects.requireNonNull(name);
Objects.requireNonNull(type);
final Object obj = _set.get(name); final Object obj = _set.get(name);
if ((obj == null) || !type.isAssignableFrom(obj.getClass())) if ((obj == null) || !type.isAssignableFrom(obj.getClass()))
{ {
@@ -714,8 +681,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <A> A getObject(String name, Class<A> type, A defaultValue) public <A> A getObject(String name, Class<A> type, A defaultValue)
{ {
Objects.requireNonNull(name);
Objects.requireNonNull(type);
final Object obj = _set.get(name); final Object obj = _set.get(name);
if ((obj == null) || !type.isAssignableFrom(obj.getClass())) if ((obj == null) || !type.isAssignableFrom(obj.getClass()))
{ {
@@ -727,7 +692,6 @@ public class StatSet implements IParserAdvUtils
public SkillHolder getSkillHolder(String key) public SkillHolder getSkillHolder(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof SkillHolder)) if (!(obj instanceof SkillHolder))
{ {
@@ -739,7 +703,6 @@ public class StatSet implements IParserAdvUtils
public Location getLocation(String key) public Location getLocation(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof Location)) if (!(obj instanceof Location))
{ {
@@ -751,7 +714,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public List<MinionHolder> getMinionList(String key) public List<MinionHolder> getMinionList(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof List<?>)) if (!(obj instanceof List<?>))
{ {
@@ -764,8 +726,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T> List<T> getList(String key, Class<T> clazz) public <T> List<T> getList(String key, Class<T> clazz)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(clazz);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof List<?>)) if (!(obj instanceof List<?>))
{ {
@@ -871,83 +831,61 @@ public class StatSet implements IParserAdvUtils
return (Map<K, V>) obj; return (Map<K, V>) obj;
} }
public StatSet set(String name, Object value) public void set(String name, Object value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(name, value); _set.put(name, value);
return this;
} }
public StatSet set(String key, boolean value) public void set(String key, byte value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, byte value) public void set(String key, short value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, short value) public void set(String key, int value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, int value) public void set(String key, long value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, long value) public void set(String key, float value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, float value) public void set(String key, double value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, double value) public void set(String key, String value)
{
_set.put(key, value);
return this;
}
public StatSet set(String key, String value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, Enum<?> value) public void set(String key, Enum<?> value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(key, value); _set.put(key, value);
return this;
}
public static StatSet valueOf(String key, Object value)
{
final StatSet set = new StatSet();
set.set(key, value);
return set;
} }
public void remove(String key) public void remove(String key)

View File

@@ -244,7 +244,9 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
player.teleToLocation(_instance.getEnterLocations().get(index++), 0, _instance); player.teleToLocation(_instance.getEnterLocations().get(index++), 0, _instance);
} }
getTimers().addTimer("match_start_countdown", StatSet.valueOf("time", 60), 100, null, null); final StatSet params = new StatSet();
params.set("time", 60);
getTimers().addTimer("match_start_countdown", params, 100, null, null);
getTimers().addTimer("teleport_message1", 10000, null, null); getTimers().addTimer("teleport_message1", 10000, null, null);
getTimers().addTimer("teleport_message2", 14000, null, null); getTimers().addTimer("teleport_message2", 14000, null, null);
@@ -400,7 +402,9 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
} }
} }
getTimers().cancelTimer("update", null, null); getTimers().cancelTimer("update", null, null);
getTimers().addTimer("match_end_countdown", StatSet.valueOf("time", 30), 30 * 1000, null, null); final StatSet params = new StatSet();
params.set("time", 30);
getTimers().addTimer("match_end_countdown", params, 30 * 1000, null, null);
EventDispatcher.getInstance().notifyEvent(new OnCeremonyOfChaosMatchResult(winners, members)); EventDispatcher.getInstance().notifyEvent(new OnCeremonyOfChaosMatchResult(winners, members));
} }
@@ -536,19 +540,23 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
// Reschedule // Reschedule
if (time == 60) if (time == 60)
{ {
getTimers().addTimer(event, params.set("time", 30), 30 * 1000, null, null); params.set("time", 30);
getTimers().addTimer(event, params, 30 * 1000, null, null);
} }
else if ((time == 30) || (time == 20)) else if ((time == 30) || (time == 20))
{ {
getTimers().addTimer(event, params.set("time", time - 10), 10 * 1000, null, null); params.set("time", time - 10);
getTimers().addTimer(event, params, 10 * 1000, null, null);
} }
else if (time == 10) else if (time == 10)
{ {
getTimers().addTimer(event, params.set("time", 5), 5 * 1000, null, null); params.set("time", 5);
getTimers().addTimer(event, params, 5 * 1000, null, null);
} }
else if ((time > 1) && (time <= 5)) else if ((time > 1) && (time <= 5))
{ {
getTimers().addTimer(event, params.set("time", time - 1), 1000, null, null); params.set("time", time - 1);
getTimers().addTimer(event, params, 1000, null, null);
} }
break; break;
} }
@@ -562,11 +570,13 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
// Reschedule // Reschedule
if ((time == 30) || (time == 20)) if ((time == 30) || (time == 20))
{ {
getTimers().addTimer(event, params.set("time", time - 10), 10 * 1000, null, null); params.set("time", time - 10);
getTimers().addTimer(event, params, 10 * 1000, null, null);
} }
else if ((time > 0) && (time <= 10)) else if ((time > 0) && (time <= 10))
{ {
getTimers().addTimer(event, params.set("time", time - 1), 1000, null, null); params.set("time", time - 1);
getTimers().addTimer(event, params, 1000, null, null);
} }
else if (time == 0) else if (time == 0)
{ {

View File

@@ -16,7 +16,6 @@
*/ */
package org.l2jmobius.gameserver.model.variables; package org.l2jmobius.gameserver.model.variables;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
@@ -31,55 +30,43 @@ public abstract class AbstractVariables extends StatSet implements IRestorable,
{ {
private final AtomicBoolean _hasChanges = new AtomicBoolean(false); private final AtomicBoolean _hasChanges = new AtomicBoolean(false);
public AbstractVariables()
{
super(new ConcurrentHashMap<>());
}
/** /**
* Overriding following methods to prevent from doing useless database operations if there is no changes since player's login. * Overriding following methods to prevent from doing useless database operations if there is no changes since player's login.
*/ */
@Override @Override
public StatSet set(String name, boolean value) public void set(String name, double value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, double value) public void set(String name, Enum<?> value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, Enum<?> value) public void set(String name, int value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, int value) public void set(String name, long value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, long value) public void set(String name, String value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
}
@Override
public StatSet set(String name, String value)
{
_hasChanges.compareAndSet(false, true);
return super.set(name, value);
} }
/** /**
@@ -87,15 +74,14 @@ public abstract class AbstractVariables extends StatSet implements IRestorable,
* @param name * @param name
* @param value * @param value
* @param markAsChanged * @param markAsChanged
* @return
*/ */
public StatSet set(String name, String value, boolean markAsChanged) public void set(String name, String value, boolean markAsChanged)
{ {
if (markAsChanged) if (markAsChanged)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
} }
return super.set(name, value); super.set(name, value);
} }
/** /**

View File

@@ -180,8 +180,9 @@ public class CeremonyOfChaosManager extends AbstractEventManager<CeremonyOfChaos
} }
} }
} }
final StatSet params = new StatSet();
getTimers().addTimer("count_down", StatSet.valueOf("time", 60), 60 * 1000, null, null); params.set("time", 60);
getTimers().addTimer("count_down", params, 60 * 1000, null, null);
} }
@ScheduleTarget @ScheduleTarget
@@ -268,15 +269,18 @@ public class CeremonyOfChaosManager extends AbstractEventManager<CeremonyOfChaos
// Reschedule // Reschedule
if (time == 60) if (time == 60)
{ {
getTimers().addTimer(event, params.set("time", 10), 50 * 1000, null, null); params.set("time", 10);
getTimers().addTimer(event, params, 50 * 1000, null, null);
} }
else if (time == 10) else if (time == 10)
{ {
getTimers().addTimer(event, params.set("time", 5), 5 * 1000, null, null); params.set("time", 5);
getTimers().addTimer(event, params, 5 * 1000, null, null);
} }
else if ((time > 1) && (time <= 5)) else if ((time > 1) && (time <= 5))
{ {
getTimers().addTimer(event, params.set("time", time - 1), 1000, null, null); params.set("time", time - 1);
getTimers().addTimer(event, params, 1000, null, null);
} }
break; break;
} }

View File

@@ -70,10 +70,7 @@ public class GlobalVariablesManager extends AbstractVariables
LOGGER.warning(getClass().getSimpleName() + ": Couldn't restore global variables."); LOGGER.warning(getClass().getSimpleName() + ": Couldn't restore global variables.");
return false; return false;
} }
finally
{
compareAndSetChanges(true, false);
}
LOGGER.info(getClass().getSimpleName() + ": Loaded " + getSet().size() + " variables."); LOGGER.info(getClass().getSimpleName() + ": Loaded " + getSet().size() + " variables.");
return true; return true;
} }
@@ -81,12 +78,6 @@ public class GlobalVariablesManager extends AbstractVariables
@Override @Override
public boolean storeMe() public boolean storeMe()
{ {
// No changes, nothing to store.
if (!hasChanges())
{
return false;
}
try (Connection con = DatabaseFactory.getConnection(); try (Connection con = DatabaseFactory.getConnection();
Statement del = con.createStatement(); Statement del = con.createStatement();
PreparedStatement st = con.prepareStatement(INSERT_QUERY)) PreparedStatement st = con.prepareStatement(INSERT_QUERY))
@@ -108,10 +99,7 @@ public class GlobalVariablesManager extends AbstractVariables
LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Couldn't save global variables to database.", e); LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Couldn't save global variables to database.", e);
return false; return false;
} }
finally
{
compareAndSetChanges(true, false);
}
LOGGER.info(getClass().getSimpleName() + ": Stored " + getSet().size() + " variables."); LOGGER.info(getClass().getSimpleName() + ": Stored " + getSet().size() + " variables.");
return true; return true;
} }

View File

@@ -19,10 +19,9 @@ package org.l2jmobius.gameserver.model;
import java.time.Duration; import java.time.Duration;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Supplier; import java.util.function.Supplier;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
@@ -49,7 +48,7 @@ public class StatSet implements IParserAdvUtils
public StatSet() public StatSet()
{ {
this(ConcurrentHashMap::new); this(HashMap::new);
} }
public StatSet(Supplier<Map<String, Object>> mapFactory) public StatSet(Supplier<Map<String, Object>> mapFactory)
@@ -98,7 +97,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public boolean getBoolean(String key) public boolean getBoolean(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -127,7 +125,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public boolean getBoolean(String key, boolean defaultValue) public boolean getBoolean(String key, boolean defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -150,7 +147,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public byte getByte(String key) public byte getByte(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -173,7 +169,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public byte getByte(String key, byte defaultValue) public byte getByte(String key, byte defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -209,8 +204,6 @@ public class StatSet implements IParserAdvUtils
public byte[] getByteArray(String key, String splitOn) public byte[] getByteArray(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -242,8 +235,6 @@ public class StatSet implements IParserAdvUtils
public List<Byte> getByteList(String key, String splitOn) public List<Byte> getByteList(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final List<Byte> result = new ArrayList<>(); final List<Byte> result = new ArrayList<>();
for (Byte i : getByteArray(key, splitOn)) for (Byte i : getByteArray(key, splitOn))
{ {
@@ -255,7 +246,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public short getShort(String key) public short getShort(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -278,7 +268,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public short getShort(String key, short defaultValue) public short getShort(String key, short defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -315,7 +304,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public int getInt(String key) public int getInt(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -340,7 +328,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public int getInt(String key, int defaultValue) public int getInt(String key, int defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -376,8 +363,6 @@ public class StatSet implements IParserAdvUtils
public int[] getIntArray(String key, String splitOn) public int[] getIntArray(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -409,8 +394,6 @@ public class StatSet implements IParserAdvUtils
public List<Integer> getIntegerList(String key, String splitOn) public List<Integer> getIntegerList(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final List<Integer> result = new ArrayList<>(); final List<Integer> result = new ArrayList<>();
for (int i : getIntArray(key, splitOn)) for (int i : getIntArray(key, splitOn))
{ {
@@ -422,7 +405,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public long getLong(String key) public long getLong(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -445,7 +427,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public long getLong(String key, long defaultValue) public long getLong(String key, long defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -482,7 +463,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public float getFloat(String key) public float getFloat(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -505,7 +485,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public float getFloat(String key, float defaultValue) public float getFloat(String key, float defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -542,7 +521,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public double getDouble(String key) public double getDouble(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -565,7 +543,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public double getDouble(String key, double defaultValue) public double getDouble(String key, double defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -602,7 +579,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public String getString(String key) public String getString(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -614,7 +590,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public String getString(String key, String defaultValue) public String getString(String key, String defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -626,7 +601,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public Duration getDuration(String key) public Duration getDuration(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -638,7 +612,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public Duration getDuration(String key, Duration defaultValue) public Duration getDuration(String key, Duration defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -651,8 +624,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass) public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(enumClass);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -676,8 +647,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass, T defaultValue) public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass, T defaultValue)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(enumClass);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -700,8 +669,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <A> A getObject(String name, Class<A> type) public <A> A getObject(String name, Class<A> type)
{ {
Objects.requireNonNull(name);
Objects.requireNonNull(type);
final Object obj = _set.get(name); final Object obj = _set.get(name);
if ((obj == null) || !type.isAssignableFrom(obj.getClass())) if ((obj == null) || !type.isAssignableFrom(obj.getClass()))
{ {
@@ -714,8 +681,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <A> A getObject(String name, Class<A> type, A defaultValue) public <A> A getObject(String name, Class<A> type, A defaultValue)
{ {
Objects.requireNonNull(name);
Objects.requireNonNull(type);
final Object obj = _set.get(name); final Object obj = _set.get(name);
if ((obj == null) || !type.isAssignableFrom(obj.getClass())) if ((obj == null) || !type.isAssignableFrom(obj.getClass()))
{ {
@@ -727,7 +692,6 @@ public class StatSet implements IParserAdvUtils
public SkillHolder getSkillHolder(String key) public SkillHolder getSkillHolder(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof SkillHolder)) if (!(obj instanceof SkillHolder))
{ {
@@ -739,7 +703,6 @@ public class StatSet implements IParserAdvUtils
public Location getLocation(String key) public Location getLocation(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof Location)) if (!(obj instanceof Location))
{ {
@@ -751,7 +714,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public List<MinionHolder> getMinionList(String key) public List<MinionHolder> getMinionList(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof List<?>)) if (!(obj instanceof List<?>))
{ {
@@ -764,8 +726,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T> List<T> getList(String key, Class<T> clazz) public <T> List<T> getList(String key, Class<T> clazz)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(clazz);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof List<?>)) if (!(obj instanceof List<?>))
{ {
@@ -871,83 +831,61 @@ public class StatSet implements IParserAdvUtils
return (Map<K, V>) obj; return (Map<K, V>) obj;
} }
public StatSet set(String name, Object value) public void set(String name, Object value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(name, value); _set.put(name, value);
return this;
} }
public StatSet set(String key, boolean value) public void set(String key, byte value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, byte value) public void set(String key, short value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, short value) public void set(String key, int value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, int value) public void set(String key, long value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, long value) public void set(String key, float value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, float value) public void set(String key, double value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, double value) public void set(String key, String value)
{
_set.put(key, value);
return this;
}
public StatSet set(String key, String value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, Enum<?> value) public void set(String key, Enum<?> value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(key, value); _set.put(key, value);
return this;
}
public static StatSet valueOf(String key, Object value)
{
final StatSet set = new StatSet();
set.set(key, value);
return set;
} }
public void remove(String key) public void remove(String key)

View File

@@ -244,7 +244,9 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
player.teleToLocation(_instance.getEnterLocations().get(index++), 0, _instance); player.teleToLocation(_instance.getEnterLocations().get(index++), 0, _instance);
} }
getTimers().addTimer("match_start_countdown", StatSet.valueOf("time", 60), 100, null, null); final StatSet params = new StatSet();
params.set("time", 60);
getTimers().addTimer("match_start_countdown", params, 100, null, null);
getTimers().addTimer("teleport_message1", 10000, null, null); getTimers().addTimer("teleport_message1", 10000, null, null);
getTimers().addTimer("teleport_message2", 14000, null, null); getTimers().addTimer("teleport_message2", 14000, null, null);
@@ -400,7 +402,9 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
} }
} }
getTimers().cancelTimer("update", null, null); getTimers().cancelTimer("update", null, null);
getTimers().addTimer("match_end_countdown", StatSet.valueOf("time", 30), 30 * 1000, null, null); final StatSet params = new StatSet();
params.set("time", 30);
getTimers().addTimer("match_end_countdown", params, 30 * 1000, null, null);
EventDispatcher.getInstance().notifyEvent(new OnCeremonyOfChaosMatchResult(winners, members)); EventDispatcher.getInstance().notifyEvent(new OnCeremonyOfChaosMatchResult(winners, members));
} }
@@ -536,19 +540,23 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
// Reschedule // Reschedule
if (time == 60) if (time == 60)
{ {
getTimers().addTimer(event, params.set("time", 30), 30 * 1000, null, null); params.set("time", 30);
getTimers().addTimer(event, params, 30 * 1000, null, null);
} }
else if ((time == 30) || (time == 20)) else if ((time == 30) || (time == 20))
{ {
getTimers().addTimer(event, params.set("time", time - 10), 10 * 1000, null, null); params.set("time", time - 10);
getTimers().addTimer(event, params, 10 * 1000, null, null);
} }
else if (time == 10) else if (time == 10)
{ {
getTimers().addTimer(event, params.set("time", 5), 5 * 1000, null, null); params.set("time", 5);
getTimers().addTimer(event, params, 5 * 1000, null, null);
} }
else if ((time > 1) && (time <= 5)) else if ((time > 1) && (time <= 5))
{ {
getTimers().addTimer(event, params.set("time", time - 1), 1000, null, null); params.set("time", time - 1);
getTimers().addTimer(event, params, 1000, null, null);
} }
break; break;
} }
@@ -562,11 +570,13 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
// Reschedule // Reschedule
if ((time == 30) || (time == 20)) if ((time == 30) || (time == 20))
{ {
getTimers().addTimer(event, params.set("time", time - 10), 10 * 1000, null, null); params.set("time", time - 10);
getTimers().addTimer(event, params, 10 * 1000, null, null);
} }
else if ((time > 0) && (time <= 10)) else if ((time > 0) && (time <= 10))
{ {
getTimers().addTimer(event, params.set("time", time - 1), 1000, null, null); params.set("time", time - 1);
getTimers().addTimer(event, params, 1000, null, null);
} }
else if (time == 0) else if (time == 0)
{ {

View File

@@ -16,7 +16,6 @@
*/ */
package org.l2jmobius.gameserver.model.variables; package org.l2jmobius.gameserver.model.variables;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
@@ -31,55 +30,43 @@ public abstract class AbstractVariables extends StatSet implements IRestorable,
{ {
private final AtomicBoolean _hasChanges = new AtomicBoolean(false); private final AtomicBoolean _hasChanges = new AtomicBoolean(false);
public AbstractVariables()
{
super(new ConcurrentHashMap<>());
}
/** /**
* Overriding following methods to prevent from doing useless database operations if there is no changes since player's login. * Overriding following methods to prevent from doing useless database operations if there is no changes since player's login.
*/ */
@Override @Override
public StatSet set(String name, boolean value) public void set(String name, double value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, double value) public void set(String name, Enum<?> value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, Enum<?> value) public void set(String name, int value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, int value) public void set(String name, long value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, long value) public void set(String name, String value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
}
@Override
public StatSet set(String name, String value)
{
_hasChanges.compareAndSet(false, true);
return super.set(name, value);
} }
/** /**
@@ -87,15 +74,14 @@ public abstract class AbstractVariables extends StatSet implements IRestorable,
* @param name * @param name
* @param value * @param value
* @param markAsChanged * @param markAsChanged
* @return
*/ */
public StatSet set(String name, String value, boolean markAsChanged) public void set(String name, String value, boolean markAsChanged)
{ {
if (markAsChanged) if (markAsChanged)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
} }
return super.set(name, value); super.set(name, value);
} }
/** /**

View File

@@ -19,10 +19,9 @@ package org.l2jmobius.gameserver.model;
import java.time.Duration; import java.time.Duration;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Supplier; import java.util.function.Supplier;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
@@ -48,7 +47,7 @@ public class StatSet implements IParserAdvUtils
public StatSet() public StatSet()
{ {
this(ConcurrentHashMap::new); this(HashMap::new);
} }
public StatSet(Supplier<Map<String, Object>> mapFactory) public StatSet(Supplier<Map<String, Object>> mapFactory)
@@ -97,7 +96,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public boolean getBoolean(String key) public boolean getBoolean(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -126,7 +124,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public boolean getBoolean(String key, boolean defaultValue) public boolean getBoolean(String key, boolean defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -149,7 +146,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public byte getByte(String key) public byte getByte(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -172,7 +168,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public byte getByte(String key, byte defaultValue) public byte getByte(String key, byte defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -208,8 +203,6 @@ public class StatSet implements IParserAdvUtils
public byte[] getByteArray(String key, String splitOn) public byte[] getByteArray(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -241,8 +234,6 @@ public class StatSet implements IParserAdvUtils
public List<Byte> getByteList(String key, String splitOn) public List<Byte> getByteList(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final List<Byte> result = new ArrayList<>(); final List<Byte> result = new ArrayList<>();
for (Byte i : getByteArray(key, splitOn)) for (Byte i : getByteArray(key, splitOn))
{ {
@@ -254,7 +245,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public short getShort(String key) public short getShort(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -277,7 +267,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public short getShort(String key, short defaultValue) public short getShort(String key, short defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -314,7 +303,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public int getInt(String key) public int getInt(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -339,7 +327,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public int getInt(String key, int defaultValue) public int getInt(String key, int defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -375,8 +362,6 @@ public class StatSet implements IParserAdvUtils
public int[] getIntArray(String key, String splitOn) public int[] getIntArray(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -408,8 +393,6 @@ public class StatSet implements IParserAdvUtils
public List<Integer> getIntegerList(String key, String splitOn) public List<Integer> getIntegerList(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final List<Integer> result = new ArrayList<>(); final List<Integer> result = new ArrayList<>();
for (int i : getIntArray(key, splitOn)) for (int i : getIntArray(key, splitOn))
{ {
@@ -421,7 +404,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public long getLong(String key) public long getLong(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -444,7 +426,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public long getLong(String key, long defaultValue) public long getLong(String key, long defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -481,7 +462,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public float getFloat(String key) public float getFloat(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -504,7 +484,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public float getFloat(String key, float defaultValue) public float getFloat(String key, float defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -541,7 +520,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public double getDouble(String key) public double getDouble(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -564,7 +542,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public double getDouble(String key, double defaultValue) public double getDouble(String key, double defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -601,7 +578,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public String getString(String key) public String getString(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -613,7 +589,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public String getString(String key, String defaultValue) public String getString(String key, String defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -625,7 +600,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public Duration getDuration(String key) public Duration getDuration(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -637,7 +611,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public Duration getDuration(String key, Duration defaultValue) public Duration getDuration(String key, Duration defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -650,8 +623,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass) public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(enumClass);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -675,8 +646,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass, T defaultValue) public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass, T defaultValue)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(enumClass);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -699,8 +668,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <A> A getObject(String name, Class<A> type) public <A> A getObject(String name, Class<A> type)
{ {
Objects.requireNonNull(name);
Objects.requireNonNull(type);
final Object obj = _set.get(name); final Object obj = _set.get(name);
if ((obj == null) || !type.isAssignableFrom(obj.getClass())) if ((obj == null) || !type.isAssignableFrom(obj.getClass()))
{ {
@@ -713,8 +680,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <A> A getObject(String name, Class<A> type, A defaultValue) public <A> A getObject(String name, Class<A> type, A defaultValue)
{ {
Objects.requireNonNull(name);
Objects.requireNonNull(type);
final Object obj = _set.get(name); final Object obj = _set.get(name);
if ((obj == null) || !type.isAssignableFrom(obj.getClass())) if ((obj == null) || !type.isAssignableFrom(obj.getClass()))
{ {
@@ -726,7 +691,6 @@ public class StatSet implements IParserAdvUtils
public SkillHolder getSkillHolder(String key) public SkillHolder getSkillHolder(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof SkillHolder)) if (!(obj instanceof SkillHolder))
{ {
@@ -738,7 +702,6 @@ public class StatSet implements IParserAdvUtils
public Location getLocation(String key) public Location getLocation(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof Location)) if (!(obj instanceof Location))
{ {
@@ -750,8 +713,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T> List<T> getList(String key, Class<T> clazz) public <T> List<T> getList(String key, Class<T> clazz)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(clazz);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof List<?>)) if (!(obj instanceof List<?>))
{ {
@@ -857,76 +818,61 @@ public class StatSet implements IParserAdvUtils
return (Map<K, V>) obj; return (Map<K, V>) obj;
} }
public StatSet set(String name, Object value) public void set(String name, Object value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(name, value); _set.put(name, value);
return this;
} }
public StatSet set(String key, boolean value) public void set(String key, byte value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, byte value) public void set(String key, short value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, short value) public void set(String key, int value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, int value) public void set(String key, long value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, long value) public void set(String key, float value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, float value) public void set(String key, double value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, double value) public void set(String key, String value)
{
_set.put(key, value);
return this;
}
public StatSet set(String key, String value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, Enum<?> value) public void set(String key, Enum<?> value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(key, value); _set.put(key, value);
return this;
} }
/** /**
@@ -950,13 +896,6 @@ public class StatSet implements IParserAdvUtils
set(name, value); set(name, value);
} }
public static StatSet valueOf(String key, Object value)
{
final StatSet set = new StatSet();
set.set(key, value);
return set;
}
public void remove(String key) public void remove(String key)
{ {
_set.remove(key); _set.remove(key);

View File

@@ -16,7 +16,6 @@
*/ */
package org.l2jmobius.gameserver.model.variables; package org.l2jmobius.gameserver.model.variables;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
@@ -31,55 +30,58 @@ public abstract class AbstractVariables extends StatSet implements IRestorable,
{ {
private final AtomicBoolean _hasChanges = new AtomicBoolean(false); private final AtomicBoolean _hasChanges = new AtomicBoolean(false);
public AbstractVariables()
{
super(new ConcurrentHashMap<>());
}
/** /**
* Overriding following methods to prevent from doing useless database operations if there is no changes since player's login. * Overriding following methods to prevent from doing useless database operations if there is no changes since player's login.
*/ */
@Override @Override
public StatSet set(String name, boolean value) public void set(String name, double value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, double value) public void set(String name, Enum<?> value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, Enum<?> value) public void set(String name, int value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, int value) public void set(String name, long value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, long value) public void set(String name, String value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override /**
public StatSet set(String name, String value) * Put's entry to the variables and marks as changed if required (<i>Useful when restoring to do not save them again</i>).
* @param name
* @param value
* @param markAsChanged
*/
public void set(String name, String value, boolean markAsChanged)
{
if (markAsChanged)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); }
super.set(name, value);
} }
/** /**

View File

@@ -64,10 +64,7 @@ public class GlobalVariablesManager extends AbstractVariables
LOGGER.warning(getClass().getSimpleName() + ": Couldn't restore global variables."); LOGGER.warning(getClass().getSimpleName() + ": Couldn't restore global variables.");
return false; return false;
} }
finally
{
compareAndSetChanges(true, false);
}
LOGGER.info(getClass().getSimpleName() + ": Loaded " + getSet().size() + " variables."); LOGGER.info(getClass().getSimpleName() + ": Loaded " + getSet().size() + " variables.");
return true; return true;
} }
@@ -75,12 +72,6 @@ public class GlobalVariablesManager extends AbstractVariables
@Override @Override
public boolean storeMe() public boolean storeMe()
{ {
// No changes, nothing to store.
if (!hasChanges())
{
return false;
}
try (Connection con = DatabaseFactory.getConnection(); try (Connection con = DatabaseFactory.getConnection();
Statement del = con.createStatement(); Statement del = con.createStatement();
PreparedStatement st = con.prepareStatement(INSERT_QUERY)) PreparedStatement st = con.prepareStatement(INSERT_QUERY))
@@ -102,10 +93,7 @@ public class GlobalVariablesManager extends AbstractVariables
LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Couldn't save global variables to database.", e); LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Couldn't save global variables to database.", e);
return false; return false;
} }
finally
{
compareAndSetChanges(true, false);
}
LOGGER.info(getClass().getSimpleName() + ": Stored " + getSet().size() + " variables."); LOGGER.info(getClass().getSimpleName() + ": Stored " + getSet().size() + " variables.");
return true; return true;
} }

View File

@@ -19,10 +19,9 @@ package org.l2jmobius.gameserver.model;
import java.time.Duration; import java.time.Duration;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Supplier; import java.util.function.Supplier;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
@@ -49,7 +48,7 @@ public class StatSet implements IParserAdvUtils
public StatSet() public StatSet()
{ {
this(ConcurrentHashMap::new); this(HashMap::new);
} }
public StatSet(Supplier<Map<String, Object>> mapFactory) public StatSet(Supplier<Map<String, Object>> mapFactory)
@@ -98,7 +97,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public boolean getBoolean(String key) public boolean getBoolean(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -127,7 +125,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public boolean getBoolean(String key, boolean defaultValue) public boolean getBoolean(String key, boolean defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -150,7 +147,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public byte getByte(String key) public byte getByte(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -173,7 +169,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public byte getByte(String key, byte defaultValue) public byte getByte(String key, byte defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -209,8 +204,6 @@ public class StatSet implements IParserAdvUtils
public byte[] getByteArray(String key, String splitOn) public byte[] getByteArray(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -242,8 +235,6 @@ public class StatSet implements IParserAdvUtils
public List<Byte> getByteList(String key, String splitOn) public List<Byte> getByteList(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final List<Byte> result = new ArrayList<>(); final List<Byte> result = new ArrayList<>();
for (Byte i : getByteArray(key, splitOn)) for (Byte i : getByteArray(key, splitOn))
{ {
@@ -255,7 +246,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public short getShort(String key) public short getShort(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -278,7 +268,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public short getShort(String key, short defaultValue) public short getShort(String key, short defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -315,7 +304,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public int getInt(String key) public int getInt(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -340,7 +328,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public int getInt(String key, int defaultValue) public int getInt(String key, int defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -376,8 +363,6 @@ public class StatSet implements IParserAdvUtils
public int[] getIntArray(String key, String splitOn) public int[] getIntArray(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -409,8 +394,6 @@ public class StatSet implements IParserAdvUtils
public List<Integer> getIntegerList(String key, String splitOn) public List<Integer> getIntegerList(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final List<Integer> result = new ArrayList<>(); final List<Integer> result = new ArrayList<>();
for (int i : getIntArray(key, splitOn)) for (int i : getIntArray(key, splitOn))
{ {
@@ -422,7 +405,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public long getLong(String key) public long getLong(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -445,7 +427,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public long getLong(String key, long defaultValue) public long getLong(String key, long defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -482,7 +463,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public float getFloat(String key) public float getFloat(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -505,7 +485,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public float getFloat(String key, float defaultValue) public float getFloat(String key, float defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -542,7 +521,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public double getDouble(String key) public double getDouble(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -565,7 +543,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public double getDouble(String key, double defaultValue) public double getDouble(String key, double defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -602,7 +579,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public String getString(String key) public String getString(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -614,7 +590,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public String getString(String key, String defaultValue) public String getString(String key, String defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -626,7 +601,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public Duration getDuration(String key) public Duration getDuration(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -638,7 +612,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public Duration getDuration(String key, Duration defaultValue) public Duration getDuration(String key, Duration defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -651,8 +624,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass) public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(enumClass);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -676,8 +647,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass, T defaultValue) public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass, T defaultValue)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(enumClass);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -700,8 +669,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <A> A getObject(String name, Class<A> type) public <A> A getObject(String name, Class<A> type)
{ {
Objects.requireNonNull(name);
Objects.requireNonNull(type);
final Object obj = _set.get(name); final Object obj = _set.get(name);
if ((obj == null) || !type.isAssignableFrom(obj.getClass())) if ((obj == null) || !type.isAssignableFrom(obj.getClass()))
{ {
@@ -714,8 +681,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <A> A getObject(String name, Class<A> type, A defaultValue) public <A> A getObject(String name, Class<A> type, A defaultValue)
{ {
Objects.requireNonNull(name);
Objects.requireNonNull(type);
final Object obj = _set.get(name); final Object obj = _set.get(name);
if ((obj == null) || !type.isAssignableFrom(obj.getClass())) if ((obj == null) || !type.isAssignableFrom(obj.getClass()))
{ {
@@ -727,7 +692,6 @@ public class StatSet implements IParserAdvUtils
public SkillHolder getSkillHolder(String key) public SkillHolder getSkillHolder(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof SkillHolder)) if (!(obj instanceof SkillHolder))
{ {
@@ -739,7 +703,6 @@ public class StatSet implements IParserAdvUtils
public Location getLocation(String key) public Location getLocation(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof Location)) if (!(obj instanceof Location))
{ {
@@ -751,7 +714,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public List<MinionHolder> getMinionList(String key) public List<MinionHolder> getMinionList(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof List<?>)) if (!(obj instanceof List<?>))
{ {
@@ -764,8 +726,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T> List<T> getList(String key, Class<T> clazz) public <T> List<T> getList(String key, Class<T> clazz)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(clazz);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof List<?>)) if (!(obj instanceof List<?>))
{ {
@@ -871,83 +831,61 @@ public class StatSet implements IParserAdvUtils
return (Map<K, V>) obj; return (Map<K, V>) obj;
} }
public StatSet set(String name, Object value) public void set(String name, Object value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(name, value); _set.put(name, value);
return this;
} }
public StatSet set(String key, boolean value) public void set(String key, byte value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, byte value) public void set(String key, short value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, short value) public void set(String key, int value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, int value) public void set(String key, long value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, long value) public void set(String key, float value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, float value) public void set(String key, double value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, double value) public void set(String key, String value)
{
_set.put(key, value);
return this;
}
public StatSet set(String key, String value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, Enum<?> value) public void set(String key, Enum<?> value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(key, value); _set.put(key, value);
return this;
}
public static StatSet valueOf(String key, Object value)
{
final StatSet set = new StatSet();
set.set(key, value);
return set;
} }
public void remove(String key) public void remove(String key)

View File

@@ -16,7 +16,6 @@
*/ */
package org.l2jmobius.gameserver.model.variables; package org.l2jmobius.gameserver.model.variables;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
@@ -31,55 +30,43 @@ public abstract class AbstractVariables extends StatSet implements IRestorable,
{ {
private final AtomicBoolean _hasChanges = new AtomicBoolean(false); private final AtomicBoolean _hasChanges = new AtomicBoolean(false);
public AbstractVariables()
{
super(new ConcurrentHashMap<>());
}
/** /**
* Overriding following methods to prevent from doing useless database operations if there is no changes since player's login. * Overriding following methods to prevent from doing useless database operations if there is no changes since player's login.
*/ */
@Override @Override
public StatSet set(String name, boolean value) public void set(String name, double value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, double value) public void set(String name, Enum<?> value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, Enum<?> value) public void set(String name, int value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, int value) public void set(String name, long value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, long value) public void set(String name, String value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
}
@Override
public StatSet set(String name, String value)
{
_hasChanges.compareAndSet(false, true);
return super.set(name, value);
} }
/** /**
@@ -87,15 +74,14 @@ public abstract class AbstractVariables extends StatSet implements IRestorable,
* @param name * @param name
* @param value * @param value
* @param markAsChanged * @param markAsChanged
* @return
*/ */
public StatSet set(String name, String value, boolean markAsChanged) public void set(String name, String value, boolean markAsChanged)
{ {
if (markAsChanged) if (markAsChanged)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
} }
return super.set(name, value); super.set(name, value);
} }
/** /**

View File

@@ -64,10 +64,7 @@ public class GlobalVariablesManager extends AbstractVariables
LOGGER.warning(getClass().getSimpleName() + ": Couldn't restore global variables."); LOGGER.warning(getClass().getSimpleName() + ": Couldn't restore global variables.");
return false; return false;
} }
finally
{
compareAndSetChanges(true, false);
}
LOGGER.info(getClass().getSimpleName() + ": Loaded " + getSet().size() + " variables."); LOGGER.info(getClass().getSimpleName() + ": Loaded " + getSet().size() + " variables.");
return true; return true;
} }
@@ -75,12 +72,6 @@ public class GlobalVariablesManager extends AbstractVariables
@Override @Override
public boolean storeMe() public boolean storeMe()
{ {
// No changes, nothing to store.
if (!hasChanges())
{
return false;
}
try (Connection con = DatabaseFactory.getConnection(); try (Connection con = DatabaseFactory.getConnection();
Statement del = con.createStatement(); Statement del = con.createStatement();
PreparedStatement st = con.prepareStatement(INSERT_QUERY)) PreparedStatement st = con.prepareStatement(INSERT_QUERY))
@@ -102,10 +93,7 @@ public class GlobalVariablesManager extends AbstractVariables
LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Couldn't save global variables to database.", e); LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Couldn't save global variables to database.", e);
return false; return false;
} }
finally
{
compareAndSetChanges(true, false);
}
LOGGER.info(getClass().getSimpleName() + ": Stored " + getSet().size() + " variables."); LOGGER.info(getClass().getSimpleName() + ": Stored " + getSet().size() + " variables.");
return true; return true;
} }

View File

@@ -19,10 +19,9 @@ package org.l2jmobius.gameserver.model;
import java.time.Duration; import java.time.Duration;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Supplier; import java.util.function.Supplier;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
@@ -49,7 +48,7 @@ public class StatSet implements IParserAdvUtils
public StatSet() public StatSet()
{ {
this(ConcurrentHashMap::new); this(HashMap::new);
} }
public StatSet(Supplier<Map<String, Object>> mapFactory) public StatSet(Supplier<Map<String, Object>> mapFactory)
@@ -98,7 +97,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public boolean getBoolean(String key) public boolean getBoolean(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -127,7 +125,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public boolean getBoolean(String key, boolean defaultValue) public boolean getBoolean(String key, boolean defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -150,7 +147,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public byte getByte(String key) public byte getByte(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -173,7 +169,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public byte getByte(String key, byte defaultValue) public byte getByte(String key, byte defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -209,8 +204,6 @@ public class StatSet implements IParserAdvUtils
public byte[] getByteArray(String key, String splitOn) public byte[] getByteArray(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -242,8 +235,6 @@ public class StatSet implements IParserAdvUtils
public List<Byte> getByteList(String key, String splitOn) public List<Byte> getByteList(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final List<Byte> result = new ArrayList<>(); final List<Byte> result = new ArrayList<>();
for (Byte i : getByteArray(key, splitOn)) for (Byte i : getByteArray(key, splitOn))
{ {
@@ -255,7 +246,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public short getShort(String key) public short getShort(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -278,7 +268,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public short getShort(String key, short defaultValue) public short getShort(String key, short defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -315,7 +304,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public int getInt(String key) public int getInt(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -340,7 +328,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public int getInt(String key, int defaultValue) public int getInt(String key, int defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -376,8 +363,6 @@ public class StatSet implements IParserAdvUtils
public int[] getIntArray(String key, String splitOn) public int[] getIntArray(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -409,8 +394,6 @@ public class StatSet implements IParserAdvUtils
public List<Integer> getIntegerList(String key, String splitOn) public List<Integer> getIntegerList(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final List<Integer> result = new ArrayList<>(); final List<Integer> result = new ArrayList<>();
for (int i : getIntArray(key, splitOn)) for (int i : getIntArray(key, splitOn))
{ {
@@ -422,7 +405,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public long getLong(String key) public long getLong(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -445,7 +427,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public long getLong(String key, long defaultValue) public long getLong(String key, long defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -482,7 +463,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public float getFloat(String key) public float getFloat(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -505,7 +485,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public float getFloat(String key, float defaultValue) public float getFloat(String key, float defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -542,7 +521,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public double getDouble(String key) public double getDouble(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -565,7 +543,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public double getDouble(String key, double defaultValue) public double getDouble(String key, double defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -602,7 +579,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public String getString(String key) public String getString(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -614,7 +590,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public String getString(String key, String defaultValue) public String getString(String key, String defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -626,7 +601,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public Duration getDuration(String key) public Duration getDuration(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -638,7 +612,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public Duration getDuration(String key, Duration defaultValue) public Duration getDuration(String key, Duration defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -651,8 +624,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass) public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(enumClass);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -676,8 +647,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass, T defaultValue) public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass, T defaultValue)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(enumClass);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -700,8 +669,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <A> A getObject(String name, Class<A> type) public <A> A getObject(String name, Class<A> type)
{ {
Objects.requireNonNull(name);
Objects.requireNonNull(type);
final Object obj = _set.get(name); final Object obj = _set.get(name);
if ((obj == null) || !type.isAssignableFrom(obj.getClass())) if ((obj == null) || !type.isAssignableFrom(obj.getClass()))
{ {
@@ -714,8 +681,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <A> A getObject(String name, Class<A> type, A defaultValue) public <A> A getObject(String name, Class<A> type, A defaultValue)
{ {
Objects.requireNonNull(name);
Objects.requireNonNull(type);
final Object obj = _set.get(name); final Object obj = _set.get(name);
if ((obj == null) || !type.isAssignableFrom(obj.getClass())) if ((obj == null) || !type.isAssignableFrom(obj.getClass()))
{ {
@@ -727,7 +692,6 @@ public class StatSet implements IParserAdvUtils
public SkillHolder getSkillHolder(String key) public SkillHolder getSkillHolder(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof SkillHolder)) if (!(obj instanceof SkillHolder))
{ {
@@ -739,7 +703,6 @@ public class StatSet implements IParserAdvUtils
public Location getLocation(String key) public Location getLocation(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof Location)) if (!(obj instanceof Location))
{ {
@@ -751,7 +714,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public List<MinionHolder> getMinionList(String key) public List<MinionHolder> getMinionList(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof List<?>)) if (!(obj instanceof List<?>))
{ {
@@ -764,8 +726,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T> List<T> getList(String key, Class<T> clazz) public <T> List<T> getList(String key, Class<T> clazz)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(clazz);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof List<?>)) if (!(obj instanceof List<?>))
{ {
@@ -871,83 +831,61 @@ public class StatSet implements IParserAdvUtils
return (Map<K, V>) obj; return (Map<K, V>) obj;
} }
public StatSet set(String name, Object value) public void set(String name, Object value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(name, value); _set.put(name, value);
return this;
} }
public StatSet set(String key, boolean value) public void set(String key, byte value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, byte value) public void set(String key, short value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, short value) public void set(String key, int value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, int value) public void set(String key, long value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, long value) public void set(String key, float value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, float value) public void set(String key, double value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, double value) public void set(String key, String value)
{
_set.put(key, value);
return this;
}
public StatSet set(String key, String value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, Enum<?> value) public void set(String key, Enum<?> value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(key, value); _set.put(key, value);
return this;
}
public static StatSet valueOf(String key, Object value)
{
final StatSet set = new StatSet();
set.set(key, value);
return set;
} }
public void remove(String key) public void remove(String key)

View File

@@ -16,7 +16,6 @@
*/ */
package org.l2jmobius.gameserver.model.variables; package org.l2jmobius.gameserver.model.variables;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
@@ -31,55 +30,43 @@ public abstract class AbstractVariables extends StatSet implements IRestorable,
{ {
private final AtomicBoolean _hasChanges = new AtomicBoolean(false); private final AtomicBoolean _hasChanges = new AtomicBoolean(false);
public AbstractVariables()
{
super(new ConcurrentHashMap<>());
}
/** /**
* Overriding following methods to prevent from doing useless database operations if there is no changes since player's login. * Overriding following methods to prevent from doing useless database operations if there is no changes since player's login.
*/ */
@Override @Override
public StatSet set(String name, boolean value) public void set(String name, double value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, double value) public void set(String name, Enum<?> value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, Enum<?> value) public void set(String name, int value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, int value) public void set(String name, long value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, long value) public void set(String name, String value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
}
@Override
public StatSet set(String name, String value)
{
_hasChanges.compareAndSet(false, true);
return super.set(name, value);
} }
/** /**
@@ -87,15 +74,14 @@ public abstract class AbstractVariables extends StatSet implements IRestorable,
* @param name * @param name
* @param value * @param value
* @param markAsChanged * @param markAsChanged
* @return
*/ */
public StatSet set(String name, String value, boolean markAsChanged) public void set(String name, String value, boolean markAsChanged)
{ {
if (markAsChanged) if (markAsChanged)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
} }
return super.set(name, value); super.set(name, value);
} }
/** /**

View File

@@ -180,8 +180,9 @@ public class CeremonyOfChaosManager extends AbstractEventManager<CeremonyOfChaos
} }
} }
} }
final StatSet params = new StatSet();
getTimers().addTimer("count_down", StatSet.valueOf("time", 60), 60 * 1000, null, null); params.set("time", 60);
getTimers().addTimer("count_down", params, 60 * 1000, null, null);
} }
@ScheduleTarget @ScheduleTarget
@@ -268,15 +269,18 @@ public class CeremonyOfChaosManager extends AbstractEventManager<CeremonyOfChaos
// Reschedule // Reschedule
if (time == 60) if (time == 60)
{ {
getTimers().addTimer(event, params.set("time", 10), 50 * 1000, null, null); params.set("time", 10);
getTimers().addTimer(event, params, 50 * 1000, null, null);
} }
else if (time == 10) else if (time == 10)
{ {
getTimers().addTimer(event, params.set("time", 5), 5 * 1000, null, null); params.set("time", 5);
getTimers().addTimer(event, params, 5 * 1000, null, null);
} }
else if ((time > 1) && (time <= 5)) else if ((time > 1) && (time <= 5))
{ {
getTimers().addTimer(event, params.set("time", time - 1), 1000, null, null); params.set("time", time - 1);
getTimers().addTimer(event, params, 1000, null, null);
} }
break; break;
} }

View File

@@ -70,10 +70,7 @@ public class GlobalVariablesManager extends AbstractVariables
LOGGER.warning(getClass().getSimpleName() + ": Couldn't restore global variables."); LOGGER.warning(getClass().getSimpleName() + ": Couldn't restore global variables.");
return false; return false;
} }
finally
{
compareAndSetChanges(true, false);
}
LOGGER.info(getClass().getSimpleName() + ": Loaded " + getSet().size() + " variables."); LOGGER.info(getClass().getSimpleName() + ": Loaded " + getSet().size() + " variables.");
return true; return true;
} }
@@ -81,12 +78,6 @@ public class GlobalVariablesManager extends AbstractVariables
@Override @Override
public boolean storeMe() public boolean storeMe()
{ {
// No changes, nothing to store.
if (!hasChanges())
{
return false;
}
try (Connection con = DatabaseFactory.getConnection(); try (Connection con = DatabaseFactory.getConnection();
Statement del = con.createStatement(); Statement del = con.createStatement();
PreparedStatement st = con.prepareStatement(INSERT_QUERY)) PreparedStatement st = con.prepareStatement(INSERT_QUERY))
@@ -108,10 +99,7 @@ public class GlobalVariablesManager extends AbstractVariables
LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Couldn't save global variables to database.", e); LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Couldn't save global variables to database.", e);
return false; return false;
} }
finally
{
compareAndSetChanges(true, false);
}
LOGGER.info(getClass().getSimpleName() + ": Stored " + getSet().size() + " variables."); LOGGER.info(getClass().getSimpleName() + ": Stored " + getSet().size() + " variables.");
return true; return true;
} }

View File

@@ -19,10 +19,9 @@ package org.l2jmobius.gameserver.model;
import java.time.Duration; import java.time.Duration;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Supplier; import java.util.function.Supplier;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
@@ -49,7 +48,7 @@ public class StatSet implements IParserAdvUtils
public StatSet() public StatSet()
{ {
this(ConcurrentHashMap::new); this(HashMap::new);
} }
public StatSet(Supplier<Map<String, Object>> mapFactory) public StatSet(Supplier<Map<String, Object>> mapFactory)
@@ -98,7 +97,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public boolean getBoolean(String key) public boolean getBoolean(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -127,7 +125,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public boolean getBoolean(String key, boolean defaultValue) public boolean getBoolean(String key, boolean defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -150,7 +147,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public byte getByte(String key) public byte getByte(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -173,7 +169,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public byte getByte(String key, byte defaultValue) public byte getByte(String key, byte defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -209,8 +204,6 @@ public class StatSet implements IParserAdvUtils
public byte[] getByteArray(String key, String splitOn) public byte[] getByteArray(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -242,8 +235,6 @@ public class StatSet implements IParserAdvUtils
public List<Byte> getByteList(String key, String splitOn) public List<Byte> getByteList(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final List<Byte> result = new ArrayList<>(); final List<Byte> result = new ArrayList<>();
for (Byte i : getByteArray(key, splitOn)) for (Byte i : getByteArray(key, splitOn))
{ {
@@ -255,7 +246,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public short getShort(String key) public short getShort(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -278,7 +268,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public short getShort(String key, short defaultValue) public short getShort(String key, short defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -315,7 +304,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public int getInt(String key) public int getInt(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -340,7 +328,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public int getInt(String key, int defaultValue) public int getInt(String key, int defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -376,8 +363,6 @@ public class StatSet implements IParserAdvUtils
public int[] getIntArray(String key, String splitOn) public int[] getIntArray(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -409,8 +394,6 @@ public class StatSet implements IParserAdvUtils
public List<Integer> getIntegerList(String key, String splitOn) public List<Integer> getIntegerList(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final List<Integer> result = new ArrayList<>(); final List<Integer> result = new ArrayList<>();
for (int i : getIntArray(key, splitOn)) for (int i : getIntArray(key, splitOn))
{ {
@@ -422,7 +405,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public long getLong(String key) public long getLong(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -445,7 +427,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public long getLong(String key, long defaultValue) public long getLong(String key, long defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -482,7 +463,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public float getFloat(String key) public float getFloat(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -505,7 +485,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public float getFloat(String key, float defaultValue) public float getFloat(String key, float defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -542,7 +521,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public double getDouble(String key) public double getDouble(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -565,7 +543,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public double getDouble(String key, double defaultValue) public double getDouble(String key, double defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -602,7 +579,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public String getString(String key) public String getString(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -614,7 +590,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public String getString(String key, String defaultValue) public String getString(String key, String defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -626,7 +601,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public Duration getDuration(String key) public Duration getDuration(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -638,7 +612,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public Duration getDuration(String key, Duration defaultValue) public Duration getDuration(String key, Duration defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -651,8 +624,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass) public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(enumClass);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -676,8 +647,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass, T defaultValue) public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass, T defaultValue)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(enumClass);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -700,8 +669,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <A> A getObject(String name, Class<A> type) public <A> A getObject(String name, Class<A> type)
{ {
Objects.requireNonNull(name);
Objects.requireNonNull(type);
final Object obj = _set.get(name); final Object obj = _set.get(name);
if ((obj == null) || !type.isAssignableFrom(obj.getClass())) if ((obj == null) || !type.isAssignableFrom(obj.getClass()))
{ {
@@ -714,8 +681,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <A> A getObject(String name, Class<A> type, A defaultValue) public <A> A getObject(String name, Class<A> type, A defaultValue)
{ {
Objects.requireNonNull(name);
Objects.requireNonNull(type);
final Object obj = _set.get(name); final Object obj = _set.get(name);
if ((obj == null) || !type.isAssignableFrom(obj.getClass())) if ((obj == null) || !type.isAssignableFrom(obj.getClass()))
{ {
@@ -727,7 +692,6 @@ public class StatSet implements IParserAdvUtils
public SkillHolder getSkillHolder(String key) public SkillHolder getSkillHolder(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof SkillHolder)) if (!(obj instanceof SkillHolder))
{ {
@@ -739,7 +703,6 @@ public class StatSet implements IParserAdvUtils
public Location getLocation(String key) public Location getLocation(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof Location)) if (!(obj instanceof Location))
{ {
@@ -751,7 +714,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public List<MinionHolder> getMinionList(String key) public List<MinionHolder> getMinionList(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof List<?>)) if (!(obj instanceof List<?>))
{ {
@@ -764,8 +726,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T> List<T> getList(String key, Class<T> clazz) public <T> List<T> getList(String key, Class<T> clazz)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(clazz);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof List<?>)) if (!(obj instanceof List<?>))
{ {
@@ -871,83 +831,61 @@ public class StatSet implements IParserAdvUtils
return (Map<K, V>) obj; return (Map<K, V>) obj;
} }
public StatSet set(String name, Object value) public void set(String name, Object value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(name, value); _set.put(name, value);
return this;
} }
public StatSet set(String key, boolean value) public void set(String key, byte value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, byte value) public void set(String key, short value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, short value) public void set(String key, int value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, int value) public void set(String key, long value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, long value) public void set(String key, float value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, float value) public void set(String key, double value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, double value) public void set(String key, String value)
{
_set.put(key, value);
return this;
}
public StatSet set(String key, String value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, Enum<?> value) public void set(String key, Enum<?> value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(key, value); _set.put(key, value);
return this;
}
public static StatSet valueOf(String key, Object value)
{
final StatSet set = new StatSet();
set.set(key, value);
return set;
} }
public void remove(String key) public void remove(String key)

View File

@@ -244,7 +244,9 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
player.teleToLocation(_instance.getEnterLocations().get(index++), 0, _instance); player.teleToLocation(_instance.getEnterLocations().get(index++), 0, _instance);
} }
getTimers().addTimer("match_start_countdown", StatSet.valueOf("time", 60), 100, null, null); final StatSet params = new StatSet();
params.set("time", 60);
getTimers().addTimer("match_start_countdown", params, 100, null, null);
getTimers().addTimer("teleport_message1", 10000, null, null); getTimers().addTimer("teleport_message1", 10000, null, null);
getTimers().addTimer("teleport_message2", 14000, null, null); getTimers().addTimer("teleport_message2", 14000, null, null);
@@ -394,7 +396,9 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
} }
} }
getTimers().cancelTimer("update", null, null); getTimers().cancelTimer("update", null, null);
getTimers().addTimer("match_end_countdown", StatSet.valueOf("time", 30), 30 * 1000, null, null); final StatSet params = new StatSet();
params.set("time", 30);
getTimers().addTimer("match_end_countdown", params, 30 * 1000, null, null);
EventDispatcher.getInstance().notifyEvent(new OnCeremonyOfChaosMatchResult(winners, members)); EventDispatcher.getInstance().notifyEvent(new OnCeremonyOfChaosMatchResult(winners, members));
} }
@@ -530,19 +534,23 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
// Reschedule // Reschedule
if (time == 60) if (time == 60)
{ {
getTimers().addTimer(event, params.set("time", 30), 30 * 1000, null, null); params.set("time", 30);
getTimers().addTimer(event, params, 30 * 1000, null, null);
} }
else if ((time == 30) || (time == 20)) else if ((time == 30) || (time == 20))
{ {
getTimers().addTimer(event, params.set("time", time - 10), 10 * 1000, null, null); params.set("time", time - 10);
getTimers().addTimer(event, params, 10 * 1000, null, null);
} }
else if (time == 10) else if (time == 10)
{ {
getTimers().addTimer(event, params.set("time", 5), 5 * 1000, null, null); params.set("time", 5);
getTimers().addTimer(event, params, 5 * 1000, null, null);
} }
else if ((time > 1) && (time <= 5)) else if ((time > 1) && (time <= 5))
{ {
getTimers().addTimer(event, params.set("time", time - 1), 1000, null, null); params.set("time", time - 1);
getTimers().addTimer(event, params, 1000, null, null);
} }
break; break;
} }
@@ -556,11 +564,13 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
// Reschedule // Reschedule
if ((time == 30) || (time == 20)) if ((time == 30) || (time == 20))
{ {
getTimers().addTimer(event, params.set("time", time - 10), 10 * 1000, null, null); params.set("time", time - 10);
getTimers().addTimer(event, params, 10 * 1000, null, null);
} }
else if ((time > 0) && (time <= 10)) else if ((time > 0) && (time <= 10))
{ {
getTimers().addTimer(event, params.set("time", time - 1), 1000, null, null); params.set("time", time - 1);
getTimers().addTimer(event, params, 1000, null, null);
} }
else if (time == 0) else if (time == 0)
{ {

View File

@@ -16,7 +16,6 @@
*/ */
package org.l2jmobius.gameserver.model.variables; package org.l2jmobius.gameserver.model.variables;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
@@ -31,55 +30,43 @@ public abstract class AbstractVariables extends StatSet implements IRestorable,
{ {
private final AtomicBoolean _hasChanges = new AtomicBoolean(false); private final AtomicBoolean _hasChanges = new AtomicBoolean(false);
public AbstractVariables()
{
super(new ConcurrentHashMap<>());
}
/** /**
* Overriding following methods to prevent from doing useless database operations if there is no changes since player's login. * Overriding following methods to prevent from doing useless database operations if there is no changes since player's login.
*/ */
@Override @Override
public StatSet set(String name, boolean value) public void set(String name, double value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, double value) public void set(String name, Enum<?> value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, Enum<?> value) public void set(String name, int value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, int value) public void set(String name, long value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, long value) public void set(String name, String value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
}
@Override
public StatSet set(String name, String value)
{
_hasChanges.compareAndSet(false, true);
return super.set(name, value);
} }
/** /**
@@ -87,15 +74,14 @@ public abstract class AbstractVariables extends StatSet implements IRestorable,
* @param name * @param name
* @param value * @param value
* @param markAsChanged * @param markAsChanged
* @return
*/ */
public StatSet set(String name, String value, boolean markAsChanged) public void set(String name, String value, boolean markAsChanged)
{ {
if (markAsChanged) if (markAsChanged)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
} }
return super.set(name, value); super.set(name, value);
} }
/** /**

View File

@@ -180,8 +180,9 @@ public class CeremonyOfChaosManager extends AbstractEventManager<CeremonyOfChaos
} }
} }
} }
final StatSet params = new StatSet();
getTimers().addTimer("count_down", StatSet.valueOf("time", 60), 60 * 1000, null, null); params.set("time", 60);
getTimers().addTimer("count_down", params, 60 * 1000, null, null);
} }
@ScheduleTarget @ScheduleTarget
@@ -268,15 +269,18 @@ public class CeremonyOfChaosManager extends AbstractEventManager<CeremonyOfChaos
// Reschedule // Reschedule
if (time == 60) if (time == 60)
{ {
getTimers().addTimer(event, params.set("time", 10), 50 * 1000, null, null); params.set("time", 10);
getTimers().addTimer(event, params, 50 * 1000, null, null);
} }
else if (time == 10) else if (time == 10)
{ {
getTimers().addTimer(event, params.set("time", 5), 5 * 1000, null, null); params.set("time", 5);
getTimers().addTimer(event, params, 5 * 1000, null, null);
} }
else if ((time > 1) && (time <= 5)) else if ((time > 1) && (time <= 5))
{ {
getTimers().addTimer(event, params.set("time", time - 1), 1000, null, null); params.set("time", time - 1);
getTimers().addTimer(event, params, 1000, null, null);
} }
break; break;
} }

View File

@@ -70,10 +70,7 @@ public class GlobalVariablesManager extends AbstractVariables
LOGGER.warning(getClass().getSimpleName() + ": Couldn't restore global variables."); LOGGER.warning(getClass().getSimpleName() + ": Couldn't restore global variables.");
return false; return false;
} }
finally
{
compareAndSetChanges(true, false);
}
LOGGER.info(getClass().getSimpleName() + ": Loaded " + getSet().size() + " variables."); LOGGER.info(getClass().getSimpleName() + ": Loaded " + getSet().size() + " variables.");
return true; return true;
} }
@@ -81,12 +78,6 @@ public class GlobalVariablesManager extends AbstractVariables
@Override @Override
public boolean storeMe() public boolean storeMe()
{ {
// No changes, nothing to store.
if (!hasChanges())
{
return false;
}
try (Connection con = DatabaseFactory.getConnection(); try (Connection con = DatabaseFactory.getConnection();
Statement del = con.createStatement(); Statement del = con.createStatement();
PreparedStatement st = con.prepareStatement(INSERT_QUERY)) PreparedStatement st = con.prepareStatement(INSERT_QUERY))
@@ -108,10 +99,7 @@ public class GlobalVariablesManager extends AbstractVariables
LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Couldn't save global variables to database.", e); LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Couldn't save global variables to database.", e);
return false; return false;
} }
finally
{
compareAndSetChanges(true, false);
}
LOGGER.info(getClass().getSimpleName() + ": Stored " + getSet().size() + " variables."); LOGGER.info(getClass().getSimpleName() + ": Stored " + getSet().size() + " variables.");
return true; return true;
} }

View File

@@ -19,10 +19,9 @@ package org.l2jmobius.gameserver.model;
import java.time.Duration; import java.time.Duration;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Supplier; import java.util.function.Supplier;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
@@ -49,7 +48,7 @@ public class StatSet implements IParserAdvUtils
public StatSet() public StatSet()
{ {
this(ConcurrentHashMap::new); this(HashMap::new);
} }
public StatSet(Supplier<Map<String, Object>> mapFactory) public StatSet(Supplier<Map<String, Object>> mapFactory)
@@ -98,7 +97,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public boolean getBoolean(String key) public boolean getBoolean(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -127,7 +125,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public boolean getBoolean(String key, boolean defaultValue) public boolean getBoolean(String key, boolean defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -150,7 +147,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public byte getByte(String key) public byte getByte(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -173,7 +169,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public byte getByte(String key, byte defaultValue) public byte getByte(String key, byte defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -209,8 +204,6 @@ public class StatSet implements IParserAdvUtils
public byte[] getByteArray(String key, String splitOn) public byte[] getByteArray(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -242,8 +235,6 @@ public class StatSet implements IParserAdvUtils
public List<Byte> getByteList(String key, String splitOn) public List<Byte> getByteList(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final List<Byte> result = new ArrayList<>(); final List<Byte> result = new ArrayList<>();
for (Byte i : getByteArray(key, splitOn)) for (Byte i : getByteArray(key, splitOn))
{ {
@@ -255,7 +246,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public short getShort(String key) public short getShort(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -278,7 +268,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public short getShort(String key, short defaultValue) public short getShort(String key, short defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -315,7 +304,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public int getInt(String key) public int getInt(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -340,7 +328,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public int getInt(String key, int defaultValue) public int getInt(String key, int defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -376,8 +363,6 @@ public class StatSet implements IParserAdvUtils
public int[] getIntArray(String key, String splitOn) public int[] getIntArray(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -409,8 +394,6 @@ public class StatSet implements IParserAdvUtils
public List<Integer> getIntegerList(String key, String splitOn) public List<Integer> getIntegerList(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final List<Integer> result = new ArrayList<>(); final List<Integer> result = new ArrayList<>();
for (int i : getIntArray(key, splitOn)) for (int i : getIntArray(key, splitOn))
{ {
@@ -422,7 +405,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public long getLong(String key) public long getLong(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -445,7 +427,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public long getLong(String key, long defaultValue) public long getLong(String key, long defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -482,7 +463,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public float getFloat(String key) public float getFloat(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -505,7 +485,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public float getFloat(String key, float defaultValue) public float getFloat(String key, float defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -542,7 +521,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public double getDouble(String key) public double getDouble(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -565,7 +543,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public double getDouble(String key, double defaultValue) public double getDouble(String key, double defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -602,7 +579,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public String getString(String key) public String getString(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -614,7 +590,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public String getString(String key, String defaultValue) public String getString(String key, String defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -626,7 +601,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public Duration getDuration(String key) public Duration getDuration(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -638,7 +612,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public Duration getDuration(String key, Duration defaultValue) public Duration getDuration(String key, Duration defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -651,8 +624,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass) public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(enumClass);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -676,8 +647,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass, T defaultValue) public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass, T defaultValue)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(enumClass);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -700,8 +669,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <A> A getObject(String name, Class<A> type) public <A> A getObject(String name, Class<A> type)
{ {
Objects.requireNonNull(name);
Objects.requireNonNull(type);
final Object obj = _set.get(name); final Object obj = _set.get(name);
if ((obj == null) || !type.isAssignableFrom(obj.getClass())) if ((obj == null) || !type.isAssignableFrom(obj.getClass()))
{ {
@@ -714,8 +681,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <A> A getObject(String name, Class<A> type, A defaultValue) public <A> A getObject(String name, Class<A> type, A defaultValue)
{ {
Objects.requireNonNull(name);
Objects.requireNonNull(type);
final Object obj = _set.get(name); final Object obj = _set.get(name);
if ((obj == null) || !type.isAssignableFrom(obj.getClass())) if ((obj == null) || !type.isAssignableFrom(obj.getClass()))
{ {
@@ -727,7 +692,6 @@ public class StatSet implements IParserAdvUtils
public SkillHolder getSkillHolder(String key) public SkillHolder getSkillHolder(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof SkillHolder)) if (!(obj instanceof SkillHolder))
{ {
@@ -739,7 +703,6 @@ public class StatSet implements IParserAdvUtils
public Location getLocation(String key) public Location getLocation(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof Location)) if (!(obj instanceof Location))
{ {
@@ -751,7 +714,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public List<MinionHolder> getMinionList(String key) public List<MinionHolder> getMinionList(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof List<?>)) if (!(obj instanceof List<?>))
{ {
@@ -764,8 +726,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T> List<T> getList(String key, Class<T> clazz) public <T> List<T> getList(String key, Class<T> clazz)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(clazz);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof List<?>)) if (!(obj instanceof List<?>))
{ {
@@ -871,83 +831,61 @@ public class StatSet implements IParserAdvUtils
return (Map<K, V>) obj; return (Map<K, V>) obj;
} }
public StatSet set(String name, Object value) public void set(String name, Object value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(name, value); _set.put(name, value);
return this;
} }
public StatSet set(String key, boolean value) public void set(String key, byte value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, byte value) public void set(String key, short value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, short value) public void set(String key, int value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, int value) public void set(String key, long value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, long value) public void set(String key, float value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, float value) public void set(String key, double value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, double value) public void set(String key, String value)
{
_set.put(key, value);
return this;
}
public StatSet set(String key, String value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, Enum<?> value) public void set(String key, Enum<?> value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(key, value); _set.put(key, value);
return this;
}
public static StatSet valueOf(String key, Object value)
{
final StatSet set = new StatSet();
set.set(key, value);
return set;
} }
public void remove(String key) public void remove(String key)

View File

@@ -244,7 +244,9 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
player.teleToLocation(_instance.getEnterLocations().get(index++), 0, _instance); player.teleToLocation(_instance.getEnterLocations().get(index++), 0, _instance);
} }
getTimers().addTimer("match_start_countdown", StatSet.valueOf("time", 60), 100, null, null); final StatSet params = new StatSet();
params.set("time", 60);
getTimers().addTimer("match_start_countdown", params, 100, null, null);
getTimers().addTimer("teleport_message1", 10000, null, null); getTimers().addTimer("teleport_message1", 10000, null, null);
getTimers().addTimer("teleport_message2", 14000, null, null); getTimers().addTimer("teleport_message2", 14000, null, null);
@@ -394,7 +396,9 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
} }
} }
getTimers().cancelTimer("update", null, null); getTimers().cancelTimer("update", null, null);
getTimers().addTimer("match_end_countdown", StatSet.valueOf("time", 30), 30 * 1000, null, null); final StatSet params = new StatSet();
params.set("time", 30);
getTimers().addTimer("match_end_countdown", params, 30 * 1000, null, null);
EventDispatcher.getInstance().notifyEvent(new OnCeremonyOfChaosMatchResult(winners, members)); EventDispatcher.getInstance().notifyEvent(new OnCeremonyOfChaosMatchResult(winners, members));
} }
@@ -530,19 +534,23 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
// Reschedule // Reschedule
if (time == 60) if (time == 60)
{ {
getTimers().addTimer(event, params.set("time", 30), 30 * 1000, null, null); params.set("time", 30);
getTimers().addTimer(event, params, 30 * 1000, null, null);
} }
else if ((time == 30) || (time == 20)) else if ((time == 30) || (time == 20))
{ {
getTimers().addTimer(event, params.set("time", time - 10), 10 * 1000, null, null); params.set("time", time - 10);
getTimers().addTimer(event, params, 10 * 1000, null, null);
} }
else if (time == 10) else if (time == 10)
{ {
getTimers().addTimer(event, params.set("time", 5), 5 * 1000, null, null); params.set("time", 5);
getTimers().addTimer(event, params, 5 * 1000, null, null);
} }
else if ((time > 1) && (time <= 5)) else if ((time > 1) && (time <= 5))
{ {
getTimers().addTimer(event, params.set("time", time - 1), 1000, null, null); params.set("time", time - 1);
getTimers().addTimer(event, params, 1000, null, null);
} }
break; break;
} }
@@ -556,11 +564,13 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
// Reschedule // Reschedule
if ((time == 30) || (time == 20)) if ((time == 30) || (time == 20))
{ {
getTimers().addTimer(event, params.set("time", time - 10), 10 * 1000, null, null); params.set("time", time - 10);
getTimers().addTimer(event, params, 10 * 1000, null, null);
} }
else if ((time > 0) && (time <= 10)) else if ((time > 0) && (time <= 10))
{ {
getTimers().addTimer(event, params.set("time", time - 1), 1000, null, null); params.set("time", time - 1);
getTimers().addTimer(event, params, 1000, null, null);
} }
else if (time == 0) else if (time == 0)
{ {

View File

@@ -16,7 +16,6 @@
*/ */
package org.l2jmobius.gameserver.model.variables; package org.l2jmobius.gameserver.model.variables;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
@@ -31,55 +30,43 @@ public abstract class AbstractVariables extends StatSet implements IRestorable,
{ {
private final AtomicBoolean _hasChanges = new AtomicBoolean(false); private final AtomicBoolean _hasChanges = new AtomicBoolean(false);
public AbstractVariables()
{
super(new ConcurrentHashMap<>());
}
/** /**
* Overriding following methods to prevent from doing useless database operations if there is no changes since player's login. * Overriding following methods to prevent from doing useless database operations if there is no changes since player's login.
*/ */
@Override @Override
public StatSet set(String name, boolean value) public void set(String name, double value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, double value) public void set(String name, Enum<?> value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, Enum<?> value) public void set(String name, int value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, int value) public void set(String name, long value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, long value) public void set(String name, String value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
}
@Override
public StatSet set(String name, String value)
{
_hasChanges.compareAndSet(false, true);
return super.set(name, value);
} }
/** /**
@@ -87,15 +74,14 @@ public abstract class AbstractVariables extends StatSet implements IRestorable,
* @param name * @param name
* @param value * @param value
* @param markAsChanged * @param markAsChanged
* @return
*/ */
public StatSet set(String name, String value, boolean markAsChanged) public void set(String name, String value, boolean markAsChanged)
{ {
if (markAsChanged) if (markAsChanged)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
} }
return super.set(name, value); super.set(name, value);
} }
/** /**

View File

@@ -180,8 +180,9 @@ public class CeremonyOfChaosManager extends AbstractEventManager<CeremonyOfChaos
} }
} }
} }
final StatSet params = new StatSet();
getTimers().addTimer("count_down", StatSet.valueOf("time", 60), 60 * 1000, null, null); params.set("time", 60);
getTimers().addTimer("count_down", params, 60 * 1000, null, null);
} }
@ScheduleTarget @ScheduleTarget
@@ -268,15 +269,18 @@ public class CeremonyOfChaosManager extends AbstractEventManager<CeremonyOfChaos
// Reschedule // Reschedule
if (time == 60) if (time == 60)
{ {
getTimers().addTimer(event, params.set("time", 10), 50 * 1000, null, null); params.set("time", 10);
getTimers().addTimer(event, params, 50 * 1000, null, null);
} }
else if (time == 10) else if (time == 10)
{ {
getTimers().addTimer(event, params.set("time", 5), 5 * 1000, null, null); params.set("time", 5);
getTimers().addTimer(event, params, 5 * 1000, null, null);
} }
else if ((time > 1) && (time <= 5)) else if ((time > 1) && (time <= 5))
{ {
getTimers().addTimer(event, params.set("time", time - 1), 1000, null, null); params.set("time", time - 1);
getTimers().addTimer(event, params, 1000, null, null);
} }
break; break;
} }

View File

@@ -70,10 +70,7 @@ public class GlobalVariablesManager extends AbstractVariables
LOGGER.warning(getClass().getSimpleName() + ": Couldn't restore global variables."); LOGGER.warning(getClass().getSimpleName() + ": Couldn't restore global variables.");
return false; return false;
} }
finally
{
compareAndSetChanges(true, false);
}
LOGGER.info(getClass().getSimpleName() + ": Loaded " + getSet().size() + " variables."); LOGGER.info(getClass().getSimpleName() + ": Loaded " + getSet().size() + " variables.");
return true; return true;
} }
@@ -81,12 +78,6 @@ public class GlobalVariablesManager extends AbstractVariables
@Override @Override
public boolean storeMe() public boolean storeMe()
{ {
// No changes, nothing to store.
if (!hasChanges())
{
return false;
}
try (Connection con = DatabaseFactory.getConnection(); try (Connection con = DatabaseFactory.getConnection();
Statement del = con.createStatement(); Statement del = con.createStatement();
PreparedStatement st = con.prepareStatement(INSERT_QUERY)) PreparedStatement st = con.prepareStatement(INSERT_QUERY))
@@ -108,10 +99,7 @@ public class GlobalVariablesManager extends AbstractVariables
LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Couldn't save global variables to database.", e); LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Couldn't save global variables to database.", e);
return false; return false;
} }
finally
{
compareAndSetChanges(true, false);
}
LOGGER.info(getClass().getSimpleName() + ": Stored " + getSet().size() + " variables."); LOGGER.info(getClass().getSimpleName() + ": Stored " + getSet().size() + " variables.");
return true; return true;
} }

View File

@@ -19,10 +19,9 @@ package org.l2jmobius.gameserver.model;
import java.time.Duration; import java.time.Duration;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Supplier; import java.util.function.Supplier;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
@@ -49,7 +48,7 @@ public class StatSet implements IParserAdvUtils
public StatSet() public StatSet()
{ {
this(ConcurrentHashMap::new); this(HashMap::new);
} }
public StatSet(Supplier<Map<String, Object>> mapFactory) public StatSet(Supplier<Map<String, Object>> mapFactory)
@@ -98,7 +97,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public boolean getBoolean(String key) public boolean getBoolean(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -127,7 +125,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public boolean getBoolean(String key, boolean defaultValue) public boolean getBoolean(String key, boolean defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -150,7 +147,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public byte getByte(String key) public byte getByte(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -173,7 +169,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public byte getByte(String key, byte defaultValue) public byte getByte(String key, byte defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -209,8 +204,6 @@ public class StatSet implements IParserAdvUtils
public byte[] getByteArray(String key, String splitOn) public byte[] getByteArray(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -242,8 +235,6 @@ public class StatSet implements IParserAdvUtils
public List<Byte> getByteList(String key, String splitOn) public List<Byte> getByteList(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final List<Byte> result = new ArrayList<>(); final List<Byte> result = new ArrayList<>();
for (Byte i : getByteArray(key, splitOn)) for (Byte i : getByteArray(key, splitOn))
{ {
@@ -255,7 +246,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public short getShort(String key) public short getShort(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -278,7 +268,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public short getShort(String key, short defaultValue) public short getShort(String key, short defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -315,7 +304,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public int getInt(String key) public int getInt(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -340,7 +328,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public int getInt(String key, int defaultValue) public int getInt(String key, int defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -376,8 +363,6 @@ public class StatSet implements IParserAdvUtils
public int[] getIntArray(String key, String splitOn) public int[] getIntArray(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -409,8 +394,6 @@ public class StatSet implements IParserAdvUtils
public List<Integer> getIntegerList(String key, String splitOn) public List<Integer> getIntegerList(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final List<Integer> result = new ArrayList<>(); final List<Integer> result = new ArrayList<>();
for (int i : getIntArray(key, splitOn)) for (int i : getIntArray(key, splitOn))
{ {
@@ -422,7 +405,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public long getLong(String key) public long getLong(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -445,7 +427,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public long getLong(String key, long defaultValue) public long getLong(String key, long defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -482,7 +463,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public float getFloat(String key) public float getFloat(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -505,7 +485,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public float getFloat(String key, float defaultValue) public float getFloat(String key, float defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -542,7 +521,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public double getDouble(String key) public double getDouble(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -565,7 +543,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public double getDouble(String key, double defaultValue) public double getDouble(String key, double defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -602,7 +579,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public String getString(String key) public String getString(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -614,7 +590,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public String getString(String key, String defaultValue) public String getString(String key, String defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -626,7 +601,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public Duration getDuration(String key) public Duration getDuration(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -638,7 +612,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public Duration getDuration(String key, Duration defaultValue) public Duration getDuration(String key, Duration defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -651,8 +624,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass) public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(enumClass);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -676,8 +647,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass, T defaultValue) public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass, T defaultValue)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(enumClass);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -700,8 +669,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <A> A getObject(String name, Class<A> type) public <A> A getObject(String name, Class<A> type)
{ {
Objects.requireNonNull(name);
Objects.requireNonNull(type);
final Object obj = _set.get(name); final Object obj = _set.get(name);
if ((obj == null) || !type.isAssignableFrom(obj.getClass())) if ((obj == null) || !type.isAssignableFrom(obj.getClass()))
{ {
@@ -714,8 +681,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <A> A getObject(String name, Class<A> type, A defaultValue) public <A> A getObject(String name, Class<A> type, A defaultValue)
{ {
Objects.requireNonNull(name);
Objects.requireNonNull(type);
final Object obj = _set.get(name); final Object obj = _set.get(name);
if ((obj == null) || !type.isAssignableFrom(obj.getClass())) if ((obj == null) || !type.isAssignableFrom(obj.getClass()))
{ {
@@ -727,7 +692,6 @@ public class StatSet implements IParserAdvUtils
public SkillHolder getSkillHolder(String key) public SkillHolder getSkillHolder(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof SkillHolder)) if (!(obj instanceof SkillHolder))
{ {
@@ -739,7 +703,6 @@ public class StatSet implements IParserAdvUtils
public Location getLocation(String key) public Location getLocation(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof Location)) if (!(obj instanceof Location))
{ {
@@ -751,7 +714,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public List<MinionHolder> getMinionList(String key) public List<MinionHolder> getMinionList(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof List<?>)) if (!(obj instanceof List<?>))
{ {
@@ -764,8 +726,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T> List<T> getList(String key, Class<T> clazz) public <T> List<T> getList(String key, Class<T> clazz)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(clazz);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof List<?>)) if (!(obj instanceof List<?>))
{ {
@@ -871,83 +831,61 @@ public class StatSet implements IParserAdvUtils
return (Map<K, V>) obj; return (Map<K, V>) obj;
} }
public StatSet set(String name, Object value) public void set(String name, Object value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(name, value); _set.put(name, value);
return this;
} }
public StatSet set(String key, boolean value) public void set(String key, byte value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, byte value) public void set(String key, short value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, short value) public void set(String key, int value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, int value) public void set(String key, long value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, long value) public void set(String key, float value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, float value) public void set(String key, double value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, double value) public void set(String key, String value)
{
_set.put(key, value);
return this;
}
public StatSet set(String key, String value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, Enum<?> value) public void set(String key, Enum<?> value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(key, value); _set.put(key, value);
return this;
}
public static StatSet valueOf(String key, Object value)
{
final StatSet set = new StatSet();
set.set(key, value);
return set;
} }
public void remove(String key) public void remove(String key)

View File

@@ -244,7 +244,9 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
player.teleToLocation(_instance.getEnterLocations().get(index++), 0, _instance); player.teleToLocation(_instance.getEnterLocations().get(index++), 0, _instance);
} }
getTimers().addTimer("match_start_countdown", StatSet.valueOf("time", 60), 100, null, null); final StatSet params = new StatSet();
params.set("time", 60);
getTimers().addTimer("match_start_countdown", params, 100, null, null);
getTimers().addTimer("teleport_message1", 10000, null, null); getTimers().addTimer("teleport_message1", 10000, null, null);
getTimers().addTimer("teleport_message2", 14000, null, null); getTimers().addTimer("teleport_message2", 14000, null, null);
@@ -394,7 +396,9 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
} }
} }
getTimers().cancelTimer("update", null, null); getTimers().cancelTimer("update", null, null);
getTimers().addTimer("match_end_countdown", StatSet.valueOf("time", 30), 30 * 1000, null, null); final StatSet params = new StatSet();
params.set("time", 30);
getTimers().addTimer("match_end_countdown", params, 30 * 1000, null, null);
EventDispatcher.getInstance().notifyEvent(new OnCeremonyOfChaosMatchResult(winners, members)); EventDispatcher.getInstance().notifyEvent(new OnCeremonyOfChaosMatchResult(winners, members));
} }
@@ -530,19 +534,23 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
// Reschedule // Reschedule
if (time == 60) if (time == 60)
{ {
getTimers().addTimer(event, params.set("time", 30), 30 * 1000, null, null); params.set("time", 30);
getTimers().addTimer(event, params, 30 * 1000, null, null);
} }
else if ((time == 30) || (time == 20)) else if ((time == 30) || (time == 20))
{ {
getTimers().addTimer(event, params.set("time", time - 10), 10 * 1000, null, null); params.set("time", time - 10);
getTimers().addTimer(event, params, 10 * 1000, null, null);
} }
else if (time == 10) else if (time == 10)
{ {
getTimers().addTimer(event, params.set("time", 5), 5 * 1000, null, null); params.set("time", 5);
getTimers().addTimer(event, params, 5 * 1000, null, null);
} }
else if ((time > 1) && (time <= 5)) else if ((time > 1) && (time <= 5))
{ {
getTimers().addTimer(event, params.set("time", time - 1), 1000, null, null); params.set("time", time - 1);
getTimers().addTimer(event, params, 1000, null, null);
} }
break; break;
} }
@@ -556,11 +564,13 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
// Reschedule // Reschedule
if ((time == 30) || (time == 20)) if ((time == 30) || (time == 20))
{ {
getTimers().addTimer(event, params.set("time", time - 10), 10 * 1000, null, null); params.set("time", time - 10);
getTimers().addTimer(event, params, 10 * 1000, null, null);
} }
else if ((time > 0) && (time <= 10)) else if ((time > 0) && (time <= 10))
{ {
getTimers().addTimer(event, params.set("time", time - 1), 1000, null, null); params.set("time", time - 1);
getTimers().addTimer(event, params, 1000, null, null);
} }
else if (time == 0) else if (time == 0)
{ {

View File

@@ -16,7 +16,6 @@
*/ */
package org.l2jmobius.gameserver.model.variables; package org.l2jmobius.gameserver.model.variables;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
@@ -31,55 +30,43 @@ public abstract class AbstractVariables extends StatSet implements IRestorable,
{ {
private final AtomicBoolean _hasChanges = new AtomicBoolean(false); private final AtomicBoolean _hasChanges = new AtomicBoolean(false);
public AbstractVariables()
{
super(new ConcurrentHashMap<>());
}
/** /**
* Overriding following methods to prevent from doing useless database operations if there is no changes since player's login. * Overriding following methods to prevent from doing useless database operations if there is no changes since player's login.
*/ */
@Override @Override
public StatSet set(String name, boolean value) public void set(String name, double value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, double value) public void set(String name, Enum<?> value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, Enum<?> value) public void set(String name, int value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, int value) public void set(String name, long value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, long value) public void set(String name, String value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
}
@Override
public StatSet set(String name, String value)
{
_hasChanges.compareAndSet(false, true);
return super.set(name, value);
} }
/** /**
@@ -87,15 +74,14 @@ public abstract class AbstractVariables extends StatSet implements IRestorable,
* @param name * @param name
* @param value * @param value
* @param markAsChanged * @param markAsChanged
* @return
*/ */
public StatSet set(String name, String value, boolean markAsChanged) public void set(String name, String value, boolean markAsChanged)
{ {
if (markAsChanged) if (markAsChanged)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
} }
return super.set(name, value); super.set(name, value);
} }
/** /**

View File

@@ -180,8 +180,9 @@ public class CeremonyOfChaosManager extends AbstractEventManager<CeremonyOfChaos
} }
} }
} }
final StatSet params = new StatSet();
getTimers().addTimer("count_down", StatSet.valueOf("time", 60), 60 * 1000, null, null); params.set("time", 60);
getTimers().addTimer("count_down", params, 60 * 1000, null, null);
} }
@ScheduleTarget @ScheduleTarget
@@ -268,15 +269,18 @@ public class CeremonyOfChaosManager extends AbstractEventManager<CeremonyOfChaos
// Reschedule // Reschedule
if (time == 60) if (time == 60)
{ {
getTimers().addTimer(event, params.set("time", 10), 50 * 1000, null, null); params.set("time", 10);
getTimers().addTimer(event, params, 50 * 1000, null, null);
} }
else if (time == 10) else if (time == 10)
{ {
getTimers().addTimer(event, params.set("time", 5), 5 * 1000, null, null); params.set("time", 5);
getTimers().addTimer(event, params, 5 * 1000, null, null);
} }
else if ((time > 1) && (time <= 5)) else if ((time > 1) && (time <= 5))
{ {
getTimers().addTimer(event, params.set("time", time - 1), 1000, null, null); params.set("time", time - 1);
getTimers().addTimer(event, params, 1000, null, null);
} }
break; break;
} }

View File

@@ -70,10 +70,7 @@ public class GlobalVariablesManager extends AbstractVariables
LOGGER.warning(getClass().getSimpleName() + ": Couldn't restore global variables."); LOGGER.warning(getClass().getSimpleName() + ": Couldn't restore global variables.");
return false; return false;
} }
finally
{
compareAndSetChanges(true, false);
}
LOGGER.info(getClass().getSimpleName() + ": Loaded " + getSet().size() + " variables."); LOGGER.info(getClass().getSimpleName() + ": Loaded " + getSet().size() + " variables.");
return true; return true;
} }
@@ -81,12 +78,6 @@ public class GlobalVariablesManager extends AbstractVariables
@Override @Override
public boolean storeMe() public boolean storeMe()
{ {
// No changes, nothing to store.
if (!hasChanges())
{
return false;
}
try (Connection con = DatabaseFactory.getConnection(); try (Connection con = DatabaseFactory.getConnection();
Statement del = con.createStatement(); Statement del = con.createStatement();
PreparedStatement st = con.prepareStatement(INSERT_QUERY)) PreparedStatement st = con.prepareStatement(INSERT_QUERY))
@@ -108,10 +99,7 @@ public class GlobalVariablesManager extends AbstractVariables
LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Couldn't save global variables to database.", e); LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Couldn't save global variables to database.", e);
return false; return false;
} }
finally
{
compareAndSetChanges(true, false);
}
LOGGER.info(getClass().getSimpleName() + ": Stored " + getSet().size() + " variables."); LOGGER.info(getClass().getSimpleName() + ": Stored " + getSet().size() + " variables.");
return true; return true;
} }

View File

@@ -19,10 +19,9 @@ package org.l2jmobius.gameserver.model;
import java.time.Duration; import java.time.Duration;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Supplier; import java.util.function.Supplier;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
@@ -49,7 +48,7 @@ public class StatSet implements IParserAdvUtils
public StatSet() public StatSet()
{ {
this(ConcurrentHashMap::new); this(HashMap::new);
} }
public StatSet(Supplier<Map<String, Object>> mapFactory) public StatSet(Supplier<Map<String, Object>> mapFactory)
@@ -98,7 +97,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public boolean getBoolean(String key) public boolean getBoolean(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -127,7 +125,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public boolean getBoolean(String key, boolean defaultValue) public boolean getBoolean(String key, boolean defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -150,7 +147,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public byte getByte(String key) public byte getByte(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -173,7 +169,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public byte getByte(String key, byte defaultValue) public byte getByte(String key, byte defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -209,8 +204,6 @@ public class StatSet implements IParserAdvUtils
public byte[] getByteArray(String key, String splitOn) public byte[] getByteArray(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -242,8 +235,6 @@ public class StatSet implements IParserAdvUtils
public List<Byte> getByteList(String key, String splitOn) public List<Byte> getByteList(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final List<Byte> result = new ArrayList<>(); final List<Byte> result = new ArrayList<>();
for (Byte i : getByteArray(key, splitOn)) for (Byte i : getByteArray(key, splitOn))
{ {
@@ -255,7 +246,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public short getShort(String key) public short getShort(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -278,7 +268,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public short getShort(String key, short defaultValue) public short getShort(String key, short defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -315,7 +304,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public int getInt(String key) public int getInt(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -340,7 +328,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public int getInt(String key, int defaultValue) public int getInt(String key, int defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -376,8 +363,6 @@ public class StatSet implements IParserAdvUtils
public int[] getIntArray(String key, String splitOn) public int[] getIntArray(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -409,8 +394,6 @@ public class StatSet implements IParserAdvUtils
public List<Integer> getIntegerList(String key, String splitOn) public List<Integer> getIntegerList(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final List<Integer> result = new ArrayList<>(); final List<Integer> result = new ArrayList<>();
for (int i : getIntArray(key, splitOn)) for (int i : getIntArray(key, splitOn))
{ {
@@ -422,7 +405,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public long getLong(String key) public long getLong(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -445,7 +427,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public long getLong(String key, long defaultValue) public long getLong(String key, long defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -482,7 +463,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public float getFloat(String key) public float getFloat(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -505,7 +485,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public float getFloat(String key, float defaultValue) public float getFloat(String key, float defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -542,7 +521,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public double getDouble(String key) public double getDouble(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -565,7 +543,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public double getDouble(String key, double defaultValue) public double getDouble(String key, double defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -602,7 +579,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public String getString(String key) public String getString(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -614,7 +590,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public String getString(String key, String defaultValue) public String getString(String key, String defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -626,7 +601,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public Duration getDuration(String key) public Duration getDuration(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -638,7 +612,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public Duration getDuration(String key, Duration defaultValue) public Duration getDuration(String key, Duration defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -651,8 +624,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass) public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(enumClass);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -676,8 +647,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass, T defaultValue) public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass, T defaultValue)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(enumClass);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -700,8 +669,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <A> A getObject(String name, Class<A> type) public <A> A getObject(String name, Class<A> type)
{ {
Objects.requireNonNull(name);
Objects.requireNonNull(type);
final Object obj = _set.get(name); final Object obj = _set.get(name);
if ((obj == null) || !type.isAssignableFrom(obj.getClass())) if ((obj == null) || !type.isAssignableFrom(obj.getClass()))
{ {
@@ -714,8 +681,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <A> A getObject(String name, Class<A> type, A defaultValue) public <A> A getObject(String name, Class<A> type, A defaultValue)
{ {
Objects.requireNonNull(name);
Objects.requireNonNull(type);
final Object obj = _set.get(name); final Object obj = _set.get(name);
if ((obj == null) || !type.isAssignableFrom(obj.getClass())) if ((obj == null) || !type.isAssignableFrom(obj.getClass()))
{ {
@@ -727,7 +692,6 @@ public class StatSet implements IParserAdvUtils
public SkillHolder getSkillHolder(String key) public SkillHolder getSkillHolder(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof SkillHolder)) if (!(obj instanceof SkillHolder))
{ {
@@ -739,7 +703,6 @@ public class StatSet implements IParserAdvUtils
public Location getLocation(String key) public Location getLocation(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof Location)) if (!(obj instanceof Location))
{ {
@@ -751,7 +714,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public List<MinionHolder> getMinionList(String key) public List<MinionHolder> getMinionList(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof List<?>)) if (!(obj instanceof List<?>))
{ {
@@ -764,8 +726,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T> List<T> getList(String key, Class<T> clazz) public <T> List<T> getList(String key, Class<T> clazz)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(clazz);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof List<?>)) if (!(obj instanceof List<?>))
{ {
@@ -871,83 +831,61 @@ public class StatSet implements IParserAdvUtils
return (Map<K, V>) obj; return (Map<K, V>) obj;
} }
public StatSet set(String name, Object value) public void set(String name, Object value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(name, value); _set.put(name, value);
return this;
} }
public StatSet set(String key, boolean value) public void set(String key, byte value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, byte value) public void set(String key, short value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, short value) public void set(String key, int value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, int value) public void set(String key, long value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, long value) public void set(String key, float value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, float value) public void set(String key, double value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, double value) public void set(String key, String value)
{
_set.put(key, value);
return this;
}
public StatSet set(String key, String value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, Enum<?> value) public void set(String key, Enum<?> value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(key, value); _set.put(key, value);
return this;
}
public static StatSet valueOf(String key, Object value)
{
final StatSet set = new StatSet();
set.set(key, value);
return set;
} }
public void remove(String key) public void remove(String key)

View File

@@ -244,7 +244,9 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
player.teleToLocation(_instance.getEnterLocations().get(index++), 0, _instance); player.teleToLocation(_instance.getEnterLocations().get(index++), 0, _instance);
} }
getTimers().addTimer("match_start_countdown", StatSet.valueOf("time", 60), 100, null, null); final StatSet params = new StatSet();
params.set("time", 60);
getTimers().addTimer("match_start_countdown", params, 100, null, null);
getTimers().addTimer("teleport_message1", 10000, null, null); getTimers().addTimer("teleport_message1", 10000, null, null);
getTimers().addTimer("teleport_message2", 14000, null, null); getTimers().addTimer("teleport_message2", 14000, null, null);
@@ -394,7 +396,9 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
} }
} }
getTimers().cancelTimer("update", null, null); getTimers().cancelTimer("update", null, null);
getTimers().addTimer("match_end_countdown", StatSet.valueOf("time", 30), 30 * 1000, null, null); final StatSet params = new StatSet();
params.set("time", 30);
getTimers().addTimer("match_end_countdown", params, 30 * 1000, null, null);
EventDispatcher.getInstance().notifyEvent(new OnCeremonyOfChaosMatchResult(winners, members)); EventDispatcher.getInstance().notifyEvent(new OnCeremonyOfChaosMatchResult(winners, members));
} }
@@ -530,19 +534,23 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
// Reschedule // Reschedule
if (time == 60) if (time == 60)
{ {
getTimers().addTimer(event, params.set("time", 30), 30 * 1000, null, null); params.set("time", 30);
getTimers().addTimer(event, params, 30 * 1000, null, null);
} }
else if ((time == 30) || (time == 20)) else if ((time == 30) || (time == 20))
{ {
getTimers().addTimer(event, params.set("time", time - 10), 10 * 1000, null, null); params.set("time", time - 10);
getTimers().addTimer(event, params, 10 * 1000, null, null);
} }
else if (time == 10) else if (time == 10)
{ {
getTimers().addTimer(event, params.set("time", 5), 5 * 1000, null, null); params.set("time", 5);
getTimers().addTimer(event, params, 5 * 1000, null, null);
} }
else if ((time > 1) && (time <= 5)) else if ((time > 1) && (time <= 5))
{ {
getTimers().addTimer(event, params.set("time", time - 1), 1000, null, null); params.set("time", time - 1);
getTimers().addTimer(event, params, 1000, null, null);
} }
break; break;
} }
@@ -556,11 +564,13 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
// Reschedule // Reschedule
if ((time == 30) || (time == 20)) if ((time == 30) || (time == 20))
{ {
getTimers().addTimer(event, params.set("time", time - 10), 10 * 1000, null, null); params.set("time", time - 10);
getTimers().addTimer(event, params, 10 * 1000, null, null);
} }
else if ((time > 0) && (time <= 10)) else if ((time > 0) && (time <= 10))
{ {
getTimers().addTimer(event, params.set("time", time - 1), 1000, null, null); params.set("time", time - 1);
getTimers().addTimer(event, params, 1000, null, null);
} }
else if (time == 0) else if (time == 0)
{ {

View File

@@ -16,7 +16,6 @@
*/ */
package org.l2jmobius.gameserver.model.variables; package org.l2jmobius.gameserver.model.variables;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
@@ -31,55 +30,43 @@ public abstract class AbstractVariables extends StatSet implements IRestorable,
{ {
private final AtomicBoolean _hasChanges = new AtomicBoolean(false); private final AtomicBoolean _hasChanges = new AtomicBoolean(false);
public AbstractVariables()
{
super(new ConcurrentHashMap<>());
}
/** /**
* Overriding following methods to prevent from doing useless database operations if there is no changes since player's login. * Overriding following methods to prevent from doing useless database operations if there is no changes since player's login.
*/ */
@Override @Override
public StatSet set(String name, boolean value) public void set(String name, double value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, double value) public void set(String name, Enum<?> value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, Enum<?> value) public void set(String name, int value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, int value) public void set(String name, long value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, long value) public void set(String name, String value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
}
@Override
public StatSet set(String name, String value)
{
_hasChanges.compareAndSet(false, true);
return super.set(name, value);
} }
/** /**
@@ -87,15 +74,14 @@ public abstract class AbstractVariables extends StatSet implements IRestorable,
* @param name * @param name
* @param value * @param value
* @param markAsChanged * @param markAsChanged
* @return
*/ */
public StatSet set(String name, String value, boolean markAsChanged) public void set(String name, String value, boolean markAsChanged)
{ {
if (markAsChanged) if (markAsChanged)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
} }
return super.set(name, value); super.set(name, value);
} }
/** /**

View File

@@ -180,8 +180,9 @@ public class CeremonyOfChaosManager extends AbstractEventManager<CeremonyOfChaos
} }
} }
} }
final StatSet params = new StatSet();
getTimers().addTimer("count_down", StatSet.valueOf("time", 60), 60 * 1000, null, null); params.set("time", 60);
getTimers().addTimer("count_down", params, 60 * 1000, null, null);
} }
@ScheduleTarget @ScheduleTarget
@@ -268,15 +269,18 @@ public class CeremonyOfChaosManager extends AbstractEventManager<CeremonyOfChaos
// Reschedule // Reschedule
if (time == 60) if (time == 60)
{ {
getTimers().addTimer(event, params.set("time", 10), 50 * 1000, null, null); params.set("time", 10);
getTimers().addTimer(event, params, 50 * 1000, null, null);
} }
else if (time == 10) else if (time == 10)
{ {
getTimers().addTimer(event, params.set("time", 5), 5 * 1000, null, null); params.set("time", 5);
getTimers().addTimer(event, params, 5 * 1000, null, null);
} }
else if ((time > 1) && (time <= 5)) else if ((time > 1) && (time <= 5))
{ {
getTimers().addTimer(event, params.set("time", time - 1), 1000, null, null); params.set("time", time - 1);
getTimers().addTimer(event, params, 1000, null, null);
} }
break; break;
} }

View File

@@ -70,10 +70,7 @@ public class GlobalVariablesManager extends AbstractVariables
LOGGER.warning(getClass().getSimpleName() + ": Couldn't restore global variables."); LOGGER.warning(getClass().getSimpleName() + ": Couldn't restore global variables.");
return false; return false;
} }
finally
{
compareAndSetChanges(true, false);
}
LOGGER.info(getClass().getSimpleName() + ": Loaded " + getSet().size() + " variables."); LOGGER.info(getClass().getSimpleName() + ": Loaded " + getSet().size() + " variables.");
return true; return true;
} }
@@ -81,12 +78,6 @@ public class GlobalVariablesManager extends AbstractVariables
@Override @Override
public boolean storeMe() public boolean storeMe()
{ {
// No changes, nothing to store.
if (!hasChanges())
{
return false;
}
try (Connection con = DatabaseFactory.getConnection(); try (Connection con = DatabaseFactory.getConnection();
Statement del = con.createStatement(); Statement del = con.createStatement();
PreparedStatement st = con.prepareStatement(INSERT_QUERY)) PreparedStatement st = con.prepareStatement(INSERT_QUERY))
@@ -108,10 +99,7 @@ public class GlobalVariablesManager extends AbstractVariables
LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Couldn't save global variables to database.", e); LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Couldn't save global variables to database.", e);
return false; return false;
} }
finally
{
compareAndSetChanges(true, false);
}
LOGGER.info(getClass().getSimpleName() + ": Stored " + getSet().size() + " variables."); LOGGER.info(getClass().getSimpleName() + ": Stored " + getSet().size() + " variables.");
return true; return true;
} }

View File

@@ -19,10 +19,9 @@ package org.l2jmobius.gameserver.model;
import java.time.Duration; import java.time.Duration;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Supplier; import java.util.function.Supplier;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
@@ -49,7 +48,7 @@ public class StatSet implements IParserAdvUtils
public StatSet() public StatSet()
{ {
this(ConcurrentHashMap::new); this(HashMap::new);
} }
public StatSet(Supplier<Map<String, Object>> mapFactory) public StatSet(Supplier<Map<String, Object>> mapFactory)
@@ -98,7 +97,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public boolean getBoolean(String key) public boolean getBoolean(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -127,7 +125,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public boolean getBoolean(String key, boolean defaultValue) public boolean getBoolean(String key, boolean defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -150,7 +147,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public byte getByte(String key) public byte getByte(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -173,7 +169,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public byte getByte(String key, byte defaultValue) public byte getByte(String key, byte defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -209,8 +204,6 @@ public class StatSet implements IParserAdvUtils
public byte[] getByteArray(String key, String splitOn) public byte[] getByteArray(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -242,8 +235,6 @@ public class StatSet implements IParserAdvUtils
public List<Byte> getByteList(String key, String splitOn) public List<Byte> getByteList(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final List<Byte> result = new ArrayList<>(); final List<Byte> result = new ArrayList<>();
for (Byte i : getByteArray(key, splitOn)) for (Byte i : getByteArray(key, splitOn))
{ {
@@ -255,7 +246,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public short getShort(String key) public short getShort(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -278,7 +268,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public short getShort(String key, short defaultValue) public short getShort(String key, short defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -315,7 +304,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public int getInt(String key) public int getInt(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -340,7 +328,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public int getInt(String key, int defaultValue) public int getInt(String key, int defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -376,8 +363,6 @@ public class StatSet implements IParserAdvUtils
public int[] getIntArray(String key, String splitOn) public int[] getIntArray(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -409,8 +394,6 @@ public class StatSet implements IParserAdvUtils
public List<Integer> getIntegerList(String key, String splitOn) public List<Integer> getIntegerList(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final List<Integer> result = new ArrayList<>(); final List<Integer> result = new ArrayList<>();
for (int i : getIntArray(key, splitOn)) for (int i : getIntArray(key, splitOn))
{ {
@@ -422,7 +405,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public long getLong(String key) public long getLong(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -445,7 +427,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public long getLong(String key, long defaultValue) public long getLong(String key, long defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -482,7 +463,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public float getFloat(String key) public float getFloat(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -505,7 +485,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public float getFloat(String key, float defaultValue) public float getFloat(String key, float defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -542,7 +521,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public double getDouble(String key) public double getDouble(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -565,7 +543,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public double getDouble(String key, double defaultValue) public double getDouble(String key, double defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -602,7 +579,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public String getString(String key) public String getString(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -614,7 +590,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public String getString(String key, String defaultValue) public String getString(String key, String defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -626,7 +601,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public Duration getDuration(String key) public Duration getDuration(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -638,7 +612,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public Duration getDuration(String key, Duration defaultValue) public Duration getDuration(String key, Duration defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -651,8 +624,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass) public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(enumClass);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -676,8 +647,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass, T defaultValue) public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass, T defaultValue)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(enumClass);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -700,8 +669,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <A> A getObject(String name, Class<A> type) public <A> A getObject(String name, Class<A> type)
{ {
Objects.requireNonNull(name);
Objects.requireNonNull(type);
final Object obj = _set.get(name); final Object obj = _set.get(name);
if ((obj == null) || !type.isAssignableFrom(obj.getClass())) if ((obj == null) || !type.isAssignableFrom(obj.getClass()))
{ {
@@ -714,8 +681,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <A> A getObject(String name, Class<A> type, A defaultValue) public <A> A getObject(String name, Class<A> type, A defaultValue)
{ {
Objects.requireNonNull(name);
Objects.requireNonNull(type);
final Object obj = _set.get(name); final Object obj = _set.get(name);
if ((obj == null) || !type.isAssignableFrom(obj.getClass())) if ((obj == null) || !type.isAssignableFrom(obj.getClass()))
{ {
@@ -727,7 +692,6 @@ public class StatSet implements IParserAdvUtils
public SkillHolder getSkillHolder(String key) public SkillHolder getSkillHolder(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof SkillHolder)) if (!(obj instanceof SkillHolder))
{ {
@@ -739,7 +703,6 @@ public class StatSet implements IParserAdvUtils
public Location getLocation(String key) public Location getLocation(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof Location)) if (!(obj instanceof Location))
{ {
@@ -751,7 +714,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public List<MinionHolder> getMinionList(String key) public List<MinionHolder> getMinionList(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof List<?>)) if (!(obj instanceof List<?>))
{ {
@@ -764,8 +726,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T> List<T> getList(String key, Class<T> clazz) public <T> List<T> getList(String key, Class<T> clazz)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(clazz);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof List<?>)) if (!(obj instanceof List<?>))
{ {
@@ -871,83 +831,61 @@ public class StatSet implements IParserAdvUtils
return (Map<K, V>) obj; return (Map<K, V>) obj;
} }
public StatSet set(String name, Object value) public void set(String name, Object value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(name, value); _set.put(name, value);
return this;
} }
public StatSet set(String key, boolean value) public void set(String key, byte value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, byte value) public void set(String key, short value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, short value) public void set(String key, int value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, int value) public void set(String key, long value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, long value) public void set(String key, float value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, float value) public void set(String key, double value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, double value) public void set(String key, String value)
{
_set.put(key, value);
return this;
}
public StatSet set(String key, String value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, Enum<?> value) public void set(String key, Enum<?> value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(key, value); _set.put(key, value);
return this;
}
public static StatSet valueOf(String key, Object value)
{
final StatSet set = new StatSet();
set.set(key, value);
return set;
} }
public void remove(String key) public void remove(String key)

View File

@@ -244,7 +244,9 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
player.teleToLocation(_instance.getEnterLocations().get(index++), 0, _instance); player.teleToLocation(_instance.getEnterLocations().get(index++), 0, _instance);
} }
getTimers().addTimer("match_start_countdown", StatSet.valueOf("time", 60), 100, null, null); final StatSet params = new StatSet();
params.set("time", 60);
getTimers().addTimer("match_start_countdown", params, 100, null, null);
getTimers().addTimer("teleport_message1", 10000, null, null); getTimers().addTimer("teleport_message1", 10000, null, null);
getTimers().addTimer("teleport_message2", 14000, null, null); getTimers().addTimer("teleport_message2", 14000, null, null);
@@ -394,7 +396,9 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
} }
} }
getTimers().cancelTimer("update", null, null); getTimers().cancelTimer("update", null, null);
getTimers().addTimer("match_end_countdown", StatSet.valueOf("time", 30), 30 * 1000, null, null); final StatSet params = new StatSet();
params.set("time", 30);
getTimers().addTimer("match_end_countdown", params, 30 * 1000, null, null);
EventDispatcher.getInstance().notifyEvent(new OnCeremonyOfChaosMatchResult(winners, members)); EventDispatcher.getInstance().notifyEvent(new OnCeremonyOfChaosMatchResult(winners, members));
} }
@@ -530,19 +534,23 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
// Reschedule // Reschedule
if (time == 60) if (time == 60)
{ {
getTimers().addTimer(event, params.set("time", 30), 30 * 1000, null, null); params.set("time", 30);
getTimers().addTimer(event, params, 30 * 1000, null, null);
} }
else if ((time == 30) || (time == 20)) else if ((time == 30) || (time == 20))
{ {
getTimers().addTimer(event, params.set("time", time - 10), 10 * 1000, null, null); params.set("time", time - 10);
getTimers().addTimer(event, params, 10 * 1000, null, null);
} }
else if (time == 10) else if (time == 10)
{ {
getTimers().addTimer(event, params.set("time", 5), 5 * 1000, null, null); params.set("time", 5);
getTimers().addTimer(event, params, 5 * 1000, null, null);
} }
else if ((time > 1) && (time <= 5)) else if ((time > 1) && (time <= 5))
{ {
getTimers().addTimer(event, params.set("time", time - 1), 1000, null, null); params.set("time", time - 1);
getTimers().addTimer(event, params, 1000, null, null);
} }
break; break;
} }
@@ -556,11 +564,13 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
// Reschedule // Reschedule
if ((time == 30) || (time == 20)) if ((time == 30) || (time == 20))
{ {
getTimers().addTimer(event, params.set("time", time - 10), 10 * 1000, null, null); params.set("time", time - 10);
getTimers().addTimer(event, params, 10 * 1000, null, null);
} }
else if ((time > 0) && (time <= 10)) else if ((time > 0) && (time <= 10))
{ {
getTimers().addTimer(event, params.set("time", time - 1), 1000, null, null); params.set("time", time - 1);
getTimers().addTimer(event, params, 1000, null, null);
} }
else if (time == 0) else if (time == 0)
{ {

View File

@@ -16,7 +16,6 @@
*/ */
package org.l2jmobius.gameserver.model.variables; package org.l2jmobius.gameserver.model.variables;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
@@ -31,55 +30,43 @@ public abstract class AbstractVariables extends StatSet implements IRestorable,
{ {
private final AtomicBoolean _hasChanges = new AtomicBoolean(false); private final AtomicBoolean _hasChanges = new AtomicBoolean(false);
public AbstractVariables()
{
super(new ConcurrentHashMap<>());
}
/** /**
* Overriding following methods to prevent from doing useless database operations if there is no changes since player's login. * Overriding following methods to prevent from doing useless database operations if there is no changes since player's login.
*/ */
@Override @Override
public StatSet set(String name, boolean value) public void set(String name, double value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, double value) public void set(String name, Enum<?> value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, Enum<?> value) public void set(String name, int value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, int value) public void set(String name, long value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, long value) public void set(String name, String value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
}
@Override
public StatSet set(String name, String value)
{
_hasChanges.compareAndSet(false, true);
return super.set(name, value);
} }
/** /**
@@ -87,15 +74,14 @@ public abstract class AbstractVariables extends StatSet implements IRestorable,
* @param name * @param name
* @param value * @param value
* @param markAsChanged * @param markAsChanged
* @return
*/ */
public StatSet set(String name, String value, boolean markAsChanged) public void set(String name, String value, boolean markAsChanged)
{ {
if (markAsChanged) if (markAsChanged)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
} }
return super.set(name, value); super.set(name, value);
} }
/** /**

View File

@@ -179,8 +179,9 @@ public class CeremonyOfChaosManager extends AbstractEventManager<CeremonyOfChaos
} }
} }
} }
final StatSet params = new StatSet();
getTimers().addTimer("count_down", StatSet.valueOf("time", 60), 60 * 1000, null, null); params.set("time", 60);
getTimers().addTimer("count_down", params, 60 * 1000, null, null);
} }
@ScheduleTarget @ScheduleTarget
@@ -267,15 +268,18 @@ public class CeremonyOfChaosManager extends AbstractEventManager<CeremonyOfChaos
// Reschedule // Reschedule
if (time == 60) if (time == 60)
{ {
getTimers().addTimer(event, params.set("time", 10), 50 * 1000, null, null); params.set("time", 10);
getTimers().addTimer(event, params, 50 * 1000, null, null);
} }
else if (time == 10) else if (time == 10)
{ {
getTimers().addTimer(event, params.set("time", 5), 5 * 1000, null, null); params.set("time", 5);
getTimers().addTimer(event, params, 5 * 1000, null, null);
} }
else if ((time > 1) && (time <= 5)) else if ((time > 1) && (time <= 5))
{ {
getTimers().addTimer(event, params.set("time", time - 1), 1000, null, null); params.set("time", time - 1);
getTimers().addTimer(event, params, 1000, null, null);
} }
break; break;
} }

View File

@@ -70,10 +70,7 @@ public class GlobalVariablesManager extends AbstractVariables
LOGGER.warning(getClass().getSimpleName() + ": Couldn't restore global variables."); LOGGER.warning(getClass().getSimpleName() + ": Couldn't restore global variables.");
return false; return false;
} }
finally
{
compareAndSetChanges(true, false);
}
LOGGER.info(getClass().getSimpleName() + ": Loaded " + getSet().size() + " variables."); LOGGER.info(getClass().getSimpleName() + ": Loaded " + getSet().size() + " variables.");
return true; return true;
} }
@@ -81,12 +78,6 @@ public class GlobalVariablesManager extends AbstractVariables
@Override @Override
public boolean storeMe() public boolean storeMe()
{ {
// No changes, nothing to store.
if (!hasChanges())
{
return false;
}
try (Connection con = DatabaseFactory.getConnection(); try (Connection con = DatabaseFactory.getConnection();
Statement del = con.createStatement(); Statement del = con.createStatement();
PreparedStatement st = con.prepareStatement(INSERT_QUERY)) PreparedStatement st = con.prepareStatement(INSERT_QUERY))
@@ -108,10 +99,7 @@ public class GlobalVariablesManager extends AbstractVariables
LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Couldn't save global variables to database.", e); LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Couldn't save global variables to database.", e);
return false; return false;
} }
finally
{
compareAndSetChanges(true, false);
}
LOGGER.info(getClass().getSimpleName() + ": Stored " + getSet().size() + " variables."); LOGGER.info(getClass().getSimpleName() + ": Stored " + getSet().size() + " variables.");
return true; return true;
} }

View File

@@ -19,10 +19,9 @@ package org.l2jmobius.gameserver.model;
import java.time.Duration; import java.time.Duration;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Supplier; import java.util.function.Supplier;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
@@ -49,7 +48,7 @@ public class StatSet implements IParserAdvUtils
public StatSet() public StatSet()
{ {
this(ConcurrentHashMap::new); this(HashMap::new);
} }
public StatSet(Supplier<Map<String, Object>> mapFactory) public StatSet(Supplier<Map<String, Object>> mapFactory)
@@ -98,7 +97,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public boolean getBoolean(String key) public boolean getBoolean(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -127,7 +125,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public boolean getBoolean(String key, boolean defaultValue) public boolean getBoolean(String key, boolean defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -150,7 +147,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public byte getByte(String key) public byte getByte(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -173,7 +169,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public byte getByte(String key, byte defaultValue) public byte getByte(String key, byte defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -209,8 +204,6 @@ public class StatSet implements IParserAdvUtils
public byte[] getByteArray(String key, String splitOn) public byte[] getByteArray(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -242,8 +235,6 @@ public class StatSet implements IParserAdvUtils
public List<Byte> getByteList(String key, String splitOn) public List<Byte> getByteList(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final List<Byte> result = new ArrayList<>(); final List<Byte> result = new ArrayList<>();
for (Byte i : getByteArray(key, splitOn)) for (Byte i : getByteArray(key, splitOn))
{ {
@@ -255,7 +246,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public short getShort(String key) public short getShort(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -278,7 +268,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public short getShort(String key, short defaultValue) public short getShort(String key, short defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -315,7 +304,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public int getInt(String key) public int getInt(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -340,7 +328,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public int getInt(String key, int defaultValue) public int getInt(String key, int defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -376,8 +363,6 @@ public class StatSet implements IParserAdvUtils
public int[] getIntArray(String key, String splitOn) public int[] getIntArray(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -409,8 +394,6 @@ public class StatSet implements IParserAdvUtils
public List<Integer> getIntegerList(String key, String splitOn) public List<Integer> getIntegerList(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final List<Integer> result = new ArrayList<>(); final List<Integer> result = new ArrayList<>();
for (int i : getIntArray(key, splitOn)) for (int i : getIntArray(key, splitOn))
{ {
@@ -422,7 +405,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public long getLong(String key) public long getLong(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -445,7 +427,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public long getLong(String key, long defaultValue) public long getLong(String key, long defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -482,7 +463,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public float getFloat(String key) public float getFloat(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -505,7 +485,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public float getFloat(String key, float defaultValue) public float getFloat(String key, float defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -542,7 +521,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public double getDouble(String key) public double getDouble(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -565,7 +543,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public double getDouble(String key, double defaultValue) public double getDouble(String key, double defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -602,7 +579,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public String getString(String key) public String getString(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -614,7 +590,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public String getString(String key, String defaultValue) public String getString(String key, String defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -626,7 +601,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public Duration getDuration(String key) public Duration getDuration(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -638,7 +612,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public Duration getDuration(String key, Duration defaultValue) public Duration getDuration(String key, Duration defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -651,8 +624,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass) public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(enumClass);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -676,8 +647,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass, T defaultValue) public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass, T defaultValue)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(enumClass);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -700,8 +669,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <A> A getObject(String name, Class<A> type) public <A> A getObject(String name, Class<A> type)
{ {
Objects.requireNonNull(name);
Objects.requireNonNull(type);
final Object obj = _set.get(name); final Object obj = _set.get(name);
if ((obj == null) || !type.isAssignableFrom(obj.getClass())) if ((obj == null) || !type.isAssignableFrom(obj.getClass()))
{ {
@@ -714,8 +681,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <A> A getObject(String name, Class<A> type, A defaultValue) public <A> A getObject(String name, Class<A> type, A defaultValue)
{ {
Objects.requireNonNull(name);
Objects.requireNonNull(type);
final Object obj = _set.get(name); final Object obj = _set.get(name);
if ((obj == null) || !type.isAssignableFrom(obj.getClass())) if ((obj == null) || !type.isAssignableFrom(obj.getClass()))
{ {
@@ -727,7 +692,6 @@ public class StatSet implements IParserAdvUtils
public SkillHolder getSkillHolder(String key) public SkillHolder getSkillHolder(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof SkillHolder)) if (!(obj instanceof SkillHolder))
{ {
@@ -739,7 +703,6 @@ public class StatSet implements IParserAdvUtils
public Location getLocation(String key) public Location getLocation(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof Location)) if (!(obj instanceof Location))
{ {
@@ -751,7 +714,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public List<MinionHolder> getMinionList(String key) public List<MinionHolder> getMinionList(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof List<?>)) if (!(obj instanceof List<?>))
{ {
@@ -764,8 +726,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T> List<T> getList(String key, Class<T> clazz) public <T> List<T> getList(String key, Class<T> clazz)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(clazz);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof List<?>)) if (!(obj instanceof List<?>))
{ {
@@ -871,83 +831,61 @@ public class StatSet implements IParserAdvUtils
return (Map<K, V>) obj; return (Map<K, V>) obj;
} }
public StatSet set(String name, Object value) public void set(String name, Object value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(name, value); _set.put(name, value);
return this;
} }
public StatSet set(String key, boolean value) public void set(String key, byte value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, byte value) public void set(String key, short value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, short value) public void set(String key, int value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, int value) public void set(String key, long value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, long value) public void set(String key, float value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, float value) public void set(String key, double value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, double value) public void set(String key, String value)
{
_set.put(key, value);
return this;
}
public StatSet set(String key, String value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, Enum<?> value) public void set(String key, Enum<?> value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(key, value); _set.put(key, value);
return this;
}
public static StatSet valueOf(String key, Object value)
{
final StatSet set = new StatSet();
set.set(key, value);
return set;
} }
public void remove(String key) public void remove(String key)

View File

@@ -244,7 +244,9 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
player.teleToLocation(_instance.getEnterLocations().get(index++), 0, _instance); player.teleToLocation(_instance.getEnterLocations().get(index++), 0, _instance);
} }
getTimers().addTimer("match_start_countdown", StatSet.valueOf("time", 60), 100, null, null); final StatSet params = new StatSet();
params.set("time", 60);
getTimers().addTimer("match_start_countdown", params, 100, null, null);
getTimers().addTimer("teleport_message1", 10000, null, null); getTimers().addTimer("teleport_message1", 10000, null, null);
getTimers().addTimer("teleport_message2", 14000, null, null); getTimers().addTimer("teleport_message2", 14000, null, null);
@@ -394,7 +396,9 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
} }
} }
getTimers().cancelTimer("update", null, null); getTimers().cancelTimer("update", null, null);
getTimers().addTimer("match_end_countdown", StatSet.valueOf("time", 30), 30 * 1000, null, null); final StatSet params = new StatSet();
params.set("time", 30);
getTimers().addTimer("match_end_countdown", params, 30 * 1000, null, null);
EventDispatcher.getInstance().notifyEvent(new OnCeremonyOfChaosMatchResult(winners, members)); EventDispatcher.getInstance().notifyEvent(new OnCeremonyOfChaosMatchResult(winners, members));
} }
@@ -530,19 +534,23 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
// Reschedule // Reschedule
if (time == 60) if (time == 60)
{ {
getTimers().addTimer(event, params.set("time", 30), 30 * 1000, null, null); params.set("time", 30);
getTimers().addTimer(event, params, 30 * 1000, null, null);
} }
else if ((time == 30) || (time == 20)) else if ((time == 30) || (time == 20))
{ {
getTimers().addTimer(event, params.set("time", time - 10), 10 * 1000, null, null); params.set("time", time - 10);
getTimers().addTimer(event, params, 10 * 1000, null, null);
} }
else if (time == 10) else if (time == 10)
{ {
getTimers().addTimer(event, params.set("time", 5), 5 * 1000, null, null); params.set("time", 5);
getTimers().addTimer(event, params, 5 * 1000, null, null);
} }
else if ((time > 1) && (time <= 5)) else if ((time > 1) && (time <= 5))
{ {
getTimers().addTimer(event, params.set("time", time - 1), 1000, null, null); params.set("time", time - 1);
getTimers().addTimer(event, params, 1000, null, null);
} }
break; break;
} }
@@ -556,11 +564,13 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
// Reschedule // Reschedule
if ((time == 30) || (time == 20)) if ((time == 30) || (time == 20))
{ {
getTimers().addTimer(event, params.set("time", time - 10), 10 * 1000, null, null); params.set("time", time - 10);
getTimers().addTimer(event, params, 10 * 1000, null, null);
} }
else if ((time > 0) && (time <= 10)) else if ((time > 0) && (time <= 10))
{ {
getTimers().addTimer(event, params.set("time", time - 1), 1000, null, null); params.set("time", time - 1);
getTimers().addTimer(event, params, 1000, null, null);
} }
else if (time == 0) else if (time == 0)
{ {

View File

@@ -16,7 +16,6 @@
*/ */
package org.l2jmobius.gameserver.model.variables; package org.l2jmobius.gameserver.model.variables;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
@@ -31,55 +30,43 @@ public abstract class AbstractVariables extends StatSet implements IRestorable,
{ {
private final AtomicBoolean _hasChanges = new AtomicBoolean(false); private final AtomicBoolean _hasChanges = new AtomicBoolean(false);
public AbstractVariables()
{
super(new ConcurrentHashMap<>());
}
/** /**
* Overriding following methods to prevent from doing useless database operations if there is no changes since player's login. * Overriding following methods to prevent from doing useless database operations if there is no changes since player's login.
*/ */
@Override @Override
public StatSet set(String name, boolean value) public void set(String name, double value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, double value) public void set(String name, Enum<?> value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, Enum<?> value) public void set(String name, int value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, int value) public void set(String name, long value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, long value) public void set(String name, String value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
}
@Override
public StatSet set(String name, String value)
{
_hasChanges.compareAndSet(false, true);
return super.set(name, value);
} }
/** /**
@@ -87,15 +74,14 @@ public abstract class AbstractVariables extends StatSet implements IRestorable,
* @param name * @param name
* @param value * @param value
* @param markAsChanged * @param markAsChanged
* @return
*/ */
public StatSet set(String name, String value, boolean markAsChanged) public void set(String name, String value, boolean markAsChanged)
{ {
if (markAsChanged) if (markAsChanged)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
} }
return super.set(name, value); super.set(name, value);
} }
/** /**

View File

@@ -180,8 +180,9 @@ public class CeremonyOfChaosManager extends AbstractEventManager<CeremonyOfChaos
} }
} }
} }
final StatSet params = new StatSet();
getTimers().addTimer("count_down", StatSet.valueOf("time", 60), 60 * 1000, null, null); params.set("time", 60);
getTimers().addTimer("count_down", params, 60 * 1000, null, null);
} }
@ScheduleTarget @ScheduleTarget
@@ -268,15 +269,18 @@ public class CeremonyOfChaosManager extends AbstractEventManager<CeremonyOfChaos
// Reschedule // Reschedule
if (time == 60) if (time == 60)
{ {
getTimers().addTimer(event, params.set("time", 10), 50 * 1000, null, null); params.set("time", 10);
getTimers().addTimer(event, params, 50 * 1000, null, null);
} }
else if (time == 10) else if (time == 10)
{ {
getTimers().addTimer(event, params.set("time", 5), 5 * 1000, null, null); params.set("time", 5);
getTimers().addTimer(event, params, 5 * 1000, null, null);
} }
else if ((time > 1) && (time <= 5)) else if ((time > 1) && (time <= 5))
{ {
getTimers().addTimer(event, params.set("time", time - 1), 1000, null, null); params.set("time", time - 1);
getTimers().addTimer(event, params, 1000, null, null);
} }
break; break;
} }

View File

@@ -70,10 +70,7 @@ public class GlobalVariablesManager extends AbstractVariables
LOGGER.warning(getClass().getSimpleName() + ": Couldn't restore global variables."); LOGGER.warning(getClass().getSimpleName() + ": Couldn't restore global variables.");
return false; return false;
} }
finally
{
compareAndSetChanges(true, false);
}
LOGGER.info(getClass().getSimpleName() + ": Loaded " + getSet().size() + " variables."); LOGGER.info(getClass().getSimpleName() + ": Loaded " + getSet().size() + " variables.");
return true; return true;
} }
@@ -81,12 +78,6 @@ public class GlobalVariablesManager extends AbstractVariables
@Override @Override
public boolean storeMe() public boolean storeMe()
{ {
// No changes, nothing to store.
if (!hasChanges())
{
return false;
}
try (Connection con = DatabaseFactory.getConnection(); try (Connection con = DatabaseFactory.getConnection();
Statement del = con.createStatement(); Statement del = con.createStatement();
PreparedStatement st = con.prepareStatement(INSERT_QUERY)) PreparedStatement st = con.prepareStatement(INSERT_QUERY))
@@ -108,10 +99,7 @@ public class GlobalVariablesManager extends AbstractVariables
LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Couldn't save global variables to database.", e); LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Couldn't save global variables to database.", e);
return false; return false;
} }
finally
{
compareAndSetChanges(true, false);
}
LOGGER.info(getClass().getSimpleName() + ": Stored " + getSet().size() + " variables."); LOGGER.info(getClass().getSimpleName() + ": Stored " + getSet().size() + " variables.");
return true; return true;
} }

View File

@@ -19,10 +19,9 @@ package org.l2jmobius.gameserver.model;
import java.time.Duration; import java.time.Duration;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Supplier; import java.util.function.Supplier;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
@@ -49,7 +48,7 @@ public class StatSet implements IParserAdvUtils
public StatSet() public StatSet()
{ {
this(ConcurrentHashMap::new); this(HashMap::new);
} }
public StatSet(Supplier<Map<String, Object>> mapFactory) public StatSet(Supplier<Map<String, Object>> mapFactory)
@@ -98,7 +97,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public boolean getBoolean(String key) public boolean getBoolean(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -127,7 +125,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public boolean getBoolean(String key, boolean defaultValue) public boolean getBoolean(String key, boolean defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -150,7 +147,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public byte getByte(String key) public byte getByte(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -173,7 +169,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public byte getByte(String key, byte defaultValue) public byte getByte(String key, byte defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -209,8 +204,6 @@ public class StatSet implements IParserAdvUtils
public byte[] getByteArray(String key, String splitOn) public byte[] getByteArray(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -242,8 +235,6 @@ public class StatSet implements IParserAdvUtils
public List<Byte> getByteList(String key, String splitOn) public List<Byte> getByteList(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final List<Byte> result = new ArrayList<>(); final List<Byte> result = new ArrayList<>();
for (Byte i : getByteArray(key, splitOn)) for (Byte i : getByteArray(key, splitOn))
{ {
@@ -255,7 +246,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public short getShort(String key) public short getShort(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -278,7 +268,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public short getShort(String key, short defaultValue) public short getShort(String key, short defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -315,7 +304,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public int getInt(String key) public int getInt(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -340,7 +328,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public int getInt(String key, int defaultValue) public int getInt(String key, int defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -376,8 +363,6 @@ public class StatSet implements IParserAdvUtils
public int[] getIntArray(String key, String splitOn) public int[] getIntArray(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -409,8 +394,6 @@ public class StatSet implements IParserAdvUtils
public List<Integer> getIntegerList(String key, String splitOn) public List<Integer> getIntegerList(String key, String splitOn)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(splitOn);
final List<Integer> result = new ArrayList<>(); final List<Integer> result = new ArrayList<>();
for (int i : getIntArray(key, splitOn)) for (int i : getIntArray(key, splitOn))
{ {
@@ -422,7 +405,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public long getLong(String key) public long getLong(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -445,7 +427,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public long getLong(String key, long defaultValue) public long getLong(String key, long defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -482,7 +463,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public float getFloat(String key) public float getFloat(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -505,7 +485,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public float getFloat(String key, float defaultValue) public float getFloat(String key, float defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -542,7 +521,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public double getDouble(String key) public double getDouble(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -565,7 +543,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public double getDouble(String key, double defaultValue) public double getDouble(String key, double defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -602,7 +579,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public String getString(String key) public String getString(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -614,7 +590,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public String getString(String key, String defaultValue) public String getString(String key, String defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -626,7 +601,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public Duration getDuration(String key) public Duration getDuration(String key)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -638,7 +612,6 @@ public class StatSet implements IParserAdvUtils
@Override @Override
public Duration getDuration(String key, Duration defaultValue) public Duration getDuration(String key, Duration defaultValue)
{ {
Objects.requireNonNull(key);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -651,8 +624,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass) public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(enumClass);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -676,8 +647,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass, T defaultValue) public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass, T defaultValue)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(enumClass);
final Object val = _set.get(key); final Object val = _set.get(key);
if (val == null) if (val == null)
{ {
@@ -700,8 +669,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <A> A getObject(String name, Class<A> type) public <A> A getObject(String name, Class<A> type)
{ {
Objects.requireNonNull(name);
Objects.requireNonNull(type);
final Object obj = _set.get(name); final Object obj = _set.get(name);
if ((obj == null) || !type.isAssignableFrom(obj.getClass())) if ((obj == null) || !type.isAssignableFrom(obj.getClass()))
{ {
@@ -714,8 +681,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <A> A getObject(String name, Class<A> type, A defaultValue) public <A> A getObject(String name, Class<A> type, A defaultValue)
{ {
Objects.requireNonNull(name);
Objects.requireNonNull(type);
final Object obj = _set.get(name); final Object obj = _set.get(name);
if ((obj == null) || !type.isAssignableFrom(obj.getClass())) if ((obj == null) || !type.isAssignableFrom(obj.getClass()))
{ {
@@ -727,7 +692,6 @@ public class StatSet implements IParserAdvUtils
public SkillHolder getSkillHolder(String key) public SkillHolder getSkillHolder(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof SkillHolder)) if (!(obj instanceof SkillHolder))
{ {
@@ -739,7 +703,6 @@ public class StatSet implements IParserAdvUtils
public Location getLocation(String key) public Location getLocation(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof Location)) if (!(obj instanceof Location))
{ {
@@ -751,7 +714,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public List<MinionHolder> getMinionList(String key) public List<MinionHolder> getMinionList(String key)
{ {
Objects.requireNonNull(key);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof List<?>)) if (!(obj instanceof List<?>))
{ {
@@ -764,8 +726,6 @@ public class StatSet implements IParserAdvUtils
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T> List<T> getList(String key, Class<T> clazz) public <T> List<T> getList(String key, Class<T> clazz)
{ {
Objects.requireNonNull(key);
Objects.requireNonNull(clazz);
final Object obj = _set.get(key); final Object obj = _set.get(key);
if (!(obj instanceof List<?>)) if (!(obj instanceof List<?>))
{ {
@@ -871,83 +831,61 @@ public class StatSet implements IParserAdvUtils
return (Map<K, V>) obj; return (Map<K, V>) obj;
} }
public StatSet set(String name, Object value) public void set(String name, Object value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(name, value); _set.put(name, value);
return this;
} }
public StatSet set(String key, boolean value) public void set(String key, byte value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, byte value) public void set(String key, short value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, short value) public void set(String key, int value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, int value) public void set(String key, long value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, long value) public void set(String key, float value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, float value) public void set(String key, double value)
{ {
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, double value) public void set(String key, String value)
{
_set.put(key, value);
return this;
}
public StatSet set(String key, String value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(key, value); _set.put(key, value);
return this;
} }
public StatSet set(String key, Enum<?> value) public void set(String key, Enum<?> value)
{ {
if (value == null) if (value == null)
{ {
return this; return;
} }
_set.put(key, value); _set.put(key, value);
return this;
}
public static StatSet valueOf(String key, Object value)
{
final StatSet set = new StatSet();
set.set(key, value);
return set;
} }
public void remove(String key) public void remove(String key)

View File

@@ -244,7 +244,9 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
player.teleToLocation(_instance.getEnterLocations().get(index++), 0, _instance); player.teleToLocation(_instance.getEnterLocations().get(index++), 0, _instance);
} }
getTimers().addTimer("match_start_countdown", StatSet.valueOf("time", 60), 100, null, null); final StatSet params = new StatSet();
params.set("time", 60);
getTimers().addTimer("match_start_countdown", params, 100, null, null);
getTimers().addTimer("teleport_message1", 10000, null, null); getTimers().addTimer("teleport_message1", 10000, null, null);
getTimers().addTimer("teleport_message2", 14000, null, null); getTimers().addTimer("teleport_message2", 14000, null, null);
@@ -394,7 +396,9 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
} }
} }
getTimers().cancelTimer("update", null, null); getTimers().cancelTimer("update", null, null);
getTimers().addTimer("match_end_countdown", StatSet.valueOf("time", 30), 30 * 1000, null, null); final StatSet params = new StatSet();
params.set("time", 30);
getTimers().addTimer("match_end_countdown", params, 30 * 1000, null, null);
EventDispatcher.getInstance().notifyEvent(new OnCeremonyOfChaosMatchResult(winners, members)); EventDispatcher.getInstance().notifyEvent(new OnCeremonyOfChaosMatchResult(winners, members));
} }
@@ -530,19 +534,23 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
// Reschedule // Reschedule
if (time == 60) if (time == 60)
{ {
getTimers().addTimer(event, params.set("time", 30), 30 * 1000, null, null); params.set("time", 30);
getTimers().addTimer(event, params, 30 * 1000, null, null);
} }
else if ((time == 30) || (time == 20)) else if ((time == 30) || (time == 20))
{ {
getTimers().addTimer(event, params.set("time", time - 10), 10 * 1000, null, null); params.set("time", time - 10);
getTimers().addTimer(event, params, 10 * 1000, null, null);
} }
else if (time == 10) else if (time == 10)
{ {
getTimers().addTimer(event, params.set("time", 5), 5 * 1000, null, null); params.set("time", 5);
getTimers().addTimer(event, params, 5 * 1000, null, null);
} }
else if ((time > 1) && (time <= 5)) else if ((time > 1) && (time <= 5))
{ {
getTimers().addTimer(event, params.set("time", time - 1), 1000, null, null); params.set("time", time - 1);
getTimers().addTimer(event, params, 1000, null, null);
} }
break; break;
} }
@@ -556,11 +564,13 @@ public class CeremonyOfChaosEvent extends AbstractEvent<CeremonyOfChaosMember>
// Reschedule // Reschedule
if ((time == 30) || (time == 20)) if ((time == 30) || (time == 20))
{ {
getTimers().addTimer(event, params.set("time", time - 10), 10 * 1000, null, null); params.set("time", time - 10);
getTimers().addTimer(event, params, 10 * 1000, null, null);
} }
else if ((time > 0) && (time <= 10)) else if ((time > 0) && (time <= 10))
{ {
getTimers().addTimer(event, params.set("time", time - 1), 1000, null, null); params.set("time", time - 1);
getTimers().addTimer(event, params, 1000, null, null);
} }
else if (time == 0) else if (time == 0)
{ {

View File

@@ -16,7 +16,6 @@
*/ */
package org.l2jmobius.gameserver.model.variables; package org.l2jmobius.gameserver.model.variables;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
@@ -31,55 +30,43 @@ public abstract class AbstractVariables extends StatSet implements IRestorable,
{ {
private final AtomicBoolean _hasChanges = new AtomicBoolean(false); private final AtomicBoolean _hasChanges = new AtomicBoolean(false);
public AbstractVariables()
{
super(new ConcurrentHashMap<>());
}
/** /**
* Overriding following methods to prevent from doing useless database operations if there is no changes since player's login. * Overriding following methods to prevent from doing useless database operations if there is no changes since player's login.
*/ */
@Override @Override
public StatSet set(String name, boolean value) public void set(String name, double value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, double value) public void set(String name, Enum<?> value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, Enum<?> value) public void set(String name, int value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, int value) public void set(String name, long value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
} }
@Override @Override
public StatSet set(String name, long value) public void set(String name, String value)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
return super.set(name, value); super.set(name, value);
}
@Override
public StatSet set(String name, String value)
{
_hasChanges.compareAndSet(false, true);
return super.set(name, value);
} }
/** /**
@@ -87,15 +74,14 @@ public abstract class AbstractVariables extends StatSet implements IRestorable,
* @param name * @param name
* @param value * @param value
* @param markAsChanged * @param markAsChanged
* @return
*/ */
public StatSet set(String name, String value, boolean markAsChanged) public void set(String name, String value, boolean markAsChanged)
{ {
if (markAsChanged) if (markAsChanged)
{ {
_hasChanges.compareAndSet(false, true); _hasChanges.compareAndSet(false, true);
} }
return super.set(name, value); super.set(name, value);
} }
/** /**