3131
3232import java .io .IOException ;
3333import java .util .*;
34+ import java .util .concurrent .ConcurrentHashMap ;
3435
3536public class KitManager {
3637 private static KitManager instance ;
3738 private final PerPlayerKit plugin ;
38- private final HashMap <String , ItemStack []> kitByKitIDMap ;
39+ private final Map <String , ItemStack []> kitByKitIDMap ;
3940 private final HashMap <UUID , Integer > lastKitUsedByPlayer ;
4041 private final List <PublicKit > publicKitList ;
4142
4243 public KitManager (PerPlayerKit plugin ) {
4344 this .plugin = plugin ;
4445 lastKitUsedByPlayer = new HashMap <>();
4546 publicKitList = new ArrayList <>();
46- kitByKitIDMap = new HashMap <>();
47+ kitByKitIDMap = new ConcurrentHashMap <>();
4748 instance = this ;
4849 }
4950
@@ -58,6 +59,15 @@ public ItemStack[] getItemStackArrayById(String id) {
5859 return kitByKitIDMap .get (id );
5960 }
6061
62+ private void cacheKit (String id , ItemStack [] kit ) {
63+ if (kit == null ) {
64+ kitByKitIDMap .remove (id );
65+ return ;
66+ }
67+
68+ kitByKitIDMap .put (id , kit );
69+ }
70+
6171 public List <PublicKit > getPublicKitList () {
6272 return publicKitList ;
6373 }
@@ -104,7 +114,7 @@ public boolean savekit(UUID uuid, int slot, ItemStack[] kit) {
104114 }
105115 }
106116
107- kitByKitIDMap . put (IDUtil .getPlayerKitId (uuid , slot ), kit );
117+ cacheKit (IDUtil .getPlayerKitId (uuid , slot ), kit );
108118 player .sendMessage (ChatColor .GREEN + "Kit " + slot + " saved!" );
109119
110120 Bukkit .getScheduler ().runTaskAsynchronously (plugin , () -> savePlayerKitToDB (uuid , slot ));
@@ -149,7 +159,7 @@ public boolean savePublicKit(Player player, String publickit, ItemStack[] kit) {
149159 }
150160 }
151161
152- kitByKitIDMap . put (IDUtil .getPublicKitId (publickit ), kit );
162+ cacheKit (IDUtil .getPublicKitId (publickit ), kit );
153163 player .sendMessage (ChatColor .GREEN + "Public Kit " + publickit + " saved!" );
154164
155165 Bukkit .getScheduler ().runTaskAsynchronously (plugin , () -> savePublicKitToDB (publickit ));
@@ -192,7 +202,7 @@ public boolean savePublicKit(String id, ItemStack[] kit) {
192202 }
193203 }
194204
195- kitByKitIDMap . put (IDUtil .getPublicKitId (id ), kit );
205+ cacheKit (IDUtil .getPublicKitId (id ), kit );
196206 return true ;
197207 }
198208 return false ;
@@ -212,7 +222,7 @@ public boolean saveEC(UUID uuid, int slot, ItemStack[] kit) {
212222 }
213223
214224 if (notEmpty ) {
215- kitByKitIDMap . put (IDUtil .getECId (uuid , slot ), kit );
225+ cacheKit (IDUtil .getECId (uuid , slot ), kit );
216226 player .sendMessage (ChatColor .GREEN + "Enderchest " + slot + " saved!" );
217227 Bukkit .getScheduler ().runTaskAsynchronously (plugin , () -> saveEnderchestToDB (uuid , slot ));
218228 return true ;
@@ -237,7 +247,7 @@ public boolean saveECSilent(UUID uuid, int slot, ItemStack[] kit) {
237247 return false ;
238248 }
239249
240- kitByKitIDMap . put (IDUtil .getECId (uuid , slot ), kit );
250+ cacheKit (IDUtil .getECId (uuid , slot ), kit );
241251 Bukkit .getScheduler ().runTaskAsynchronously (plugin , () -> saveEnderchestToDB (uuid , slot ));
242252 return true ;
243253 }
@@ -269,7 +279,7 @@ public boolean savekit(UUID uuid, int slot, ItemStack[] kit, boolean silent) {
269279 kit [39 ] = null ;
270280 }
271281
272- kitByKitIDMap . put (IDUtil .getPlayerKitId (uuid , slot ), ItemFilter .get ().filterItemStack (kit ));
282+ cacheKit (IDUtil .getPlayerKitId (uuid , slot ), ItemFilter .get ().filterItemStack (kit ));
273283 Bukkit .getScheduler ().runTaskAsynchronously (plugin , () -> savePlayerKitToDB (uuid , slot ));
274284 return true ;
275285 } else {
@@ -436,7 +446,8 @@ public void loadPlayerDataFromDB(UUID uuid) {
436446 if (!data .equalsIgnoreCase ("error" )) {
437447 try {
438448 ItemStack [] kit = Serializer .itemStackArrayFromBase64 (data );
439- kitByKitIDMap .put (IDUtil .getPlayerKitId (uuid , slot ), ItemFilter .get ().filterItemStack (Serializer .itemStackArrayFromBase64 (data )));
449+ cacheKit (IDUtil .getPlayerKitId (uuid , slot ),
450+ ItemFilter .get ().filterItemStack (kit ));
440451 } catch (IOException ignored ) {
441452 }
442453 }
@@ -446,7 +457,8 @@ public void loadPlayerDataFromDB(UUID uuid) {
446457 if (!data .equalsIgnoreCase ("error" )) {
447458 try {
448459 ItemStack [] kit = Serializer .itemStackArrayFromBase64 (data );
449- kitByKitIDMap .put (IDUtil .getECId (uuid , slot ), ItemFilter .get ().filterItemStack (Serializer .itemStackArrayFromBase64 (data )));
460+ cacheKit (IDUtil .getECId (uuid , slot ),
461+ ItemFilter .get ().filterItemStack (kit ));
450462 } catch (IOException ignored ) {
451463 }
452464 }
@@ -486,7 +498,7 @@ public void loadPublicKitFromDB(String id) {
486498 if (!data .equalsIgnoreCase ("error" )) {
487499 try {
488500 ItemStack [] kit = Serializer .itemStackArrayFromBase64 (data );
489- kitByKitIDMap . put (IDUtil .getPublicKitId (id ), ItemFilter .get ().filterItemStack (kit ));
501+ cacheKit (IDUtil .getPublicKitId (id ), ItemFilter .get ().filterItemStack (kit ));
490502 } catch (IOException ignored ) {
491503 plugin .getLogger ().info ("Error loading public kit " + id );
492504 }
@@ -544,4 +556,4 @@ private void applyKitLoadEffects(Player player, boolean isEnderChest) {
544556 }
545557 }
546558 }
547- }
559+ }
0 commit comments