From bf88afc64cab81b05ba1893d4eb0af986f19d87a Mon Sep 17 00:00:00 2001 From: StarWishsama Date: Wed, 15 Jan 2025 23:28:07 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BA=8C=E8=BF=9B=E5=88=B6=E5=85=BC?= =?UTF-8?q?=E5=AE=B9=20(#997)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../storage/util/StorageCacheUtils.java | 57 ++++++++++++------- 1 file changed, 38 insertions(+), 19 deletions(-) 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) {