diff options
| author | shedaniel <daniel@shedaniel.me> | 2023-10-23 21:45:09 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2023-10-23 21:50:43 +0800 |
| commit | 032a0ff4989fdb276e0b4c8b6b15bb60ac723bff (patch) | |
| tree | 0a67c603d9f7685b70745e00592c042b011454f7 | |
| parent | f216d7d0f5f90ccd4b501d16caefd46a1039231b (diff) | |
| download | RoughlyEnoughItems-032a0ff4989fdb276e0b4c8b6b15bb60ac723bff.tar.gz RoughlyEnoughItems-032a0ff4989fdb276e0b4c8b6b15bb60ac723bff.tar.bz2 RoughlyEnoughItems-032a0ff4989fdb276e0b4c8b6b15bb60ac723bff.zip | |
Close #1505
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())) |
