aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2023-10-23 21:45:09 +0800
committershedaniel <daniel@shedaniel.me>2023-10-23 21:50:43 +0800
commit032a0ff4989fdb276e0b4c8b6b15bb60ac723bff (patch)
tree0a67c603d9f7685b70745e00592c042b011454f7
parentf216d7d0f5f90ccd4b501d16caefd46a1039231b (diff)
downloadRoughlyEnoughItems-032a0ff4989fdb276e0b4c8b6b15bb60ac723bff.tar.gz
RoughlyEnoughItems-032a0ff4989fdb276e0b4c8b6b15bb60ac723bff.tar.bz2
RoughlyEnoughItems-032a0ff4989fdb276e0b4c8b6b15bb60ac723bff.zip
Close #1505
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/config/entries/ReloadPluginsEntry.java4
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/screen/ConfigReloadingScreen.java15
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/CraftableFilterButtonWidget.java12
3 files changed, 26 insertions, 5 deletions
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/config/entries/ReloadPluginsEntry.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/config/entries/ReloadPluginsEntry.java
index ed30fba94..adcd084ea 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/config/entries/ReloadPluginsEntry.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/config/entries/ReloadPluginsEntry.java
@@ -56,7 +56,7 @@ public class ReloadPluginsEntry extends AbstractConfigListEntry<Unit> {
public void render(PoseStack matrices, int mouseX, int mouseY, float delta) {
if (PluginManager.areAnyReloading()) {
Screen screen = Minecraft.getInstance().screen;
- Minecraft.getInstance().setScreen(new ConfigReloadingScreen(Component.translatable("text.rei.config.is.reloading"), PluginManager::areAnyReloading, () -> Minecraft.getInstance().setScreen(screen)));
+ Minecraft.getInstance().setScreen(new ConfigReloadingScreen(Component.translatable("text.rei.config.is.reloading"), PluginManager::areAnyReloading, () -> Minecraft.getInstance().setScreen(screen), null));
} else {
super.render(matrices, mouseX, mouseY, delta);
}
@@ -86,7 +86,7 @@ public class ReloadPluginsEntry extends AbstractConfigListEntry<Unit> {
@Override
public void save() {
-
+
}
@Override
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 7111c964c..4bfbad115 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
@@ -25,7 +25,9 @@ package me.shedaniel.rei.impl.client.gui.screen;
import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.Util;
+import net.minecraft.client.gui.components.Button;
import net.minecraft.client.gui.screens.Screen;
+import net.minecraft.network.chat.CommonComponents;
import net.minecraft.network.chat.Component;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.Nullable;
@@ -39,12 +41,14 @@ public class ConfigReloadingScreen extends Screen {
private final BooleanSupplier predicate;
private Supplier<@Nullable Component> subtitle = () -> null;
private final Runnable parent;
+ private final Runnable cancel;
- public ConfigReloadingScreen(Component title, BooleanSupplier predicate, Runnable parent) {
+ public ConfigReloadingScreen(Component title, BooleanSupplier predicate, Runnable parent, Runnable cancel) {
super(Component.empty());
this.title = title;
this.predicate = predicate;
this.parent = parent;
+ this.cancel = cancel;
}
public void setSubtitle(Supplier<@Nullable Component> subtitle) {
@@ -57,6 +61,15 @@ public class ConfigReloadingScreen extends Screen {
}
@Override
+ public void init() {
+ super.init();
+ if (cancel == null) return;
+ this.addRenderableWidget(new Button(this.width / 2 - 100, this.height / 4 + 120 + 12, 200, 20, CommonComponents.GUI_CANCEL, button -> {
+ cancel.run();
+ }));
+ }
+
+ @Override
public void render(PoseStack matrices, int mouseX, int mouseY, float delta) {
this.renderDirtBackground(0);
if (!predicate.getAsBoolean()) {
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 71effe086..a4926f524 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
@@ -24,6 +24,7 @@
package me.shedaniel.rei.impl.client.gui.widget;
import com.mojang.math.Vector4f;
+import dev.architectury.platform.Platform;
import dev.architectury.utils.value.BooleanValue;
import me.shedaniel.math.Point;
import me.shedaniel.math.Rectangle;
@@ -150,15 +151,22 @@ public class CraftableFilterButtonWidget {
ConfigReloadingScreen reloadingScreen = new ConfigReloadingScreen(Component.translatable("text.rei.input.methods.initializing"),
() -> !future.isDone(), () -> {
Minecraft.getInstance().setScreen(screen);
+ }, () -> {
+ Minecraft.getInstance().setScreen(screen);
+ InternalLogger.getInstance().error("Failed to prepare input method: cancelled");
+ ConfigManagerImpl.getInstance().getConfig().setInputMethodId(new ResourceLocation("rei:default"));
+ future.cancel(Platform.isFabric());
+ service.shutdown();
});
reloadingScreen.setSubtitle(() -> Component.translatable("text.rei.input.methods.reload.progress", String.format("%.2f", progress[0] * 100)));
Minecraft.getInstance().setScreen(reloadingScreen);
access.close();
future.whenComplete((unused, throwable) -> {
service.shutdown();
+ if (throwable != null) return;
+ ScreenOverlayImpl.getInstance().getHintsContainer().addHint(12, () -> new Point(getCraftableFilterBounds().getCenterX(), getCraftableFilterBounds().getCenterY()),
+ "text.rei.hint.input.methods", List.of(Component.translatable("text.rei.hint.input.methods")));
});
- ScreenOverlayImpl.getInstance().getHintsContainer().addHint(12, () -> new Point(getCraftableFilterBounds().getCenterX(), getCraftableFilterBounds().getCenterY()),
- "text.rei.hint.input.methods", List.of(Component.translatable("text.rei.hint.input.methods")));
})
.withActive(() -> !Objects.equals(config.getInputMethodId(), pair.getKey()))
.withTooltip(() -> Tooltip.create(Widget.mouse(), pair.getValue().getDescription()))