diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/pack/BukkitPackManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/pack/BukkitPackManager.java index b437a7c6b..74b5369bb 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/pack/BukkitPackManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/pack/BukkitPackManager.java @@ -73,9 +73,6 @@ public class BukkitPackManager extends AbstractPackManager implements Listener { this.modifyServerSettings(); } } - if (CraftEngine.instance().isInitializing()) { - resourcePackHost().upload(this.resourcePackPath()); - } } public void modifyServerSettings() { diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/LobFileHost.java b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/LobFileHost.java index 2d7a96f4d..56a8136f0 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/LobFileHost.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/LobFileHost.java @@ -10,12 +10,14 @@ import net.momirealms.craftengine.core.util.GsonHelper; import java.io.IOException; import java.io.InputStream; +import java.io.InputStreamReader; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.StandardOpenOption; import java.security.DigestInputStream; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; @@ -35,10 +37,52 @@ public class LobFileHost implements ResourcePackHost { public LobFileHost(String localFile, String apiKey) { this.forcedPackPath = localFile == null ? null : ResourcePackHost.customPackPath(localFile); this.apiKey = apiKey; + this.readCacheFromDisk(); } - public AccountInfo getAccountInfo() { - return accountInfo; + public void readCacheFromDisk() { + Path cachePath = CraftEngine.instance().dataFolderPath().resolve("lobfile.cache"); + if (!Files.exists(cachePath)) return; + + try (InputStream is = Files.newInputStream(cachePath)) { + Map cache = GsonHelper.get().fromJson( + new InputStreamReader(is), + new TypeToken>(){}.getType() + ); + + this.url = cache.get("url"); + this.sha1 = cache.get("sha1"); + + String uuidString = cache.get("uuid"); + if (uuidString != null && !uuidString.isEmpty()) { + this.uuid = UUID.fromString(uuidString); + } + + CraftEngine.instance().logger().info("[LobFile] Loaded cached resource pack info"); + } catch (Exception e) { + CraftEngine.instance().logger().warn( + "[LobFile] Failed to read cache file: " + e.getMessage()); + } + } + + public void saveCacheToDisk() { + Map cache = new HashMap<>(); + cache.put("url", this.url); + cache.put("sha1", this.sha1); + cache.put("uuid", this.uuid != null ? this.uuid.toString() : ""); + + Path cachePath = CraftEngine.instance().dataFolderPath().resolve("lobfile.cache"); + try { + Files.writeString( + cachePath, + GsonHelper.get().toJson(cache), + StandardOpenOption.CREATE, + StandardOpenOption.TRUNCATE_EXISTING + ); + } catch (IOException e) { + CraftEngine.instance().logger().warn( + "[LobFile] Failed to save cache: " + e.getMessage()); + } } public String getSpaceUsageText() { @@ -181,10 +225,11 @@ public class LobFileHost implements ResourcePackHost { this.url = (String) json.get("url"); this.sha1 = localSha1; this.uuid = UUID.randomUUID(); + saveCacheToDisk(); CraftEngine.instance().logger().info("[LobFile] Upload success! Resource pack URL: " + this.url); fetchAccountInfo() .thenAccept(info -> { - CraftEngine.instance().logger().info("[LobFile] Account Usage Updated: " + getSpaceUsageText()); + CraftEngine.instance().logger().info("[LobFile] Account usage updated: " + getSpaceUsageText()); future.complete(null); }) .exceptionally(ex -> { diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/SelfHost.java b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/SelfHost.java index e0700aacb..b50b1d34d 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/SelfHost.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/SelfHost.java @@ -16,6 +16,10 @@ public class SelfHost implements ResourcePackHost { public static final Factory FACTORY = new Factory(); private static final SelfHost INSTANCE = new SelfHost(); + public SelfHost() { + SelfHostHttpServer.instance().readResourcePack(CraftEngine.instance().packManager().resourcePackPath()); + } + @Override public CompletableFuture> requestResourcePackDownloadLink(UUID player) { ResourcePackDownloadData data = SelfHostHttpServer.instance().generateOneTimeUrl();