diff options
| author | shedaniel <daniel@shedaniel.me> | 2023-10-23 21:52:30 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2023-10-23 21:53:29 +0800 |
| commit | 11278f48effaa9a7ccc212ce0a047e356d9c4859 (patch) | |
| tree | 14232c052a102a9ec50ea844ba3b9f9b0c294fc5 /runtime/src/main/java/me/shedaniel/rei/impl/client | |
| parent | b1e8b40fba11fc523eb514f3e7fa004cf9de6980 (diff) | |
| parent | 032a0ff4989fdb276e0b4c8b6b15bb60ac723bff (diff) | |
| download | RoughlyEnoughItems-11278f48effaa9a7ccc212ce0a047e356d9c4859.tar.gz RoughlyEnoughItems-11278f48effaa9a7ccc212ce0a047e356d9c4859.tar.bz2 RoughlyEnoughItems-11278f48effaa9a7ccc212ce0a047e356d9c4859.zip | |
Merge remote-tracking branch 'origin/9.x-1.19' into 11.x-1.19.4
# Conflicts:
# runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/CraftableFilterButtonWidget.java
# runtime/src/main/java/me/shedaniel/rei/impl/common/entry/type/EntryRegistryListImpl.java
Diffstat (limited to 'runtime/src/main/java/me/shedaniel/rei/impl/client')
8 files changed, 82 insertions, 48 deletions
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/config/entries/FilteringScreen.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/config/entries/FilteringScreen.java index 477fb0d00..6d528c50d 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/config/entries/FilteringScreen.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/config/entries/FilteringScreen.java @@ -248,7 +248,7 @@ public class FilteringScreen extends Screen { scrolling.renderScrollBar(0, 1.0F, REIRuntime.getInstance().isDarkThemeEnabled() ? 0.8F : 1F); matrices.pushPose(); matrices.translate(0, 0, 300); - this.searchField.laterRender(matrices, mouseX, mouseY, delta); + this.searchField.render(matrices, mouseX, mouseY, delta); this.selectAllButton.render(matrices, mouseX, mouseY, delta); this.selectNoneButton.render(matrices, mouseX, mouseY, delta); this.hideButton.render(matrices, mouseX, mouseY, delta); 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 9cc189f55..0ac3e13b4 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 @@ -57,7 +57,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); } @@ -87,7 +87,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 232239977..8b0abbebf 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(Button.builder(CommonComponents.GUI_CANCEL, button -> { + cancel.run(); + }).bounds(this.width / 2 - 100, this.height / 4 + 120 + 12, 200, 20).build()); + } + + @Override public void render(PoseStack matrices, int mouseX, int mouseY, float delta) { this.renderDirtBackground(matrices); 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 27624c69c..0796a374b 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 @@ -23,6 +23,7 @@ package me.shedaniel.rei.impl.client.gui.widget; +import dev.architectury.platform.Platform; import dev.architectury.utils.value.BooleanValue; import me.shedaniel.math.Point; import me.shedaniel.math.Rectangle; @@ -148,15 +149,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())) diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/screen/DefaultScreenOverlayRenderer.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/screen/DefaultScreenOverlayRenderer.java index 520b89bb7..8a76a0da3 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/screen/DefaultScreenOverlayRenderer.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/screen/DefaultScreenOverlayRenderer.java @@ -31,9 +31,7 @@ import me.shedaniel.rei.api.client.gui.screen.DisplayScreen; import me.shedaniel.rei.api.client.registry.screen.OverlayRendererProvider; import me.shedaniel.rei.impl.common.InternalLogger; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; - -import java.util.ArrayList; -import java.util.List; +import org.jetbrains.annotations.Nullable; import static me.shedaniel.rei.RoughlyEnoughItemsCoreClient.resetFocused; import static me.shedaniel.rei.RoughlyEnoughItemsCoreClient.shouldReturn; @@ -41,22 +39,50 @@ import static me.shedaniel.rei.RoughlyEnoughItemsCoreClient.shouldReturn; public enum DefaultScreenOverlayRenderer implements OverlayRendererProvider { INSTANCE; - private final List<Runnable> onRemoved = new ArrayList<>(); + @Nullable + private ClientGuiEvent.ScreenRenderPre renderPre; + @Nullable + private ClientGuiEvent.ContainerScreenRenderBackground renderContainerBg; + @Nullable + private ClientGuiEvent.ContainerScreenRenderForeground renderContainerFg; + @Nullable + private ClientGuiEvent.ScreenRenderPost renderPost; + + { + ClientGuiEvent.RENDER_PRE.register((screen, graphics, mouseX, mouseY, delta) -> { + if (renderPre != null) { + return renderPre.render(screen, graphics, mouseX, mouseY, delta); + } else { + return EventResult.pass(); + } + }); + ClientGuiEvent.RENDER_CONTAINER_BACKGROUND.register((screen, graphics, mouseX, mouseY, delta) -> { + if (renderContainerBg != null) { + renderContainerBg.render(screen, graphics, mouseX, mouseY, delta); + } + }); + ClientGuiEvent.RENDER_CONTAINER_FOREGROUND.register((screen, graphics, mouseX, mouseY, delta) -> { + if (renderContainerFg != null) { + renderContainerFg.render(screen, graphics, mouseX, mouseY, delta); + } + }); + ClientGuiEvent.RENDER_POST.register((screen, graphics, mouseX, mouseY, delta) -> { + if (renderPost != null) { + renderPost.render(screen, graphics, mouseX, mouseY, delta); + } + }); + } @Override public void onApplied(Sink sink) { int[] rendered = {0}; - ClientGuiEvent.ScreenRenderPre renderPre; - ClientGuiEvent.ContainerScreenRenderBackground renderContainerBg; - ClientGuiEvent.ContainerScreenRenderForeground renderContainerFg; - ClientGuiEvent.ScreenRenderPost renderPost; - ClientGuiEvent.RENDER_PRE.register(renderPre = (screen, matrices, mouseX, mouseY, delta) -> { + this.renderPre = (screen, matrices, mouseX, mouseY, delta) -> { if (shouldReturn(screen)) return EventResult.pass(); rendered[0] = 0; return EventResult.pass(); - }); - ClientGuiEvent.RENDER_CONTAINER_BACKGROUND.register(renderContainerBg = (screen, matrices, mouseX, mouseY, delta) -> { + }; + this.renderContainerBg = (screen, matrices, mouseX, mouseY, delta) -> { if (shouldReturn(screen)) return; rendered[0] = 1; @@ -65,8 +91,8 @@ public enum DefaultScreenOverlayRenderer implements OverlayRendererProvider { sink.render(matrices, mouseX, mouseY, delta); } resetFocused(screen); - }); - ClientGuiEvent.RENDER_CONTAINER_FOREGROUND.register(renderContainerFg = (screen, matrices, mouseX, mouseY, delta) -> { + }; + this.renderContainerFg = (screen, matrices, mouseX, mouseY, delta) -> { if (shouldReturn(screen)) return; rendered[0] = 2; @@ -79,8 +105,8 @@ public enum DefaultScreenOverlayRenderer implements OverlayRendererProvider { poseStack.popPose(); RenderSystem.applyModelViewMatrix(); resetFocused(screen); - }); - ClientGuiEvent.RENDER_POST.register(renderPost = (screen, matrices, mouseX, mouseY, delta) -> { + }; + this.renderPost = (screen, matrices, mouseX, mouseY, delta) -> { if (shouldReturn(screen) || rendered[0] == 2) return; if (screen instanceof AbstractContainerScreen) { @@ -95,18 +121,14 @@ public enum DefaultScreenOverlayRenderer implements OverlayRendererProvider { sink.lateRender(matrices, mouseX, mouseY, delta); } resetFocused(screen); - }); - this.onRemoved.add(() -> { - ClientGuiEvent.RENDER_PRE.unregister(renderPre); - ClientGuiEvent.RENDER_CONTAINER_BACKGROUND.unregister(renderContainerBg); - ClientGuiEvent.RENDER_CONTAINER_FOREGROUND.unregister(renderContainerFg); - ClientGuiEvent.RENDER_POST.unregister(renderPost); - }); + }; } @Override public void onRemoved() { - this.onRemoved.forEach(Runnable::run); - this.onRemoved.clear(); + this.renderPre = null; + this.renderContainerBg = null; + this.renderContainerFg = null; + this.renderPost = null; } } diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/search/AsyncSearchManager.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/search/AsyncSearchManager.java index c1ab15fba..8d1f6f056 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/search/AsyncSearchManager.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/search/AsyncSearchManager.java @@ -48,14 +48,14 @@ import java.util.function.UnaryOperator; public class AsyncSearchManager { private static final ExecutorService EXECUTOR_SERVICE = new ThreadCreator("REI-AsyncSearchManager").asService(Math.min(3, Runtime.getRuntime().availableProcessors())); - private final Supplier<List<HashedEntryStackWrapper>> stacksProvider; + private final Supplier<List<? extends HashedEntryStackWrapper>> stacksProvider; private final Supplier<Predicate<HashedEntryStackWrapper>> additionalPredicateSupplier; private final UnaryOperator<HashedEntryStackWrapper> transformer; private volatile Map.Entry<List<HashedEntryStackWrapper>, SearchFilter> last; public volatile ExecutorTuple executor; public volatile SearchFilter filter; - public AsyncSearchManager(Supplier<List<HashedEntryStackWrapper>> stacksProvider, Supplier<Predicate<HashedEntryStackWrapper>> additionalPredicateSupplier, UnaryOperator<HashedEntryStackWrapper> transformer) { + public AsyncSearchManager(Supplier<List<? extends HashedEntryStackWrapper>> stacksProvider, Supplier<Predicate<HashedEntryStackWrapper>> additionalPredicateSupplier, UnaryOperator<HashedEntryStackWrapper> transformer) { this.stacksProvider = stacksProvider; this.additionalPredicateSupplier = additionalPredicateSupplier; this.transformer = transformer; @@ -134,7 +134,7 @@ public class AsyncSearchManager { } public static CompletableFuture<Map.Entry<List<HashedEntryStackWrapper>, SearchFilter>> get(SearchFilter filter, Predicate<HashedEntryStackWrapper> additionalPredicate, - UnaryOperator<HashedEntryStackWrapper> transformer, List<HashedEntryStackWrapper> stacks, Map.Entry<List<HashedEntryStackWrapper>, SearchFilter> last, + UnaryOperator<HashedEntryStackWrapper> transformer, List<? extends HashedEntryStackWrapper> stacks, Map.Entry<List<HashedEntryStackWrapper>, SearchFilter> last, AsyncSearchManager manager, Executor executor, Steps steps) { int searchPartitionSize = ConfigObject.getInstance().getAsyncSearchPartitionSize(); boolean shouldAsync = ConfigObject.getInstance().shouldAsyncSearch() && stacks.size() > searchPartitionSize * 4; @@ -144,7 +144,7 @@ public class AsyncSearchManager { if (shouldAsync) { List<CompletableFuture<List<HashedEntryStackWrapper>>> futures = Lists.newArrayList(); int partitions = 0; - for (Iterable<HashedEntryStackWrapper> partitionStacks : CollectionUtils.partition(stacks, searchPartitionSize * 4)) { + for (Iterable<? extends HashedEntryStackWrapper> partitionStacks : CollectionUtils.partition(stacks, searchPartitionSize * 4)) { final int finalPartitions = partitions; futures.add(CompletableFuture.supplyAsync(() -> { List<HashedEntryStackWrapper> filtered = Lists.newArrayList(); diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/search/argument/Argument.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/search/argument/Argument.java index bd5034aa3..e0b7fd737 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/search/argument/Argument.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/search/argument/Argument.java @@ -24,7 +24,6 @@ package me.shedaniel.rei.impl.client.search.argument; import com.google.common.base.MoreObjects; -import com.google.common.collect.Iterators; import com.google.common.collect.Lists; import it.unimi.dsi.fastutil.ints.IntList; import it.unimi.dsi.fastutil.longs.Long2ObjectMap; @@ -33,12 +32,14 @@ import me.shedaniel.rei.api.client.registry.entry.EntryRegistry; import me.shedaniel.rei.api.client.search.method.CharacterUnpackingInputMethod; import me.shedaniel.rei.api.client.search.method.InputMethod; import me.shedaniel.rei.api.common.entry.EntryStack; +import me.shedaniel.rei.api.common.util.CollectionUtils; import me.shedaniel.rei.impl.client.search.IntRange; import me.shedaniel.rei.impl.client.search.argument.type.ArgumentType; import me.shedaniel.rei.impl.client.search.argument.type.ArgumentTypesRegistry; import me.shedaniel.rei.impl.client.search.collapsed.CollapsedEntriesCache; import me.shedaniel.rei.impl.client.search.result.ArgumentApplicableResult; import me.shedaniel.rei.impl.common.entry.type.EntryRegistryImpl; +import me.shedaniel.rei.impl.common.util.HNEntryStackWrapper; import me.shedaniel.rei.impl.common.util.HashedEntryStackWrapper; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; @@ -78,18 +79,8 @@ public class Argument<T, R> { public static void resetCache(boolean cache) { Argument.cache = new ArgumentCache(); CollapsedEntriesCache.reset(); - Collection<HashedEntryStackWrapper> stacks = new AbstractCollection<>() { - @Override - public Iterator<HashedEntryStackWrapper> iterator() { - return Iterators.transform(((EntryRegistryImpl) EntryRegistry.getInstance()).getComplexList().iterator(), - HashedEntryStackWrapper::normalize); - } - - @Override - public int size() { - return ((EntryRegistryImpl) EntryRegistry.getInstance()).getComplexList().size(); - } - }; + List<HashedEntryStackWrapper> stacks = CollectionUtils.map(((EntryRegistryImpl) EntryRegistry.getInstance()).getComplexList(), + HNEntryStackWrapper::normalize); if (cache) { Argument.cache.prepareFilter(stacks, ArgumentTypesRegistry.ARGUMENT_TYPE_LIST, ArgumentCache.EXECUTOR_SERVICE); } diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/search/collapsed/CollapsedEntriesCache.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/search/collapsed/CollapsedEntriesCache.java index fc7ada4e8..2f87b2295 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/search/collapsed/CollapsedEntriesCache.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/search/collapsed/CollapsedEntriesCache.java @@ -51,7 +51,7 @@ public class CollapsedEntriesCache { return instance; } - public void prepare(Collection<HashedEntryStackWrapper> stacks) { + public void prepare(Collection<? extends HashedEntryStackWrapper> stacks) { Collection<CollapsibleEntryRegistryImpl.Entry> entries = ((CollapsibleEntryRegistryImpl) CollapsibleEntryRegistry.getInstance()).getEntries(); InternalLogger.getInstance().debug("Preparing collapsed entry groups cache with %d entries and %d stacks", entries.size(), stacks.size()); |
