diff options
Diffstat (limited to 'runtime/src')
50 files changed, 4960 insertions, 726 deletions
diff --git a/runtime/src/main/java/me/shedaniel/rei/PluginDetector.java b/runtime/src/main/java/me/shedaniel/rei/PluginDetector.java index 56d7c65c7..28592bcf3 100644 --- a/runtime/src/main/java/me/shedaniel/rei/PluginDetector.java +++ b/runtime/src/main/java/me/shedaniel/rei/PluginDetector.java @@ -23,7 +23,7 @@ package me.shedaniel.rei; -import me.shedaniel.architectury.annotations.ExpectPlatform; +import dev.architectury.injectables.annotations.ExpectPlatform; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; diff --git a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java index dcb8ce91e..9513bbe21 100644 --- a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java +++ b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java @@ -70,7 +70,7 @@ import me.shedaniel.rei.impl.client.REIHelperImpl; import me.shedaniel.rei.impl.client.config.ConfigManagerImpl; import me.shedaniel.rei.impl.client.entry.type.types.RenderingEntryDefinition; import me.shedaniel.rei.impl.client.favorites.FavoriteEntryTypeRegistryImpl; -import me.shedaniel.rei.impl.client.gui.ContainerScreenOverlay; +import me.shedaniel.rei.impl.client.gui.ScreenOverlayImpl; import me.shedaniel.rei.impl.client.gui.widget.InternalWidgets; import me.shedaniel.rei.impl.client.gui.widget.QueuedTooltip; import me.shedaniel.rei.impl.client.registry.category.CategoryRegistryImpl; @@ -574,7 +574,7 @@ public class RoughlyEnoughItemsCore { return; resetFocused(screen); REIHelper.getInstance().getOverlay().get().render(matrices, mouseX, mouseY, delta); - ((ContainerScreenOverlay) REIHelper.getInstance().getOverlay().get()).lateRender(matrices, mouseX, mouseY, delta); + ((ScreenOverlayImpl) REIHelper.getInstance().getOverlay().get()).lateRender(matrices, mouseX, mouseY, delta); resetFocused(screen); }); ClientScreenInputEvent.MOUSE_DRAGGED_PRE.register((minecraftClient, screen, mouseX1, mouseY1, button, mouseX2, mouseY2) -> { diff --git a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsInitializer.java b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsInitializer.java index 78f118501..0ee468267 100644 --- a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsInitializer.java +++ b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsInitializer.java @@ -23,7 +23,7 @@ package me.shedaniel.rei; -import me.shedaniel.architectury.annotations.ExpectPlatform; +import dev.architectury.injectables.annotations.ExpectPlatform; import net.fabricmc.api.EnvType; import java.lang.reflect.InvocationTargetException; diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/ClientHelperImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/ClientHelperImpl.java index 44b12c821..29d2deb00 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/ClientHelperImpl.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/ClientHelperImpl.java @@ -24,6 +24,8 @@ package me.shedaniel.rei.impl.client; import io.netty.buffer.Unpooled; +import it.unimi.dsi.fastutil.longs.LongOpenHashSet; +import it.unimi.dsi.fastutil.longs.LongSet; import me.shedaniel.architectury.networking.NetworkManager; import me.shedaniel.architectury.platform.Platform; import me.shedaniel.rei.RoughlyEnoughItemsNetwork; @@ -65,7 +67,6 @@ import org.jetbrains.annotations.Nullable; import java.time.LocalDateTime; import java.util.*; import java.util.function.Supplier; -import java.util.stream.Collectors; @ApiStatus.Internal @Environment(EnvType.CLIENT) @@ -215,11 +216,12 @@ public class ClientHelperImpl implements ClientHelper { } @ApiStatus.Internal - public Set<EntryStack<?>> _getInventoryItemsTypes() { + public LongSet _getInventoryItemsTypes() { return Minecraft.getInstance().player.getInventory().compartments.stream() .flatMap(Collection::stream) .map(EntryStacks::of) - .collect(Collectors.toSet()); + .mapToLong(EntryStacks::hashExact) + .collect(LongOpenHashSet::new, LongOpenHashSet::add, LongOpenHashSet::addAll); } @ApiStatus.Internal diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/ErrorDisplayer.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/ErrorDisplayer.java index b6eb5da51..12bf9da50 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/ErrorDisplayer.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/ErrorDisplayer.java @@ -23,7 +23,7 @@ package me.shedaniel.rei.impl.client; -import me.shedaniel.architectury.annotations.ExpectPlatform; +import dev.architectury.injectables.annotations.ExpectPlatform; import me.shedaniel.rei.RoughlyEnoughItemsState; import me.shedaniel.rei.impl.client.gui.screen.WarningAndErrorScreen; import net.minecraft.client.Minecraft; diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/REIHelperImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/REIHelperImpl.java index 58c7506b3..1a4d28fcf 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/REIHelperImpl.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/REIHelperImpl.java @@ -30,15 +30,15 @@ import me.shedaniel.architectury.event.events.GuiEvent; import me.shedaniel.architectury.event.events.client.ClientTickEvent; import me.shedaniel.math.Rectangle; import me.shedaniel.rei.api.client.REIHelper; -import me.shedaniel.rei.api.client.overlay.ScreenOverlay; import me.shedaniel.rei.api.client.config.ConfigManager; import me.shedaniel.rei.api.client.config.ConfigObject; import me.shedaniel.rei.api.client.gui.config.SearchFieldLocation; import me.shedaniel.rei.api.client.gui.screen.DisplayScreen; import me.shedaniel.rei.api.client.gui.widgets.TextField; import me.shedaniel.rei.api.client.gui.widgets.Tooltip; +import me.shedaniel.rei.api.client.overlay.ScreenOverlay; import me.shedaniel.rei.api.client.registry.screen.ScreenRegistry; -import me.shedaniel.rei.impl.client.gui.ContainerScreenOverlay; +import me.shedaniel.rei.impl.client.gui.ScreenOverlayImpl; import me.shedaniel.rei.impl.client.gui.widget.search.OverlaySearchField; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; @@ -61,7 +61,7 @@ public class REIHelperImpl implements REIHelper { private static final ResourceLocation DISPLAY_TEXTURE_DARK = new ResourceLocation("roughlyenoughitems", "textures/gui/display_dark.png"); @ApiStatus.Internal public static boolean isWithinRecipeViewingScreen = false; - private ContainerScreenOverlay overlay; + private ScreenOverlayImpl overlay; private OverlaySearchField searchField; private AbstractContainerScreen<?> previousContainerScreen = null; private Screen previousScreen = null; @@ -129,7 +129,7 @@ public class REIHelperImpl implements REIHelper { @Override public Optional<ScreenOverlay> getOverlay(boolean reset) { if (overlay == null || reset) { - overlay = new ContainerScreenOverlay(); + overlay = new ScreenOverlayImpl(); overlay.init(); getSearchField().setFocused(false); } @@ -201,8 +201,7 @@ public class REIHelperImpl implements REIHelper { Rectangle bounds = ScreenRegistry.getInstance().getOverlayBounds(ConfigObject.getInstance().getDisplayPanelLocation().mirror(), Minecraft.getInstance().screen); int yOffset = 8; - if (ConfigObject.getInstance().doesShowUtilsButtons()) yOffset += 50; - else if (!ConfigObject.getInstance().isLowerConfigButton()) yOffset += 25; + if (!ConfigObject.getInstance().isLowerConfigButton()) yOffset += 25; return new Rectangle(bounds.x, bounds.y + yOffset, bounds.width, bounds.height - 3 - yOffset); } @@ -224,8 +223,9 @@ public class REIHelperImpl implements REIHelper { return InteractionResult.PASS; }); ClientTickEvent.CLIENT_POST.register(minecraft -> { - if (isOverlayVisible() && getSearchField() != null) - getSearchField().tick(); + if (isOverlayVisible()) { + ScreenOverlayImpl.getInstance().tick(); + } }); } } diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigManagerImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigManagerImpl.java index e89995311..292d76358 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigManagerImpl.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigManagerImpl.java @@ -27,9 +27,7 @@ import com.google.common.collect.Lists; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.mojang.blaze3d.platform.InputConstants; -import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.brigadier.exceptions.CommandSyntaxException; -import com.mojang.math.Matrix4f; import me.shedaniel.architectury.hooks.screen.ScreenHooks; import me.shedaniel.autoconfig.AutoConfig; import me.shedaniel.autoconfig.annotation.ConfigEntry; @@ -46,13 +44,13 @@ import me.shedaniel.clothconfig2.api.ConfigEntryBuilder; import me.shedaniel.clothconfig2.api.Modifier; import me.shedaniel.clothconfig2.api.ModifierKeyCode; import me.shedaniel.clothconfig2.gui.entries.KeyCodeEntry; -import me.shedaniel.clothconfig2.impl.EasingMethod; import me.shedaniel.rei.RoughlyEnoughItemsCore; import me.shedaniel.rei.api.client.REIHelper; import me.shedaniel.rei.api.client.config.ConfigManager; import me.shedaniel.rei.api.client.favorites.FavoriteEntry; import me.shedaniel.rei.api.client.gui.config.DisplayScreenType; import me.shedaniel.rei.api.client.gui.config.SyntaxHighlightingMode; +import me.shedaniel.rei.api.client.overlay.ScreenOverlay; import me.shedaniel.rei.api.client.registry.entry.EntryRegistry; import me.shedaniel.rei.api.common.entry.EntryStack; import me.shedaniel.rei.api.common.util.CollectionUtils; @@ -60,23 +58,16 @@ import me.shedaniel.rei.impl.client.REIHelperImpl; import me.shedaniel.rei.impl.client.config.entries.*; import me.shedaniel.rei.impl.client.entry.filtering.FilteringRule; import me.shedaniel.rei.impl.client.entry.filtering.rules.ManualFilteringRule; -import me.shedaniel.rei.impl.client.gui.ContainerScreenOverlay; +import me.shedaniel.rei.impl.client.gui.ScreenOverlayImpl; import me.shedaniel.rei.impl.client.gui.credits.CreditsScreen; -import me.shedaniel.rei.impl.client.gui.screen.TransformingScreen; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.fabricmc.loader.api.FabricLoader; -import net.minecraft.Util; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.Font; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.screens.Screen; -import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; import net.minecraft.nbt.TagParser; -import net.minecraft.network.chat.CommonComponents; -import net.minecraft.network.chat.Component; import net.minecraft.network.chat.TextComponent; import net.minecraft.network.chat.TranslatableComponent; import net.minecraft.util.Mth; @@ -84,7 +75,6 @@ import net.minecraft.world.InteractionResult; import org.apache.commons.lang3.mutable.MutableLong; import org.jetbrains.annotations.ApiStatus; -import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -305,19 +295,7 @@ public class ConfigManagerImpl implements ConfigManager { @Override public Screen getConfigScreen(Screen parent) { try { - Screen parentTranslated; - if (!getConfig().isConfigScreenAnimated()) { - parentTranslated = parent; - } else { - MutableLong current = new MutableLong(0); - parentTranslated = new TransformingScreen(true, parent, - null, - () -> current.setValue(current.getValue() == 0 ? Util.getMillis() + (!getConfig().isConfigScreenAnimated() ? -3000 : 0) : current.getValue()), - () -> 0, () -> (EasingMethod.EasingMethodImpl.EXPO.apply(Mth.clamp((Util.getMillis() - current.getValue()) / 750.0, 0, 1))) - * Minecraft.getInstance().getWindow().getGuiScaledHeight(), () -> Util.getMillis() - current.getValue() > 800); - ((TransformingScreen) parentTranslated).setInitAfter(true); - } - ConfigScreenProvider<ConfigObjectImpl> provider = (ConfigScreenProvider<ConfigObjectImpl>) AutoConfig.getConfigScreen(ConfigObjectImpl.class, parentTranslated); + ConfigScreenProvider<ConfigObjectImpl> provider = (ConfigScreenProvider<ConfigObjectImpl>) AutoConfig.getConfigScreen(ConfigObjectImpl.class, parent); provider.setI13nFunction(manager -> "config.roughlyenoughitems"); provider.setOptionFunction((baseI13n, field) -> field.isAnnotationPresent(ConfigObjectImpl.DontApplyFieldName.class) ? baseI13n : String.format("%s.%s", baseI13n, field.getName())); provider.setCategoryFunction((baseI13n, categoryName) -> String.format("%s.%s", baseI13n, categoryName)); @@ -331,79 +309,21 @@ public class ConfigManagerImpl implements ConfigManager { ScreenHooks.addRenderableWidget(screen, new Button(screen.width - 104, 4, 100, 20, new TranslatableComponent("text.rei.credits"), button -> { MutableLong current = new MutableLong(0); CreditsScreen creditsScreen = new CreditsScreen(screen); - if (getConfig().isCreditsScreenAnimated()) { - Minecraft.getInstance().setScreen(new TransformingScreen(false, creditsScreen, - screen, - () -> current.setValue(current.getValue() == 0 ? Util.getMillis() + (!getConfig().isCreditsScreenAnimated() ? -3000 : 0) : current.getValue()), - () -> (1 - EasingMethod.EasingMethodImpl.EXPO.apply(Mth.clamp((Util.getMillis() - current.getValue()) / 750.0, 0, 1))) - * Minecraft.getInstance().getWindow().getGuiScaledWidth() * 1.3, - () -> 0, - () -> Util.getMillis() - current.getValue() > 800)); - } else { - Minecraft.getInstance().setScreen(creditsScreen); - } + Minecraft.getInstance().setScreen(creditsScreen); })); }).setSavingRunnable(() -> { saveConfig(); EntryRegistry.getInstance().refilter(); + REIHelper.getInstance().getOverlay().ifPresent(ScreenOverlay::queueReloadOverlay); if (REIHelperImpl.getSearchField() != null) { - ContainerScreenOverlay.getEntryListWidget().updateSearch(REIHelperImpl.getSearchField().getText(), true); + ScreenOverlayImpl.getEntryListWidget().updateSearch(REIHelperImpl.getSearchField().getText(), true); } }).build(); }); - Screen configScreen = provider.get(); - if (!getConfig().isConfigScreenAnimated()) return configScreen; - ((TransformingScreen) parentTranslated).setLastScreen(configScreen); - MutableLong current = new MutableLong(0); - return new TransformingScreen(false, configScreen, - parent, - () -> current.setValue(current.getValue() == 0 ? Util.getMillis() + (!getConfig().isConfigScreenAnimated() ? -3000 : 0) : current.getValue()), - () -> 0, () -> (1 - EasingMethod.EasingMethodImpl.EXPO.apply(Mth.clamp((Util.getMillis() - current.getValue()) / 750.0, 0, 1))) - * Minecraft.getInstance().getWindow().getGuiScaledHeight() * 1.3, () -> Util.getMillis() - current.getValue() > 800); + return provider.get(); } catch (Exception e) { e.printStackTrace(); } return null; } - - private boolean detectWorkingOptifabric() { - try { - String renderText = FabricLoader.getInstance().getMappingResolver().mapMethodName("intermediary", "net.minecraft.class_327", "method_1724", "(Ljava/lang/String;FFIZLnet/minecraft/class_1159;Lnet/minecraft/class_4597;ZII)F"); - Method method = Font.class.getDeclaredMethod(renderText, String.class, Float.TYPE, Float.TYPE, Integer.TYPE, Boolean.TYPE, Matrix4f.class, MultiBufferSource.class, Boolean.TYPE, Integer.TYPE, Integer.TYPE); - return !java.lang.reflect.Modifier.isPrivate(method.getModifiers()); - } catch (Throwable ignored) { - return false; - } - } - - public static class ConfigErrorScreen extends Screen { - private final Component message; - private final Screen parent; - - public ConfigErrorScreen(Screen parent, Component title, Component message) { - super(title); - this.parent = parent; - this.message = message; - } - - @Override - public void init() { - super.init(); - this.addRenderableWidget(new Button(this.width / 2 - 100, 140, 200, 20, CommonComponents.GUI_CANCEL, button -> this.minecraft.setScreen(parent))); - } - - @Override - public void render(PoseStack matrices, int mouseX, int mouseY, float delta) { - this.renderBackground(matrices); - drawCenteredString(matrices, this.font, this.title, this.width / 2, 90, 16777215); - drawCenteredString(matrices, this.font, this.message, this.width / 2, 110, 16777215); - super.render(matrices, mouseX, mouseY, delta); - } - - @Override - public boolean shouldCloseOnEsc() { - return false; - } - } - } diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigObjectImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigObjectImpl.java index 9279a7f51..e4b855e1e 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigObjectImpl.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigObjectImpl.java @@ -102,16 +102,6 @@ public class ConfigObjectImpl implements ConfigObject, ConfigData { } @Override - public boolean isConfigScreenAnimated() { - return basics.motion.configScreenAnimation; - } - - @Override - public boolean isCreditsScreenAnimated() { - return basics.motion.creditsScreenAnimation; - } - - @Override public boolean isFavoritesAnimated() { return basics.motion.favoritesAnimation; } @@ -177,11 +167,6 @@ public class ConfigObjectImpl implements ConfigObject, ConfigData { } @Override - public boolean doesShowUtilsButtons() { - return appearance.layout.showUtilsButtons; - } - - @Override public boolean doesDisableRecipeBook() { return functionality.disableRecipeBook; } @@ -430,8 +415,6 @@ public class ConfigObjectImpl implements ConfigObject, ConfigData { } public static class Motion { - private boolean configScreenAnimation = false; - private boolean creditsScreenAnimation = false; private boolean favoritesAnimation = true; } @@ -463,7 +446,6 @@ public class ConfigObjectImpl implements ConfigObject, ConfigData { @Comment("Declares the position of the config button.") @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON) private ConfigButtonPosition configButtonLocation = ConfigButtonPosition.LOWER; @Comment("Declares whether the craftable filter button is enabled.") private boolean enableCraftableOnlyButton = false; - @Comment("Declares whether the utils buttons are shown.") private boolean showUtilsButtons = false; } @UsePercentage(min = 0.1, max = 1.0, prefix = "Limit: ") private double horizontalEntriesBoundaries = 1.0; 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 8b7eed143..0aea413fd 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 @@ -42,7 +42,7 @@ import me.shedaniel.rei.api.client.registry.entry.EntryRegistry; import me.shedaniel.rei.api.client.search.S |
