diff --git a/src/main/java/com/xzavier0722/mc/plugin/slimefun4/storage/util/StorageCacheUtils.java b/src/main/java/com/xzavier0722/mc/plugin/slimefun4/storage/util/StorageCacheUtils.java index 728bc13091..537d549b1e 100644 --- a/src/main/java/com/xzavier0722/mc/plugin/slimefun4/storage/util/StorageCacheUtils.java +++ b/src/main/java/com/xzavier0722/mc/plugin/slimefun4/storage/util/StorageCacheUtils.java @@ -224,7 +224,15 @@ public static boolean isBlockPendingRemove(@Nonnull Block block) { return false; } - public static void requestLoad(ADataContainer data) { + public static void requestLoad(ASlimefunDataContainer data) { + if (data instanceof SlimefunBlockData blockData) { + requestLoad(blockData); + } else if (data instanceof SlimefunUniversalData uniData) { + requestLoad(uniData); + } + } + + public static void requestLoad(SlimefunBlockData data) { if (data.isDataLoaded()) { return; } @@ -240,25 +248,36 @@ public static void requestLoad(ADataContainer data) { loadingData.add(data); } - if (data instanceof SlimefunBlockData blockData) { - Slimefun.getDatabaseManager() - .getBlockDataController() - .loadBlockDataAsync(blockData, new IAsyncReadCallback<>() { - @Override - public void onResult(SlimefunBlockData result) { - loadingData.remove(data); - } - }); - } else if (data instanceof SlimefunUniversalData uniData) { - Slimefun.getDatabaseManager() - .getBlockDataController() - .loadUniversalDataAsync(uniData, new IAsyncReadCallback<>() { - @Override - public void onResult(SlimefunUniversalData result) { - loadingData.remove(data); - } - }); + Slimefun.getDatabaseManager().getBlockDataController().loadBlockDataAsync(data, new IAsyncReadCallback<>() { + @Override + public void onResult(SlimefunBlockData result) { + loadingData.remove(data); + } + }); + } + + public static void requestLoad(SlimefunUniversalBlockData data) { + if (data.isDataLoaded()) { + return; } + + if (loadingData.contains(data)) { + return; + } + + synchronized (loadingData) { + if (loadingData.contains(data)) { + return; + } + loadingData.add(data); + } + + Slimefun.getDatabaseManager().getBlockDataController().loadUniversalDataAsync(data, new IAsyncReadCallback<>() { + @Override + public void onResult(SlimefunUniversalData result) { + loadingData.remove(data); + } + }); } public static void executeAfterLoad(ASlimefunDataContainer data, Runnable execute, boolean runOnMainThread) {