From 73b9c21e3e2e93a466c028c7afcdf34898ef35e8 Mon Sep 17 00:00:00 2001 From: Lucwousin Date: Wed, 6 Nov 2019 13:33:52 +0100 Subject: [PATCH 1/2] Don't use a permanently-empty map when adding bones --- .../net/runelite/client/plugins/deathindicator/Bones.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/deathindicator/Bones.java b/runelite-client/src/main/java/net/runelite/client/plugins/deathindicator/Bones.java index 7b561dd63b..952d700d9f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/deathindicator/Bones.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/deathindicator/Bones.java @@ -3,7 +3,6 @@ import com.google.common.collect.ImmutableMap; import java.util.ArrayList; import java.util.Arrays; -import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -31,14 +30,14 @@ void init(Client client, ConfigManager configManager) Bone[][] bones = getBones(configManager, regions); if (log.isDebugEnabled()) { - log.debug("Regions are now {}", Arrays.toString(regions)); + log.trace("Regions are now {}", Arrays.toString(regions)); int n = 0; for (Bone[] ar : bones) { n += ar.length; } - log.debug("Loaded {} Bones", n); + log.debug("Loaded {} Bones", n); } initMap(regions, bones); @@ -81,7 +80,7 @@ private void initMap(int[] regions, Bone[][] bones) Bone[] boneA = bones[i]; if (boneA.length == 0) { - builder.put(region, Collections.EMPTY_MAP); + builder.put(region, new HashMap<>()); continue; } From 4b796bd012d4b3b3f7c788e7b0a714f7d8dd281b Mon Sep 17 00:00:00 2001 From: Lucwousin Date: Wed, 6 Nov 2019 14:14:13 +0100 Subject: [PATCH 2/2] Save bones when adding them, rather than on shutdown/region change --- .../client/plugins/deathindicator/Bones.java | 37 +++++++------------ .../deathindicator/DeathIndicatorPlugin.java | 27 ++++++++------ 2 files changed, 29 insertions(+), 35 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/deathindicator/Bones.java b/runelite-client/src/main/java/net/runelite/client/plugins/deathindicator/Bones.java index 952d700d9f..0b5e234fc9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/deathindicator/Bones.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/deathindicator/Bones.java @@ -21,7 +21,6 @@ public class Bones private static final String BONES_PREFIX = "bones_"; private ImmutableMap>> map; - private boolean changed = false; void init(Client client, ConfigManager configManager) { @@ -102,35 +101,29 @@ private void showBones(Scene scene) this.forEach(bone -> bone.addToScene(scene)); } - void save(ConfigManager configManager) + void save(ConfigManager configManager, int region) { - if (this.map == null || !changed) + final Map> regionBones = this.map.get(region); + if (regionBones == null) { - this.changed = false; return; } - for (Map.Entry>> entry : this.map.entrySet()) - { - final String key = BONES_PREFIX + entry.getKey(); - final Map> map = entry.getValue(); - if (map.size() == 0) - { - configManager.unsetConfiguration(CONFIG_GROUP, key); - continue; - } + final String key = BONES_PREFIX + region; - List list = new ArrayList<>(map.values().size()); - for (List lb : map.values()) - { - list.addAll(lb); - } + if (regionBones.size() == 0) + { + configManager.unsetConfiguration(CONFIG_GROUP, key); + } - String val = GSON.toJson(list.toArray(new Bone[0])); - configManager.setConfiguration(CONFIG_GROUP, key, val); + List list = new ArrayList<>(regionBones.values().size()); + for (List lb : regionBones.values()) + { + list.addAll(lb); } - this.changed = false; + String val = GSON.toJson(list.toArray(new Bone[0])); + configManager.setConfiguration(CONFIG_GROUP, key, val); } public boolean add(Bone bone) @@ -140,7 +133,6 @@ public boolean add(Bone bone) return false; } - this.changed = true; final int region = bone.getLoc().getRegionID(); final Map> map = this.map.get(region); final List list = map.computeIfAbsent(bone.getLoc(), wp -> new ArrayList<>()); @@ -150,7 +142,6 @@ public boolean add(Bone bone) public void remove(Bone bone) { - this.changed = true; final int region = bone.getLoc().getRegionID(); final Map> map = this.map.get(region); final List list = map.get(bone.getLoc()); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/deathindicator/DeathIndicatorPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/deathindicator/DeathIndicatorPlugin.java index 33ec854e8f..7dd7a6241e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/deathindicator/DeathIndicatorPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/deathindicator/DeathIndicatorPlugin.java @@ -182,7 +182,6 @@ protected void shutDown() worldMapPointManager.removeIf(DeathWorldMapPoint.class::isInstance); clientThread.invokeLater(this::clearBones); - saveBones(); } private void initBones() @@ -190,11 +189,6 @@ private void initBones() bones.init(client, configManager); } - private void saveBones() - { - bones.save(configManager); - } - private void clearBones() { bones.clear(client.getScene()); @@ -236,12 +230,16 @@ private void onPostItemDefinition(PostItemDefinition def) private void onPlayerDeath(PlayerDeath death) { - Player p = death.getPlayer(); + newBoneFor(death.getPlayer()); + } + + private void newBoneFor(Player player) + { Bone b = new Bone(); - b.setName(Text.sanitize(p.getName())); + b.setName(Text.sanitize(player.getName())); b.setTime(Instant.now()); - b.setLoc(p.getWorldLocation()); + b.setLoc(player.getWorldLocation()); while (!bones.add(b)) { @@ -249,6 +247,7 @@ private void onPlayerDeath(PlayerDeath death) } b.addToScene(client.getScene()); + bones.save(configManager, b.getLoc().getRegionID()); } private void onMenuEntryAdded(MenuEntryAdded event) @@ -309,7 +308,13 @@ private void onLocalPlayerDeath(LocalPlayerDeath death) return; } - lastDeath = client.getLocalPlayer().getWorldLocation(); + Player lp = client.getLocalPlayer(); + if (config.permaBones()) + { + newBoneFor(lp); + } + + lastDeath = lp.getWorldLocation(); lastDeathWorld = client.getWorld(); lastDeathTime = Instant.now(); } @@ -400,7 +405,6 @@ private void onConfigChanged(ConfigChanged event) if (client.getGameState() == GameState.LOGGED_IN) { clientThread.invokeLater(this::clearBones); - saveBones(); } } return; @@ -438,7 +442,6 @@ private void onGameStateChanged(GameStateChanged event) { case LOADING: clearBones(); - saveBones(); break; case LOGGED_IN: if (config.permaBones())