aboutsummaryrefslogtreecommitdiff
path: root/runtime/src/main/java
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2022-12-03 22:17:27 +0800
committershedaniel <daniel@shedaniel.me>2023-05-29 21:20:27 +0800
commitaf7dc9ba10efdcd20f78f917cc66a8808c676785 (patch)
tree0f7caa66af4fecb8ed5710dcf2b7a0dce44afda8 /runtime/src/main/java
parent41f4a89ae61ace478c65b314892ee16f3a1c2b08 (diff)
downloadRoughlyEnoughItems-af7dc9ba10efdcd20f78f917cc66a8808c676785.tar.gz
RoughlyEnoughItems-af7dc9ba10efdcd20f78f917cc66a8808c676785.tar.bz2
RoughlyEnoughItems-af7dc9ba10efdcd20f78f917cc66a8808c676785.zip
Add init progress to IME
Diffstat (limited to 'runtime/src/main/java')
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/ConfigReloadingScreen.java33
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/CraftableFilterButtonWidget.java10
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/search/method/unihan/UniHanInputMethod.java10
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/search/method/unihan/UniHanManager.java14
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();