diff options
| author | shedaniel <daniel@shedaniel.me> | 2022-12-03 22:17:27 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2023-05-29 21:20:27 +0800 |
| commit | af7dc9ba10efdcd20f78f917cc66a8808c676785 (patch) | |
| tree | 0f7caa66af4fecb8ed5710dcf2b7a0dce44afda8 /runtime/src/main/java | |
| parent | 41f4a89ae61ace478c65b314892ee16f3a1c2b08 (diff) | |
| download | RoughlyEnoughItems-af7dc9ba10efdcd20f78f917cc66a8808c676785.tar.gz RoughlyEnoughItems-af7dc9ba10efdcd20f78f917cc66a8808c676785.tar.bz2 RoughlyEnoughItems-af7dc9ba10efdcd20f78f917cc66a8808c676785.zip | |
Add init progress to IME
Diffstat (limited to 'runtime/src/main/java')
4 files changed, 45 insertions, 22 deletions
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/ConfigReloadingScreen.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/ConfigReloadingScreen.java index 3d3895880..eac76c6ef 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/ConfigReloadingScreen.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/ConfigReloadingScreen.java @@ -29,14 +29,17 @@ import net.minecraft.client.gui.chat.NarratorChatListener; import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.chat.Component; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.Nullable; import java.util.function.BooleanSupplier; +import java.util.function.Supplier; @ApiStatus.Internal public class ConfigReloadingScreen extends Screen { private final Component title; private final BooleanSupplier predicate; - private Runnable parent; + private Supplier<@Nullable Component> subtitle = () -> null; + private final Runnable parent; public ConfigReloadingScreen(Component title, BooleanSupplier predicate, Runnable parent) { super(NarratorChatListener.NO_TITLE); @@ -45,6 +48,10 @@ public class ConfigReloadingScreen extends Screen { this.parent = parent; } + public void setSubtitle(Supplier<@Nullable Component> subtitle) { + this.subtitle = subtitle; + } + @Override public boolean shouldCloseOnEsc() { return false; @@ -57,21 +64,17 @@ public class ConfigReloadingScreen extends Screen { parent.run(); return; } - drawCenteredString(matrices, this.font, title, this.width / 2, this.height / 2 - 50, 16777215); - String text; - switch ((int) (Util.getMillis() / 300L % 4L)) { - case 0: - default: - text = "O o o"; - break; - case 1: - case 3: - text = "o O o"; - break; - case 2: - text = "o o O"; + drawCenteredString(matrices, this.font, title, this.width / 2, this.height / 2 - 50, 0xffffff); + String text = switch ((int) (Util.getMillis() / 300L % 4L)) { + case 1, 3 -> "o O o"; + case 2 -> "o o O"; + default -> "O o o"; + }; + drawCenteredString(matrices, this.font, text, this.width / 2, this.height / 2 - 50 + 9, 0x808080); + Component subtitle = this.subtitle.get(); + if (subtitle != null) { + drawCenteredString(matrices, this.font, subtitle, this.width / 2, this.height / 2 - 50 + 9 + 9, 0x808080); } - drawCenteredString(matrices, this.font, text, this.width / 2, this.height / 2 - 41, 8421504); super.render(matrices, mouseX, mouseY, delta); } } diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/CraftableFilterButtonWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/CraftableFilterButtonWidget.java index 66109858d..8423550bb 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/CraftableFilterButtonWidget.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/CraftableFilterButtonWidget.java @@ -51,6 +51,7 @@ import net.minecraft.client.renderer.entity.ItemRenderer; import net.minecraft.network.chat.TextComponent; import net.minecraft.network.chat.TranslatableComponent; import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Blocks; @@ -132,7 +133,8 @@ public class CraftableFilterButtonWidget { ConfigManagerImpl.getInstance().getConfig().setInputMethodId(new ResourceLocation("rei:default")); }).join(); - CompletableFuture<Void> future = pair.getValue().prepare(service).whenComplete((unused, throwable) -> { + double[] progress = {0}; + CompletableFuture<Void> future = pair.getValue().prepare(service, p -> progress[0] = Mth.clamp(p, 0, 1)).whenComplete((unused, throwable) -> { if (throwable != null) { InternalLogger.getInstance().error("Failed to prepare input method", throwable); ConfigManagerImpl.getInstance().getConfig().setInputMethodId(new ResourceLocation("rei:default")); @@ -141,10 +143,12 @@ public class CraftableFilterButtonWidget { } }); Screen screen = Minecraft.getInstance().screen; - Minecraft.getInstance().setScreen(new ConfigReloadingScreen(new TranslatableComponent("text.rei.input.methods.initializing"), + ConfigReloadingScreen reloadingScreen = new ConfigReloadingScreen(new TranslatableComponent("text.rei.input.methods.initializing"), () -> !future.isDone(), () -> { Minecraft.getInstance().setScreen(screen); - })); + }); + reloadingScreen.setSubtitle(() -> new TranslatableComponent("text.rei.input.methods.reload.progress", String.format("%.2f", progress[0] * 100))); + Minecraft.getInstance().setScreen(reloadingScreen); future.whenComplete((unused, throwable) -> { service.shutdown(); }); diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/search/method/unihan/UniHanInputMethod.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/search/method/unihan/UniHanInputMethod.java index 1402c54ba..91619f644 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/search/method/unihan/UniHanInputMethod.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/search/method/unihan/UniHanInputMethod.java @@ -50,9 +50,15 @@ public abstract class UniHanInputMethod implements InputMethod<IntList> { @Override public CompletableFuture<Void> prepare(Executor executor) { + return this.prepare(executor, p -> {}); + } + + @Override + public CompletableFuture<Void> prepare(Executor executor, ProgressCallback progressCallback) { return dispose(executor) - .thenRunAsync(manager::download, executor) - .thenRunAsync(this::load, executor); + .thenRunAsync(() -> manager.download(p -> progressCallback.onProgress(p * 0.99)), executor) + .thenRunAsync(this::load, executor) + .whenComplete((aVoid, throwable) -> progressCallback.onProgress(1.0)); } public void load() { diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/search/method/unihan/UniHanManager.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/search/method/unihan/UniHanManager.java index bf36fc130..f2f9a5b74 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/search/method/unihan/UniHanManager.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/search/method/unihan/UniHanManager.java @@ -23,6 +23,7 @@ package me.shedaniel.rei.impl.client.search.method.unihan; +import me.shedaniel.rei.api.client.search.method.InputMethod; import me.shedaniel.rei.impl.common.InternalLogger; import org.apache.commons.io.IOUtils; import org.apache.commons.io.LineIterator; @@ -50,10 +51,18 @@ public class UniHanManager { return Files.exists(unihanPath); } - public void download() { + public void download(InputMethod.ProgressCallback progressCallback) { + try { + download("https://www.shedaniel.moe/uoAqECzbQo5s.zip", progressCallback); + } catch (Exception e) { + download("https://www.unicode.org/Public/UCD/latest/ucd/Unihan.zip", progressCallback); + } + } + + public void download(String URL, InputMethod.ProgressCallback progressCallback) { if (downloaded()) return; try { - URL url = new URL("https://www.unicode.org/Public/UCD/latest/ucd/Unihan.zip"); + URL url = new URL("https://shedaniel.moe/uoAqECzbQo5s.zip"); Files.deleteIfExists(unihanPath); Path parent = unihanPath.getParent(); if (parent != null) Files.createDirectories(parent); @@ -74,6 +83,7 @@ public class UniHanManager { lastPercent = percent; InternalLogger.getInstance().debug("Downloading UniHan Progress: %d%%".formatted(percent)); } + progressCallback.onProgress(progress); bufferedStream.write(data, 0, x); } bufferedStream.close(); |
