From 5c532ad275122a1742c81f1c5c53dcdbe0d46a2e Mon Sep 17 00:00:00 2001 From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com> Date: Mon, 3 Feb 2020 04:04:13 +0000 Subject: [PATCH] Removal of AtomicInteger variables from Inventory class. --- .../model/itemcontainer/Inventory.java | 194 ++++++++++------- .../model/itemcontainer/Inventory.java | 183 +++++++++------- .../model/itemcontainer/Inventory.java | 183 +++++++++------- .../model/itemcontainer/Inventory.java | 183 +++++++++------- .../model/itemcontainer/Inventory.java | 183 +++++++++------- .../model/itemcontainer/Inventory.java | 183 +++++++++------- .../model/itemcontainer/Inventory.java | 183 +++++++++------- .../model/itemcontainer/Inventory.java | 183 +++++++++------- .../model/itemcontainer/Inventory.java | 197 ++++++++++-------- .../model/itemcontainer/Inventory.java | 197 ++++++++++-------- .../model/itemcontainer/Inventory.java | 197 ++++++++++-------- .../model/itemcontainer/Inventory.java | 183 +++++++++------- .../model/itemcontainer/Inventory.java | 183 +++++++++------- .../model/itemcontainer/Inventory.java | 183 +++++++++------- .../model/itemcontainer/Inventory.java | 197 ++++++++++-------- 15 files changed, 1650 insertions(+), 1162 deletions(-) diff --git a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java index cf80763c6c..b2dcecb9a8 100644 --- a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java +++ b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java @@ -27,7 +27,6 @@ import java.util.List; import java.util.Objects; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Function; import java.util.function.Predicate; import java.util.logging.Level; @@ -49,6 +48,7 @@ import org.l2jmobius.gameserver.model.VariationInstance; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder; +import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; import org.l2jmobius.gameserver.model.items.EtcItem; import org.l2jmobius.gameserver.model.items.Item; import org.l2jmobius.gameserver.model.items.appearance.AppearanceStone; @@ -296,8 +296,8 @@ public abstract class Inventory extends ItemContainer final PlayerInstance player = (PlayerInstance) inventory.getOwner(); final Item it = item.getItem(); - final AtomicBoolean update = new AtomicBoolean(); - final AtomicBoolean updateTimestamp = new AtomicBoolean(); + boolean update = false; + boolean updateTimestamp = false; // Remove augmentation bonuses on unequip if (item.isAugmented()) @@ -308,43 +308,57 @@ public abstract class Inventory extends ItemContainer // Recalculate all stats player.getStat().recalculateStats(true); - it.forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List onEnchantSkills = it.getSkills(ItemSkillType.ON_ENCHANT); + if (onEnchantSkills != null) { - // Remove skills bestowed from +4 armor - if (item.getEnchantLevel() >= holder.getValue()) + for (ItemSkillHolder holder : onEnchantSkills) { - player.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); - update.compareAndSet(false, true); + // Remove skills bestowed from +4 armor + if (item.getEnchantLevel() >= holder.getValue()) + { + player.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); + update = true; + } } - }); + } // Clear enchant bonus item.clearEnchantStats(); - it.forEachSkill(ItemSkillType.NORMAL, holder -> + final List normalSkills = it.getSkills(ItemSkillType.NORMAL); + if (normalSkills != null) { - final Skill skill = holder.getSkill(); - if (skill != null) + for (ItemSkillHolder holder : normalSkills) { - player.removeSkill(skill, false, skill.isPassive()); - update.compareAndSet(false, true); + final Skill skill = holder.getSkill(); + if (skill != null) + { + player.removeSkill(skill, false, skill.isPassive()); + update = true; + } + else + { + LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); + } } - else - { - LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); - } - }); + } if (item.isArmor()) { for (ItemInstance itm : inventory.getItems()) { - if (!itm.isEquipped() || (itm.getItem().getSkills(ItemSkillType.NORMAL) == null) || itm.equals(item)) + if (!itm.isEquipped() || itm.equals(item)) { continue; } - itm.getItem().forEachSkill(ItemSkillType.NORMAL, holder -> + final List otherNormalSkills = itm.getItem().getSkills(ItemSkillType.NORMAL); + if (otherNormalSkills == null) + { + continue; + } + + for (ItemSkillHolder holder : otherNormalSkills) { if (player.getSkillLevel(holder.getSkillId()) != 0) { @@ -363,18 +377,24 @@ public abstract class Inventory extends ItemContainer player.addTimeStamp(skill, equipDelay); player.disableSkill(skill, equipDelay); } - updateTimestamp.compareAndSet(false, true); + updateTimestamp = true; } - update.compareAndSet(false, true); + update = true; } - }); + } } } // Must check all equipped items for enchant conditions. for (ItemInstance equipped : inventory.getPaperdollItems()) { - equipped.getItem().forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List otherEnchantSkills = equipped.getItem().getSkills(ItemSkillType.ON_ENCHANT); + if (otherEnchantSkills == null) + { + continue; + } + + for (ItemSkillHolder holder : otherEnchantSkills) { // Add skills bestowed from +4 armor if (equipped.getEnchantLevel() >= holder.getValue()) @@ -384,11 +404,12 @@ public abstract class Inventory extends ItemContainer if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) { player.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); - update.compareAndSet(false, true); + update = true; } } - }); + } } + // Must check for toggle and isRemovedOnUnequipWeapon skill item conditions. for (Skill skill : player.getAllSkills()) { @@ -396,21 +417,26 @@ public abstract class Inventory extends ItemContainer || (it.isWeapon() && skill.isRemovedOnUnequipWeapon())) { player.stopSkillEffects(true, skill.getId()); - update.compareAndSet(false, true); + update = true; } } // Apply skill, if weapon have "skills on unequip" it.forEachSkill(ItemSkillType.ON_UNEQUIP, holder -> holder.getSkill().activateSkill(player, player)); - if (update.get()) + if (update) { player.sendSkillList(); } - if (updateTimestamp.get()) + if (updateTimestamp) { player.sendPacket(new SkillCoolTime(player)); } + + if (item.isWeapon()) + { + player.unchargeAllShots(); + } } @Override @@ -423,8 +449,14 @@ public abstract class Inventory extends ItemContainer final PlayerInstance player = (PlayerInstance) inventory.getOwner(); - final AtomicBoolean update = new AtomicBoolean(); - final AtomicBoolean updateTimestamp = new AtomicBoolean(); + // Any items equipped that result in expertise penalty do not give any skills at all. + if (item.getItem().getCrystalType().getId() > player.getExpertiseLevel()) + { + return; + } + + boolean update = false; + boolean updateTimestamp = false; // Apply augmentation bonuses on equip if (item.isAugmented()) @@ -435,58 +467,72 @@ public abstract class Inventory extends ItemContainer // Recalculate all stats player.getStat().recalculateStats(true); - item.getItem().forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List onEnchantSkills = item.getItem().getSkills(ItemSkillType.ON_ENCHANT); + if (onEnchantSkills != null) { - // Add skills bestowed from +4 armor - if (item.getEnchantLevel() >= holder.getValue()) + for (ItemSkillHolder holder : onEnchantSkills) { - final Skill skill = holder.getSkill(); - // Check passive skill conditions. - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + // Add skills bestowed from +4 armor + if (item.getEnchantLevel() >= holder.getValue()) { - return; + final Skill skill = holder.getSkill(); + // Check passive skill conditions. + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + { + return; + } + player.addSkill(skill, false); + update = true; } - player.addSkill(skill, false); - update.compareAndSet(false, true); } - }); + } // Apply enchant stats item.applyEnchantStats(); - item.getItem().forEachSkill(ItemSkillType.NORMAL, holder -> + final List normalSkills = item.getItem().getSkills(ItemSkillType.NORMAL); + if (normalSkills != null) { - final Skill skill = holder.getSkill(); - if (skill != null) + for (ItemSkillHolder holder : normalSkills) { - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + final Skill skill = holder.getSkill(); + if (skill != null) { - return; - } - - player.addSkill(skill, false); - if (skill.isActive() && !player.hasSkillReuse(skill.getReuseHashCode())) - { - final int equipDelay = item.getEquipReuseDelay(); - if (equipDelay > 0) + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) { - player.addTimeStamp(skill, equipDelay); - player.disableSkill(skill, equipDelay); + return; } - updateTimestamp.compareAndSet(false, true); + + player.addSkill(skill, false); + if (skill.isActive() && !player.hasSkillReuse(skill.getReuseHashCode())) + { + final int equipDelay = item.getEquipReuseDelay(); + if (equipDelay > 0) + { + player.addTimeStamp(skill, equipDelay); + player.disableSkill(skill, equipDelay); + } + updateTimestamp = true; + } + update = true; + } + else + { + LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); } - update.compareAndSet(false, true); } - else - { - LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); - } - }); + } // Must check all equipped items for enchant conditions. for (ItemInstance equipped : inventory.getPaperdollItems()) { - equipped.getItem().forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List otherEnchantSkills = equipped.getItem().getSkills(ItemSkillType.ON_ENCHANT); + if (otherEnchantSkills == null) + { + continue; + } + + for (ItemSkillHolder holder : otherEnchantSkills) { // Add skills bestowed from +4 armor if (equipped.getEnchantLevel() >= holder.getValue()) @@ -498,19 +544,19 @@ public abstract class Inventory extends ItemContainer return; } player.addSkill(skill, false); - update.compareAndSet(false, true); + update = true; } - }); + } } // Apply skill, if weapon have "skills on equip" item.getItem().forEachSkill(ItemSkillType.ON_EQUIP, holder -> holder.getSkill().activateSkill(player, player)); - if (update.get()) + if (update) { player.sendSkillList(); } - if (updateTimestamp.get()) + if (updateTimestamp) { player.sendPacket(new SkillCoolTime(player)); } @@ -571,8 +617,8 @@ public abstract class Inventory extends ItemContainer if (piecesCount >= armorSet.getMinimumPieces()) { // Applying all skills that matching the conditions - final AtomicBoolean updateTimeStamp = new AtomicBoolean(); - final AtomicBoolean update = new AtomicBoolean(); + boolean updateTimeStamp = false; + boolean update = false; for (ArmorsetSkillHolder holder : armorSet.getSkills()) { if (holder.validateConditions(player, armorSet, idProvider)) @@ -601,16 +647,16 @@ public abstract class Inventory extends ItemContainer player.disableSkill(itemSkill, equipDelay); } } - updateTimeStamp.compareAndSet(false, true); + updateTimeStamp = true; } - update.compareAndSet(false, true); + update = true; } } - if (updateTimeStamp.get()) + if (updateTimeStamp) { player.sendPacket(new SkillCoolTime(player)); } - return update.get(); + return update; } return false; } diff --git a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java index c036e1334a..28249b4e90 100644 --- a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java +++ b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java @@ -27,7 +27,6 @@ import java.util.List; import java.util.Objects; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Function; import java.util.function.Predicate; import java.util.logging.Level; @@ -49,6 +48,7 @@ import org.l2jmobius.gameserver.model.VariationInstance; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder; +import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; import org.l2jmobius.gameserver.model.items.EtcItem; import org.l2jmobius.gameserver.model.items.Item; import org.l2jmobius.gameserver.model.items.appearance.AppearanceStone; @@ -296,8 +296,8 @@ public abstract class Inventory extends ItemContainer final PlayerInstance player = (PlayerInstance) inventory.getOwner(); final Item it = item.getItem(); - final AtomicBoolean update = new AtomicBoolean(); - final AtomicBoolean updateTimestamp = new AtomicBoolean(); + boolean update = false; + boolean updateTimestamp = false; // Remove augmentation bonuses on unequip if (item.isAugmented()) @@ -308,15 +308,19 @@ public abstract class Inventory extends ItemContainer // Recalculate all stats player.getStat().recalculateStats(true); - it.forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List onEnchantSkills = it.getSkills(ItemSkillType.ON_ENCHANT); + if (onEnchantSkills != null) { - // Remove skills bestowed from +4 armor - if (item.getEnchantLevel() >= holder.getValue()) + for (ItemSkillHolder holder : onEnchantSkills) { - player.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); - update.compareAndSet(false, true); + // Remove skills bestowed from +4 armor + if (item.getEnchantLevel() >= holder.getValue()) + { + player.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); + update = true; + } } - }); + } // Clear enchant bonus item.clearEnchantStats(); @@ -324,30 +328,40 @@ public abstract class Inventory extends ItemContainer // Clear SA Bonus item.clearSpecialAbilities(); - it.forEachSkill(ItemSkillType.NORMAL, holder -> + final List normalSkills = it.getSkills(ItemSkillType.NORMAL); + if (normalSkills != null) { - final Skill skill = holder.getSkill(); - if (skill != null) + for (ItemSkillHolder holder : normalSkills) { - player.removeSkill(skill, false, skill.isPassive()); - update.compareAndSet(false, true); + final Skill skill = holder.getSkill(); + if (skill != null) + { + player.removeSkill(skill, false, skill.isPassive()); + update = true; + } + else + { + LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); + } } - else - { - LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); - } - }); + } if (item.isArmor()) { for (ItemInstance itm : inventory.getItems()) { - if (!itm.isEquipped() || (itm.getItem().getSkills(ItemSkillType.NORMAL) == null) || itm.equals(item)) + if (!itm.isEquipped() || itm.equals(item)) { continue; } - itm.getItem().forEachSkill(ItemSkillType.NORMAL, holder -> + final List otherNormalSkills = itm.getItem().getSkills(ItemSkillType.NORMAL); + if (otherNormalSkills == null) + { + continue; + } + + for (ItemSkillHolder holder : otherNormalSkills) { if (player.getSkillLevel(holder.getSkillId()) != 0) { @@ -366,18 +380,24 @@ public abstract class Inventory extends ItemContainer player.addTimeStamp(skill, equipDelay); player.disableSkill(skill, equipDelay); } - updateTimestamp.compareAndSet(false, true); + updateTimestamp = true; } - update.compareAndSet(false, true); + update = true; } - }); + } } } // Must check all equipped items for enchant conditions. for (ItemInstance equipped : inventory.getPaperdollItems()) { - equipped.getItem().forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List otherEnchantSkills = equipped.getItem().getSkills(ItemSkillType.ON_ENCHANT); + if (otherEnchantSkills == null) + { + continue; + } + + for (ItemSkillHolder holder : otherEnchantSkills) { // Add skills bestowed from +4 armor if (equipped.getEnchantLevel() >= holder.getValue()) @@ -387,11 +407,12 @@ public abstract class Inventory extends ItemContainer if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) { player.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); - update.compareAndSet(false, true); + update = true; } } - }); + } } + // Must check for toggle and isRemovedOnUnequipWeapon skill item conditions. for (Skill skill : player.getAllSkills()) { @@ -399,18 +420,18 @@ public abstract class Inventory extends ItemContainer || (it.isWeapon() && skill.isRemovedOnUnequipWeapon())) { player.stopSkillEffects(true, skill.getId()); - update.compareAndSet(false, true); + update = true; } } // Apply skill, if weapon have "skills on unequip" it.forEachSkill(ItemSkillType.ON_UNEQUIP, holder -> holder.getSkill().activateSkill(player, player)); - if (update.get()) + if (update) { player.sendSkillList(); } - if (updateTimestamp.get()) + if (updateTimestamp) { player.sendPacket(new SkillCoolTime(player)); } @@ -437,8 +458,8 @@ public abstract class Inventory extends ItemContainer return; } - final AtomicBoolean update = new AtomicBoolean(); - final AtomicBoolean updateTimestamp = new AtomicBoolean(); + boolean update = false; + boolean updateTimestamp = false; // Apply augmentation bonuses on equip if (item.isAugmented()) @@ -449,21 +470,25 @@ public abstract class Inventory extends ItemContainer // Recalculate all stats player.getStat().recalculateStats(true); - item.getItem().forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List onEnchantSkills = item.getItem().getSkills(ItemSkillType.ON_ENCHANT); + if (onEnchantSkills != null) { - // Add skills bestowed from +4 armor - if (item.getEnchantLevel() >= holder.getValue()) + for (ItemSkillHolder holder : onEnchantSkills) { - final Skill skill = holder.getSkill(); - // Check passive skill conditions. - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + // Add skills bestowed from +4 armor + if (item.getEnchantLevel() >= holder.getValue()) { - return; + final Skill skill = holder.getSkill(); + // Check passive skill conditions. + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + { + return; + } + player.addSkill(skill, false); + update = true; } - player.addSkill(skill, false); - update.compareAndSet(false, true); } - }); + } // Apply enchant stats item.applyEnchantStats(); @@ -471,39 +496,49 @@ public abstract class Inventory extends ItemContainer // Apply SA skill item.applySpecialAbilities(); - item.getItem().forEachSkill(ItemSkillType.NORMAL, holder -> + final List normalSkills = item.getItem().getSkills(ItemSkillType.NORMAL); + if (normalSkills != null) { - final Skill skill = holder.getSkill(); - if (skill != null) + for (ItemSkillHolder holder : normalSkills) { - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + final Skill skill = holder.getSkill(); + if (skill != null) { - return; - } - - player.addSkill(skill, false); - if (skill.isActive() && !player.hasSkillReuse(skill.getReuseHashCode())) - { - final int equipDelay = item.getEquipReuseDelay(); - if (equipDelay > 0) + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) { - player.addTimeStamp(skill, equipDelay); - player.disableSkill(skill, equipDelay); + return; } - updateTimestamp.compareAndSet(false, true); + + player.addSkill(skill, false); + if (skill.isActive() && !player.hasSkillReuse(skill.getReuseHashCode())) + { + final int equipDelay = item.getEquipReuseDelay(); + if (equipDelay > 0) + { + player.addTimeStamp(skill, equipDelay); + player.disableSkill(skill, equipDelay); + } + updateTimestamp = true; + } + update = true; + } + else + { + LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); } - update.compareAndSet(false, true); } - else - { - LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); - } - }); + } // Must check all equipped items for enchant conditions. for (ItemInstance equipped : inventory.getPaperdollItems()) { - equipped.getItem().forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List otherEnchantSkills = equipped.getItem().getSkills(ItemSkillType.ON_ENCHANT); + if (otherEnchantSkills == null) + { + continue; + } + + for (ItemSkillHolder holder : otherEnchantSkills) { // Add skills bestowed from +4 armor if (equipped.getEnchantLevel() >= holder.getValue()) @@ -515,19 +550,19 @@ public abstract class Inventory extends ItemContainer return; } player.addSkill(skill, false); - update.compareAndSet(false, true); + update = true; } - }); + } } // Apply skill, if weapon have "skills on equip" item.getItem().forEachSkill(ItemSkillType.ON_EQUIP, holder -> holder.getSkill().activateSkill(player, player)); - if (update.get()) + if (update) { player.sendSkillList(); } - if (updateTimestamp.get()) + if (updateTimestamp) { player.sendPacket(new SkillCoolTime(player)); } @@ -588,8 +623,8 @@ public abstract class Inventory extends ItemContainer if (piecesCount >= armorSet.getMinimumPieces()) { // Applying all skills that matching the conditions - final AtomicBoolean updateTimeStamp = new AtomicBoolean(); - final AtomicBoolean update = new AtomicBoolean(); + boolean updateTimeStamp = false; + boolean update = false; for (ArmorsetSkillHolder holder : armorSet.getSkills()) { if (holder.validateConditions(player, armorSet, idProvider)) @@ -618,16 +653,16 @@ public abstract class Inventory extends ItemContainer player.disableSkill(itemSkill, equipDelay); } } - updateTimeStamp.compareAndSet(false, true); + updateTimeStamp = true; } - update.compareAndSet(false, true); + update = true; } } - if (updateTimeStamp.get()) + if (updateTimeStamp) { player.sendPacket(new SkillCoolTime(player)); } - return update.get(); + return update; } return false; } diff --git a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java index c036e1334a..28249b4e90 100644 --- a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java +++ b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java @@ -27,7 +27,6 @@ import java.util.List; import java.util.Objects; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Function; import java.util.function.Predicate; import java.util.logging.Level; @@ -49,6 +48,7 @@ import org.l2jmobius.gameserver.model.VariationInstance; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder; +import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; import org.l2jmobius.gameserver.model.items.EtcItem; import org.l2jmobius.gameserver.model.items.Item; import org.l2jmobius.gameserver.model.items.appearance.AppearanceStone; @@ -296,8 +296,8 @@ public abstract class Inventory extends ItemContainer final PlayerInstance player = (PlayerInstance) inventory.getOwner(); final Item it = item.getItem(); - final AtomicBoolean update = new AtomicBoolean(); - final AtomicBoolean updateTimestamp = new AtomicBoolean(); + boolean update = false; + boolean updateTimestamp = false; // Remove augmentation bonuses on unequip if (item.isAugmented()) @@ -308,15 +308,19 @@ public abstract class Inventory extends ItemContainer // Recalculate all stats player.getStat().recalculateStats(true); - it.forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List onEnchantSkills = it.getSkills(ItemSkillType.ON_ENCHANT); + if (onEnchantSkills != null) { - // Remove skills bestowed from +4 armor - if (item.getEnchantLevel() >= holder.getValue()) + for (ItemSkillHolder holder : onEnchantSkills) { - player.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); - update.compareAndSet(false, true); + // Remove skills bestowed from +4 armor + if (item.getEnchantLevel() >= holder.getValue()) + { + player.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); + update = true; + } } - }); + } // Clear enchant bonus item.clearEnchantStats(); @@ -324,30 +328,40 @@ public abstract class Inventory extends ItemContainer // Clear SA Bonus item.clearSpecialAbilities(); - it.forEachSkill(ItemSkillType.NORMAL, holder -> + final List normalSkills = it.getSkills(ItemSkillType.NORMAL); + if (normalSkills != null) { - final Skill skill = holder.getSkill(); - if (skill != null) + for (ItemSkillHolder holder : normalSkills) { - player.removeSkill(skill, false, skill.isPassive()); - update.compareAndSet(false, true); + final Skill skill = holder.getSkill(); + if (skill != null) + { + player.removeSkill(skill, false, skill.isPassive()); + update = true; + } + else + { + LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); + } } - else - { - LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); - } - }); + } if (item.isArmor()) { for (ItemInstance itm : inventory.getItems()) { - if (!itm.isEquipped() || (itm.getItem().getSkills(ItemSkillType.NORMAL) == null) || itm.equals(item)) + if (!itm.isEquipped() || itm.equals(item)) { continue; } - itm.getItem().forEachSkill(ItemSkillType.NORMAL, holder -> + final List otherNormalSkills = itm.getItem().getSkills(ItemSkillType.NORMAL); + if (otherNormalSkills == null) + { + continue; + } + + for (ItemSkillHolder holder : otherNormalSkills) { if (player.getSkillLevel(holder.getSkillId()) != 0) { @@ -366,18 +380,24 @@ public abstract class Inventory extends ItemContainer player.addTimeStamp(skill, equipDelay); player.disableSkill(skill, equipDelay); } - updateTimestamp.compareAndSet(false, true); + updateTimestamp = true; } - update.compareAndSet(false, true); + update = true; } - }); + } } } // Must check all equipped items for enchant conditions. for (ItemInstance equipped : inventory.getPaperdollItems()) { - equipped.getItem().forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List otherEnchantSkills = equipped.getItem().getSkills(ItemSkillType.ON_ENCHANT); + if (otherEnchantSkills == null) + { + continue; + } + + for (ItemSkillHolder holder : otherEnchantSkills) { // Add skills bestowed from +4 armor if (equipped.getEnchantLevel() >= holder.getValue()) @@ -387,11 +407,12 @@ public abstract class Inventory extends ItemContainer if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) { player.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); - update.compareAndSet(false, true); + update = true; } } - }); + } } + // Must check for toggle and isRemovedOnUnequipWeapon skill item conditions. for (Skill skill : player.getAllSkills()) { @@ -399,18 +420,18 @@ public abstract class Inventory extends ItemContainer || (it.isWeapon() && skill.isRemovedOnUnequipWeapon())) { player.stopSkillEffects(true, skill.getId()); - update.compareAndSet(false, true); + update = true; } } // Apply skill, if weapon have "skills on unequip" it.forEachSkill(ItemSkillType.ON_UNEQUIP, holder -> holder.getSkill().activateSkill(player, player)); - if (update.get()) + if (update) { player.sendSkillList(); } - if (updateTimestamp.get()) + if (updateTimestamp) { player.sendPacket(new SkillCoolTime(player)); } @@ -437,8 +458,8 @@ public abstract class Inventory extends ItemContainer return; } - final AtomicBoolean update = new AtomicBoolean(); - final AtomicBoolean updateTimestamp = new AtomicBoolean(); + boolean update = false; + boolean updateTimestamp = false; // Apply augmentation bonuses on equip if (item.isAugmented()) @@ -449,21 +470,25 @@ public abstract class Inventory extends ItemContainer // Recalculate all stats player.getStat().recalculateStats(true); - item.getItem().forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List onEnchantSkills = item.getItem().getSkills(ItemSkillType.ON_ENCHANT); + if (onEnchantSkills != null) { - // Add skills bestowed from +4 armor - if (item.getEnchantLevel() >= holder.getValue()) + for (ItemSkillHolder holder : onEnchantSkills) { - final Skill skill = holder.getSkill(); - // Check passive skill conditions. - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + // Add skills bestowed from +4 armor + if (item.getEnchantLevel() >= holder.getValue()) { - return; + final Skill skill = holder.getSkill(); + // Check passive skill conditions. + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + { + return; + } + player.addSkill(skill, false); + update = true; } - player.addSkill(skill, false); - update.compareAndSet(false, true); } - }); + } // Apply enchant stats item.applyEnchantStats(); @@ -471,39 +496,49 @@ public abstract class Inventory extends ItemContainer // Apply SA skill item.applySpecialAbilities(); - item.getItem().forEachSkill(ItemSkillType.NORMAL, holder -> + final List normalSkills = item.getItem().getSkills(ItemSkillType.NORMAL); + if (normalSkills != null) { - final Skill skill = holder.getSkill(); - if (skill != null) + for (ItemSkillHolder holder : normalSkills) { - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + final Skill skill = holder.getSkill(); + if (skill != null) { - return; - } - - player.addSkill(skill, false); - if (skill.isActive() && !player.hasSkillReuse(skill.getReuseHashCode())) - { - final int equipDelay = item.getEquipReuseDelay(); - if (equipDelay > 0) + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) { - player.addTimeStamp(skill, equipDelay); - player.disableSkill(skill, equipDelay); + return; } - updateTimestamp.compareAndSet(false, true); + + player.addSkill(skill, false); + if (skill.isActive() && !player.hasSkillReuse(skill.getReuseHashCode())) + { + final int equipDelay = item.getEquipReuseDelay(); + if (equipDelay > 0) + { + player.addTimeStamp(skill, equipDelay); + player.disableSkill(skill, equipDelay); + } + updateTimestamp = true; + } + update = true; + } + else + { + LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); } - update.compareAndSet(false, true); } - else - { - LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); - } - }); + } // Must check all equipped items for enchant conditions. for (ItemInstance equipped : inventory.getPaperdollItems()) { - equipped.getItem().forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List otherEnchantSkills = equipped.getItem().getSkills(ItemSkillType.ON_ENCHANT); + if (otherEnchantSkills == null) + { + continue; + } + + for (ItemSkillHolder holder : otherEnchantSkills) { // Add skills bestowed from +4 armor if (equipped.getEnchantLevel() >= holder.getValue()) @@ -515,19 +550,19 @@ public abstract class Inventory extends ItemContainer return; } player.addSkill(skill, false); - update.compareAndSet(false, true); + update = true; } - }); + } } // Apply skill, if weapon have "skills on equip" item.getItem().forEachSkill(ItemSkillType.ON_EQUIP, holder -> holder.getSkill().activateSkill(player, player)); - if (update.get()) + if (update) { player.sendSkillList(); } - if (updateTimestamp.get()) + if (updateTimestamp) { player.sendPacket(new SkillCoolTime(player)); } @@ -588,8 +623,8 @@ public abstract class Inventory extends ItemContainer if (piecesCount >= armorSet.getMinimumPieces()) { // Applying all skills that matching the conditions - final AtomicBoolean updateTimeStamp = new AtomicBoolean(); - final AtomicBoolean update = new AtomicBoolean(); + boolean updateTimeStamp = false; + boolean update = false; for (ArmorsetSkillHolder holder : armorSet.getSkills()) { if (holder.validateConditions(player, armorSet, idProvider)) @@ -618,16 +653,16 @@ public abstract class Inventory extends ItemContainer player.disableSkill(itemSkill, equipDelay); } } - updateTimeStamp.compareAndSet(false, true); + updateTimeStamp = true; } - update.compareAndSet(false, true); + update = true; } } - if (updateTimeStamp.get()) + if (updateTimeStamp) { player.sendPacket(new SkillCoolTime(player)); } - return update.get(); + return update; } return false; } diff --git a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java index bd7f51f2bb..42b79c303a 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java @@ -27,7 +27,6 @@ import java.util.List; import java.util.Objects; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Function; import java.util.function.Predicate; import java.util.logging.Level; @@ -49,6 +48,7 @@ import org.l2jmobius.gameserver.model.VariationInstance; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder; +import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; import org.l2jmobius.gameserver.model.items.EtcItem; import org.l2jmobius.gameserver.model.items.Item; import org.l2jmobius.gameserver.model.items.appearance.AppearanceStone; @@ -296,8 +296,8 @@ public abstract class Inventory extends ItemContainer final PlayerInstance player = (PlayerInstance) inventory.getOwner(); final Item it = item.getItem(); - final AtomicBoolean update = new AtomicBoolean(); - final AtomicBoolean updateTimestamp = new AtomicBoolean(); + boolean update = false; + boolean updateTimestamp = false; // Remove augmentation bonuses on unequip if (item.isAugmented()) @@ -308,15 +308,19 @@ public abstract class Inventory extends ItemContainer // Recalculate all stats player.getStat().recalculateStats(true); - it.forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List onEnchantSkills = it.getSkills(ItemSkillType.ON_ENCHANT); + if (onEnchantSkills != null) { - // Remove skills bestowed from +4 armor - if (item.getEnchantLevel() >= holder.getValue()) + for (ItemSkillHolder holder : onEnchantSkills) { - player.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); - update.compareAndSet(false, true); + // Remove skills bestowed from +4 armor + if (item.getEnchantLevel() >= holder.getValue()) + { + player.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); + update = true; + } } - }); + } // Clear enchant bonus item.clearEnchantStats(); @@ -324,30 +328,40 @@ public abstract class Inventory extends ItemContainer // Clear SA Bonus item.clearSpecialAbilities(); - it.forEachSkill(ItemSkillType.NORMAL, holder -> + final List normalSkills = it.getSkills(ItemSkillType.NORMAL); + if (normalSkills != null) { - final Skill skill = holder.getSkill(); - if (skill != null) + for (ItemSkillHolder holder : normalSkills) { - player.removeSkill(skill, false, skill.isPassive()); - update.compareAndSet(false, true); + final Skill skill = holder.getSkill(); + if (skill != null) + { + player.removeSkill(skill, false, skill.isPassive()); + update = true; + } + else + { + LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); + } } - else - { - LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); - } - }); + } if (item.isArmor()) { for (ItemInstance itm : inventory.getItems()) { - if (!itm.isEquipped() || (itm.getItem().getSkills(ItemSkillType.NORMAL) == null) || itm.equals(item)) + if (!itm.isEquipped() || itm.equals(item)) { continue; } - itm.getItem().forEachSkill(ItemSkillType.NORMAL, holder -> + final List otherNormalSkills = itm.getItem().getSkills(ItemSkillType.NORMAL); + if (otherNormalSkills == null) + { + continue; + } + + for (ItemSkillHolder holder : otherNormalSkills) { if (player.getSkillLevel(holder.getSkillId()) != 0) { @@ -366,18 +380,24 @@ public abstract class Inventory extends ItemContainer player.addTimeStamp(skill, equipDelay); player.disableSkill(skill, equipDelay); } - updateTimestamp.compareAndSet(false, true); + updateTimestamp = true; } - update.compareAndSet(false, true); + update = true; } - }); + } } } // Must check all equipped items for enchant conditions. for (ItemInstance equipped : inventory.getPaperdollItems()) { - equipped.getItem().forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List otherEnchantSkills = equipped.getItem().getSkills(ItemSkillType.ON_ENCHANT); + if (otherEnchantSkills == null) + { + continue; + } + + for (ItemSkillHolder holder : otherEnchantSkills) { // Add skills bestowed from +4 armor if (equipped.getEnchantLevel() >= holder.getValue()) @@ -387,11 +407,12 @@ public abstract class Inventory extends ItemContainer if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) { player.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); - update.compareAndSet(false, true); + update = true; } } - }); + } } + // Must check for toggle and isRemovedOnUnequipWeapon skill item conditions. for (Skill skill : player.getAllSkills()) { @@ -399,18 +420,18 @@ public abstract class Inventory extends ItemContainer || (it.isWeapon() && skill.isRemovedOnUnequipWeapon())) { player.stopSkillEffects(true, skill.getId()); - update.compareAndSet(false, true); + update = true; } } // Apply skill, if weapon have "skills on unequip" it.forEachSkill(ItemSkillType.ON_UNEQUIP, holder -> holder.getSkill().activateSkill(player, player)); - if (update.get()) + if (update) { player.sendSkillList(); } - if (updateTimestamp.get()) + if (updateTimestamp) { player.sendPacket(new SkillCoolTime(player)); } @@ -437,8 +458,8 @@ public abstract class Inventory extends ItemContainer return; } - final AtomicBoolean update = new AtomicBoolean(); - final AtomicBoolean updateTimestamp = new AtomicBoolean(); + boolean update = false; + boolean updateTimestamp = false; // Apply augmentation bonuses on equip if (item.isAugmented()) @@ -449,21 +470,25 @@ public abstract class Inventory extends ItemContainer // Recalculate all stats player.getStat().recalculateStats(true); - item.getItem().forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List onEnchantSkills = item.getItem().getSkills(ItemSkillType.ON_ENCHANT); + if (onEnchantSkills != null) { - // Add skills bestowed from +4 armor - if (item.getEnchantLevel() >= holder.getValue()) + for (ItemSkillHolder holder : onEnchantSkills) { - final Skill skill = holder.getSkill(); - // Check passive skill conditions. - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + // Add skills bestowed from +4 armor + if (item.getEnchantLevel() >= holder.getValue()) { - return; + final Skill skill = holder.getSkill(); + // Check passive skill conditions. + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + { + return; + } + player.addSkill(skill, false); + update = true; } - player.addSkill(skill, false); - update.compareAndSet(false, true); } - }); + } // Apply enchant stats item.applyEnchantStats(); @@ -471,39 +496,49 @@ public abstract class Inventory extends ItemContainer // Apply SA skill item.applySpecialAbilities(); - item.getItem().forEachSkill(ItemSkillType.NORMAL, holder -> + final List normalSkills = item.getItem().getSkills(ItemSkillType.NORMAL); + if (normalSkills != null) { - final Skill skill = holder.getSkill(); - if (skill != null) + for (ItemSkillHolder holder : normalSkills) { - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + final Skill skill = holder.getSkill(); + if (skill != null) { - return; - } - - player.addSkill(skill, false); - if (skill.isActive() && !player.hasSkillReuse(skill.getReuseHashCode())) - { - final int equipDelay = item.getEquipReuseDelay(); - if (equipDelay > 0) + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) { - player.addTimeStamp(skill, equipDelay); - player.disableSkill(skill, equipDelay); + return; } - updateTimestamp.compareAndSet(false, true); + + player.addSkill(skill, false); + if (skill.isActive() && !player.hasSkillReuse(skill.getReuseHashCode())) + { + final int equipDelay = item.getEquipReuseDelay(); + if (equipDelay > 0) + { + player.addTimeStamp(skill, equipDelay); + player.disableSkill(skill, equipDelay); + } + updateTimestamp = true; + } + update = true; + } + else + { + LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); } - update.compareAndSet(false, true); } - else - { - LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); - } - }); + } // Must check all equipped items for enchant conditions. for (ItemInstance equipped : inventory.getPaperdollItems()) { - equipped.getItem().forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List otherEnchantSkills = equipped.getItem().getSkills(ItemSkillType.ON_ENCHANT); + if (otherEnchantSkills == null) + { + continue; + } + + for (ItemSkillHolder holder : otherEnchantSkills) { // Add skills bestowed from +4 armor if (equipped.getEnchantLevel() >= holder.getValue()) @@ -515,19 +550,19 @@ public abstract class Inventory extends ItemContainer return; } player.addSkill(skill, false); - update.compareAndSet(false, true); + update = true; } - }); + } } // Apply skill, if weapon have "skills on equip" item.getItem().forEachSkill(ItemSkillType.ON_EQUIP, holder -> holder.getSkill().activateSkill(player, player)); - if (update.get()) + if (update) { player.sendSkillList(); } - if (updateTimestamp.get()) + if (updateTimestamp) { player.sendPacket(new SkillCoolTime(player)); } @@ -588,8 +623,8 @@ public abstract class Inventory extends ItemContainer if (piecesCount >= armorSet.getMinimumPieces()) { // Applying all skills that matching the conditions - final AtomicBoolean updateTimeStamp = new AtomicBoolean(); - final AtomicBoolean update = new AtomicBoolean(); + boolean updateTimeStamp = false; + boolean update = false; for (ArmorsetSkillHolder holder : armorSet.getSkills()) { if (holder.validateConditions(player, armorSet, idProvider)) @@ -618,16 +653,16 @@ public abstract class Inventory extends ItemContainer player.disableSkill(itemSkill, equipDelay); } } - updateTimeStamp.compareAndSet(false, true); + updateTimeStamp = true; } - update.compareAndSet(false, true); + update = true; } } - if (updateTimeStamp.get()) + if (updateTimeStamp) { player.sendPacket(new SkillCoolTime(player)); } - return update.get(); + return update; } return false; } diff --git a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java index d357d19752..4ca51439dc 100644 --- a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java +++ b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java @@ -27,7 +27,6 @@ import java.util.List; import java.util.Objects; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Function; import java.util.function.Predicate; import java.util.logging.Level; @@ -49,6 +48,7 @@ import org.l2jmobius.gameserver.model.VariationInstance; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder; +import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; import org.l2jmobius.gameserver.model.items.EtcItem; import org.l2jmobius.gameserver.model.items.Item; import org.l2jmobius.gameserver.model.items.appearance.AppearanceStone; @@ -301,8 +301,8 @@ public abstract class Inventory extends ItemContainer final PlayerInstance player = (PlayerInstance) inventory.getOwner(); final Item it = item.getItem(); - final AtomicBoolean update = new AtomicBoolean(); - final AtomicBoolean updateTimestamp = new AtomicBoolean(); + boolean update = false; + boolean updateTimestamp = false; // Remove augmentation bonuses on unequip if (item.isAugmented()) @@ -313,15 +313,19 @@ public abstract class Inventory extends ItemContainer // Recalculate all stats player.getStat().recalculateStats(true); - it.forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List onEnchantSkills = it.getSkills(ItemSkillType.ON_ENCHANT); + if (onEnchantSkills != null) { - // Remove skills bestowed from +4 armor - if (item.getEnchantLevel() >= holder.getValue()) + for (ItemSkillHolder holder : onEnchantSkills) { - player.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); - update.compareAndSet(false, true); + // Remove skills bestowed from +4 armor + if (item.getEnchantLevel() >= holder.getValue()) + { + player.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); + update = true; + } } - }); + } // Clear enchant bonus item.clearEnchantStats(); @@ -329,30 +333,40 @@ public abstract class Inventory extends ItemContainer // Clear SA Bonus item.clearSpecialAbilities(); - it.forEachSkill(ItemSkillType.NORMAL, holder -> + final List normalSkills = it.getSkills(ItemSkillType.NORMAL); + if (normalSkills != null) { - final Skill skill = holder.getSkill(); - if (skill != null) + for (ItemSkillHolder holder : normalSkills) { - player.removeSkill(skill, false, skill.isPassive()); - update.compareAndSet(false, true); + final Skill skill = holder.getSkill(); + if (skill != null) + { + player.removeSkill(skill, false, skill.isPassive()); + update = true; + } + else + { + LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); + } } - else - { - LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); - } - }); + } if (item.isArmor()) { for (ItemInstance itm : inventory.getItems()) { - if (!itm.isEquipped() || (itm.getItem().getSkills(ItemSkillType.NORMAL) == null) || itm.equals(item)) + if (!itm.isEquipped() || itm.equals(item)) { continue; } - itm.getItem().forEachSkill(ItemSkillType.NORMAL, holder -> + final List otherNormalSkills = itm.getItem().getSkills(ItemSkillType.NORMAL); + if (otherNormalSkills == null) + { + continue; + } + + for (ItemSkillHolder holder : otherNormalSkills) { if (player.getSkillLevel(holder.getSkillId()) != 0) { @@ -371,18 +385,24 @@ public abstract class Inventory extends ItemContainer player.addTimeStamp(skill, equipDelay); player.disableSkill(skill, equipDelay); } - updateTimestamp.compareAndSet(false, true); + updateTimestamp = true; } - update.compareAndSet(false, true); + update = true; } - }); + } } } // Must check all equipped items for enchant conditions. for (ItemInstance equipped : inventory.getPaperdollItems()) { - equipped.getItem().forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List otherEnchantSkills = equipped.getItem().getSkills(ItemSkillType.ON_ENCHANT); + if (otherEnchantSkills == null) + { + continue; + } + + for (ItemSkillHolder holder : otherEnchantSkills) { // Add skills bestowed from +4 armor if (equipped.getEnchantLevel() >= holder.getValue()) @@ -392,11 +412,12 @@ public abstract class Inventory extends ItemContainer if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) { player.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); - update.compareAndSet(false, true); + update = true; } } - }); + } } + // Must check for toggle and isRemovedOnUnequipWeapon skill item conditions. for (Skill skill : player.getAllSkills()) { @@ -404,18 +425,18 @@ public abstract class Inventory extends ItemContainer || (it.isWeapon() && skill.isRemovedOnUnequipWeapon())) { player.stopSkillEffects(true, skill.getId()); - update.compareAndSet(false, true); + update = true; } } // Apply skill, if weapon have "skills on unequip" it.forEachSkill(ItemSkillType.ON_UNEQUIP, holder -> holder.getSkill().activateSkill(player, player)); - if (update.get()) + if (update) { player.sendSkillList(); } - if (updateTimestamp.get()) + if (updateTimestamp) { player.sendPacket(new SkillCoolTime(player)); } @@ -442,8 +463,8 @@ public abstract class Inventory extends ItemContainer return; } - final AtomicBoolean update = new AtomicBoolean(); - final AtomicBoolean updateTimestamp = new AtomicBoolean(); + boolean update = false; + boolean updateTimestamp = false; // Apply augmentation bonuses on equip if (item.isAugmented()) @@ -454,21 +475,25 @@ public abstract class Inventory extends ItemContainer // Recalculate all stats player.getStat().recalculateStats(true); - item.getItem().forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List onEnchantSkills = item.getItem().getSkills(ItemSkillType.ON_ENCHANT); + if (onEnchantSkills != null) { - // Add skills bestowed from +4 armor - if (item.getEnchantLevel() >= holder.getValue()) + for (ItemSkillHolder holder : onEnchantSkills) { - final Skill skill = holder.getSkill(); - // Check passive skill conditions. - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + // Add skills bestowed from +4 armor + if (item.getEnchantLevel() >= holder.getValue()) { - return; + final Skill skill = holder.getSkill(); + // Check passive skill conditions. + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + { + return; + } + player.addSkill(skill, false); + update = true; } - player.addSkill(skill, false); - update.compareAndSet(false, true); } - }); + } // Apply enchant stats item.applyEnchantStats(); @@ -476,39 +501,49 @@ public abstract class Inventory extends ItemContainer // Apply SA skill item.applySpecialAbilities(); - item.getItem().forEachSkill(ItemSkillType.NORMAL, holder -> + final List normalSkills = item.getItem().getSkills(ItemSkillType.NORMAL); + if (normalSkills != null) { - final Skill skill = holder.getSkill(); - if (skill != null) + for (ItemSkillHolder holder : normalSkills) { - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + final Skill skill = holder.getSkill(); + if (skill != null) { - return; - } - - player.addSkill(skill, false); - if (skill.isActive() && !player.hasSkillReuse(skill.getReuseHashCode())) - { - final int equipDelay = item.getEquipReuseDelay(); - if (equipDelay > 0) + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) { - player.addTimeStamp(skill, equipDelay); - player.disableSkill(skill, equipDelay); + return; } - updateTimestamp.compareAndSet(false, true); + + player.addSkill(skill, false); + if (skill.isActive() && !player.hasSkillReuse(skill.getReuseHashCode())) + { + final int equipDelay = item.getEquipReuseDelay(); + if (equipDelay > 0) + { + player.addTimeStamp(skill, equipDelay); + player.disableSkill(skill, equipDelay); + } + updateTimestamp = true; + } + update = true; + } + else + { + LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); } - update.compareAndSet(false, true); } - else - { - LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); - } - }); + } // Must check all equipped items for enchant conditions. for (ItemInstance equipped : inventory.getPaperdollItems()) { - equipped.getItem().forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List otherEnchantSkills = equipped.getItem().getSkills(ItemSkillType.ON_ENCHANT); + if (otherEnchantSkills == null) + { + continue; + } + + for (ItemSkillHolder holder : otherEnchantSkills) { // Add skills bestowed from +4 armor if (equipped.getEnchantLevel() >= holder.getValue()) @@ -520,19 +555,19 @@ public abstract class Inventory extends ItemContainer return; } player.addSkill(skill, false); - update.compareAndSet(false, true); + update = true; } - }); + } } // Apply skill, if weapon have "skills on equip" item.getItem().forEachSkill(ItemSkillType.ON_EQUIP, holder -> holder.getSkill().activateSkill(player, player)); - if (update.get()) + if (update) { player.sendSkillList(); } - if (updateTimestamp.get()) + if (updateTimestamp) { player.sendPacket(new SkillCoolTime(player)); } @@ -593,8 +628,8 @@ public abstract class Inventory extends ItemContainer if (piecesCount >= armorSet.getMinimumPieces()) { // Applying all skills that matching the conditions - final AtomicBoolean updateTimeStamp = new AtomicBoolean(); - final AtomicBoolean update = new AtomicBoolean(); + boolean updateTimeStamp = false; + boolean update = false; for (ArmorsetSkillHolder holder : armorSet.getSkills()) { if (holder.validateConditions(player, armorSet, idProvider)) @@ -623,16 +658,16 @@ public abstract class Inventory extends ItemContainer player.disableSkill(itemSkill, equipDelay); } } - updateTimeStamp.compareAndSet(false, true); + updateTimeStamp = true; } - update.compareAndSet(false, true); + update = true; } } - if (updateTimeStamp.get()) + if (updateTimeStamp) { player.sendPacket(new SkillCoolTime(player)); } - return update.get(); + return update; } return false; } diff --git a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java index 24fb3c290e..36609833f0 100644 --- a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java +++ b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java @@ -27,7 +27,6 @@ import java.util.List; import java.util.Objects; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Function; import java.util.function.Predicate; import java.util.logging.Level; @@ -49,6 +48,7 @@ import org.l2jmobius.gameserver.model.VariationInstance; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder; +import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; import org.l2jmobius.gameserver.model.items.EtcItem; import org.l2jmobius.gameserver.model.items.Item; import org.l2jmobius.gameserver.model.items.appearance.AppearanceStone; @@ -324,8 +324,8 @@ public abstract class Inventory extends ItemContainer final PlayerInstance player = (PlayerInstance) inventory.getOwner(); final Item it = item.getItem(); - final AtomicBoolean update = new AtomicBoolean(); - final AtomicBoolean updateTimestamp = new AtomicBoolean(); + boolean update = false; + boolean updateTimestamp = false; // Remove augmentation bonuses on unequip if (item.isAugmented()) @@ -336,15 +336,19 @@ public abstract class Inventory extends ItemContainer // Recalculate all stats player.getStat().recalculateStats(true); - it.forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List onEnchantSkills = it.getSkills(ItemSkillType.ON_ENCHANT); + if (onEnchantSkills != null) { - // Remove skills bestowed from +4 armor - if (item.getEnchantLevel() >= holder.getValue()) + for (ItemSkillHolder holder : onEnchantSkills) { - player.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); - update.compareAndSet(false, true); + // Remove skills bestowed from +4 armor + if (item.getEnchantLevel() >= holder.getValue()) + { + player.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); + update = true; + } } - }); + } // Clear enchant bonus item.clearEnchantStats(); @@ -352,30 +356,40 @@ public abstract class Inventory extends ItemContainer // Clear SA Bonus item.clearSpecialAbilities(); - it.forEachSkill(ItemSkillType.NORMAL, holder -> + final List normalSkills = it.getSkills(ItemSkillType.NORMAL); + if (normalSkills != null) { - final Skill skill = holder.getSkill(); - if (skill != null) + for (ItemSkillHolder holder : normalSkills) { - player.removeSkill(skill, false, skill.isPassive()); - update.compareAndSet(false, true); + final Skill skill = holder.getSkill(); + if (skill != null) + { + player.removeSkill(skill, false, skill.isPassive()); + update = true; + } + else + { + LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); + } } - else - { - LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); - } - }); + } if (item.isArmor()) { for (ItemInstance itm : inventory.getItems()) { - if (!itm.isEquipped() || (itm.getItem().getSkills(ItemSkillType.NORMAL) == null) || itm.equals(item)) + if (!itm.isEquipped() || itm.equals(item)) { continue; } - itm.getItem().forEachSkill(ItemSkillType.NORMAL, holder -> + final List otherNormalSkills = itm.getItem().getSkills(ItemSkillType.NORMAL); + if (otherNormalSkills == null) + { + continue; + } + + for (ItemSkillHolder holder : otherNormalSkills) { if (player.getSkillLevel(holder.getSkillId()) != 0) { @@ -394,18 +408,24 @@ public abstract class Inventory extends ItemContainer player.addTimeStamp(skill, equipDelay); player.disableSkill(skill, equipDelay); } - updateTimestamp.compareAndSet(false, true); + updateTimestamp = true; } - update.compareAndSet(false, true); + update = true; } - }); + } } } // Must check all equipped items for enchant conditions. for (ItemInstance equipped : inventory.getPaperdollItems()) { - equipped.getItem().forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List otherEnchantSkills = equipped.getItem().getSkills(ItemSkillType.ON_ENCHANT); + if (otherEnchantSkills == null) + { + continue; + } + + for (ItemSkillHolder holder : otherEnchantSkills) { // Add skills bestowed from +4 armor if (equipped.getEnchantLevel() >= holder.getValue()) @@ -415,11 +435,12 @@ public abstract class Inventory extends ItemContainer if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) { player.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); - update.compareAndSet(false, true); + update = true; } } - }); + } } + // Must check for toggle and isRemovedOnUnequipWeapon skill item conditions. for (Skill skill : player.getAllSkills()) { @@ -427,18 +448,18 @@ public abstract class Inventory extends ItemContainer || (it.isWeapon() && skill.isRemovedOnUnequipWeapon())) { player.stopSkillEffects(true, skill.getId()); - update.compareAndSet(false, true); + update = true; } } // Apply skill, if weapon have "skills on unequip" it.forEachSkill(ItemSkillType.ON_UNEQUIP, holder -> holder.getSkill().activateSkill(player, player)); - if (update.get()) + if (update) { player.sendSkillList(); } - if (updateTimestamp.get()) + if (updateTimestamp) { player.sendPacket(new SkillCoolTime(player)); } @@ -465,8 +486,8 @@ public abstract class Inventory extends ItemContainer return; } - final AtomicBoolean update = new AtomicBoolean(); - final AtomicBoolean updateTimestamp = new AtomicBoolean(); + boolean update = false; + boolean updateTimestamp = false; // Apply augmentation bonuses on equip if (item.isAugmented()) @@ -477,21 +498,25 @@ public abstract class Inventory extends ItemContainer // Recalculate all stats player.getStat().recalculateStats(true); - item.getItem().forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List onEnchantSkills = item.getItem().getSkills(ItemSkillType.ON_ENCHANT); + if (onEnchantSkills != null) { - // Add skills bestowed from +4 armor - if (item.getEnchantLevel() >= holder.getValue()) + for (ItemSkillHolder holder : onEnchantSkills) { - final Skill skill = holder.getSkill(); - // Check passive skill conditions. - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + // Add skills bestowed from +4 armor + if (item.getEnchantLevel() >= holder.getValue()) { - return; + final Skill skill = holder.getSkill(); + // Check passive skill conditions. + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + { + return; + } + player.addSkill(skill, false); + update = true; } - player.addSkill(skill, false); - update.compareAndSet(false, true); } - }); + } // Apply enchant stats item.applyEnchantStats(); @@ -499,39 +524,49 @@ public abstract class Inventory extends ItemContainer // Apply SA skill item.applySpecialAbilities(); - item.getItem().forEachSkill(ItemSkillType.NORMAL, holder -> + final List normalSkills = item.getItem().getSkills(ItemSkillType.NORMAL); + if (normalSkills != null) { - final Skill skill = holder.getSkill(); - if (skill != null) + for (ItemSkillHolder holder : normalSkills) { - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + final Skill skill = holder.getSkill(); + if (skill != null) { - return; - } - - player.addSkill(skill, false); - if (skill.isActive() && !player.hasSkillReuse(skill.getReuseHashCode())) - { - final int equipDelay = item.getEquipReuseDelay(); - if (equipDelay > 0) + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) { - player.addTimeStamp(skill, equipDelay); - player.disableSkill(skill, equipDelay); + return; } - updateTimestamp.compareAndSet(false, true); + + player.addSkill(skill, false); + if (skill.isActive() && !player.hasSkillReuse(skill.getReuseHashCode())) + { + final int equipDelay = item.getEquipReuseDelay(); + if (equipDelay > 0) + { + player.addTimeStamp(skill, equipDelay); + player.disableSkill(skill, equipDelay); + } + updateTimestamp = true; + } + update = true; + } + else + { + LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); } - update.compareAndSet(false, true); } - else - { - LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); - } - }); + } // Must check all equipped items for enchant conditions. for (ItemInstance equipped : inventory.getPaperdollItems()) { - equipped.getItem().forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List otherEnchantSkills = equipped.getItem().getSkills(ItemSkillType.ON_ENCHANT); + if (otherEnchantSkills == null) + { + continue; + } + + for (ItemSkillHolder holder : otherEnchantSkills) { // Add skills bestowed from +4 armor if (equipped.getEnchantLevel() >= holder.getValue()) @@ -543,19 +578,19 @@ public abstract class Inventory extends ItemContainer return; } player.addSkill(skill, false); - update.compareAndSet(false, true); + update = true; } - }); + } } // Apply skill, if weapon have "skills on equip" item.getItem().forEachSkill(ItemSkillType.ON_EQUIP, holder -> holder.getSkill().activateSkill(player, player)); - if (update.get()) + if (update) { player.sendSkillList(); } - if (updateTimestamp.get()) + if (updateTimestamp) { player.sendPacket(new SkillCoolTime(player)); } @@ -616,8 +651,8 @@ public abstract class Inventory extends ItemContainer if (piecesCount >= armorSet.getMinimumPieces()) { // Applying all skills that matching the conditions - final AtomicBoolean updateTimeStamp = new AtomicBoolean(); - final AtomicBoolean update = new AtomicBoolean(); + boolean updateTimeStamp = false; + boolean update = false; for (ArmorsetSkillHolder holder : armorSet.getSkills()) { if (holder.validateConditions(player, armorSet, idProvider)) @@ -646,16 +681,16 @@ public abstract class Inventory extends ItemContainer player.disableSkill(itemSkill, equipDelay); } } - updateTimeStamp.compareAndSet(false, true); + updateTimeStamp = true; } - update.compareAndSet(false, true); + update = true; } } - if (updateTimeStamp.get()) + if (updateTimeStamp) { player.sendPacket(new SkillCoolTime(player)); } - return update.get(); + return update; } return false; } diff --git a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java index 24fb3c290e..36609833f0 100644 --- a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java +++ b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java @@ -27,7 +27,6 @@ import java.util.List; import java.util.Objects; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Function; import java.util.function.Predicate; import java.util.logging.Level; @@ -49,6 +48,7 @@ import org.l2jmobius.gameserver.model.VariationInstance; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder; +import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; import org.l2jmobius.gameserver.model.items.EtcItem; import org.l2jmobius.gameserver.model.items.Item; import org.l2jmobius.gameserver.model.items.appearance.AppearanceStone; @@ -324,8 +324,8 @@ public abstract class Inventory extends ItemContainer final PlayerInstance player = (PlayerInstance) inventory.getOwner(); final Item it = item.getItem(); - final AtomicBoolean update = new AtomicBoolean(); - final AtomicBoolean updateTimestamp = new AtomicBoolean(); + boolean update = false; + boolean updateTimestamp = false; // Remove augmentation bonuses on unequip if (item.isAugmented()) @@ -336,15 +336,19 @@ public abstract class Inventory extends ItemContainer // Recalculate all stats player.getStat().recalculateStats(true); - it.forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List onEnchantSkills = it.getSkills(ItemSkillType.ON_ENCHANT); + if (onEnchantSkills != null) { - // Remove skills bestowed from +4 armor - if (item.getEnchantLevel() >= holder.getValue()) + for (ItemSkillHolder holder : onEnchantSkills) { - player.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); - update.compareAndSet(false, true); + // Remove skills bestowed from +4 armor + if (item.getEnchantLevel() >= holder.getValue()) + { + player.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); + update = true; + } } - }); + } // Clear enchant bonus item.clearEnchantStats(); @@ -352,30 +356,40 @@ public abstract class Inventory extends ItemContainer // Clear SA Bonus item.clearSpecialAbilities(); - it.forEachSkill(ItemSkillType.NORMAL, holder -> + final List normalSkills = it.getSkills(ItemSkillType.NORMAL); + if (normalSkills != null) { - final Skill skill = holder.getSkill(); - if (skill != null) + for (ItemSkillHolder holder : normalSkills) { - player.removeSkill(skill, false, skill.isPassive()); - update.compareAndSet(false, true); + final Skill skill = holder.getSkill(); + if (skill != null) + { + player.removeSkill(skill, false, skill.isPassive()); + update = true; + } + else + { + LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); + } } - else - { - LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); - } - }); + } if (item.isArmor()) { for (ItemInstance itm : inventory.getItems()) { - if (!itm.isEquipped() || (itm.getItem().getSkills(ItemSkillType.NORMAL) == null) || itm.equals(item)) + if (!itm.isEquipped() || itm.equals(item)) { continue; } - itm.getItem().forEachSkill(ItemSkillType.NORMAL, holder -> + final List otherNormalSkills = itm.getItem().getSkills(ItemSkillType.NORMAL); + if (otherNormalSkills == null) + { + continue; + } + + for (ItemSkillHolder holder : otherNormalSkills) { if (player.getSkillLevel(holder.getSkillId()) != 0) { @@ -394,18 +408,24 @@ public abstract class Inventory extends ItemContainer player.addTimeStamp(skill, equipDelay); player.disableSkill(skill, equipDelay); } - updateTimestamp.compareAndSet(false, true); + updateTimestamp = true; } - update.compareAndSet(false, true); + update = true; } - }); + } } } // Must check all equipped items for enchant conditions. for (ItemInstance equipped : inventory.getPaperdollItems()) { - equipped.getItem().forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List otherEnchantSkills = equipped.getItem().getSkills(ItemSkillType.ON_ENCHANT); + if (otherEnchantSkills == null) + { + continue; + } + + for (ItemSkillHolder holder : otherEnchantSkills) { // Add skills bestowed from +4 armor if (equipped.getEnchantLevel() >= holder.getValue()) @@ -415,11 +435,12 @@ public abstract class Inventory extends ItemContainer if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) { player.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); - update.compareAndSet(false, true); + update = true; } } - }); + } } + // Must check for toggle and isRemovedOnUnequipWeapon skill item conditions. for (Skill skill : player.getAllSkills()) { @@ -427,18 +448,18 @@ public abstract class Inventory extends ItemContainer || (it.isWeapon() && skill.isRemovedOnUnequipWeapon())) { player.stopSkillEffects(true, skill.getId()); - update.compareAndSet(false, true); + update = true; } } // Apply skill, if weapon have "skills on unequip" it.forEachSkill(ItemSkillType.ON_UNEQUIP, holder -> holder.getSkill().activateSkill(player, player)); - if (update.get()) + if (update) { player.sendSkillList(); } - if (updateTimestamp.get()) + if (updateTimestamp) { player.sendPacket(new SkillCoolTime(player)); } @@ -465,8 +486,8 @@ public abstract class Inventory extends ItemContainer return; } - final AtomicBoolean update = new AtomicBoolean(); - final AtomicBoolean updateTimestamp = new AtomicBoolean(); + boolean update = false; + boolean updateTimestamp = false; // Apply augmentation bonuses on equip if (item.isAugmented()) @@ -477,21 +498,25 @@ public abstract class Inventory extends ItemContainer // Recalculate all stats player.getStat().recalculateStats(true); - item.getItem().forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List onEnchantSkills = item.getItem().getSkills(ItemSkillType.ON_ENCHANT); + if (onEnchantSkills != null) { - // Add skills bestowed from +4 armor - if (item.getEnchantLevel() >= holder.getValue()) + for (ItemSkillHolder holder : onEnchantSkills) { - final Skill skill = holder.getSkill(); - // Check passive skill conditions. - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + // Add skills bestowed from +4 armor + if (item.getEnchantLevel() >= holder.getValue()) { - return; + final Skill skill = holder.getSkill(); + // Check passive skill conditions. + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + { + return; + } + player.addSkill(skill, false); + update = true; } - player.addSkill(skill, false); - update.compareAndSet(false, true); } - }); + } // Apply enchant stats item.applyEnchantStats(); @@ -499,39 +524,49 @@ public abstract class Inventory extends ItemContainer // Apply SA skill item.applySpecialAbilities(); - item.getItem().forEachSkill(ItemSkillType.NORMAL, holder -> + final List normalSkills = item.getItem().getSkills(ItemSkillType.NORMAL); + if (normalSkills != null) { - final Skill skill = holder.getSkill(); - if (skill != null) + for (ItemSkillHolder holder : normalSkills) { - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + final Skill skill = holder.getSkill(); + if (skill != null) { - return; - } - - player.addSkill(skill, false); - if (skill.isActive() && !player.hasSkillReuse(skill.getReuseHashCode())) - { - final int equipDelay = item.getEquipReuseDelay(); - if (equipDelay > 0) + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) { - player.addTimeStamp(skill, equipDelay); - player.disableSkill(skill, equipDelay); + return; } - updateTimestamp.compareAndSet(false, true); + + player.addSkill(skill, false); + if (skill.isActive() && !player.hasSkillReuse(skill.getReuseHashCode())) + { + final int equipDelay = item.getEquipReuseDelay(); + if (equipDelay > 0) + { + player.addTimeStamp(skill, equipDelay); + player.disableSkill(skill, equipDelay); + } + updateTimestamp = true; + } + update = true; + } + else + { + LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); } - update.compareAndSet(false, true); } - else - { - LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); - } - }); + } // Must check all equipped items for enchant conditions. for (ItemInstance equipped : inventory.getPaperdollItems()) { - equipped.getItem().forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List otherEnchantSkills = equipped.getItem().getSkills(ItemSkillType.ON_ENCHANT); + if (otherEnchantSkills == null) + { + continue; + } + + for (ItemSkillHolder holder : otherEnchantSkills) { // Add skills bestowed from +4 armor if (equipped.getEnchantLevel() >= holder.getValue()) @@ -543,19 +578,19 @@ public abstract class Inventory extends ItemContainer return; } player.addSkill(skill, false); - update.compareAndSet(false, true); + update = true; } - }); + } } // Apply skill, if weapon have "skills on equip" item.getItem().forEachSkill(ItemSkillType.ON_EQUIP, holder -> holder.getSkill().activateSkill(player, player)); - if (update.get()) + if (update) { player.sendSkillList(); } - if (updateTimestamp.get()) + if (updateTimestamp) { player.sendPacket(new SkillCoolTime(player)); } @@ -616,8 +651,8 @@ public abstract class Inventory extends ItemContainer if (piecesCount >= armorSet.getMinimumPieces()) { // Applying all skills that matching the conditions - final AtomicBoolean updateTimeStamp = new AtomicBoolean(); - final AtomicBoolean update = new AtomicBoolean(); + boolean updateTimeStamp = false; + boolean update = false; for (ArmorsetSkillHolder holder : armorSet.getSkills()) { if (holder.validateConditions(player, armorSet, idProvider)) @@ -646,16 +681,16 @@ public abstract class Inventory extends ItemContainer player.disableSkill(itemSkill, equipDelay); } } - updateTimeStamp.compareAndSet(false, true); + updateTimeStamp = true; } - update.compareAndSet(false, true); + update = true; } } - if (updateTimeStamp.get()) + if (updateTimeStamp) { player.sendPacket(new SkillCoolTime(player)); } - return update.get(); + return update; } return false; } diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java index 0e28d5ed32..0789154de5 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java @@ -27,7 +27,6 @@ import java.util.List; import java.util.Objects; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Function; import java.util.function.Predicate; import java.util.logging.Level; @@ -49,6 +48,7 @@ import org.l2jmobius.gameserver.model.VariationInstance; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder; +import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; import org.l2jmobius.gameserver.model.items.EtcItem; import org.l2jmobius.gameserver.model.items.Item; import org.l2jmobius.gameserver.model.items.appearance.AppearanceStone; @@ -324,8 +324,8 @@ public abstract class Inventory extends ItemContainer final PlayerInstance player = (PlayerInstance) inventory.getOwner(); final Item it = item.getItem(); - final AtomicBoolean update = new AtomicBoolean(); - final AtomicBoolean updateTimestamp = new AtomicBoolean(); + boolean update = false; + boolean updateTimestamp = false; // Remove augmentation bonuses on unequip if (item.isAugmented()) @@ -336,15 +336,19 @@ public abstract class Inventory extends ItemContainer // Recalculate all stats player.getStat().recalculateStats(true); - it.forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List onEnchantSkills = it.getSkills(ItemSkillType.ON_ENCHANT); + if (onEnchantSkills != null) { - // Remove skills bestowed from +4 armor - if (item.getEnchantLevel() >= holder.getValue()) + for (ItemSkillHolder holder : onEnchantSkills) { - player.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); - update.compareAndSet(false, true); + // Remove skills bestowed from +4 armor + if (item.getEnchantLevel() >= holder.getValue()) + { + player.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); + update = true; + } } - }); + } // Clear enchant bonus item.clearEnchantStats(); @@ -352,30 +356,40 @@ public abstract class Inventory extends ItemContainer // Clear SA Bonus item.clearSpecialAbilities(); - it.forEachSkill(ItemSkillType.NORMAL, holder -> + final List normalSkills = it.getSkills(ItemSkillType.NORMAL); + if (normalSkills != null) { - final Skill skill = holder.getSkill(); - if (skill != null) + for (ItemSkillHolder holder : normalSkills) { - player.removeSkill(skill, false, skill.isPassive()); - update.compareAndSet(false, true); + final Skill skill = holder.getSkill(); + if (skill != null) + { + player.removeSkill(skill, false, skill.isPassive()); + update = true; + } + else + { + LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); + } } - else - { - LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); - } - }); + } if (item.isArmor()) { for (ItemInstance itm : inventory.getItems()) { - if (!itm.isEquipped() || (itm.getItem().getSkills(ItemSkillType.NORMAL) == null) || itm.equals(item)) + if (!itm.isEquipped() || itm.equals(item)) { continue; } - itm.getItem().forEachSkill(ItemSkillType.NORMAL, holder -> + final List otherNormalSkills = itm.getItem().getSkills(ItemSkillType.NORMAL); + if (otherNormalSkills == null) + { + continue; + } + + for (ItemSkillHolder holder : otherNormalSkills) { if (player.getSkillLevel(holder.getSkillId()) != 0) { @@ -394,18 +408,24 @@ public abstract class Inventory extends ItemContainer player.addTimeStamp(skill, equipDelay); player.disableSkill(skill, equipDelay); } - updateTimestamp.compareAndSet(false, true); + updateTimestamp = true; } - update.compareAndSet(false, true); + update = true; } - }); + } } } // Must check all equipped items for enchant conditions. for (ItemInstance equipped : inventory.getPaperdollItems()) { - equipped.getItem().forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List otherEnchantSkills = equipped.getItem().getSkills(ItemSkillType.ON_ENCHANT); + if (otherEnchantSkills == null) + { + continue; + } + + for (ItemSkillHolder holder : otherEnchantSkills) { // Add skills bestowed from +4 armor if (equipped.getEnchantLevel() >= holder.getValue()) @@ -415,11 +435,12 @@ public abstract class Inventory extends ItemContainer if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) { player.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); - update.compareAndSet(false, true); + update = true; } } - }); + } } + // Must check for toggle and isRemovedOnUnequipWeapon skill item conditions. for (Skill skill : player.getAllSkills()) { @@ -427,18 +448,18 @@ public abstract class Inventory extends ItemContainer || (it.isWeapon() && skill.isRemovedOnUnequipWeapon())) { player.stopSkillEffects(true, skill.getId()); - update.compareAndSet(false, true); + update = true; } } // Apply skill, if weapon have "skills on unequip" it.forEachSkill(ItemSkillType.ON_UNEQUIP, holder -> holder.getSkill().activateSkill(player, player)); - if (update.get()) + if (update) { player.sendSkillList(); } - if (updateTimestamp.get()) + if (updateTimestamp) { player.sendPacket(new SkillCoolTime(player)); } @@ -458,8 +479,8 @@ public abstract class Inventory extends ItemContainer } final PlayerInstance player = (PlayerInstance) inventory.getOwner(); - final AtomicBoolean update = new AtomicBoolean(); - final AtomicBoolean updateTimestamp = new AtomicBoolean(); + boolean update = false; + boolean updateTimestamp = false; // Apply augmentation bonuses on equip if (item.isAugmented()) @@ -470,21 +491,25 @@ public abstract class Inventory extends ItemContainer // Recalculate all stats player.getStat().recalculateStats(true); - item.getItem().forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List onEnchantSkills = item.getItem().getSkills(ItemSkillType.ON_ENCHANT); + if (onEnchantSkills != null) { - // Add skills bestowed from +4 armor - if (item.getEnchantLevel() >= holder.getValue()) + for (ItemSkillHolder holder : onEnchantSkills) { - final Skill skill = holder.getSkill(); - // Check passive skill conditions. - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + // Add skills bestowed from +4 armor + if (item.getEnchantLevel() >= holder.getValue()) { - return; + final Skill skill = holder.getSkill(); + // Check passive skill conditions. + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + { + return; + } + player.addSkill(skill, false); + update = true; } - player.addSkill(skill, false); - update.compareAndSet(false, true); } - }); + } // Apply enchant stats item.applyEnchantStats(); @@ -492,39 +517,49 @@ public abstract class Inventory extends ItemContainer // Apply SA skill item.applySpecialAbilities(); - item.getItem().forEachSkill(ItemSkillType.NORMAL, holder -> + final List normalSkills = item.getItem().getSkills(ItemSkillType.NORMAL); + if (normalSkills != null) { - final Skill skill = holder.getSkill(); - if (skill != null) + for (ItemSkillHolder holder : normalSkills) { - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + final Skill skill = holder.getSkill(); + if (skill != null) { - return; - } - - player.addSkill(skill, false); - if (skill.isActive() && !player.hasSkillReuse(skill.getReuseHashCode())) - { - final int equipDelay = item.getEquipReuseDelay(); - if (equipDelay > 0) + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) { - player.addTimeStamp(skill, equipDelay); - player.disableSkill(skill, equipDelay); + return; } - updateTimestamp.compareAndSet(false, true); + + player.addSkill(skill, false); + if (skill.isActive() && !player.hasSkillReuse(skill.getReuseHashCode())) + { + final int equipDelay = item.getEquipReuseDelay(); + if (equipDelay > 0) + { + player.addTimeStamp(skill, equipDelay); + player.disableSkill(skill, equipDelay); + } + updateTimestamp = true; + } + update = true; + } + else + { + LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); } - update.compareAndSet(false, true); } - else - { - LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); - } - }); + } // Must check all equipped items for enchant conditions. for (ItemInstance equipped : inventory.getPaperdollItems()) { - equipped.getItem().forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List otherEnchantSkills = equipped.getItem().getSkills(ItemSkillType.ON_ENCHANT); + if (otherEnchantSkills == null) + { + continue; + } + + for (ItemSkillHolder holder : otherEnchantSkills) { // Add skills bestowed from +4 armor if (equipped.getEnchantLevel() >= holder.getValue()) @@ -536,19 +571,19 @@ public abstract class Inventory extends ItemContainer return; } player.addSkill(skill, false); - update.compareAndSet(false, true); + update = true; } - }); + } } // Apply skill, if weapon have "skills on equip" item.getItem().forEachSkill(ItemSkillType.ON_EQUIP, holder -> holder.getSkill().activateSkill(player, player)); - if (update.get()) + if (update) { player.sendSkillList(); } - if (updateTimestamp.get()) + if (updateTimestamp) { player.sendPacket(new SkillCoolTime(player)); } @@ -609,8 +644,8 @@ public abstract class Inventory extends ItemContainer if (piecesCount >= armorSet.getMinimumPieces()) { // Applying all skills that matching the conditions - final AtomicBoolean updateTimeStamp = new AtomicBoolean(); - final AtomicBoolean update = new AtomicBoolean(); + boolean updateTimeStamp = false; + boolean update = false; for (ArmorsetSkillHolder holder : armorSet.getSkills()) { if (holder.validateConditions(player, armorSet, idProvider)) @@ -639,16 +674,16 @@ public abstract class Inventory extends ItemContainer player.disableSkill(itemSkill, equipDelay); } } - updateTimeStamp.compareAndSet(false, true); + updateTimeStamp = true; } - update.compareAndSet(false, true); + update = true; } } - if (updateTimeStamp.get()) + if (updateTimeStamp) { player.sendPacket(new SkillCoolTime(player)); } - return update.get(); + return update; } return false; } diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java index a2c08181dd..28249b4e90 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java @@ -27,7 +27,6 @@ import java.util.List; import java.util.Objects; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Function; import java.util.function.Predicate; import java.util.logging.Level; @@ -49,6 +48,7 @@ import org.l2jmobius.gameserver.model.VariationInstance; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder; +import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; import org.l2jmobius.gameserver.model.items.EtcItem; import org.l2jmobius.gameserver.model.items.Item; import org.l2jmobius.gameserver.model.items.appearance.AppearanceStone; @@ -296,8 +296,8 @@ public abstract class Inventory extends ItemContainer final PlayerInstance player = (PlayerInstance) inventory.getOwner(); final Item it = item.getItem(); - final AtomicBoolean update = new AtomicBoolean(); - final AtomicBoolean updateTimestamp = new AtomicBoolean(); + boolean update = false; + boolean updateTimestamp = false; // Remove augmentation bonuses on unequip if (item.isAugmented()) @@ -308,15 +308,19 @@ public abstract class Inventory extends ItemContainer // Recalculate all stats player.getStat().recalculateStats(true); - it.forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List onEnchantSkills = it.getSkills(ItemSkillType.ON_ENCHANT); + if (onEnchantSkills != null) { - // Remove skills bestowed from +4 armor - if (item.getEnchantLevel() >= holder.getValue()) + for (ItemSkillHolder holder : onEnchantSkills) { - player.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); - update.compareAndSet(false, true); + // Remove skills bestowed from +4 armor + if (item.getEnchantLevel() >= holder.getValue()) + { + player.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); + update = true; + } } - }); + } // Clear enchant bonus item.clearEnchantStats(); @@ -324,31 +328,40 @@ public abstract class Inventory extends ItemContainer // Clear SA Bonus item.clearSpecialAbilities(); - it.forEachSkill(ItemSkillType.NORMAL, holder -> + final List normalSkills = it.getSkills(ItemSkillType.NORMAL); + if (normalSkills != null) { - final Skill Skill = holder.getSkill(); - - if (Skill != null) + for (ItemSkillHolder holder : normalSkills) { - player.removeSkill(Skill, false, Skill.isPassive()); - update.compareAndSet(false, true); + final Skill skill = holder.getSkill(); + if (skill != null) + { + player.removeSkill(skill, false, skill.isPassive()); + update = true; + } + else + { + LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); + } } - else - { - LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); - } - }); + } if (item.isArmor()) { for (ItemInstance itm : inventory.getItems()) { - if (!itm.isEquipped() || (itm.getItem().getSkills(ItemSkillType.NORMAL) == null) || itm.equals(item)) + if (!itm.isEquipped() || itm.equals(item)) { continue; } - itm.getItem().forEachSkill(ItemSkillType.NORMAL, holder -> + final List otherNormalSkills = itm.getItem().getSkills(ItemSkillType.NORMAL); + if (otherNormalSkills == null) + { + continue; + } + + for (ItemSkillHolder holder : otherNormalSkills) { if (player.getSkillLevel(holder.getSkillId()) != 0) { @@ -359,30 +372,32 @@ public abstract class Inventory extends ItemContainer if (skill != null) { player.addSkill(skill, false); - - if (skill.isActive()) + if (skill.isActive() && !player.hasSkillReuse(skill.getReuseHashCode())) { - if (!player.hasSkillReuse(skill.getReuseHashCode())) + final int equipDelay = item.getEquipReuseDelay(); + if (equipDelay > 0) { - final int equipDelay = item.getEquipReuseDelay(); - if (equipDelay > 0) - { - player.addTimeStamp(skill, equipDelay); - player.disableSkill(skill, equipDelay); - } - updateTimestamp.compareAndSet(false, true); + player.addTimeStamp(skill, equipDelay); + player.disableSkill(skill, equipDelay); } + updateTimestamp = true; } - update.compareAndSet(false, true); + update = true; } - }); + } } } // Must check all equipped items for enchant conditions. for (ItemInstance equipped : inventory.getPaperdollItems()) { - equipped.getItem().forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List otherEnchantSkills = equipped.getItem().getSkills(ItemSkillType.ON_ENCHANT); + if (otherEnchantSkills == null) + { + continue; + } + + for (ItemSkillHolder holder : otherEnchantSkills) { // Add skills bestowed from +4 armor if (equipped.getEnchantLevel() >= holder.getValue()) @@ -392,11 +407,12 @@ public abstract class Inventory extends ItemContainer if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) { player.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); - update.compareAndSet(false, true); + update = true; } } - }); + } } + // Must check for toggle and isRemovedOnUnequipWeapon skill item conditions. for (Skill skill : player.getAllSkills()) { @@ -404,18 +420,18 @@ public abstract class Inventory extends ItemContainer || (it.isWeapon() && skill.isRemovedOnUnequipWeapon())) { player.stopSkillEffects(true, skill.getId()); - update.compareAndSet(false, true); + update = true; } } // Apply skill, if weapon have "skills on unequip" it.forEachSkill(ItemSkillType.ON_UNEQUIP, holder -> holder.getSkill().activateSkill(player, player)); - if (update.get()) + if (update) { player.sendSkillList(); } - if (updateTimestamp.get()) + if (updateTimestamp) { player.sendPacket(new SkillCoolTime(player)); } @@ -442,8 +458,8 @@ public abstract class Inventory extends ItemContainer return; } - final AtomicBoolean update = new AtomicBoolean(); - final AtomicBoolean updateTimestamp = new AtomicBoolean(); + boolean update = false; + boolean updateTimestamp = false; // Apply augmentation bonuses on equip if (item.isAugmented()) @@ -454,21 +470,25 @@ public abstract class Inventory extends ItemContainer // Recalculate all stats player.getStat().recalculateStats(true); - item.getItem().forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List onEnchantSkills = item.getItem().getSkills(ItemSkillType.ON_ENCHANT); + if (onEnchantSkills != null) { - // Add skills bestowed from +4 armor - if (item.getEnchantLevel() >= holder.getValue()) + for (ItemSkillHolder holder : onEnchantSkills) { - final Skill skill = holder.getSkill(); - // Check passive skill conditions. - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + // Add skills bestowed from +4 armor + if (item.getEnchantLevel() >= holder.getValue()) { - return; + final Skill skill = holder.getSkill(); + // Check passive skill conditions. + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + { + return; + } + player.addSkill(skill, false); + update = true; } - player.addSkill(skill, false); - update.compareAndSet(false, true); } - }); + } // Apply enchant stats item.applyEnchantStats(); @@ -476,21 +496,21 @@ public abstract class Inventory extends ItemContainer // Apply SA skill item.applySpecialAbilities(); - item.getItem().forEachSkill(ItemSkillType.NORMAL, holder -> + final List normalSkills = item.getItem().getSkills(ItemSkillType.NORMAL); + if (normalSkills != null) { - final Skill skill = holder.getSkill(); - if (skill != null) + for (ItemSkillHolder holder : normalSkills) { - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + final Skill skill = holder.getSkill(); + if (skill != null) { - return; - } - - player.addSkill(skill, false); - - if (skill.isActive()) - { - if (!player.hasSkillReuse(skill.getReuseHashCode())) + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + { + return; + } + + player.addSkill(skill, false); + if (skill.isActive() && !player.hasSkillReuse(skill.getReuseHashCode())) { final int equipDelay = item.getEquipReuseDelay(); if (equipDelay > 0) @@ -498,21 +518,27 @@ public abstract class Inventory extends ItemContainer player.addTimeStamp(skill, equipDelay); player.disableSkill(skill, equipDelay); } - updateTimestamp.compareAndSet(false, true); + updateTimestamp = true; } + update = true; + } + else + { + LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); } - update.compareAndSet(false, true); } - else - { - LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); - } - }); + } // Must check all equipped items for enchant conditions. for (ItemInstance equipped : inventory.getPaperdollItems()) { - equipped.getItem().forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List otherEnchantSkills = equipped.getItem().getSkills(ItemSkillType.ON_ENCHANT); + if (otherEnchantSkills == null) + { + continue; + } + + for (ItemSkillHolder holder : otherEnchantSkills) { // Add skills bestowed from +4 armor if (equipped.getEnchantLevel() >= holder.getValue()) @@ -524,19 +550,19 @@ public abstract class Inventory extends ItemContainer return; } player.addSkill(skill, false); - update.compareAndSet(false, true); + update = true; } - }); + } } // Apply skill, if weapon have "skills on equip" item.getItem().forEachSkill(ItemSkillType.ON_EQUIP, holder -> holder.getSkill().activateSkill(player, player)); - if (update.get()) + if (update) { player.sendSkillList(); } - if (updateTimestamp.get()) + if (updateTimestamp) { player.sendPacket(new SkillCoolTime(player)); } @@ -574,12 +600,9 @@ public abstract class Inventory extends ItemContainer if (itemVisualId > 0) { final AppearanceStone stone = AppearanceItemData.getInstance().getStone(itemVisualId); - if (stone != null) + if ((stone != null) && (stone.getType() == AppearanceType.FIXED) && verifyAndApply(player, item, ItemInstance::getVisualId)) { - if ((stone.getType() == AppearanceType.FIXED) && verifyAndApply(player, item, ItemInstance::getVisualId)) - { - update = true; - } + update = true; } } @@ -600,8 +623,8 @@ public abstract class Inventory extends ItemContainer if (piecesCount >= armorSet.getMinimumPieces()) { // Applying all skills that matching the conditions - final AtomicBoolean updateTimeStamp = new AtomicBoolean(); - final AtomicBoolean update = new AtomicBoolean(); + boolean updateTimeStamp = false; + boolean update = false; for (ArmorsetSkillHolder holder : armorSet.getSkills()) { if (holder.validateConditions(player, armorSet, idProvider)) @@ -630,16 +653,16 @@ public abstract class Inventory extends ItemContainer player.disableSkill(itemSkill, equipDelay); } } - updateTimeStamp.compareAndSet(false, true); + updateTimeStamp = true; } - update.compareAndSet(false, true); + update = true; } } - if (updateTimeStamp.get()) + if (updateTimeStamp) { player.sendPacket(new SkillCoolTime(player)); } - return update.get(); + return update; } return false; } diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java index a2c08181dd..28249b4e90 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java @@ -27,7 +27,6 @@ import java.util.List; import java.util.Objects; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Function; import java.util.function.Predicate; import java.util.logging.Level; @@ -49,6 +48,7 @@ import org.l2jmobius.gameserver.model.VariationInstance; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder; +import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; import org.l2jmobius.gameserver.model.items.EtcItem; import org.l2jmobius.gameserver.model.items.Item; import org.l2jmobius.gameserver.model.items.appearance.AppearanceStone; @@ -296,8 +296,8 @@ public abstract class Inventory extends ItemContainer final PlayerInstance player = (PlayerInstance) inventory.getOwner(); final Item it = item.getItem(); - final AtomicBoolean update = new AtomicBoolean(); - final AtomicBoolean updateTimestamp = new AtomicBoolean(); + boolean update = false; + boolean updateTimestamp = false; // Remove augmentation bonuses on unequip if (item.isAugmented()) @@ -308,15 +308,19 @@ public abstract class Inventory extends ItemContainer // Recalculate all stats player.getStat().recalculateStats(true); - it.forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List onEnchantSkills = it.getSkills(ItemSkillType.ON_ENCHANT); + if (onEnchantSkills != null) { - // Remove skills bestowed from +4 armor - if (item.getEnchantLevel() >= holder.getValue()) + for (ItemSkillHolder holder : onEnchantSkills) { - player.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); - update.compareAndSet(false, true); + // Remove skills bestowed from +4 armor + if (item.getEnchantLevel() >= holder.getValue()) + { + player.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); + update = true; + } } - }); + } // Clear enchant bonus item.clearEnchantStats(); @@ -324,31 +328,40 @@ public abstract class Inventory extends ItemContainer // Clear SA Bonus item.clearSpecialAbilities(); - it.forEachSkill(ItemSkillType.NORMAL, holder -> + final List normalSkills = it.getSkills(ItemSkillType.NORMAL); + if (normalSkills != null) { - final Skill Skill = holder.getSkill(); - - if (Skill != null) + for (ItemSkillHolder holder : normalSkills) { - player.removeSkill(Skill, false, Skill.isPassive()); - update.compareAndSet(false, true); + final Skill skill = holder.getSkill(); + if (skill != null) + { + player.removeSkill(skill, false, skill.isPassive()); + update = true; + } + else + { + LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); + } } - else - { - LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); - } - }); + } if (item.isArmor()) { for (ItemInstance itm : inventory.getItems()) { - if (!itm.isEquipped() || (itm.getItem().getSkills(ItemSkillType.NORMAL) == null) || itm.equals(item)) + if (!itm.isEquipped() || itm.equals(item)) { continue; } - itm.getItem().forEachSkill(ItemSkillType.NORMAL, holder -> + final List otherNormalSkills = itm.getItem().getSkills(ItemSkillType.NORMAL); + if (otherNormalSkills == null) + { + continue; + } + + for (ItemSkillHolder holder : otherNormalSkills) { if (player.getSkillLevel(holder.getSkillId()) != 0) { @@ -359,30 +372,32 @@ public abstract class Inventory extends ItemContainer if (skill != null) { player.addSkill(skill, false); - - if (skill.isActive()) + if (skill.isActive() && !player.hasSkillReuse(skill.getReuseHashCode())) { - if (!player.hasSkillReuse(skill.getReuseHashCode())) + final int equipDelay = item.getEquipReuseDelay(); + if (equipDelay > 0) { - final int equipDelay = item.getEquipReuseDelay(); - if (equipDelay > 0) - { - player.addTimeStamp(skill, equipDelay); - player.disableSkill(skill, equipDelay); - } - updateTimestamp.compareAndSet(false, true); + player.addTimeStamp(skill, equipDelay); + player.disableSkill(skill, equipDelay); } + updateTimestamp = true; } - update.compareAndSet(false, true); + update = true; } - }); + } } } // Must check all equipped items for enchant conditions. for (ItemInstance equipped : inventory.getPaperdollItems()) { - equipped.getItem().forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List otherEnchantSkills = equipped.getItem().getSkills(ItemSkillType.ON_ENCHANT); + if (otherEnchantSkills == null) + { + continue; + } + + for (ItemSkillHolder holder : otherEnchantSkills) { // Add skills bestowed from +4 armor if (equipped.getEnchantLevel() >= holder.getValue()) @@ -392,11 +407,12 @@ public abstract class Inventory extends ItemContainer if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) { player.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); - update.compareAndSet(false, true); + update = true; } } - }); + } } + // Must check for toggle and isRemovedOnUnequipWeapon skill item conditions. for (Skill skill : player.getAllSkills()) { @@ -404,18 +420,18 @@ public abstract class Inventory extends ItemContainer || (it.isWeapon() && skill.isRemovedOnUnequipWeapon())) { player.stopSkillEffects(true, skill.getId()); - update.compareAndSet(false, true); + update = true; } } // Apply skill, if weapon have "skills on unequip" it.forEachSkill(ItemSkillType.ON_UNEQUIP, holder -> holder.getSkill().activateSkill(player, player)); - if (update.get()) + if (update) { player.sendSkillList(); } - if (updateTimestamp.get()) + if (updateTimestamp) { player.sendPacket(new SkillCoolTime(player)); } @@ -442,8 +458,8 @@ public abstract class Inventory extends ItemContainer return; } - final AtomicBoolean update = new AtomicBoolean(); - final AtomicBoolean updateTimestamp = new AtomicBoolean(); + boolean update = false; + boolean updateTimestamp = false; // Apply augmentation bonuses on equip if (item.isAugmented()) @@ -454,21 +470,25 @@ public abstract class Inventory extends ItemContainer // Recalculate all stats player.getStat().recalculateStats(true); - item.getItem().forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List onEnchantSkills = item.getItem().getSkills(ItemSkillType.ON_ENCHANT); + if (onEnchantSkills != null) { - // Add skills bestowed from +4 armor - if (item.getEnchantLevel() >= holder.getValue()) + for (ItemSkillHolder holder : onEnchantSkills) { - final Skill skill = holder.getSkill(); - // Check passive skill conditions. - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + // Add skills bestowed from +4 armor + if (item.getEnchantLevel() >= holder.getValue()) { - return; + final Skill skill = holder.getSkill(); + // Check passive skill conditions. + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + { + return; + } + player.addSkill(skill, false); + update = true; } - player.addSkill(skill, false); - update.compareAndSet(false, true); } - }); + } // Apply enchant stats item.applyEnchantStats(); @@ -476,21 +496,21 @@ public abstract class Inventory extends ItemContainer // Apply SA skill item.applySpecialAbilities(); - item.getItem().forEachSkill(ItemSkillType.NORMAL, holder -> + final List normalSkills = item.getItem().getSkills(ItemSkillType.NORMAL); + if (normalSkills != null) { - final Skill skill = holder.getSkill(); - if (skill != null) + for (ItemSkillHolder holder : normalSkills) { - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + final Skill skill = holder.getSkill(); + if (skill != null) { - return; - } - - player.addSkill(skill, false); - - if (skill.isActive()) - { - if (!player.hasSkillReuse(skill.getReuseHashCode())) + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + { + return; + } + + player.addSkill(skill, false); + if (skill.isActive() && !player.hasSkillReuse(skill.getReuseHashCode())) { final int equipDelay = item.getEquipReuseDelay(); if (equipDelay > 0) @@ -498,21 +518,27 @@ public abstract class Inventory extends ItemContainer player.addTimeStamp(skill, equipDelay); player.disableSkill(skill, equipDelay); } - updateTimestamp.compareAndSet(false, true); + updateTimestamp = true; } + update = true; + } + else + { + LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); } - update.compareAndSet(false, true); } - else - { - LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); - } - }); + } // Must check all equipped items for enchant conditions. for (ItemInstance equipped : inventory.getPaperdollItems()) { - equipped.getItem().forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List otherEnchantSkills = equipped.getItem().getSkills(ItemSkillType.ON_ENCHANT); + if (otherEnchantSkills == null) + { + continue; + } + + for (ItemSkillHolder holder : otherEnchantSkills) { // Add skills bestowed from +4 armor if (equipped.getEnchantLevel() >= holder.getValue()) @@ -524,19 +550,19 @@ public abstract class Inventory extends ItemContainer return; } player.addSkill(skill, false); - update.compareAndSet(false, true); + update = true; } - }); + } } // Apply skill, if weapon have "skills on equip" item.getItem().forEachSkill(ItemSkillType.ON_EQUIP, holder -> holder.getSkill().activateSkill(player, player)); - if (update.get()) + if (update) { player.sendSkillList(); } - if (updateTimestamp.get()) + if (updateTimestamp) { player.sendPacket(new SkillCoolTime(player)); } @@ -574,12 +600,9 @@ public abstract class Inventory extends ItemContainer if (itemVisualId > 0) { final AppearanceStone stone = AppearanceItemData.getInstance().getStone(itemVisualId); - if (stone != null) + if ((stone != null) && (stone.getType() == AppearanceType.FIXED) && verifyAndApply(player, item, ItemInstance::getVisualId)) { - if ((stone.getType() == AppearanceType.FIXED) && verifyAndApply(player, item, ItemInstance::getVisualId)) - { - update = true; - } + update = true; } } @@ -600,8 +623,8 @@ public abstract class Inventory extends ItemContainer if (piecesCount >= armorSet.getMinimumPieces()) { // Applying all skills that matching the conditions - final AtomicBoolean updateTimeStamp = new AtomicBoolean(); - final AtomicBoolean update = new AtomicBoolean(); + boolean updateTimeStamp = false; + boolean update = false; for (ArmorsetSkillHolder holder : armorSet.getSkills()) { if (holder.validateConditions(player, armorSet, idProvider)) @@ -630,16 +653,16 @@ public abstract class Inventory extends ItemContainer player.disableSkill(itemSkill, equipDelay); } } - updateTimeStamp.compareAndSet(false, true); + updateTimeStamp = true; } - update.compareAndSet(false, true); + update = true; } } - if (updateTimeStamp.get()) + if (updateTimeStamp) { player.sendPacket(new SkillCoolTime(player)); } - return update.get(); + return update; } return false; } diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java index c77026eecb..408031251a 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java @@ -27,7 +27,6 @@ import java.util.List; import java.util.Objects; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Function; import java.util.function.Predicate; import java.util.logging.Level; @@ -49,6 +48,7 @@ import org.l2jmobius.gameserver.model.VariationInstance; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder; +import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; import org.l2jmobius.gameserver.model.items.EtcItem; import org.l2jmobius.gameserver.model.items.Item; import org.l2jmobius.gameserver.model.items.appearance.AppearanceStone; @@ -301,8 +301,8 @@ public abstract class Inventory extends ItemContainer final PlayerInstance player = (PlayerInstance) inventory.getOwner(); final Item it = item.getItem(); - final AtomicBoolean update = new AtomicBoolean(); - final AtomicBoolean updateTimestamp = new AtomicBoolean(); + boolean update = false; + boolean updateTimestamp = false; // Remove augmentation bonuses on unequip if (item.isAugmented()) @@ -313,15 +313,19 @@ public abstract class Inventory extends ItemContainer // Recalculate all stats player.getStat().recalculateStats(true); - it.forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List onEnchantSkills = it.getSkills(ItemSkillType.ON_ENCHANT); + if (onEnchantSkills != null) { - // Remove skills bestowed from +4 armor - if (item.getEnchantLevel() >= holder.getValue()) + for (ItemSkillHolder holder : onEnchantSkills) { - player.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); - update.compareAndSet(false, true); + // Remove skills bestowed from +4 armor + if (item.getEnchantLevel() >= holder.getValue()) + { + player.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); + update = true; + } } - }); + } // Clear enchant bonus item.clearEnchantStats(); @@ -329,31 +333,40 @@ public abstract class Inventory extends ItemContainer // Clear SA Bonus item.clearSpecialAbilities(); - it.forEachSkill(ItemSkillType.NORMAL, holder -> + final List normalSkills = it.getSkills(ItemSkillType.NORMAL); + if (normalSkills != null) { - final Skill Skill = holder.getSkill(); - - if (Skill != null) + for (ItemSkillHolder holder : normalSkills) { - player.removeSkill(Skill, false, Skill.isPassive()); - update.compareAndSet(false, true); + final Skill skill = holder.getSkill(); + if (skill != null) + { + player.removeSkill(skill, false, skill.isPassive()); + update = true; + } + else + { + LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); + } } - else - { - LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); - } - }); + } if (item.isArmor()) { for (ItemInstance itm : inventory.getItems()) { - if (!itm.isEquipped() || (itm.getItem().getSkills(ItemSkillType.NORMAL) == null) || itm.equals(item)) + if (!itm.isEquipped() || itm.equals(item)) { continue; } - itm.getItem().forEachSkill(ItemSkillType.NORMAL, holder -> + final List otherNormalSkills = itm.getItem().getSkills(ItemSkillType.NORMAL); + if (otherNormalSkills == null) + { + continue; + } + + for (ItemSkillHolder holder : otherNormalSkills) { if (player.getSkillLevel(holder.getSkillId()) != 0) { @@ -364,30 +377,32 @@ public abstract class Inventory extends ItemContainer if (skill != null) { player.addSkill(skill, false); - - if (skill.isActive()) + if (skill.isActive() && !player.hasSkillReuse(skill.getReuseHashCode())) { - if (!player.hasSkillReuse(skill.getReuseHashCode())) + final int equipDelay = item.getEquipReuseDelay(); + if (equipDelay > 0) { - final int equipDelay = item.getEquipReuseDelay(); - if (equipDelay > 0) - { - player.addTimeStamp(skill, equipDelay); - player.disableSkill(skill, equipDelay); - } - updateTimestamp.compareAndSet(false, true); + player.addTimeStamp(skill, equipDelay); + player.disableSkill(skill, equipDelay); } + updateTimestamp = true; } - update.compareAndSet(false, true); + update = true; } - }); + } } } // Must check all equipped items for enchant conditions. for (ItemInstance equipped : inventory.getPaperdollItems()) { - equipped.getItem().forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List otherEnchantSkills = equipped.getItem().getSkills(ItemSkillType.ON_ENCHANT); + if (otherEnchantSkills == null) + { + continue; + } + + for (ItemSkillHolder holder : otherEnchantSkills) { // Add skills bestowed from +4 armor if (equipped.getEnchantLevel() >= holder.getValue()) @@ -397,11 +412,12 @@ public abstract class Inventory extends ItemContainer if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) { player.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); - update.compareAndSet(false, true); + update = true; } } - }); + } } + // Must check for toggle and isRemovedOnUnequipWeapon skill item conditions. for (Skill skill : player.getAllSkills()) { @@ -409,18 +425,18 @@ public abstract class Inventory extends ItemContainer || (it.isWeapon() && skill.isRemovedOnUnequipWeapon())) { player.stopSkillEffects(true, skill.getId()); - update.compareAndSet(false, true); + update = true; } } // Apply skill, if weapon have "skills on unequip" it.forEachSkill(ItemSkillType.ON_UNEQUIP, holder -> holder.getSkill().activateSkill(player, player)); - if (update.get()) + if (update) { player.sendSkillList(); } - if (updateTimestamp.get()) + if (updateTimestamp) { player.sendPacket(new SkillCoolTime(player)); } @@ -447,8 +463,8 @@ public abstract class Inventory extends ItemContainer return; } - final AtomicBoolean update = new AtomicBoolean(); - final AtomicBoolean updateTimestamp = new AtomicBoolean(); + boolean update = false; + boolean updateTimestamp = false; // Apply augmentation bonuses on equip if (item.isAugmented()) @@ -459,21 +475,25 @@ public abstract class Inventory extends ItemContainer // Recalculate all stats player.getStat().recalculateStats(true); - item.getItem().forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List onEnchantSkills = item.getItem().getSkills(ItemSkillType.ON_ENCHANT); + if (onEnchantSkills != null) { - // Add skills bestowed from +4 armor - if (item.getEnchantLevel() >= holder.getValue()) + for (ItemSkillHolder holder : onEnchantSkills) { - final Skill skill = holder.getSkill(); - // Check passive skill conditions. - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + // Add skills bestowed from +4 armor + if (item.getEnchantLevel() >= holder.getValue()) { - return; + final Skill skill = holder.getSkill(); + // Check passive skill conditions. + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + { + return; + } + player.addSkill(skill, false); + update = true; } - player.addSkill(skill, false); - update.compareAndSet(false, true); } - }); + } // Apply enchant stats item.applyEnchantStats(); @@ -481,21 +501,21 @@ public abstract class Inventory extends ItemContainer // Apply SA skill item.applySpecialAbilities(); - item.getItem().forEachSkill(ItemSkillType.NORMAL, holder -> + final List normalSkills = item.getItem().getSkills(ItemSkillType.NORMAL); + if (normalSkills != null) { - final Skill skill = holder.getSkill(); - if (skill != null) + for (ItemSkillHolder holder : normalSkills) { - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + final Skill skill = holder.getSkill(); + if (skill != null) { - return; - } - - player.addSkill(skill, false); - - if (skill.isActive()) - { - if (!player.hasSkillReuse(skill.getReuseHashCode())) + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + { + return; + } + + player.addSkill(skill, false); + if (skill.isActive() && !player.hasSkillReuse(skill.getReuseHashCode())) { final int equipDelay = item.getEquipReuseDelay(); if (equipDelay > 0) @@ -503,21 +523,27 @@ public abstract class Inventory extends ItemContainer player.addTimeStamp(skill, equipDelay); player.disableSkill(skill, equipDelay); } - updateTimestamp.compareAndSet(false, true); + updateTimestamp = true; } + update = true; + } + else + { + LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); } - update.compareAndSet(false, true); } - else - { - LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); - } - }); + } // Must check all equipped items for enchant conditions. for (ItemInstance equipped : inventory.getPaperdollItems()) { - equipped.getItem().forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List otherEnchantSkills = equipped.getItem().getSkills(ItemSkillType.ON_ENCHANT); + if (otherEnchantSkills == null) + { + continue; + } + + for (ItemSkillHolder holder : otherEnchantSkills) { // Add skills bestowed from +4 armor if (equipped.getEnchantLevel() >= holder.getValue()) @@ -529,19 +555,19 @@ public abstract class Inventory extends ItemContainer return; } player.addSkill(skill, false); - update.compareAndSet(false, true); + update = true; } - }); + } } // Apply skill, if weapon have "skills on equip" item.getItem().forEachSkill(ItemSkillType.ON_EQUIP, holder -> holder.getSkill().activateSkill(player, player)); - if (update.get()) + if (update) { player.sendSkillList(); } - if (updateTimestamp.get()) + if (updateTimestamp) { player.sendPacket(new SkillCoolTime(player)); } @@ -579,12 +605,9 @@ public abstract class Inventory extends ItemContainer if (itemVisualId > 0) { final AppearanceStone stone = AppearanceItemData.getInstance().getStone(itemVisualId); - if (stone != null) + if ((stone != null) && (stone.getType() == AppearanceType.FIXED) && verifyAndApply(player, item, ItemInstance::getVisualId)) { - if ((stone.getType() == AppearanceType.FIXED) && verifyAndApply(player, item, ItemInstance::getVisualId)) - { - update = true; - } + update = true; } } @@ -605,8 +628,8 @@ public abstract class Inventory extends ItemContainer if (piecesCount >= armorSet.getMinimumPieces()) { // Applying all skills that matching the conditions - final AtomicBoolean updateTimeStamp = new AtomicBoolean(); - final AtomicBoolean update = new AtomicBoolean(); + boolean updateTimeStamp = false; + boolean update = false; for (ArmorsetSkillHolder holder : armorSet.getSkills()) { if (holder.validateConditions(player, armorSet, idProvider)) @@ -635,16 +658,16 @@ public abstract class Inventory extends ItemContainer player.disableSkill(itemSkill, equipDelay); } } - updateTimeStamp.compareAndSet(false, true); + updateTimeStamp = true; } - update.compareAndSet(false, true); + update = true; } } - if (updateTimeStamp.get()) + if (updateTimeStamp) { player.sendPacket(new SkillCoolTime(player)); } - return update.get(); + return update; } return false; } diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java index 6e48d78ee0..2cbefcf301 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java @@ -27,7 +27,6 @@ import java.util.List; import java.util.Objects; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Function; import java.util.function.Predicate; import java.util.logging.Level; @@ -49,6 +48,7 @@ import org.l2jmobius.gameserver.model.VariationInstance; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder; +import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; import org.l2jmobius.gameserver.model.items.EtcItem; import org.l2jmobius.gameserver.model.items.Item; import org.l2jmobius.gameserver.model.items.appearance.AppearanceStone; @@ -324,8 +324,8 @@ public abstract class Inventory extends ItemContainer final PlayerInstance player = (PlayerInstance) inventory.getOwner(); final Item it = item.getItem(); - final AtomicBoolean update = new AtomicBoolean(); - final AtomicBoolean updateTimestamp = new AtomicBoolean(); + boolean update = false; + boolean updateTimestamp = false; // Remove augmentation bonuses on unequip if (item.isAugmented()) @@ -336,15 +336,19 @@ public abstract class Inventory extends ItemContainer // Recalculate all stats player.getStat().recalculateStats(true); - it.forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List onEnchantSkills = it.getSkills(ItemSkillType.ON_ENCHANT); + if (onEnchantSkills != null) { - // Remove skills bestowed from +4 armor - if (item.getEnchantLevel() >= holder.getValue()) + for (ItemSkillHolder holder : onEnchantSkills) { - player.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); - update.compareAndSet(false, true); + // Remove skills bestowed from +4 armor + if (item.getEnchantLevel() >= holder.getValue()) + { + player.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); + update = true; + } } - }); + } // Clear enchant bonus item.clearEnchantStats(); @@ -352,30 +356,40 @@ public abstract class Inventory extends ItemContainer // Clear SA Bonus item.clearSpecialAbilities(); - it.forEachSkill(ItemSkillType.NORMAL, holder -> + final List normalSkills = it.getSkills(ItemSkillType.NORMAL); + if (normalSkills != null) { - final Skill skill = holder.getSkill(); - if (skill != null) + for (ItemSkillHolder holder : normalSkills) { - player.removeSkill(skill, false, skill.isPassive()); - update.compareAndSet(false, true); + final Skill skill = holder.getSkill(); + if (skill != null) + { + player.removeSkill(skill, false, skill.isPassive()); + update = true; + } + else + { + LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); + } } - else - { - LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); - } - }); + } if (item.isArmor()) { for (ItemInstance itm : inventory.getItems()) { - if (!itm.isEquipped() || (itm.getItem().getSkills(ItemSkillType.NORMAL) == null) || itm.equals(item)) + if (!itm.isEquipped() || itm.equals(item)) { continue; } - itm.getItem().forEachSkill(ItemSkillType.NORMAL, holder -> + final List otherNormalSkills = itm.getItem().getSkills(ItemSkillType.NORMAL); + if (otherNormalSkills == null) + { + continue; + } + + for (ItemSkillHolder holder : otherNormalSkills) { if (player.getSkillLevel(holder.getSkillId()) != 0) { @@ -394,18 +408,24 @@ public abstract class Inventory extends ItemContainer player.addTimeStamp(skill, equipDelay); player.disableSkill(skill, equipDelay); } - updateTimestamp.compareAndSet(false, true); + updateTimestamp = true; } - update.compareAndSet(false, true); + update = true; } - }); + } } } // Must check all equipped items for enchant conditions. for (ItemInstance equipped : inventory.getPaperdollItems()) { - equipped.getItem().forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List otherEnchantSkills = equipped.getItem().getSkills(ItemSkillType.ON_ENCHANT); + if (otherEnchantSkills == null) + { + continue; + } + + for (ItemSkillHolder holder : otherEnchantSkills) { // Add skills bestowed from +4 armor if (equipped.getEnchantLevel() >= holder.getValue()) @@ -415,11 +435,12 @@ public abstract class Inventory extends ItemContainer if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) { player.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); - update.compareAndSet(false, true); + update = true; } } - }); + } } + // Must check for toggle and isRemovedOnUnequipWeapon skill item conditions. for (Skill skill : player.getAllSkills()) { @@ -427,18 +448,18 @@ public abstract class Inventory extends ItemContainer || (it.isWeapon() && skill.isRemovedOnUnequipWeapon())) { player.stopSkillEffects(true, skill.getId()); - update.compareAndSet(false, true); + update = true; } } // Apply skill, if weapon have "skills on unequip" it.forEachSkill(ItemSkillType.ON_UNEQUIP, holder -> holder.getSkill().activateSkill(player, player)); - if (update.get()) + if (update) { player.sendSkillList(); } - if (updateTimestamp.get()) + if (updateTimestamp) { player.sendPacket(new SkillCoolTime(player)); } @@ -465,8 +486,8 @@ public abstract class Inventory extends ItemContainer return; } - final AtomicBoolean update = new AtomicBoolean(); - final AtomicBoolean updateTimestamp = new AtomicBoolean(); + boolean update = false; + boolean updateTimestamp = false; // Apply augmentation bonuses on equip if (item.isAugmented()) @@ -477,21 +498,25 @@ public abstract class Inventory extends ItemContainer // Recalculate all stats player.getStat().recalculateStats(true); - item.getItem().forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List onEnchantSkills = item.getItem().getSkills(ItemSkillType.ON_ENCHANT); + if (onEnchantSkills != null) { - // Add skills bestowed from +4 armor - if (item.getEnchantLevel() >= holder.getValue()) + for (ItemSkillHolder holder : onEnchantSkills) { - final Skill skill = holder.getSkill(); - // Check passive skill conditions. - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + // Add skills bestowed from +4 armor + if (item.getEnchantLevel() >= holder.getValue()) { - return; + final Skill skill = holder.getSkill(); + // Check passive skill conditions. + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + { + return; + } + player.addSkill(skill, false); + update = true; } - player.addSkill(skill, false); - update.compareAndSet(false, true); } - }); + } // Apply enchant stats item.applyEnchantStats(); @@ -499,39 +524,49 @@ public abstract class Inventory extends ItemContainer // Apply SA skill item.applySpecialAbilities(); - item.getItem().forEachSkill(ItemSkillType.NORMAL, holder -> + final List normalSkills = item.getItem().getSkills(ItemSkillType.NORMAL); + if (normalSkills != null) { - final Skill skill = holder.getSkill(); - if (skill != null) + for (ItemSkillHolder holder : normalSkills) { - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + final Skill skill = holder.getSkill(); + if (skill != null) { - return; - } - - player.addSkill(skill, false); - if (skill.isActive() && !player.hasSkillReuse(skill.getReuseHashCode())) - { - final int equipDelay = item.getEquipReuseDelay(); - if (equipDelay > 0) + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) { - player.addTimeStamp(skill, equipDelay); - player.disableSkill(skill, equipDelay); + return; } - updateTimestamp.compareAndSet(false, true); + + player.addSkill(skill, false); + if (skill.isActive() && !player.hasSkillReuse(skill.getReuseHashCode())) + { + final int equipDelay = item.getEquipReuseDelay(); + if (equipDelay > 0) + { + player.addTimeStamp(skill, equipDelay); + player.disableSkill(skill, equipDelay); + } + updateTimestamp = true; + } + update = true; + } + else + { + LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); } - update.compareAndSet(false, true); } - else - { - LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); - } - }); + } // Must check all equipped items for enchant conditions. for (ItemInstance equipped : inventory.getPaperdollItems()) { - equipped.getItem().forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List otherEnchantSkills = equipped.getItem().getSkills(ItemSkillType.ON_ENCHANT); + if (otherEnchantSkills == null) + { + continue; + } + + for (ItemSkillHolder holder : otherEnchantSkills) { // Add skills bestowed from +4 armor if (equipped.getEnchantLevel() >= holder.getValue()) @@ -543,19 +578,19 @@ public abstract class Inventory extends ItemContainer return; } player.addSkill(skill, false); - update.compareAndSet(false, true); + update = true; } - }); + } } // Apply skill, if weapon have "skills on equip" item.getItem().forEachSkill(ItemSkillType.ON_EQUIP, holder -> holder.getSkill().activateSkill(player, player)); - if (update.get()) + if (update) { player.sendSkillList(); } - if (updateTimestamp.get()) + if (updateTimestamp) { player.sendPacket(new SkillCoolTime(player)); } @@ -616,8 +651,8 @@ public abstract class Inventory extends ItemContainer if (piecesCount >= armorSet.getMinimumPieces()) { // Applying all skills that matching the conditions - final AtomicBoolean updateTimeStamp = new AtomicBoolean(); - final AtomicBoolean update = new AtomicBoolean(); + boolean updateTimeStamp = false; + boolean update = false; for (ArmorsetSkillHolder holder : armorSet.getSkills()) { if (holder.validateConditions(player, armorSet, idProvider)) @@ -646,16 +681,16 @@ public abstract class Inventory extends ItemContainer player.disableSkill(itemSkill, equipDelay); } } - updateTimeStamp.compareAndSet(false, true); + updateTimeStamp = true; } - update.compareAndSet(false, true); + update = true; } } - if (updateTimeStamp.get()) + if (updateTimeStamp) { player.sendPacket(new SkillCoolTime(player)); } - return update.get(); + return update; } return false; } diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java index 6e48d78ee0..2cbefcf301 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java @@ -27,7 +27,6 @@ import java.util.List; import java.util.Objects; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Function; import java.util.function.Predicate; import java.util.logging.Level; @@ -49,6 +48,7 @@ import org.l2jmobius.gameserver.model.VariationInstance; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder; +import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; import org.l2jmobius.gameserver.model.items.EtcItem; import org.l2jmobius.gameserver.model.items.Item; import org.l2jmobius.gameserver.model.items.appearance.AppearanceStone; @@ -324,8 +324,8 @@ public abstract class Inventory extends ItemContainer final PlayerInstance player = (PlayerInstance) inventory.getOwner(); final Item it = item.getItem(); - final AtomicBoolean update = new AtomicBoolean(); - final AtomicBoolean updateTimestamp = new AtomicBoolean(); + boolean update = false; + boolean updateTimestamp = false; // Remove augmentation bonuses on unequip if (item.isAugmented()) @@ -336,15 +336,19 @@ public abstract class Inventory extends ItemContainer // Recalculate all stats player.getStat().recalculateStats(true); - it.forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List onEnchantSkills = it.getSkills(ItemSkillType.ON_ENCHANT); + if (onEnchantSkills != null) { - // Remove skills bestowed from +4 armor - if (item.getEnchantLevel() >= holder.getValue()) + for (ItemSkillHolder holder : onEnchantSkills) { - player.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); - update.compareAndSet(false, true); + // Remove skills bestowed from +4 armor + if (item.getEnchantLevel() >= holder.getValue()) + { + player.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); + update = true; + } } - }); + } // Clear enchant bonus item.clearEnchantStats(); @@ -352,30 +356,40 @@ public abstract class Inventory extends ItemContainer // Clear SA Bonus item.clearSpecialAbilities(); - it.forEachSkill(ItemSkillType.NORMAL, holder -> + final List normalSkills = it.getSkills(ItemSkillType.NORMAL); + if (normalSkills != null) { - final Skill skill = holder.getSkill(); - if (skill != null) + for (ItemSkillHolder holder : normalSkills) { - player.removeSkill(skill, false, skill.isPassive()); - update.compareAndSet(false, true); + final Skill skill = holder.getSkill(); + if (skill != null) + { + player.removeSkill(skill, false, skill.isPassive()); + update = true; + } + else + { + LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); + } } - else - { - LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); - } - }); + } if (item.isArmor()) { for (ItemInstance itm : inventory.getItems()) { - if (!itm.isEquipped() || (itm.getItem().getSkills(ItemSkillType.NORMAL) == null) || itm.equals(item)) + if (!itm.isEquipped() || itm.equals(item)) { continue; } - itm.getItem().forEachSkill(ItemSkillType.NORMAL, holder -> + final List otherNormalSkills = itm.getItem().getSkills(ItemSkillType.NORMAL); + if (otherNormalSkills == null) + { + continue; + } + + for (ItemSkillHolder holder : otherNormalSkills) { if (player.getSkillLevel(holder.getSkillId()) != 0) { @@ -394,18 +408,24 @@ public abstract class Inventory extends ItemContainer player.addTimeStamp(skill, equipDelay); player.disableSkill(skill, equipDelay); } - updateTimestamp.compareAndSet(false, true); + updateTimestamp = true; } - update.compareAndSet(false, true); + update = true; } - }); + } } } // Must check all equipped items for enchant conditions. for (ItemInstance equipped : inventory.getPaperdollItems()) { - equipped.getItem().forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List otherEnchantSkills = equipped.getItem().getSkills(ItemSkillType.ON_ENCHANT); + if (otherEnchantSkills == null) + { + continue; + } + + for (ItemSkillHolder holder : otherEnchantSkills) { // Add skills bestowed from +4 armor if (equipped.getEnchantLevel() >= holder.getValue()) @@ -415,11 +435,12 @@ public abstract class Inventory extends ItemContainer if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) { player.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); - update.compareAndSet(false, true); + update = true; } } - }); + } } + // Must check for toggle and isRemovedOnUnequipWeapon skill item conditions. for (Skill skill : player.getAllSkills()) { @@ -427,18 +448,18 @@ public abstract class Inventory extends ItemContainer || (it.isWeapon() && skill.isRemovedOnUnequipWeapon())) { player.stopSkillEffects(true, skill.getId()); - update.compareAndSet(false, true); + update = true; } } // Apply skill, if weapon have "skills on unequip" it.forEachSkill(ItemSkillType.ON_UNEQUIP, holder -> holder.getSkill().activateSkill(player, player)); - if (update.get()) + if (update) { player.sendSkillList(); } - if (updateTimestamp.get()) + if (updateTimestamp) { player.sendPacket(new SkillCoolTime(player)); } @@ -465,8 +486,8 @@ public abstract class Inventory extends ItemContainer return; } - final AtomicBoolean update = new AtomicBoolean(); - final AtomicBoolean updateTimestamp = new AtomicBoolean(); + boolean update = false; + boolean updateTimestamp = false; // Apply augmentation bonuses on equip if (item.isAugmented()) @@ -477,21 +498,25 @@ public abstract class Inventory extends ItemContainer // Recalculate all stats player.getStat().recalculateStats(true); - item.getItem().forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List onEnchantSkills = item.getItem().getSkills(ItemSkillType.ON_ENCHANT); + if (onEnchantSkills != null) { - // Add skills bestowed from +4 armor - if (item.getEnchantLevel() >= holder.getValue()) + for (ItemSkillHolder holder : onEnchantSkills) { - final Skill skill = holder.getSkill(); - // Check passive skill conditions. - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + // Add skills bestowed from +4 armor + if (item.getEnchantLevel() >= holder.getValue()) { - return; + final Skill skill = holder.getSkill(); + // Check passive skill conditions. + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + { + return; + } + player.addSkill(skill, false); + update = true; } - player.addSkill(skill, false); - update.compareAndSet(false, true); } - }); + } // Apply enchant stats item.applyEnchantStats(); @@ -499,39 +524,49 @@ public abstract class Inventory extends ItemContainer // Apply SA skill item.applySpecialAbilities(); - item.getItem().forEachSkill(ItemSkillType.NORMAL, holder -> + final List normalSkills = item.getItem().getSkills(ItemSkillType.NORMAL); + if (normalSkills != null) { - final Skill skill = holder.getSkill(); - if (skill != null) + for (ItemSkillHolder holder : normalSkills) { - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + final Skill skill = holder.getSkill(); + if (skill != null) { - return; - } - - player.addSkill(skill, false); - if (skill.isActive() && !player.hasSkillReuse(skill.getReuseHashCode())) - { - final int equipDelay = item.getEquipReuseDelay(); - if (equipDelay > 0) + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) { - player.addTimeStamp(skill, equipDelay); - player.disableSkill(skill, equipDelay); + return; } - updateTimestamp.compareAndSet(false, true); + + player.addSkill(skill, false); + if (skill.isActive() && !player.hasSkillReuse(skill.getReuseHashCode())) + { + final int equipDelay = item.getEquipReuseDelay(); + if (equipDelay > 0) + { + player.addTimeStamp(skill, equipDelay); + player.disableSkill(skill, equipDelay); + } + updateTimestamp = true; + } + update = true; + } + else + { + LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); } - update.compareAndSet(false, true); } - else - { - LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); - } - }); + } // Must check all equipped items for enchant conditions. for (ItemInstance equipped : inventory.getPaperdollItems()) { - equipped.getItem().forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List otherEnchantSkills = equipped.getItem().getSkills(ItemSkillType.ON_ENCHANT); + if (otherEnchantSkills == null) + { + continue; + } + + for (ItemSkillHolder holder : otherEnchantSkills) { // Add skills bestowed from +4 armor if (equipped.getEnchantLevel() >= holder.getValue()) @@ -543,19 +578,19 @@ public abstract class Inventory extends ItemContainer return; } player.addSkill(skill, false); - update.compareAndSet(false, true); + update = true; } - }); + } } // Apply skill, if weapon have "skills on equip" item.getItem().forEachSkill(ItemSkillType.ON_EQUIP, holder -> holder.getSkill().activateSkill(player, player)); - if (update.get()) + if (update) { player.sendSkillList(); } - if (updateTimestamp.get()) + if (updateTimestamp) { player.sendPacket(new SkillCoolTime(player)); } @@ -616,8 +651,8 @@ public abstract class Inventory extends ItemContainer if (piecesCount >= armorSet.getMinimumPieces()) { // Applying all skills that matching the conditions - final AtomicBoolean updateTimeStamp = new AtomicBoolean(); - final AtomicBoolean update = new AtomicBoolean(); + boolean updateTimeStamp = false; + boolean update = false; for (ArmorsetSkillHolder holder : armorSet.getSkills()) { if (holder.validateConditions(player, armorSet, idProvider)) @@ -646,16 +681,16 @@ public abstract class Inventory extends ItemContainer player.disableSkill(itemSkill, equipDelay); } } - updateTimeStamp.compareAndSet(false, true); + updateTimeStamp = true; } - update.compareAndSet(false, true); + update = true; } } - if (updateTimeStamp.get()) + if (updateTimeStamp) { player.sendPacket(new SkillCoolTime(player)); } - return update.get(); + return update; } return false; } diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java index f8e9fab268..b1f72168e8 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java @@ -27,7 +27,6 @@ import java.util.List; import java.util.Objects; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Function; import java.util.function.Predicate; import java.util.logging.Level; @@ -49,6 +48,7 @@ import org.l2jmobius.gameserver.model.VariationInstance; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder; +import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; import org.l2jmobius.gameserver.model.items.EtcItem; import org.l2jmobius.gameserver.model.items.Item; import org.l2jmobius.gameserver.model.items.appearance.AppearanceStone; @@ -324,8 +324,8 @@ public abstract class Inventory extends ItemContainer final PlayerInstance player = (PlayerInstance) inventory.getOwner(); final Item it = item.getItem(); - final AtomicBoolean update = new AtomicBoolean(); - final AtomicBoolean updateTimestamp = new AtomicBoolean(); + boolean update = false; + boolean updateTimestamp = false; // Remove augmentation bonuses on unequip if (item.isAugmented()) @@ -336,15 +336,19 @@ public abstract class Inventory extends ItemContainer // Recalculate all stats player.getStat().recalculateStats(true); - it.forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List onEnchantSkills = it.getSkills(ItemSkillType.ON_ENCHANT); + if (onEnchantSkills != null) { - // Remove skills bestowed from +4 armor - if (item.getEnchantLevel() >= holder.getValue()) + for (ItemSkillHolder holder : onEnchantSkills) { - player.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); - update.compareAndSet(false, true); + // Remove skills bestowed from +4 armor + if (item.getEnchantLevel() >= holder.getValue()) + { + player.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); + update = true; + } } - }); + } // Clear enchant bonus item.clearEnchantStats(); @@ -352,30 +356,40 @@ public abstract class Inventory extends ItemContainer // Clear SA Bonus item.clearSpecialAbilities(); - it.forEachSkill(ItemSkillType.NORMAL, holder -> + final List normalSkills = it.getSkills(ItemSkillType.NORMAL); + if (normalSkills != null) { - final Skill skill = holder.getSkill(); - if (skill != null) + for (ItemSkillHolder holder : normalSkills) { - player.removeSkill(skill, false, skill.isPassive()); - update.compareAndSet(false, true); + final Skill skill = holder.getSkill(); + if (skill != null) + { + player.removeSkill(skill, false, skill.isPassive()); + update = true; + } + else + { + LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); + } } - else - { - LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); - } - }); + } if (item.isArmor()) { for (ItemInstance itm : inventory.getItems()) { - if (!itm.isEquipped() || (itm.getItem().getSkills(ItemSkillType.NORMAL) == null) || itm.equals(item)) + if (!itm.isEquipped() || itm.equals(item)) { continue; } - itm.getItem().forEachSkill(ItemSkillType.NORMAL, holder -> + final List otherNormalSkills = itm.getItem().getSkills(ItemSkillType.NORMAL); + if (otherNormalSkills == null) + { + continue; + } + + for (ItemSkillHolder holder : otherNormalSkills) { if (player.getSkillLevel(holder.getSkillId()) != 0) { @@ -394,18 +408,24 @@ public abstract class Inventory extends ItemContainer player.addTimeStamp(skill, equipDelay); player.disableSkill(skill, equipDelay); } - updateTimestamp.compareAndSet(false, true); + updateTimestamp = true; } - update.compareAndSet(false, true); + update = true; } - }); + } } } // Must check all equipped items for enchant conditions. for (ItemInstance equipped : inventory.getPaperdollItems()) { - equipped.getItem().forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List otherEnchantSkills = equipped.getItem().getSkills(ItemSkillType.ON_ENCHANT); + if (otherEnchantSkills == null) + { + continue; + } + + for (ItemSkillHolder holder : otherEnchantSkills) { // Add skills bestowed from +4 armor if (equipped.getEnchantLevel() >= holder.getValue()) @@ -415,11 +435,12 @@ public abstract class Inventory extends ItemContainer if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) { player.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); - update.compareAndSet(false, true); + update = true; } } - }); + } } + // Must check for toggle and isRemovedOnUnequipWeapon skill item conditions. for (Skill skill : player.getAllSkills()) { @@ -427,18 +448,18 @@ public abstract class Inventory extends ItemContainer || (it.isWeapon() && skill.isRemovedOnUnequipWeapon())) { player.stopSkillEffects(true, skill.getId()); - update.compareAndSet(false, true); + update = true; } } // Apply skill, if weapon have "skills on unequip" it.forEachSkill(ItemSkillType.ON_UNEQUIP, holder -> holder.getSkill().activateSkill(player, player)); - if (update.get()) + if (update) { player.sendSkillList(); } - if (updateTimestamp.get()) + if (updateTimestamp) { player.sendPacket(new SkillCoolTime(player)); } @@ -458,8 +479,8 @@ public abstract class Inventory extends ItemContainer } final PlayerInstance player = (PlayerInstance) inventory.getOwner(); - final AtomicBoolean update = new AtomicBoolean(); - final AtomicBoolean updateTimestamp = new AtomicBoolean(); + boolean update = false; + boolean updateTimestamp = false; // Apply augmentation bonuses on equip if (item.isAugmented()) @@ -470,21 +491,25 @@ public abstract class Inventory extends ItemContainer // Recalculate all stats player.getStat().recalculateStats(true); - item.getItem().forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List onEnchantSkills = item.getItem().getSkills(ItemSkillType.ON_ENCHANT); + if (onEnchantSkills != null) { - // Add skills bestowed from +4 armor - if (item.getEnchantLevel() >= holder.getValue()) + for (ItemSkillHolder holder : onEnchantSkills) { - final Skill skill = holder.getSkill(); - // Check passive skill conditions. - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + // Add skills bestowed from +4 armor + if (item.getEnchantLevel() >= holder.getValue()) { - return; + final Skill skill = holder.getSkill(); + // Check passive skill conditions. + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + { + return; + } + player.addSkill(skill, false); + update = true; } - player.addSkill(skill, false); - update.compareAndSet(false, true); } - }); + } // Apply enchant stats item.applyEnchantStats(); @@ -492,39 +517,49 @@ public abstract class Inventory extends ItemContainer // Apply SA skill item.applySpecialAbilities(); - item.getItem().forEachSkill(ItemSkillType.NORMAL, holder -> + final List normalSkills = item.getItem().getSkills(ItemSkillType.NORMAL); + if (normalSkills != null) { - final Skill skill = holder.getSkill(); - if (skill != null) + for (ItemSkillHolder holder : normalSkills) { - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + final Skill skill = holder.getSkill(); + if (skill != null) { - return; - } - - player.addSkill(skill, false); - if (skill.isActive() && !player.hasSkillReuse(skill.getReuseHashCode())) - { - final int equipDelay = item.getEquipReuseDelay(); - if (equipDelay > 0) + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) { - player.addTimeStamp(skill, equipDelay); - player.disableSkill(skill, equipDelay); + return; } - updateTimestamp.compareAndSet(false, true); + + player.addSkill(skill, false); + if (skill.isActive() && !player.hasSkillReuse(skill.getReuseHashCode())) + { + final int equipDelay = item.getEquipReuseDelay(); + if (equipDelay > 0) + { + player.addTimeStamp(skill, equipDelay); + player.disableSkill(skill, equipDelay); + } + updateTimestamp = true; + } + update = true; + } + else + { + LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); } - update.compareAndSet(false, true); } - else - { - LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); - } - }); + } // Must check all equipped items for enchant conditions. for (ItemInstance equipped : inventory.getPaperdollItems()) { - equipped.getItem().forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List otherEnchantSkills = equipped.getItem().getSkills(ItemSkillType.ON_ENCHANT); + if (otherEnchantSkills == null) + { + continue; + } + + for (ItemSkillHolder holder : otherEnchantSkills) { // Add skills bestowed from +4 armor if (equipped.getEnchantLevel() >= holder.getValue()) @@ -536,19 +571,19 @@ public abstract class Inventory extends ItemContainer return; } player.addSkill(skill, false); - update.compareAndSet(false, true); + update = true; } - }); + } } // Apply skill, if weapon have "skills on equip" item.getItem().forEachSkill(ItemSkillType.ON_EQUIP, holder -> holder.getSkill().activateSkill(player, player)); - if (update.get()) + if (update) { player.sendSkillList(); } - if (updateTimestamp.get()) + if (updateTimestamp) { player.sendPacket(new SkillCoolTime(player)); } @@ -609,8 +644,8 @@ public abstract class Inventory extends ItemContainer if (piecesCount >= armorSet.getMinimumPieces()) { // Applying all skills that matching the conditions - final AtomicBoolean updateTimeStamp = new AtomicBoolean(); - final AtomicBoolean update = new AtomicBoolean(); + boolean updateTimeStamp = false; + boolean update = false; for (ArmorsetSkillHolder holder : armorSet.getSkills()) { if (holder.validateConditions(player, armorSet, idProvider)) @@ -639,16 +674,16 @@ public abstract class Inventory extends ItemContainer player.disableSkill(itemSkill, equipDelay); } } - updateTimeStamp.compareAndSet(false, true); + updateTimeStamp = true; } - update.compareAndSet(false, true); + update = true; } } - if (updateTimeStamp.get()) + if (updateTimeStamp) { player.sendPacket(new SkillCoolTime(player)); } - return update.get(); + return update; } return false; } diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java index a2c08181dd..28249b4e90 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/itemcontainer/Inventory.java @@ -27,7 +27,6 @@ import java.util.List; import java.util.Objects; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Function; import java.util.function.Predicate; import java.util.logging.Level; @@ -49,6 +48,7 @@ import org.l2jmobius.gameserver.model.VariationInstance; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.holders.ArmorsetSkillHolder; +import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; import org.l2jmobius.gameserver.model.items.EtcItem; import org.l2jmobius.gameserver.model.items.Item; import org.l2jmobius.gameserver.model.items.appearance.AppearanceStone; @@ -296,8 +296,8 @@ public abstract class Inventory extends ItemContainer final PlayerInstance player = (PlayerInstance) inventory.getOwner(); final Item it = item.getItem(); - final AtomicBoolean update = new AtomicBoolean(); - final AtomicBoolean updateTimestamp = new AtomicBoolean(); + boolean update = false; + boolean updateTimestamp = false; // Remove augmentation bonuses on unequip if (item.isAugmented()) @@ -308,15 +308,19 @@ public abstract class Inventory extends ItemContainer // Recalculate all stats player.getStat().recalculateStats(true); - it.forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List onEnchantSkills = it.getSkills(ItemSkillType.ON_ENCHANT); + if (onEnchantSkills != null) { - // Remove skills bestowed from +4 armor - if (item.getEnchantLevel() >= holder.getValue()) + for (ItemSkillHolder holder : onEnchantSkills) { - player.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); - update.compareAndSet(false, true); + // Remove skills bestowed from +4 armor + if (item.getEnchantLevel() >= holder.getValue()) + { + player.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); + update = true; + } } - }); + } // Clear enchant bonus item.clearEnchantStats(); @@ -324,31 +328,40 @@ public abstract class Inventory extends ItemContainer // Clear SA Bonus item.clearSpecialAbilities(); - it.forEachSkill(ItemSkillType.NORMAL, holder -> + final List normalSkills = it.getSkills(ItemSkillType.NORMAL); + if (normalSkills != null) { - final Skill Skill = holder.getSkill(); - - if (Skill != null) + for (ItemSkillHolder holder : normalSkills) { - player.removeSkill(Skill, false, Skill.isPassive()); - update.compareAndSet(false, true); + final Skill skill = holder.getSkill(); + if (skill != null) + { + player.removeSkill(skill, false, skill.isPassive()); + update = true; + } + else + { + LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); + } } - else - { - LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); - } - }); + } if (item.isArmor()) { for (ItemInstance itm : inventory.getItems()) { - if (!itm.isEquipped() || (itm.getItem().getSkills(ItemSkillType.NORMAL) == null) || itm.equals(item)) + if (!itm.isEquipped() || itm.equals(item)) { continue; } - itm.getItem().forEachSkill(ItemSkillType.NORMAL, holder -> + final List otherNormalSkills = itm.getItem().getSkills(ItemSkillType.NORMAL); + if (otherNormalSkills == null) + { + continue; + } + + for (ItemSkillHolder holder : otherNormalSkills) { if (player.getSkillLevel(holder.getSkillId()) != 0) { @@ -359,30 +372,32 @@ public abstract class Inventory extends ItemContainer if (skill != null) { player.addSkill(skill, false); - - if (skill.isActive()) + if (skill.isActive() && !player.hasSkillReuse(skill.getReuseHashCode())) { - if (!player.hasSkillReuse(skill.getReuseHashCode())) + final int equipDelay = item.getEquipReuseDelay(); + if (equipDelay > 0) { - final int equipDelay = item.getEquipReuseDelay(); - if (equipDelay > 0) - { - player.addTimeStamp(skill, equipDelay); - player.disableSkill(skill, equipDelay); - } - updateTimestamp.compareAndSet(false, true); + player.addTimeStamp(skill, equipDelay); + player.disableSkill(skill, equipDelay); } + updateTimestamp = true; } - update.compareAndSet(false, true); + update = true; } - }); + } } } // Must check all equipped items for enchant conditions. for (ItemInstance equipped : inventory.getPaperdollItems()) { - equipped.getItem().forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List otherEnchantSkills = equipped.getItem().getSkills(ItemSkillType.ON_ENCHANT); + if (otherEnchantSkills == null) + { + continue; + } + + for (ItemSkillHolder holder : otherEnchantSkills) { // Add skills bestowed from +4 armor if (equipped.getEnchantLevel() >= holder.getValue()) @@ -392,11 +407,12 @@ public abstract class Inventory extends ItemContainer if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) { player.removeSkill(holder.getSkill(), false, holder.getSkill().isPassive()); - update.compareAndSet(false, true); + update = true; } } - }); + } } + // Must check for toggle and isRemovedOnUnequipWeapon skill item conditions. for (Skill skill : player.getAllSkills()) { @@ -404,18 +420,18 @@ public abstract class Inventory extends ItemContainer || (it.isWeapon() && skill.isRemovedOnUnequipWeapon())) { player.stopSkillEffects(true, skill.getId()); - update.compareAndSet(false, true); + update = true; } } // Apply skill, if weapon have "skills on unequip" it.forEachSkill(ItemSkillType.ON_UNEQUIP, holder -> holder.getSkill().activateSkill(player, player)); - if (update.get()) + if (update) { player.sendSkillList(); } - if (updateTimestamp.get()) + if (updateTimestamp) { player.sendPacket(new SkillCoolTime(player)); } @@ -442,8 +458,8 @@ public abstract class Inventory extends ItemContainer return; } - final AtomicBoolean update = new AtomicBoolean(); - final AtomicBoolean updateTimestamp = new AtomicBoolean(); + boolean update = false; + boolean updateTimestamp = false; // Apply augmentation bonuses on equip if (item.isAugmented()) @@ -454,21 +470,25 @@ public abstract class Inventory extends ItemContainer // Recalculate all stats player.getStat().recalculateStats(true); - item.getItem().forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List onEnchantSkills = item.getItem().getSkills(ItemSkillType.ON_ENCHANT); + if (onEnchantSkills != null) { - // Add skills bestowed from +4 armor - if (item.getEnchantLevel() >= holder.getValue()) + for (ItemSkillHolder holder : onEnchantSkills) { - final Skill skill = holder.getSkill(); - // Check passive skill conditions. - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + // Add skills bestowed from +4 armor + if (item.getEnchantLevel() >= holder.getValue()) { - return; + final Skill skill = holder.getSkill(); + // Check passive skill conditions. + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + { + return; + } + player.addSkill(skill, false); + update = true; } - player.addSkill(skill, false); - update.compareAndSet(false, true); } - }); + } // Apply enchant stats item.applyEnchantStats(); @@ -476,21 +496,21 @@ public abstract class Inventory extends ItemContainer // Apply SA skill item.applySpecialAbilities(); - item.getItem().forEachSkill(ItemSkillType.NORMAL, holder -> + final List normalSkills = item.getItem().getSkills(ItemSkillType.NORMAL); + if (normalSkills != null) { - final Skill skill = holder.getSkill(); - if (skill != null) + for (ItemSkillHolder holder : normalSkills) { - if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + final Skill skill = holder.getSkill(); + if (skill != null) { - return; - } - - player.addSkill(skill, false); - - if (skill.isActive()) - { - if (!player.hasSkillReuse(skill.getReuseHashCode())) + if (skill.isPassive() && !skill.checkConditions(SkillConditionScope.PASSIVE, player, player)) + { + return; + } + + player.addSkill(skill, false); + if (skill.isActive() && !player.hasSkillReuse(skill.getReuseHashCode())) { final int equipDelay = item.getEquipReuseDelay(); if (equipDelay > 0) @@ -498,21 +518,27 @@ public abstract class Inventory extends ItemContainer player.addTimeStamp(skill, equipDelay); player.disableSkill(skill, equipDelay); } - updateTimestamp.compareAndSet(false, true); + updateTimestamp = true; } + update = true; + } + else + { + LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); } - update.compareAndSet(false, true); } - else - { - LOGGER.warning("Inventory.ItemSkillsListener.Weapon: Incorrect skill: " + holder); - } - }); + } // Must check all equipped items for enchant conditions. for (ItemInstance equipped : inventory.getPaperdollItems()) { - equipped.getItem().forEachSkill(ItemSkillType.ON_ENCHANT, holder -> + final List otherEnchantSkills = equipped.getItem().getSkills(ItemSkillType.ON_ENCHANT); + if (otherEnchantSkills == null) + { + continue; + } + + for (ItemSkillHolder holder : otherEnchantSkills) { // Add skills bestowed from +4 armor if (equipped.getEnchantLevel() >= holder.getValue()) @@ -524,19 +550,19 @@ public abstract class Inventory extends ItemContainer return; } player.addSkill(skill, false); - update.compareAndSet(false, true); + update = true; } - }); + } } // Apply skill, if weapon have "skills on equip" item.getItem().forEachSkill(ItemSkillType.ON_EQUIP, holder -> holder.getSkill().activateSkill(player, player)); - if (update.get()) + if (update) { player.sendSkillList(); } - if (updateTimestamp.get()) + if (updateTimestamp) { player.sendPacket(new SkillCoolTime(player)); } @@ -574,12 +600,9 @@ public abstract class Inventory extends ItemContainer if (itemVisualId > 0) { final AppearanceStone stone = AppearanceItemData.getInstance().getStone(itemVisualId); - if (stone != null) + if ((stone != null) && (stone.getType() == AppearanceType.FIXED) && verifyAndApply(player, item, ItemInstance::getVisualId)) { - if ((stone.getType() == AppearanceType.FIXED) && verifyAndApply(player, item, ItemInstance::getVisualId)) - { - update = true; - } + update = true; } } @@ -600,8 +623,8 @@ public abstract class Inventory extends ItemContainer if (piecesCount >= armorSet.getMinimumPieces()) { // Applying all skills that matching the conditions - final AtomicBoolean updateTimeStamp = new AtomicBoolean(); - final AtomicBoolean update = new AtomicBoolean(); + boolean updateTimeStamp = false; + boolean update = false; for (ArmorsetSkillHolder holder : armorSet.getSkills()) { if (holder.validateConditions(player, armorSet, idProvider)) @@ -630,16 +653,16 @@ public abstract class Inventory extends ItemContainer player.disableSkill(itemSkill, equipDelay); } } - updateTimeStamp.compareAndSet(false, true); + updateTimeStamp = true; } - update.compareAndSet(false, true); + update = true; } } - if (updateTimeStamp.get()) + if (updateTimeStamp) { player.sendPacket(new SkillCoolTime(player)); } - return update.get(); + return update; } return false; }