فهرست منبع

Improved EntryListWidget

Signed-off-by: shedaniel <daniel@shedaniel.me>
shedaniel 5 سال پیش
والد
کامیت
4a4fec9a00

+ 6 - 1
src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java

@@ -219,8 +219,13 @@ public class RoughlyEnoughItemsCore implements ClientModInitializer {
         loadTestPlugins();
     }
     
+    @ApiStatus.Internal
+    public static boolean isDebugModeEnabled() {
+        return System.getProperty("rei.test", "false").equals("true");
+    }
+    
     private void loadTestPlugins() {
-        if (System.getProperty("rei.test", "false").equals("true")) {
+        if (isDebugModeEnabled()) {
             registerPlugin(new REITestPlugin());
         }
     }

+ 3 - 3
src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java

@@ -130,7 +130,7 @@ public class ContainerScreenOverlay extends WidgetWithBounds {
                     ENTRY_LIST_WIDGET.previousPage();
                     if (ENTRY_LIST_WIDGET.getPage() < 0)
                         ENTRY_LIST_WIDGET.setPage(ENTRY_LIST_WIDGET.getTotalPages() - 1);
-                    ENTRY_LIST_WIDGET.updateSearch(ScreenHelper.getSearchField().getText());
+                    ENTRY_LIST_WIDGET.updateEntriesPosition();
                 }
                 
                 @Override
@@ -144,7 +144,7 @@ public class ContainerScreenOverlay extends WidgetWithBounds {
                     ENTRY_LIST_WIDGET.nextPage();
                     if (ENTRY_LIST_WIDGET.getPage() >= ENTRY_LIST_WIDGET.getTotalPages())
                         ENTRY_LIST_WIDGET.setPage(0);
-                    ENTRY_LIST_WIDGET.updateSearch(ScreenHelper.getSearchField().getText());
+                    ENTRY_LIST_WIDGET.updateEntriesPosition();
                 }
                 
                 @Override
@@ -265,7 +265,7 @@ public class ContainerScreenOverlay extends WidgetWithBounds {
                 public void onLabelClicked() {
                     MinecraftClient.getInstance().getSoundManager().play(PositionedSoundInstance.master(SoundEvents.UI_BUTTON_CLICK, 1.0F));
                     ENTRY_LIST_WIDGET.setPage(0);
-                    ENTRY_LIST_WIDGET.updateSearch(ScreenHelper.getSearchField().getText());
+                    ENTRY_LIST_WIDGET.updateEntriesPosition();
                 }
                 
                 @Override

+ 3 - 1
src/main/java/me/shedaniel/rei/gui/widget/EntryWidget.java

@@ -239,8 +239,10 @@ public class EntryWidget extends WidgetWithBounds {
                         ConfigManager.getInstance().getFavorites().remove(entry);
                     else if (!CollectionUtils.anyMatchEqualsAll(ConfigManager.getInstance().getFavorites(), entry))
                         ConfigManager.getInstance().getFavorites().add(entry);
-                    ContainerScreenOverlay.getEntryListWidget().updateSearch(ScreenHelper.getSearchField().getText());
                     ConfigManager.getInstance().saveConfig();
+                    FavoritesListWidget favoritesListWidget = ContainerScreenOverlay.getFavoritesListWidget();
+                    if (favoritesListWidget != null)
+                        favoritesListWidget.updateSearch(ContainerScreenOverlay.getEntryListWidget(), ScreenHelper.getSearchField().getText());
                     minecraft.getSoundManager().play(PositionedSoundInstance.master(SoundEvents.UI_BUTTON_CLICK, 1.0F));
                     return true;
                 }

+ 2 - 2
src/main/java/me/shedaniel/rei/gui/widget/FavoritesListWidget.java

@@ -235,7 +235,7 @@ public class FavoritesListWidget extends WidgetWithBounds {
                 List<EntryStack> workingItems = checkCraftable ? RecipeHelper.getInstance().findCraftableEntriesByItems(CollectionUtils.map(ScreenHelper.inventoryStacks, EntryStack::create)) : null;
                 for (EntryStack stack : ConfigManager.getInstance().getFavorites()) {
                     if (listWidget.canLastSearchTermsBeAppliedTo(stack)) {
-                        if (workingItems != null && CollectionUtils.findFirstOrNullEquals(workingItems, stack) == null)
+                        if (checkCraftable && CollectionUtils.findFirstOrNullEquals(workingItems, stack) == null)
                             continue;
                         list.add(stack.copy().setting(EntryStack.Settings.RENDER_COUNTS, EntryStack.Settings.FALSE).setting(EntryStack.Settings.Item.RENDER_ENCHANTMENT_GLINT, RENDER_ENCHANTMENT_GLINT));
                     }
@@ -253,7 +253,7 @@ public class FavoritesListWidget extends WidgetWithBounds {
                 boolean checkCraftable = ConfigManager.getInstance().isCraftableOnlyEnabled() && !ScreenHelper.inventoryStacks.isEmpty();
                 List<EntryStack> workingItems = checkCraftable ? RecipeHelper.getInstance().findCraftableEntriesByItems(CollectionUtils.map(ScreenHelper.inventoryStacks, EntryStack::create)) : null;
                 for (EntryStack stack : ConfigManager.getInstance().getFavorites()) {
-                    if (workingItems != null && CollectionUtils.findFirstOrNullEquals(workingItems, stack) == null)
+                    if (checkCraftable && CollectionUtils.findFirstOrNullEquals(workingItems, stack) == null)
                         continue;
                     list.add(stack.copy().setting(EntryStack.Settings.RENDER_COUNTS, EntryStack.Settings.FALSE).setting(EntryStack.Settings.Item.RENDER_ENCHANTMENT_GLINT, RENDER_ENCHANTMENT_GLINT));
                 }

+ 2 - 1
src/main/java/me/shedaniel/rei/impl/ConfigManagerImpl.java

@@ -45,7 +45,6 @@ import net.minecraft.client.gui.widget.ButtonWidget;
 import net.minecraft.client.resource.language.I18n;
 import net.minecraft.client.util.InputUtil;
 import net.minecraft.client.util.Window;
-import net.minecraft.text.LiteralText;
 import net.minecraft.util.math.MathHelper;
 import org.jetbrains.annotations.ApiStatus;
 
@@ -179,6 +178,8 @@ public class ConfigManagerImpl implements ConfigManager {
     
     @Override
     public void saveConfig() {
+        if (getFavorites() != null)
+            getFavorites().removeIf(EntryStack::isEmpty);
         ((me.sargunvohra.mcmods.autoconfig1u.ConfigManager<ConfigObjectImpl>) AutoConfig.getConfigHolder(ConfigObjectImpl.class)).save();
     }
     

+ 24 - 6
src/main/java/me/shedaniel/rei/impl/SearchArgument.java

@@ -47,7 +47,6 @@ public class SearchArgument {
         this.include = include;
     }
     
-    @ApiStatus.Internal
     public static String tryGetEntryStackName(EntryStack stack) {
         if (stack.getType() == EntryStack.Type.ITEM)
             return tryGetItemStackName(stack.getItemStack());
@@ -56,7 +55,14 @@ public class SearchArgument {
         return "";
     }
     
-    @ApiStatus.Internal
+    public static String tryGetEntryStackNameNoFormatting(EntryStack stack) {
+        if (stack.getType() == EntryStack.Type.ITEM)
+            return tryGetItemStackNameNoFormatting(stack.getItemStack());
+        else if (stack.getType() == EntryStack.Type.FLUID)
+            return tryGetFluidName(stack.getFluid());
+        return "";
+    }
+    
     public static String tryGetEntryStackTooltip(EntryStack stack) {
         QueuedTooltip tooltip = stack.getTooltip(0, 0);
         if (tooltip != null)
@@ -64,7 +70,6 @@ public class SearchArgument {
         return "";
     }
     
-    @ApiStatus.Internal
     public static String tryGetFluidName(Fluid fluid) {
         Identifier id = Registry.FLUID.getId(fluid);
         if (I18n.hasTranslation("block." + id.toString().replaceFirst(":", ".")))
@@ -72,7 +77,6 @@ public class SearchArgument {
         return CollectionUtils.mapAndJoinToString(id.getPath().split("_"), StringUtils::capitalize, " ");
     }
     
-    @ApiStatus.Internal
     public static List<String> tryGetItemStackToolTip(ItemStack itemStack, boolean careAboutAdvanced) {
         if (!searchBlacklisted.contains(itemStack.getItem()))
             try {
@@ -84,7 +88,6 @@ public class SearchArgument {
         return Collections.singletonList(tryGetItemStackName(itemStack));
     }
     
-    @ApiStatus.Internal
     public static String tryGetItemStackName(ItemStack stack) {
         if (!searchBlacklisted.contains(stack.getItem()))
             try {
@@ -101,6 +104,22 @@ public class SearchArgument {
         return "ERROR";
     }
     
+    public static String tryGetItemStackNameNoFormatting(ItemStack stack) {
+        if (!searchBlacklisted.contains(stack.getItem()))
+            try {
+                return stack.getName().asString();
+            } catch (Throwable e) {
+                e.printStackTrace();
+                searchBlacklisted.add(stack.getItem());
+            }
+        try {
+            return I18n.translate("item." + Registry.ITEM.getId(stack.getItem()).toString().replace(":", "."));
+        } catch (Throwable e) {
+            e.printStackTrace();
+        }
+        return "ERROR";
+    }
+    
     public Function<String, Boolean> getFunction(boolean include) {
         return include ? INCLUDE : NOT_INCLUDE;
     }
@@ -130,7 +149,6 @@ public class SearchArgument {
         ALWAYS
     }
     
-    @ApiStatus.Internal
     public static class SearchArguments {
         public static final SearchArguments ALWAYS = new SearchArguments(new SearchArgument[]{SearchArgument.ALWAYS});
         private SearchArgument[] arguments;

+ 3 - 2
src/main/java/me/shedaniel/rei/tests/plugin/REITestPlugin.java

@@ -35,12 +35,13 @@ public class REITestPlugin implements REIPluginV0 {
     
     @Override
     public void registerEntries(EntryRegistry entryRegistry) {
+        int times = 100;
         for (Item item : Registry.ITEM) {
-            for (int i = 0; i < 5; i++)
+            for (int i = 0; i < times; i++)
                 entryRegistry.queueRegisterEntryAfter(EntryStack.create(item), Collections.singleton(transformStack(EntryStack.create(item))));
             try {
                 for (ItemStack stack : entryRegistry.appendStacksForItem(item)) {
-                    for (int i = 0; i < 15; i++)
+                    for (int i = 0; i < times; i++)
                         entryRegistry.registerEntry(transformStack(EntryStack.create(stack)));
                 }
             } catch (Exception ignored) {