Skip to content

Commit

Permalink
fix dupe glitch with backpacks (#4134)
Browse files Browse the repository at this point in the history
  • Loading branch information
J3fftw1 authored Feb 17, 2024
1 parent bf40206 commit 3301a77
Showing 1 changed file with 13 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -394,12 +394,18 @@ public static boolean get(@Nonnull OfflinePlayer p, @Nonnull Consumer<PlayerProf
loading.put(uuid, true);
Slimefun.getThreadService().newThread(Slimefun.instance(), "PlayerProfile#get(" + uuid + ")", () -> {
PlayerData data = Slimefun.getPlayerStorage().loadPlayerData(p.getUniqueId());
loading.remove(uuid);

AsyncProfileLoadEvent event = new AsyncProfileLoadEvent(new PlayerProfile(p, data));
Bukkit.getPluginManager().callEvent(event);

Slimefun.getRegistry().getPlayerProfiles().put(uuid, event.getProfile());

// Make sure we call this after we put the PlayerProfile into the registry.
// Otherwise, we end up with a race condition where the profile is not in the map just _yet_
// but the loading flag is gone and we can end up loading it a second time (and thus can dupe items)
// Fixes https://github.com/Slimefun/Slimefun4/issues/4130
loading.remove(uuid);

callback.accept(event.getProfile());
});

Expand Down Expand Up @@ -434,10 +440,15 @@ public static boolean request(@Nonnull OfflinePlayer p) {
// Should probably prevent multiple requests for the same profile in the future
Slimefun.getThreadService().newThread(Slimefun.instance(), "PlayerProfile#request(" + uuid + ")", () -> {
PlayerData data = Slimefun.getPlayerStorage().loadPlayerData(uuid);
loading.remove(uuid);

PlayerProfile pp = new PlayerProfile(p, data);
Slimefun.getRegistry().getPlayerProfiles().put(uuid, pp);

// Make sure we call this after we put the PlayerProfile into the registry.
// Otherwise, we end up with a race condition where the profile is not in the map just _yet_
// but the loading flag is gone and we can end up loading it a second time (and thus can dupe items)
// Fixes https://github.com/Slimefun/Slimefun4/issues/4130
loading.remove(uuid);
});

return false;
Expand Down

0 comments on commit 3301a77

Please sign in to comment.