Merge pull request #584 from SettingDust/bugfix/lighting-web-concurrent-modification

Try to fix lighting web concurrent modification
This commit is contained in:
Electroblob
2020-12-21 16:39:15 +00:00
committed by GitHub
@@ -64,35 +64,45 @@ public class LightningWeb extends SpellRay {
getProperty(SECONDARY_RANGE).floatValue(), target.posX, target.posY + target.height / 2, getProperty(SECONDARY_RANGE).floatValue(), target.posX, target.posY + target.height / 2,
target.posZ, world); target.posZ, world);
secondaryTargets.remove(target); secondaryTargets.stream()
secondaryTargets.removeIf(e -> !EntityUtils.isLiving(e)); .filter(entity -> !entity.equals(target))
secondaryTargets.removeIf(e -> !AllyDesignationSystem.isValidTarget(caster, e)); .filter(EntityUtils::isLiving)
if(secondaryTargets.size() > getProperty(SECONDARY_MAX_TARGETS).intValue()) .filter(e -> AllyDesignationSystem.isValidTarget(caster, e))
secondaryTargets = secondaryTargets.subList(0, getProperty(SECONDARY_MAX_TARGETS).intValue()); .limit(getProperty(SECONDARY_MAX_TARGETS).intValue())
.forEach(secondaryTarget -> {
for(EntityLivingBase secondaryTarget : secondaryTargets){ electrocute(world, caster,
target.getPositionVector().add(0, target.height / 2, 0),
electrocute(world, caster, target.getPositionVector().add(0, target.height/2, 0), secondaryTarget, secondaryTarget,
getProperty(SECONDARY_DAMAGE).floatValue() * modifiers.get(SpellModifiers.POTENCY), ticksInUse); getProperty(SECONDARY_DAMAGE).floatValue() * modifiers.get(SpellModifiers.POTENCY),
ticksInUse
);
// Tertiary chaining effect // Tertiary chaining effect
List<EntityLivingBase> tertiaryTargets = EntityUtils.getLivingWithinRadius( List<EntityLivingBase> tertiaryTargets =
getProperty(TERTIARY_RANGE).floatValue(), secondaryTarget.posX, EntityUtils.getLivingWithinRadius(
secondaryTarget.posY + secondaryTarget.height / 2, secondaryTarget.posZ, world); getProperty(TERTIARY_RANGE).floatValue(),
secondaryTarget.posX,
secondaryTarget.posY + secondaryTarget.height / 2,
secondaryTarget.posZ,
world
);
tertiaryTargets.remove(target); tertiaryTargets.stream()
tertiaryTargets.removeAll(secondaryTargets); .filter(entity -> !secondaryTargets.contains(entity))
tertiaryTargets.removeIf(e -> !EntityUtils.isLiving(e)); .filter(entity -> !entity.equals(target))
tertiaryTargets.removeIf(e -> !AllyDesignationSystem.isValidTarget(caster, e)); .filter(EntityUtils::isLiving)
if(tertiaryTargets.size() > getProperty(TERTIARY_MAX_TARGETS).intValue()) .filter(e -> AllyDesignationSystem.isValidTarget(caster, e))
tertiaryTargets = tertiaryTargets.subList(0, getProperty(TERTIARY_MAX_TARGETS).intValue()); .limit(getProperty(TERTIARY_MAX_TARGETS).intValue())
.forEach(tertiaryTarget ->
for(EntityLivingBase tertiaryTarget : tertiaryTargets){ electrocute(world, caster,
electrocute(world, caster, secondaryTarget.getPositionVector().add(0, secondaryTarget.height/2, 0), secondaryTarget.getPositionVector().add(0, secondaryTarget.height / 2, 0),
tertiaryTarget, getProperty(TERTIARY_DAMAGE).floatValue() * modifiers.get(SpellModifiers.POTENCY), ticksInUse); tertiaryTarget,
} getProperty(TERTIARY_DAMAGE).floatValue() * modifiers.get(SpellModifiers.POTENCY),
} ticksInUse
)
);
});
} }
return true; return true;