Partial revert for previous CreatureStat changes.

This commit is contained in:
MobiusDevelopment
2020-07-30 19:14:21 +00:00
parent 5e1b8fa78d
commit 1ff9136a92
15 changed files with 330 additions and 585 deletions

View File

@@ -16,6 +16,7 @@
*/ */
package org.l2jmobius.gameserver.model.actor.stat; package org.l2jmobius.gameserver.model.actor.stat;
import java.util.Collections;
import java.util.Deque; import java.util.Deque;
import java.util.EnumMap; import java.util.EnumMap;
import java.util.EnumSet; import java.util.EnumSet;
@@ -887,25 +888,11 @@ public class CreatureStat
*/ */
public void recalculateStats(boolean broadcast) public void recalculateStats(boolean broadcast)
{ {
_lock.writeLock().lock();
// Copy old data before wiping it out // Copy old data before wiping it out
final Map<Stat, Double> adds; final Map<Stat, Double> adds = !broadcast ? Collections.emptyMap() : new EnumMap<>(_statsAdd);
final Map<Stat, Double> muls; final Map<Stat, Double> muls = !broadcast ? Collections.emptyMap() : new EnumMap<>(_statsMul);
if (broadcast)
{
adds = new EnumMap<>(_statsAdd);
muls = new EnumMap<>(_statsMul);
}
else
{
adds = null;
muls = null;
}
// Set of Stat that changed.
Set<Stat> changed = null;
_lock.writeLock().lock();
try try
{ {
// Wipe all the data // Wipe all the data
@@ -987,36 +974,32 @@ public class CreatureStat
} }
_attackSpeedMultiplier = Formulas.calcAtkSpdMultiplier(_creature); _attackSpeedMultiplier = Formulas.calcAtkSpdMultiplier(_creature);
_mAttackSpeedMultiplier = Formulas.calcMAtkSpdMultiplier(_creature); _mAttackSpeedMultiplier = Formulas.calcMAtkSpdMultiplier(_creature);
if (broadcast && (adds != null) && (muls != null)) // adds and muls cannot be null when broadcast is true, but Eclipse throws warning bellow.
{
// Calculate the difference between old and new stats
changed = new HashSet<>();
for (Stat stat : Stat.values())
{
if ((_statsAdd.containsKey(stat) ? _statsAdd.get(stat).doubleValue() : stat.getResetAddValue()) != (adds.containsKey(stat) ? adds.get(stat).doubleValue() : stat.getResetAddValue()))
{
changed.add(stat);
}
else if ((_statsMul.containsKey(stat) ? _statsMul.get(stat).doubleValue() : stat.getResetMulValue()) != (muls.containsKey(stat) ? muls.get(stat).doubleValue() : stat.getResetMulValue()))
{
changed.add(stat);
}
}
}
} }
finally finally
{ {
_lock.writeLock().unlock(); _lock.writeLock().unlock();
} }
if ((changed != null) && !changed.isEmpty())
{
_creature.broadcastModifiedStats(changed);
}
// Notify recalculation to child classes // Notify recalculation to child classes
onRecalculateStats(broadcast); onRecalculateStats(broadcast);
if (broadcast)
{
// Calculate the difference between old and new stats
final Set<Stat> changed = new HashSet<>();
for (Stat stat : Stat.values())
{
if (_statsAdd.getOrDefault(stat, stat.getResetAddValue()) != adds.getOrDefault(stat, stat.getResetAddValue()))
{
changed.add(stat);
}
else if (_statsMul.getOrDefault(stat, stat.getResetMulValue()) != muls.getOrDefault(stat, stat.getResetMulValue()))
{
changed.add(stat);
}
}
_creature.broadcastModifiedStats(changed);
}
} }
protected void onRecalculateStats(boolean broadcast) protected void onRecalculateStats(boolean broadcast)

View File

@@ -16,6 +16,7 @@
*/ */
package org.l2jmobius.gameserver.model.actor.stat; package org.l2jmobius.gameserver.model.actor.stat;
import java.util.Collections;
import java.util.Deque; import java.util.Deque;
import java.util.EnumMap; import java.util.EnumMap;
import java.util.EnumSet; import java.util.EnumSet;
@@ -887,25 +888,11 @@ public class CreatureStat
*/ */
public void recalculateStats(boolean broadcast) public void recalculateStats(boolean broadcast)
{ {
_lock.writeLock().lock();
// Copy old data before wiping it out // Copy old data before wiping it out
final Map<Stat, Double> adds; final Map<Stat, Double> adds = !broadcast ? Collections.emptyMap() : new EnumMap<>(_statsAdd);
final Map<Stat, Double> muls; final Map<Stat, Double> muls = !broadcast ? Collections.emptyMap() : new EnumMap<>(_statsMul);
if (broadcast)
{
adds = new EnumMap<>(_statsAdd);
muls = new EnumMap<>(_statsMul);
}
else
{
adds = null;
muls = null;
}
// Set of Stat that changed.
Set<Stat> changed = null;
_lock.writeLock().lock();
try try
{ {
// Wipe all the data // Wipe all the data
@@ -987,36 +974,32 @@ public class CreatureStat
} }
_attackSpeedMultiplier = Formulas.calcAtkSpdMultiplier(_creature); _attackSpeedMultiplier = Formulas.calcAtkSpdMultiplier(_creature);
_mAttackSpeedMultiplier = Formulas.calcMAtkSpdMultiplier(_creature); _mAttackSpeedMultiplier = Formulas.calcMAtkSpdMultiplier(_creature);
if (broadcast && (adds != null) && (muls != null)) // adds and muls cannot be null when broadcast is true, but Eclipse throws warning bellow.
{
// Calculate the difference between old and new stats
changed = new HashSet<>();
for (Stat stat : Stat.values())
{
if ((_statsAdd.containsKey(stat) ? _statsAdd.get(stat).doubleValue() : stat.getResetAddValue()) != (adds.containsKey(stat) ? adds.get(stat).doubleValue() : stat.getResetAddValue()))
{
changed.add(stat);
}
else if ((_statsMul.containsKey(stat) ? _statsMul.get(stat).doubleValue() : stat.getResetMulValue()) != (muls.containsKey(stat) ? muls.get(stat).doubleValue() : stat.getResetMulValue()))
{
changed.add(stat);
}
}
}
} }
finally finally
{ {
_lock.writeLock().unlock(); _lock.writeLock().unlock();
} }
if ((changed != null) && !changed.isEmpty())
{
_creature.broadcastModifiedStats(changed);
}
// Notify recalculation to child classes // Notify recalculation to child classes
onRecalculateStats(broadcast); onRecalculateStats(broadcast);
if (broadcast)
{
// Calculate the difference between old and new stats
final Set<Stat> changed = new HashSet<>();
for (Stat stat : Stat.values())
{
if (_statsAdd.getOrDefault(stat, stat.getResetAddValue()) != adds.getOrDefault(stat, stat.getResetAddValue()))
{
changed.add(stat);
}
else if (_statsMul.getOrDefault(stat, stat.getResetMulValue()) != muls.getOrDefault(stat, stat.getResetMulValue()))
{
changed.add(stat);
}
}
_creature.broadcastModifiedStats(changed);
}
} }
protected void onRecalculateStats(boolean broadcast) protected void onRecalculateStats(boolean broadcast)

View File

@@ -16,6 +16,7 @@
*/ */
package org.l2jmobius.gameserver.model.actor.stat; package org.l2jmobius.gameserver.model.actor.stat;
import java.util.Collections;
import java.util.Deque; import java.util.Deque;
import java.util.EnumMap; import java.util.EnumMap;
import java.util.EnumSet; import java.util.EnumSet;
@@ -887,25 +888,11 @@ public class CreatureStat
*/ */
public void recalculateStats(boolean broadcast) public void recalculateStats(boolean broadcast)
{ {
_lock.writeLock().lock();
// Copy old data before wiping it out // Copy old data before wiping it out
final Map<Stat, Double> adds; final Map<Stat, Double> adds = !broadcast ? Collections.emptyMap() : new EnumMap<>(_statsAdd);
final Map<Stat, Double> muls; final Map<Stat, Double> muls = !broadcast ? Collections.emptyMap() : new EnumMap<>(_statsMul);
if (broadcast)
{
adds = new EnumMap<>(_statsAdd);
muls = new EnumMap<>(_statsMul);
}
else
{
adds = null;
muls = null;
}
// Set of Stat that changed.
Set<Stat> changed = null;
_lock.writeLock().lock();
try try
{ {
// Wipe all the data // Wipe all the data
@@ -987,36 +974,32 @@ public class CreatureStat
} }
_attackSpeedMultiplier = Formulas.calcAtkSpdMultiplier(_creature); _attackSpeedMultiplier = Formulas.calcAtkSpdMultiplier(_creature);
_mAttackSpeedMultiplier = Formulas.calcMAtkSpdMultiplier(_creature); _mAttackSpeedMultiplier = Formulas.calcMAtkSpdMultiplier(_creature);
if (broadcast && (adds != null) && (muls != null)) // adds and muls cannot be null when broadcast is true, but Eclipse throws warning bellow.
{
// Calculate the difference between old and new stats
changed = new HashSet<>();
for (Stat stat : Stat.values())
{
if ((_statsAdd.containsKey(stat) ? _statsAdd.get(stat).doubleValue() : stat.getResetAddValue()) != (adds.containsKey(stat) ? adds.get(stat).doubleValue() : stat.getResetAddValue()))
{
changed.add(stat);
}
else if ((_statsMul.containsKey(stat) ? _statsMul.get(stat).doubleValue() : stat.getResetMulValue()) != (muls.containsKey(stat) ? muls.get(stat).doubleValue() : stat.getResetMulValue()))
{
changed.add(stat);
}
}
}
} }
finally finally
{ {
_lock.writeLock().unlock(); _lock.writeLock().unlock();
} }
if ((changed != null) && !changed.isEmpty())
{
_creature.broadcastModifiedStats(changed);
}
// Notify recalculation to child classes // Notify recalculation to child classes
onRecalculateStats(broadcast); onRecalculateStats(broadcast);
if (broadcast)
{
// Calculate the difference between old and new stats
final Set<Stat> changed = new HashSet<>();
for (Stat stat : Stat.values())
{
if (_statsAdd.getOrDefault(stat, stat.getResetAddValue()) != adds.getOrDefault(stat, stat.getResetAddValue()))
{
changed.add(stat);
}
else if (_statsMul.getOrDefault(stat, stat.getResetMulValue()) != muls.getOrDefault(stat, stat.getResetMulValue()))
{
changed.add(stat);
}
}
_creature.broadcastModifiedStats(changed);
}
} }
protected void onRecalculateStats(boolean broadcast) protected void onRecalculateStats(boolean broadcast)

View File

@@ -16,6 +16,7 @@
*/ */
package org.l2jmobius.gameserver.model.actor.stat; package org.l2jmobius.gameserver.model.actor.stat;
import java.util.Collections;
import java.util.Deque; import java.util.Deque;
import java.util.EnumMap; import java.util.EnumMap;
import java.util.EnumSet; import java.util.EnumSet;
@@ -887,25 +888,11 @@ public class CreatureStat
*/ */
public void recalculateStats(boolean broadcast) public void recalculateStats(boolean broadcast)
{ {
_lock.writeLock().lock();
// Copy old data before wiping it out // Copy old data before wiping it out
final Map<Stat, Double> adds; final Map<Stat, Double> adds = !broadcast ? Collections.emptyMap() : new EnumMap<>(_statsAdd);
final Map<Stat, Double> muls; final Map<Stat, Double> muls = !broadcast ? Collections.emptyMap() : new EnumMap<>(_statsMul);
if (broadcast)
{
adds = new EnumMap<>(_statsAdd);
muls = new EnumMap<>(_statsMul);
}
else
{
adds = null;
muls = null;
}
// Set of Stat that changed.
Set<Stat> changed = null;
_lock.writeLock().lock();
try try
{ {
// Wipe all the data // Wipe all the data
@@ -987,36 +974,32 @@ public class CreatureStat
} }
_attackSpeedMultiplier = Formulas.calcAtkSpdMultiplier(_creature); _attackSpeedMultiplier = Formulas.calcAtkSpdMultiplier(_creature);
_mAttackSpeedMultiplier = Formulas.calcMAtkSpdMultiplier(_creature); _mAttackSpeedMultiplier = Formulas.calcMAtkSpdMultiplier(_creature);
if (broadcast && (adds != null) && (muls != null)) // adds and muls cannot be null when broadcast is true, but Eclipse throws warning bellow.
{
// Calculate the difference between old and new stats
changed = new HashSet<>();
for (Stat stat : Stat.values())
{
if ((_statsAdd.containsKey(stat) ? _statsAdd.get(stat).doubleValue() : stat.getResetAddValue()) != (adds.containsKey(stat) ? adds.get(stat).doubleValue() : stat.getResetAddValue()))
{
changed.add(stat);
}
else if ((_statsMul.containsKey(stat) ? _statsMul.get(stat).doubleValue() : stat.getResetMulValue()) != (muls.containsKey(stat) ? muls.get(stat).doubleValue() : stat.getResetMulValue()))
{
changed.add(stat);
}
}
}
} }
finally finally
{ {
_lock.writeLock().unlock(); _lock.writeLock().unlock();
} }
if ((changed != null) && !changed.isEmpty())
{
_creature.broadcastModifiedStats(changed);
}
// Notify recalculation to child classes // Notify recalculation to child classes
onRecalculateStats(broadcast); onRecalculateStats(broadcast);
if (broadcast)
{
// Calculate the difference between old and new stats
final Set<Stat> changed = new HashSet<>();
for (Stat stat : Stat.values())
{
if (_statsAdd.getOrDefault(stat, stat.getResetAddValue()) != adds.getOrDefault(stat, stat.getResetAddValue()))
{
changed.add(stat);
}
else if (_statsMul.getOrDefault(stat, stat.getResetMulValue()) != muls.getOrDefault(stat, stat.getResetMulValue()))
{
changed.add(stat);
}
}
_creature.broadcastModifiedStats(changed);
}
} }
protected void onRecalculateStats(boolean broadcast) protected void onRecalculateStats(boolean broadcast)

View File

@@ -16,6 +16,7 @@
*/ */
package org.l2jmobius.gameserver.model.actor.stat; package org.l2jmobius.gameserver.model.actor.stat;
import java.util.Collections;
import java.util.Deque; import java.util.Deque;
import java.util.EnumMap; import java.util.EnumMap;
import java.util.EnumSet; import java.util.EnumSet;
@@ -887,25 +888,11 @@ public class CreatureStat
*/ */
public void recalculateStats(boolean broadcast) public void recalculateStats(boolean broadcast)
{ {
_lock.writeLock().lock();
// Copy old data before wiping it out // Copy old data before wiping it out
final Map<Stat, Double> adds; final Map<Stat, Double> adds = !broadcast ? Collections.emptyMap() : new EnumMap<>(_statsAdd);
final Map<Stat, Double> muls; final Map<Stat, Double> muls = !broadcast ? Collections.emptyMap() : new EnumMap<>(_statsMul);
if (broadcast)
{
adds = new EnumMap<>(_statsAdd);
muls = new EnumMap<>(_statsMul);
}
else
{
adds = null;
muls = null;
}
// Set of Stat that changed.
Set<Stat> changed = null;
_lock.writeLock().lock();
try try
{ {
// Wipe all the data // Wipe all the data
@@ -987,36 +974,32 @@ public class CreatureStat
} }
_attackSpeedMultiplier = Formulas.calcAtkSpdMultiplier(_creature); _attackSpeedMultiplier = Formulas.calcAtkSpdMultiplier(_creature);
_mAttackSpeedMultiplier = Formulas.calcMAtkSpdMultiplier(_creature); _mAttackSpeedMultiplier = Formulas.calcMAtkSpdMultiplier(_creature);
if (broadcast && (adds != null) && (muls != null)) // adds and muls cannot be null when broadcast is true, but Eclipse throws warning bellow.
{
// Calculate the difference between old and new stats
changed = new HashSet<>();
for (Stat stat : Stat.values())
{
if ((_statsAdd.containsKey(stat) ? _statsAdd.get(stat).doubleValue() : stat.getResetAddValue()) != (adds.containsKey(stat) ? adds.get(stat).doubleValue() : stat.getResetAddValue()))
{
changed.add(stat);
}
else if ((_statsMul.containsKey(stat) ? _statsMul.get(stat).doubleValue() : stat.getResetMulValue()) != (muls.containsKey(stat) ? muls.get(stat).doubleValue() : stat.getResetMulValue()))
{
changed.add(stat);
}
}
}
} }
finally finally
{ {
_lock.writeLock().unlock(); _lock.writeLock().unlock();
} }
if ((changed != null) && !changed.isEmpty())
{
_creature.broadcastModifiedStats(changed);
}
// Notify recalculation to child classes // Notify recalculation to child classes
onRecalculateStats(broadcast); onRecalculateStats(broadcast);
if (broadcast)
{
// Calculate the difference between old and new stats
final Set<Stat> changed = new HashSet<>();
for (Stat stat : Stat.values())
{
if (_statsAdd.getOrDefault(stat, stat.getResetAddValue()) != adds.getOrDefault(stat, stat.getResetAddValue()))
{
changed.add(stat);
}
else if (_statsMul.getOrDefault(stat, stat.getResetMulValue()) != muls.getOrDefault(stat, stat.getResetMulValue()))
{
changed.add(stat);
}
}
_creature.broadcastModifiedStats(changed);
}
} }
protected void onRecalculateStats(boolean broadcast) protected void onRecalculateStats(boolean broadcast)

View File

@@ -16,6 +16,7 @@
*/ */
package org.l2jmobius.gameserver.model.actor.stat; package org.l2jmobius.gameserver.model.actor.stat;
import java.util.Collections;
import java.util.Deque; import java.util.Deque;
import java.util.EnumMap; import java.util.EnumMap;
import java.util.EnumSet; import java.util.EnumSet;
@@ -887,25 +888,11 @@ public class CreatureStat
*/ */
public void recalculateStats(boolean broadcast) public void recalculateStats(boolean broadcast)
{ {
_lock.writeLock().lock();
// Copy old data before wiping it out // Copy old data before wiping it out
final Map<Stat, Double> adds; final Map<Stat, Double> adds = !broadcast ? Collections.emptyMap() : new EnumMap<>(_statsAdd);
final Map<Stat, Double> muls; final Map<Stat, Double> muls = !broadcast ? Collections.emptyMap() : new EnumMap<>(_statsMul);
if (broadcast)
{
adds = new EnumMap<>(_statsAdd);
muls = new EnumMap<>(_statsMul);
}
else
{
adds = null;
muls = null;
}
// Set of Stat that changed.
Set<Stat> changed = null;
_lock.writeLock().lock();
try try
{ {
// Wipe all the data // Wipe all the data
@@ -987,36 +974,32 @@ public class CreatureStat
} }
_attackSpeedMultiplier = Formulas.calcAtkSpdMultiplier(_creature); _attackSpeedMultiplier = Formulas.calcAtkSpdMultiplier(_creature);
_mAttackSpeedMultiplier = Formulas.calcMAtkSpdMultiplier(_creature); _mAttackSpeedMultiplier = Formulas.calcMAtkSpdMultiplier(_creature);
if (broadcast && (adds != null) && (muls != null)) // adds and muls cannot be null when broadcast is true, but Eclipse throws warning bellow.
{
// Calculate the difference between old and new stats
changed = new HashSet<>();
for (Stat stat : Stat.values())
{
if ((_statsAdd.containsKey(stat) ? _statsAdd.get(stat).doubleValue() : stat.getResetAddValue()) != (adds.containsKey(stat) ? adds.get(stat).doubleValue() : stat.getResetAddValue()))
{
changed.add(stat);
}
else if ((_statsMul.containsKey(stat) ? _statsMul.get(stat).doubleValue() : stat.getResetMulValue()) != (muls.containsKey(stat) ? muls.get(stat).doubleValue() : stat.getResetMulValue()))
{
changed.add(stat);
}
}
}
} }
finally finally
{ {
_lock.writeLock().unlock(); _lock.writeLock().unlock();
} }
if ((changed != null) && !changed.isEmpty())
{
_creature.broadcastModifiedStats(changed);
}
// Notify recalculation to child classes // Notify recalculation to child classes
onRecalculateStats(broadcast); onRecalculateStats(broadcast);
if (broadcast)
{
// Calculate the difference between old and new stats
final Set<Stat> changed = new HashSet<>();
for (Stat stat : Stat.values())
{
if (_statsAdd.getOrDefault(stat, stat.getResetAddValue()) != adds.getOrDefault(stat, stat.getResetAddValue()))
{
changed.add(stat);
}
else if (_statsMul.getOrDefault(stat, stat.getResetMulValue()) != muls.getOrDefault(stat, stat.getResetMulValue()))
{
changed.add(stat);
}
}
_creature.broadcastModifiedStats(changed);
}
} }
protected void onRecalculateStats(boolean broadcast) protected void onRecalculateStats(boolean broadcast)

View File

@@ -16,6 +16,7 @@
*/ */
package org.l2jmobius.gameserver.model.actor.stat; package org.l2jmobius.gameserver.model.actor.stat;
import java.util.Collections;
import java.util.Deque; import java.util.Deque;
import java.util.EnumMap; import java.util.EnumMap;
import java.util.EnumSet; import java.util.EnumSet;
@@ -887,25 +888,11 @@ public class CreatureStat
*/ */
public void recalculateStats(boolean broadcast) public void recalculateStats(boolean broadcast)
{ {
_lock.writeLock().lock();
// Copy old data before wiping it out // Copy old data before wiping it out
final Map<Stat, Double> adds; final Map<Stat, Double> adds = !broadcast ? Collections.emptyMap() : new EnumMap<>(_statsAdd);
final Map<Stat, Double> muls; final Map<Stat, Double> muls = !broadcast ? Collections.emptyMap() : new EnumMap<>(_statsMul);
if (broadcast)
{
adds = new EnumMap<>(_statsAdd);
muls = new EnumMap<>(_statsMul);
}
else
{
adds = null;
muls = null;
}
// Set of Stat that changed.
Set<Stat> changed = null;
_lock.writeLock().lock();
try try
{ {
// Wipe all the data // Wipe all the data
@@ -987,36 +974,32 @@ public class CreatureStat
} }
_attackSpeedMultiplier = Formulas.calcAtkSpdMultiplier(_creature); _attackSpeedMultiplier = Formulas.calcAtkSpdMultiplier(_creature);
_mAttackSpeedMultiplier = Formulas.calcMAtkSpdMultiplier(_creature); _mAttackSpeedMultiplier = Formulas.calcMAtkSpdMultiplier(_creature);
if (broadcast && (adds != null) && (muls != null)) // adds and muls cannot be null when broadcast is true, but Eclipse throws warning bellow.
{
// Calculate the difference between old and new stats
changed = new HashSet<>();
for (Stat stat : Stat.values())
{
if ((_statsAdd.containsKey(stat) ? _statsAdd.get(stat).doubleValue() : stat.getResetAddValue()) != (adds.containsKey(stat) ? adds.get(stat).doubleValue() : stat.getResetAddValue()))
{
changed.add(stat);
}
else if ((_statsMul.containsKey(stat) ? _statsMul.get(stat).doubleValue() : stat.getResetMulValue()) != (muls.containsKey(stat) ? muls.get(stat).doubleValue() : stat.getResetMulValue()))
{
changed.add(stat);
}
}
}
} }
finally finally
{ {
_lock.writeLock().unlock(); _lock.writeLock().unlock();
} }
if ((changed != null) && !changed.isEmpty())
{
_creature.broadcastModifiedStats(changed);
}
// Notify recalculation to child classes // Notify recalculation to child classes
onRecalculateStats(broadcast); onRecalculateStats(broadcast);
if (broadcast)
{
// Calculate the difference between old and new stats
final Set<Stat> changed = new HashSet<>();
for (Stat stat : Stat.values())
{
if (_statsAdd.getOrDefault(stat, stat.getResetAddValue()) != adds.getOrDefault(stat, stat.getResetAddValue()))
{
changed.add(stat);
}
else if (_statsMul.getOrDefault(stat, stat.getResetMulValue()) != muls.getOrDefault(stat, stat.getResetMulValue()))
{
changed.add(stat);
}
}
_creature.broadcastModifiedStats(changed);
}
} }
protected void onRecalculateStats(boolean broadcast) protected void onRecalculateStats(boolean broadcast)

View File

@@ -16,6 +16,7 @@
*/ */
package org.l2jmobius.gameserver.model.actor.stat; package org.l2jmobius.gameserver.model.actor.stat;
import java.util.Collections;
import java.util.Deque; import java.util.Deque;
import java.util.EnumMap; import java.util.EnumMap;
import java.util.EnumSet; import java.util.EnumSet;
@@ -887,25 +888,11 @@ public class CreatureStat
*/ */
public void recalculateStats(boolean broadcast) public void recalculateStats(boolean broadcast)
{ {
_lock.writeLock().lock();
// Copy old data before wiping it out // Copy old data before wiping it out
final Map<Stat, Double> adds; final Map<Stat, Double> adds = !broadcast ? Collections.emptyMap() : new EnumMap<>(_statsAdd);
final Map<Stat, Double> muls; final Map<Stat, Double> muls = !broadcast ? Collections.emptyMap() : new EnumMap<>(_statsMul);
if (broadcast)
{
adds = new EnumMap<>(_statsAdd);
muls = new EnumMap<>(_statsMul);
}
else
{
adds = null;
muls = null;
}
// Set of Stat that changed.
Set<Stat> changed = null;
_lock.writeLock().lock();
try try
{ {
// Wipe all the data // Wipe all the data
@@ -987,36 +974,32 @@ public class CreatureStat
} }
_attackSpeedMultiplier = Formulas.calcAtkSpdMultiplier(_creature); _attackSpeedMultiplier = Formulas.calcAtkSpdMultiplier(_creature);
_mAttackSpeedMultiplier = Formulas.calcMAtkSpdMultiplier(_creature); _mAttackSpeedMultiplier = Formulas.calcMAtkSpdMultiplier(_creature);
if (broadcast && (adds != null) && (muls != null)) // adds and muls cannot be null when broadcast is true, but Eclipse throws warning bellow.
{
// Calculate the difference between old and new stats
changed = new HashSet<>();
for (Stat stat : Stat.values())
{
if ((_statsAdd.containsKey(stat) ? _statsAdd.get(stat).doubleValue() : stat.getResetAddValue()) != (adds.containsKey(stat) ? adds.get(stat).doubleValue() : stat.getResetAddValue()))
{
changed.add(stat);
}
else if ((_statsMul.containsKey(stat) ? _statsMul.get(stat).doubleValue() : stat.getResetMulValue()) != (muls.containsKey(stat) ? muls.get(stat).doubleValue() : stat.getResetMulValue()))
{
changed.add(stat);
}
}
}
} }
finally finally
{ {
_lock.writeLock().unlock(); _lock.writeLock().unlock();
} }
if ((changed != null) && !changed.isEmpty())
{
_creature.broadcastModifiedStats(changed);
}
// Notify recalculation to child classes // Notify recalculation to child classes
onRecalculateStats(broadcast); onRecalculateStats(broadcast);
if (broadcast)
{
// Calculate the difference between old and new stats
final Set<Stat> changed = new HashSet<>();
for (Stat stat : Stat.values())
{
if (_statsAdd.getOrDefault(stat, stat.getResetAddValue()) != adds.getOrDefault(stat, stat.getResetAddValue()))
{
changed.add(stat);
}
else if (_statsMul.getOrDefault(stat, stat.getResetMulValue()) != muls.getOrDefault(stat, stat.getResetMulValue()))
{
changed.add(stat);
}
}
_creature.broadcastModifiedStats(changed);
}
} }
protected void onRecalculateStats(boolean broadcast) protected void onRecalculateStats(boolean broadcast)

View File

@@ -16,6 +16,7 @@
*/ */
package org.l2jmobius.gameserver.model.actor.stat; package org.l2jmobius.gameserver.model.actor.stat;
import java.util.Collections;
import java.util.Deque; import java.util.Deque;
import java.util.EnumMap; import java.util.EnumMap;
import java.util.EnumSet; import java.util.EnumSet;
@@ -877,25 +878,11 @@ public class CreatureStat
*/ */
public void recalculateStats(boolean broadcast) public void recalculateStats(boolean broadcast)
{ {
_lock.writeLock().lock();
// Copy old data before wiping it out // Copy old data before wiping it out
final Map<Stat, Double> adds; final Map<Stat, Double> adds = !broadcast ? Collections.emptyMap() : new EnumMap<>(_statsAdd);
final Map<Stat, Double> muls; final Map<Stat, Double> muls = !broadcast ? Collections.emptyMap() : new EnumMap<>(_statsMul);
if (broadcast)
{
adds = new EnumMap<>(_statsAdd);
muls = new EnumMap<>(_statsMul);
}
else
{
adds = null;
muls = null;
}
// Set of Stat that changed.
Set<Stat> changed = null;
_lock.writeLock().lock();
try try
{ {
// Wipe all the data // Wipe all the data
@@ -977,36 +964,32 @@ public class CreatureStat
} }
_attackSpeedMultiplier = Formulas.calcAtkSpdMultiplier(_creature); _attackSpeedMultiplier = Formulas.calcAtkSpdMultiplier(_creature);
_mAttackSpeedMultiplier = Formulas.calcMAtkSpdMultiplier(_creature); _mAttackSpeedMultiplier = Formulas.calcMAtkSpdMultiplier(_creature);
if (broadcast && (adds != null) && (muls != null)) // adds and muls cannot be null when broadcast is true, but Eclipse throws warning bellow.
{
// Calculate the difference between old and new stats
changed = new HashSet<>();
for (Stat stat : Stat.values())
{
if ((_statsAdd.containsKey(stat) ? _statsAdd.get(stat).doubleValue() : stat.getResetAddValue()) != (adds.containsKey(stat) ? adds.get(stat).doubleValue() : stat.getResetAddValue()))
{
changed.add(stat);
}
else if ((_statsMul.containsKey(stat) ? _statsMul.get(stat).doubleValue() : stat.getResetMulValue()) != (muls.containsKey(stat) ? muls.get(stat).doubleValue() : stat.getResetMulValue()))
{
changed.add(stat);
}
}
}
} }
finally finally
{ {
_lock.writeLock().unlock(); _lock.writeLock().unlock();
} }
if ((changed != null) && !changed.isEmpty())
{
_creature.broadcastModifiedStats(changed);
}
// Notify recalculation to child classes // Notify recalculation to child classes
onRecalculateStats(broadcast); onRecalculateStats(broadcast);
if (broadcast)
{
// Calculate the difference between old and new stats
final Set<Stat> changed = new HashSet<>();
for (Stat stat : Stat.values())
{
if (_statsAdd.getOrDefault(stat, stat.getResetAddValue()) != adds.getOrDefault(stat, stat.getResetAddValue()))
{
changed.add(stat);
}
else if (_statsMul.getOrDefault(stat, stat.getResetMulValue()) != muls.getOrDefault(stat, stat.getResetMulValue()))
{
changed.add(stat);
}
}
_creature.broadcastModifiedStats(changed);
}
} }
protected void onRecalculateStats(boolean broadcast) protected void onRecalculateStats(boolean broadcast)

View File

@@ -16,6 +16,7 @@
*/ */
package org.l2jmobius.gameserver.model.actor.stat; package org.l2jmobius.gameserver.model.actor.stat;
import java.util.Collections;
import java.util.Deque; import java.util.Deque;
import java.util.EnumMap; import java.util.EnumMap;
import java.util.EnumSet; import java.util.EnumSet;
@@ -877,25 +878,11 @@ public class CreatureStat
*/ */
public void recalculateStats(boolean broadcast) public void recalculateStats(boolean broadcast)
{ {
_lock.writeLock().lock();
// Copy old data before wiping it out // Copy old data before wiping it out
final Map<Stat, Double> adds; final Map<Stat, Double> adds = !broadcast ? Collections.emptyMap() : new EnumMap<>(_statsAdd);
final Map<Stat, Double> muls; final Map<Stat, Double> muls = !broadcast ? Collections.emptyMap() : new EnumMap<>(_statsMul);
if (broadcast)
{
adds = new EnumMap<>(_statsAdd);
muls = new EnumMap<>(_statsMul);
}
else
{
adds = null;
muls = null;
}
// Set of Stat that changed.
Set<Stat> changed = null;
_lock.writeLock().lock();
try try
{ {
// Wipe all the data // Wipe all the data
@@ -977,36 +964,32 @@ public class CreatureStat
} }
_attackSpeedMultiplier = Formulas.calcAtkSpdMultiplier(_creature); _attackSpeedMultiplier = Formulas.calcAtkSpdMultiplier(_creature);
_mAttackSpeedMultiplier = Formulas.calcMAtkSpdMultiplier(_creature); _mAttackSpeedMultiplier = Formulas.calcMAtkSpdMultiplier(_creature);
if (broadcast && (adds != null) && (muls != null)) // adds and muls cannot be null when broadcast is true, but Eclipse throws warning bellow.
{
// Calculate the difference between old and new stats
changed = new HashSet<>();
for (Stat stat : Stat.values())
{
if ((_statsAdd.containsKey(stat) ? _statsAdd.get(stat).doubleValue() : stat.getResetAddValue()) != (adds.containsKey(stat) ? adds.get(stat).doubleValue() : stat.getResetAddValue()))
{
changed.add(stat);
}
else if ((_statsMul.containsKey(stat) ? _statsMul.get(stat).doubleValue() : stat.getResetMulValue()) != (muls.containsKey(stat) ? muls.get(stat).doubleValue() : stat.getResetMulValue()))
{
changed.add(stat);
}
}
}
} }
finally finally
{ {
_lock.writeLock().unlock(); _lock.writeLock().unlock();
} }
if ((changed != null) && !changed.isEmpty())
{
_creature.broadcastModifiedStats(changed);
}
// Notify recalculation to child classes // Notify recalculation to child classes
onRecalculateStats(broadcast); onRecalculateStats(broadcast);
if (broadcast)
{
// Calculate the difference between old and new stats
final Set<Stat> changed = new HashSet<>();
for (Stat stat : Stat.values())
{
if (_statsAdd.getOrDefault(stat, stat.getResetAddValue()) != adds.getOrDefault(stat, stat.getResetAddValue()))
{
changed.add(stat);
}
else if (_statsMul.getOrDefault(stat, stat.getResetMulValue()) != muls.getOrDefault(stat, stat.getResetMulValue()))
{
changed.add(stat);
}
}
_creature.broadcastModifiedStats(changed);
}
} }
protected void onRecalculateStats(boolean broadcast) protected void onRecalculateStats(boolean broadcast)

View File

@@ -16,6 +16,7 @@
*/ */
package org.l2jmobius.gameserver.model.actor.stat; package org.l2jmobius.gameserver.model.actor.stat;
import java.util.Collections;
import java.util.Deque; import java.util.Deque;
import java.util.EnumMap; import java.util.EnumMap;
import java.util.EnumSet; import java.util.EnumSet;
@@ -877,25 +878,11 @@ public class CreatureStat
*/ */
public void recalculateStats(boolean broadcast) public void recalculateStats(boolean broadcast)
{ {
_lock.writeLock().lock();
// Copy old data before wiping it out // Copy old data before wiping it out
final Map<Stat, Double> adds; final Map<Stat, Double> adds = !broadcast ? Collections.emptyMap() : new EnumMap<>(_statsAdd);
final Map<Stat, Double> muls; final Map<Stat, Double> muls = !broadcast ? Collections.emptyMap() : new EnumMap<>(_statsMul);
if (broadcast)
{
adds = new EnumMap<>(_statsAdd);
muls = new EnumMap<>(_statsMul);
}
else
{
adds = null;
muls = null;
}
// Set of Stat that changed.
Set<Stat> changed = null;
_lock.writeLock().lock();
try try
{ {
// Wipe all the data // Wipe all the data
@@ -977,36 +964,32 @@ public class CreatureStat
} }
_attackSpeedMultiplier = Formulas.calcAtkSpdMultiplier(_creature); _attackSpeedMultiplier = Formulas.calcAtkSpdMultiplier(_creature);
_mAttackSpeedMultiplier = Formulas.calcMAtkSpdMultiplier(_creature); _mAttackSpeedMultiplier = Formulas.calcMAtkSpdMultiplier(_creature);
if (broadcast && (adds != null) && (muls != null)) // adds and muls cannot be null when broadcast is true, but Eclipse throws warning bellow.
{
// Calculate the difference between old and new stats
changed = new HashSet<>();
for (Stat stat : Stat.values())
{
if ((_statsAdd.containsKey(stat) ? _statsAdd.get(stat).doubleValue() : stat.getResetAddValue()) != (adds.containsKey(stat) ? adds.get(stat).doubleValue() : stat.getResetAddValue()))
{
changed.add(stat);
}
else if ((_statsMul.containsKey(stat) ? _statsMul.get(stat).doubleValue() : stat.getResetMulValue()) != (muls.containsKey(stat) ? muls.get(stat).doubleValue() : stat.getResetMulValue()))
{
changed.add(stat);
}
}
}
} }
finally finally
{ {
_lock.writeLock().unlock(); _lock.writeLock().unlock();
} }
if ((changed != null) && !changed.isEmpty())
{
_creature.broadcastModifiedStats(changed);
}
// Notify recalculation to child classes // Notify recalculation to child classes
onRecalculateStats(broadcast); onRecalculateStats(broadcast);
if (broadcast)
{
// Calculate the difference between old and new stats
final Set<Stat> changed = new HashSet<>();
for (Stat stat : Stat.values())
{
if (_statsAdd.getOrDefault(stat, stat.getResetAddValue()) != adds.getOrDefault(stat, stat.getResetAddValue()))
{
changed.add(stat);
}
else if (_statsMul.getOrDefault(stat, stat.getResetMulValue()) != muls.getOrDefault(stat, stat.getResetMulValue()))
{
changed.add(stat);
}
}
_creature.broadcastModifiedStats(changed);
}
} }
protected void onRecalculateStats(boolean broadcast) protected void onRecalculateStats(boolean broadcast)

View File

@@ -16,6 +16,7 @@
*/ */
package org.l2jmobius.gameserver.model.actor.stat; package org.l2jmobius.gameserver.model.actor.stat;
import java.util.Collections;
import java.util.Deque; import java.util.Deque;
import java.util.EnumMap; import java.util.EnumMap;
import java.util.EnumSet; import java.util.EnumSet;
@@ -877,25 +878,11 @@ public class CreatureStat
*/ */
public void recalculateStats(boolean broadcast) public void recalculateStats(boolean broadcast)
{ {
_lock.writeLock().lock();
// Copy old data before wiping it out // Copy old data before wiping it out
final Map<Stat, Double> adds; final Map<Stat, Double> adds = !broadcast ? Collections.emptyMap() : new EnumMap<>(_statsAdd);
final Map<Stat, Double> muls; final Map<Stat, Double> muls = !broadcast ? Collections.emptyMap() : new EnumMap<>(_statsMul);
if (broadcast)
{
adds = new EnumMap<>(_statsAdd);
muls = new EnumMap<>(_statsMul);
}
else
{
adds = null;
muls = null;
}
// Set of Stat that changed.
Set<Stat> changed = null;
_lock.writeLock().lock();
try try
{ {
// Wipe all the data // Wipe all the data
@@ -977,36 +964,32 @@ public class CreatureStat
} }
_attackSpeedMultiplier = Formulas.calcAtkSpdMultiplier(_creature); _attackSpeedMultiplier = Formulas.calcAtkSpdMultiplier(_creature);
_mAttackSpeedMultiplier = Formulas.calcMAtkSpdMultiplier(_creature); _mAttackSpeedMultiplier = Formulas.calcMAtkSpdMultiplier(_creature);
if (broadcast && (adds != null) && (muls != null)) // adds and muls cannot be null when broadcast is true, but Eclipse throws warning bellow.
{
// Calculate the difference between old and new stats
changed = new HashSet<>();
for (Stat stat : Stat.values())
{
if ((_statsAdd.containsKey(stat) ? _statsAdd.get(stat).doubleValue() : stat.getResetAddValue()) != (adds.containsKey(stat) ? adds.get(stat).doubleValue() : stat.getResetAddValue()))
{
changed.add(stat);
}
else if ((_statsMul.containsKey(stat) ? _statsMul.get(stat).doubleValue() : stat.getResetMulValue()) != (muls.containsKey(stat) ? muls.get(stat).doubleValue() : stat.getResetMulValue()))
{
changed.add(stat);
}
}
}
} }
finally finally
{ {
_lock.writeLock().unlock(); _lock.writeLock().unlock();
} }
if ((changed != null) && !changed.isEmpty())
{
_creature.broadcastModifiedStats(changed);
}
// Notify recalculation to child classes // Notify recalculation to child classes
onRecalculateStats(broadcast); onRecalculateStats(broadcast);
if (broadcast)
{
// Calculate the difference between old and new stats
final Set<Stat> changed = new HashSet<>();
for (Stat stat : Stat.values())
{
if (_statsAdd.getOrDefault(stat, stat.getResetAddValue()) != adds.getOrDefault(stat, stat.getResetAddValue()))
{
changed.add(stat);
}
else if (_statsMul.getOrDefault(stat, stat.getResetMulValue()) != muls.getOrDefault(stat, stat.getResetMulValue()))
{
changed.add(stat);
}
}
_creature.broadcastModifiedStats(changed);
}
} }
protected void onRecalculateStats(boolean broadcast) protected void onRecalculateStats(boolean broadcast)

View File

@@ -16,6 +16,7 @@
*/ */
package org.l2jmobius.gameserver.model.actor.stat; package org.l2jmobius.gameserver.model.actor.stat;
import java.util.Collections;
import java.util.Deque; import java.util.Deque;
import java.util.EnumMap; import java.util.EnumMap;
import java.util.EnumSet; import java.util.EnumSet;
@@ -877,25 +878,11 @@ public class CreatureStat
*/ */
public void recalculateStats(boolean broadcast) public void recalculateStats(boolean broadcast)
{ {
_lock.writeLock().lock();
// Copy old data before wiping it out // Copy old data before wiping it out
final Map<Stat, Double> adds; final Map<Stat, Double> adds = !broadcast ? Collections.emptyMap() : new EnumMap<>(_statsAdd);
final Map<Stat, Double> muls; final Map<Stat, Double> muls = !broadcast ? Collections.emptyMap() : new EnumMap<>(_statsMul);
if (broadcast)
{
adds = new EnumMap<>(_statsAdd);
muls = new EnumMap<>(_statsMul);
}
else
{
adds = null;
muls = null;
}
// Set of Stat that changed.
Set<Stat> changed = null;
_lock.writeLock().lock();
try try
{ {
// Wipe all the data // Wipe all the data
@@ -977,36 +964,32 @@ public class CreatureStat
} }
_attackSpeedMultiplier = Formulas.calcAtkSpdMultiplier(_creature); _attackSpeedMultiplier = Formulas.calcAtkSpdMultiplier(_creature);
_mAttackSpeedMultiplier = Formulas.calcMAtkSpdMultiplier(_creature); _mAttackSpeedMultiplier = Formulas.calcMAtkSpdMultiplier(_creature);
if (broadcast && (adds != null) && (muls != null)) // adds and muls cannot be null when broadcast is true, but Eclipse throws warning bellow.
{
// Calculate the difference between old and new stats
changed = new HashSet<>();
for (Stat stat : Stat.values())
{
if ((_statsAdd.containsKey(stat) ? _statsAdd.get(stat).doubleValue() : stat.getResetAddValue()) != (adds.containsKey(stat) ? adds.get(stat).doubleValue() : stat.getResetAddValue()))
{
changed.add(stat);
}
else if ((_statsMul.containsKey(stat) ? _statsMul.get(stat).doubleValue() : stat.getResetMulValue()) != (muls.containsKey(stat) ? muls.get(stat).doubleValue() : stat.getResetMulValue()))
{
changed.add(stat);
}
}
}
} }
finally finally
{ {
_lock.writeLock().unlock(); _lock.writeLock().unlock();
} }
if ((changed != null) && !changed.isEmpty())
{
_creature.broadcastModifiedStats(changed);
}
// Notify recalculation to child classes // Notify recalculation to child classes
onRecalculateStats(broadcast); onRecalculateStats(broadcast);
if (broadcast)
{
// Calculate the difference between old and new stats
final Set<Stat> changed = new HashSet<>();
for (Stat stat : Stat.values())
{
if (_statsAdd.getOrDefault(stat, stat.getResetAddValue()) != adds.getOrDefault(stat, stat.getResetAddValue()))
{
changed.add(stat);
}
else if (_statsMul.getOrDefault(stat, stat.getResetMulValue()) != muls.getOrDefault(stat, stat.getResetMulValue()))
{
changed.add(stat);
}
}
_creature.broadcastModifiedStats(changed);
}
} }
protected void onRecalculateStats(boolean broadcast) protected void onRecalculateStats(boolean broadcast)

View File

@@ -16,6 +16,7 @@
*/ */
package org.l2jmobius.gameserver.model.actor.stat; package org.l2jmobius.gameserver.model.actor.stat;
import java.util.Collections;
import java.util.Deque; import java.util.Deque;
import java.util.EnumMap; import java.util.EnumMap;
import java.util.EnumSet; import java.util.EnumSet;
@@ -877,25 +878,11 @@ public class CreatureStat
*/ */
public void recalculateStats(boolean broadcast) public void recalculateStats(boolean broadcast)
{ {
_lock.writeLock().lock();
// Copy old data before wiping it out // Copy old data before wiping it out
final Map<Stat, Double> adds; final Map<Stat, Double> adds = !broadcast ? Collections.emptyMap() : new EnumMap<>(_statsAdd);
final Map<Stat, Double> muls; final Map<Stat, Double> muls = !broadcast ? Collections.emptyMap() : new EnumMap<>(_statsMul);
if (broadcast)
{
adds = new EnumMap<>(_statsAdd);
muls = new EnumMap<>(_statsMul);
}
else
{
adds = null;
muls = null;
}
// Set of Stat that changed.
Set<Stat> changed = null;
_lock.writeLock().lock();
try try
{ {
// Wipe all the data // Wipe all the data
@@ -977,36 +964,32 @@ public class CreatureStat
} }
_attackSpeedMultiplier = Formulas.calcAtkSpdMultiplier(_creature); _attackSpeedMultiplier = Formulas.calcAtkSpdMultiplier(_creature);
_mAttackSpeedMultiplier = Formulas.calcMAtkSpdMultiplier(_creature); _mAttackSpeedMultiplier = Formulas.calcMAtkSpdMultiplier(_creature);
if (broadcast && (adds != null) && (muls != null)) // adds and muls cannot be null when broadcast is true, but Eclipse throws warning bellow.
{
// Calculate the difference between old and new stats
changed = new HashSet<>();
for (Stat stat : Stat.values())
{
if ((_statsAdd.containsKey(stat) ? _statsAdd.get(stat).doubleValue() : stat.getResetAddValue()) != (adds.containsKey(stat) ? adds.get(stat).doubleValue() : stat.getResetAddValue()))
{
changed.add(stat);
}
else if ((_statsMul.containsKey(stat) ? _statsMul.get(stat).doubleValue() : stat.getResetMulValue()) != (muls.containsKey(stat) ? muls.get(stat).doubleValue() : stat.getResetMulValue()))
{
changed.add(stat);
}
}
}
} }
finally finally
{ {
_lock.writeLock().unlock(); _lock.writeLock().unlock();
} }
if ((changed != null) && !changed.isEmpty())
{
_creature.broadcastModifiedStats(changed);
}
// Notify recalculation to child classes // Notify recalculation to child classes
onRecalculateStats(broadcast); onRecalculateStats(broadcast);
if (broadcast)
{
// Calculate the difference between old and new stats
final Set<Stat> changed = new HashSet<>();
for (Stat stat : Stat.values())
{
if (_statsAdd.getOrDefault(stat, stat.getResetAddValue()) != adds.getOrDefault(stat, stat.getResetAddValue()))
{
changed.add(stat);
}
else if (_statsMul.getOrDefault(stat, stat.getResetMulValue()) != muls.getOrDefault(stat, stat.getResetMulValue()))
{
changed.add(stat);
}
}
_creature.broadcastModifiedStats(changed);
}
} }
protected void onRecalculateStats(boolean broadcast) protected void onRecalculateStats(boolean broadcast)

View File

@@ -16,6 +16,7 @@
*/ */
package org.l2jmobius.gameserver.model.actor.stat; package org.l2jmobius.gameserver.model.actor.stat;
import java.util.Collections;
import java.util.Deque; import java.util.Deque;
import java.util.EnumMap; import java.util.EnumMap;
import java.util.EnumSet; import java.util.EnumSet;
@@ -877,25 +878,11 @@ public class CreatureStat
*/ */
public void recalculateStats(boolean broadcast) public void recalculateStats(boolean broadcast)
{ {
_lock.writeLock().lock();
// Copy old data before wiping it out // Copy old data before wiping it out
final Map<Stat, Double> adds; final Map<Stat, Double> adds = !broadcast ? Collections.emptyMap() : new EnumMap<>(_statsAdd);
final Map<Stat, Double> muls; final Map<Stat, Double> muls = !broadcast ? Collections.emptyMap() : new EnumMap<>(_statsMul);
if (broadcast)
{
adds = new EnumMap<>(_statsAdd);
muls = new EnumMap<>(_statsMul);
}
else
{
adds = null;
muls = null;
}
// Set of Stat that changed.
Set<Stat> changed = null;
_lock.writeLock().lock();
try try
{ {
// Wipe all the data // Wipe all the data
@@ -977,36 +964,32 @@ public class CreatureStat
} }
_attackSpeedMultiplier = Formulas.calcAtkSpdMultiplier(_creature); _attackSpeedMultiplier = Formulas.calcAtkSpdMultiplier(_creature);
_mAttackSpeedMultiplier = Formulas.calcMAtkSpdMultiplier(_creature); _mAttackSpeedMultiplier = Formulas.calcMAtkSpdMultiplier(_creature);
if (broadcast && (adds != null) && (muls != null)) // adds and muls cannot be null when broadcast is true, but Eclipse throws warning bellow.
{
// Calculate the difference between old and new stats
changed = new HashSet<>();
for (Stat stat : Stat.values())
{
if ((_statsAdd.containsKey(stat) ? _statsAdd.get(stat).doubleValue() : stat.getResetAddValue()) != (adds.containsKey(stat) ? adds.get(stat).doubleValue() : stat.getResetAddValue()))
{
changed.add(stat);
}
else if ((_statsMul.containsKey(stat) ? _statsMul.get(stat).doubleValue() : stat.getResetMulValue()) != (muls.containsKey(stat) ? muls.get(stat).doubleValue() : stat.getResetMulValue()))
{
changed.add(stat);
}
}
}
} }
finally finally
{ {
_lock.writeLock().unlock(); _lock.writeLock().unlock();
} }
if ((changed != null) && !changed.isEmpty())
{
_creature.broadcastModifiedStats(changed);
}
// Notify recalculation to child classes // Notify recalculation to child classes
onRecalculateStats(broadcast); onRecalculateStats(broadcast);
if (broadcast)
{
// Calculate the difference between old and new stats
final Set<Stat> changed = new HashSet<>();
for (Stat stat : Stat.values())
{
if (_statsAdd.getOrDefault(stat, stat.getResetAddValue()) != adds.getOrDefault(stat, stat.getResetAddValue()))
{
changed.add(stat);
}
else if (_statsMul.getOrDefault(stat, stat.getResetMulValue()) != muls.getOrDefault(stat, stat.getResetMulValue()))
{
changed.add(stat);
}
}
_creature.broadcastModifiedStats(changed);
}
} }
protected void onRecalculateStats(boolean broadcast) protected void onRecalculateStats(boolean broadcast)