Fix ConcurrentModification in party stats overlay

Fix concurrent modification exception in party stats overlay when
iterating map.

Signed-off-by: Tomas Slusny <slusnucky@gmail.com>
This commit is contained in:
Tomas Slusny
2019-02-01 20:55:00 +01:00
parent 92427968b0
commit f52c1d732b
2 changed files with 42 additions and 39 deletions

View File

@@ -119,7 +119,7 @@ public class PartyPlugin extends Plugin implements KeyListener
private ChatMessageManager chatMessageManager;
@Getter
private final Map<UUID, PartyData> partyDataMap = new HashMap<>();
private final Map<UUID, PartyData> partyDataMap = Collections.synchronizedMap(new HashMap<>());
@Getter
private final List<PartyTilePingData> pendingTilePings = Collections.synchronizedList(new ArrayList<>());

View File

@@ -80,54 +80,57 @@ public class PartyStatsOverlay extends Overlay
boolean only1 = plugin.getPartyDataMap().size() == 1;
partyDataMap.forEach((k, v) ->
synchronized (plugin.getPartyDataMap())
{
if (party.getLocalMember() != null && party.getLocalMember().getMemberId().equals(k))
partyDataMap.forEach((k, v) ->
{
if (only1)
if (party.getLocalMember() != null && party.getLocalMember().getMemberId().equals(k))
{
body.getChildren().add(TitleComponent.builder()
.text("No other party members")
.color(Color.RED)
.build());
if (only1)
{
body.getChildren().add(TitleComponent.builder()
.text("No other party members")
.color(Color.RED)
.build());
}
return;
}
return;
}
final PanelComponent panel = v.getPanel();
panel.getChildren().clear();
final PanelComponent panel = v.getPanel();
panel.getChildren().clear();
final TitleComponent name = TitleComponent.builder()
.text(v.getName())
.build();
final TitleComponent name = TitleComponent.builder()
.text(v.getName())
.build();
panel.getChildren().add(name);
panel.getChildren().add(name);
if (v.getHitpoints() > 0)
{
final ProgressBarComponent hpBar = new ProgressBarComponent();
hpBar.setBackgroundColor(HP_BG);
hpBar.setForegroundColor(HP_FG);
hpBar.setMaximum(v.getMaxHitpoints());
hpBar.setValue(v.getHitpoints());
hpBar.setLabelDisplayMode(ProgressBarComponent.LabelDisplayMode.FULL);
panel.getChildren().add(hpBar);
}
if (v.getHitpoints() > 0)
{
final ProgressBarComponent hpBar = new ProgressBarComponent();
hpBar.setBackgroundColor(HP_BG);
hpBar.setForegroundColor(HP_FG);
hpBar.setMaximum(v.getMaxHitpoints());
hpBar.setValue(v.getHitpoints());
hpBar.setLabelDisplayMode(ProgressBarComponent.LabelDisplayMode.FULL);
panel.getChildren().add(hpBar);
}
if (v.getPrayer() > 0)
{
final ProgressBarComponent prayBar = new ProgressBarComponent();
prayBar.setBackgroundColor(PRAY_BG);
prayBar.setForegroundColor(PRAY_FG);
prayBar.setMaximum(v.getMaxPrayer());
prayBar.setValue(v.getPrayer());
prayBar.setLabelDisplayMode(ProgressBarComponent.LabelDisplayMode.FULL);
panel.getChildren().add(prayBar);
}
if (v.getPrayer() > 0)
{
final ProgressBarComponent prayBar = new ProgressBarComponent();
prayBar.setBackgroundColor(PRAY_BG);
prayBar.setForegroundColor(PRAY_FG);
prayBar.setMaximum(v.getMaxPrayer());
prayBar.setValue(v.getPrayer());
prayBar.setLabelDisplayMode(ProgressBarComponent.LabelDisplayMode.FULL);
panel.getChildren().add(prayBar);
}
body.getChildren().add(panel);
});
body.getChildren().add(panel);
});
}
return body.render(graphics);
}