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; private ChatMessageManager chatMessageManager;
@Getter @Getter
private final Map<UUID, PartyData> partyDataMap = new HashMap<>(); private final Map<UUID, PartyData> partyDataMap = Collections.synchronizedMap(new HashMap<>());
@Getter @Getter
private final List<PartyTilePingData> pendingTilePings = Collections.synchronizedList(new ArrayList<>()); 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; 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() if (only1)
.text("No other party members") {
.color(Color.RED) body.getChildren().add(TitleComponent.builder()
.build()); .text("No other party members")
.color(Color.RED)
.build());
}
return;
} }
return; final PanelComponent panel = v.getPanel();
} panel.getChildren().clear();
final PanelComponent panel = v.getPanel(); final TitleComponent name = TitleComponent.builder()
panel.getChildren().clear(); .text(v.getName())
.build();
final TitleComponent name = TitleComponent.builder() panel.getChildren().add(name);
.text(v.getName())
.build();
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) if (v.getPrayer() > 0)
{ {
final ProgressBarComponent hpBar = new ProgressBarComponent(); final ProgressBarComponent prayBar = new ProgressBarComponent();
hpBar.setBackgroundColor(HP_BG); prayBar.setBackgroundColor(PRAY_BG);
hpBar.setForegroundColor(HP_FG); prayBar.setForegroundColor(PRAY_FG);
hpBar.setMaximum(v.getMaxHitpoints()); prayBar.setMaximum(v.getMaxPrayer());
hpBar.setValue(v.getHitpoints()); prayBar.setValue(v.getPrayer());
hpBar.setLabelDisplayMode(ProgressBarComponent.LabelDisplayMode.FULL); prayBar.setLabelDisplayMode(ProgressBarComponent.LabelDisplayMode.FULL);
panel.getChildren().add(hpBar); panel.getChildren().add(prayBar);
} }
if (v.getPrayer() > 0) body.getChildren().add(panel);
{ });
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);
});
return body.render(graphics); return body.render(graphics);
} }