Ver Fonte

Fix #58 + Bump Version

Unknown há 6 anos atrás
pai
commit
3e3ec426a5

+ 5 - 1
CHANGELOG.md

@@ -1,7 +1,11 @@
 View full changelog [here](https://github.com/shedaniel/RoughlyEnoughItems/blob/1.14/CHANGELOG.md).
+## v2.7.4.88
+- Fixed: Item List Overlay buttons still enabled when there is only 1 page
+- Fixed [#58](https://github.com/shedaniel/RoughlyEnoughItems/issues/58): Keybinds (e.g. O, R, U) working even creative search field is focused
+- Fixed [#59](https://github.com/shedaniel/RoughlyEnoughItems/issues/59): Wrong page calculation (Thanks geniiii)
 ## v2.7.3.87
 - Fixed: Credits button not working
-- Fixed: Keybinds (e.g. O, R, U) working even creative search field is focused
+- ~~Fixed: Keybinds (e.g. O, R, U) working even creative search field is focused~~
 ## v2.7.3.86
 - Fixed [#56](https://github.com/shedaniel/RoughlyEnoughItems/issues/56): Even tho I don't know how I fixed it
 - Added: Credits button in Config Screen

+ 1 - 1
gradle.properties

@@ -1,4 +1,4 @@
-mod_version=2.7.3+build.87
+mod_version=2.7.4+build.88
 minecraft_version=1.14 Pre-Release 2
 yarn_version=1.14 Pre-Release 2+build.1
 fabric_version=0.2.7+build.122

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

@@ -6,7 +6,6 @@ import com.google.gson.JsonElement;
 import com.google.gson.JsonObject;
 import me.shedaniel.cloth.api.ClientUtils;
 import me.shedaniel.cloth.hooks.ClothClientHooks;
-import me.shedaniel.cloth.hooks.ScreenHooks;
 import me.shedaniel.rei.api.*;
 import me.shedaniel.rei.client.ConfigManager;
 import me.shedaniel.rei.client.*;
@@ -213,11 +212,9 @@ public class RoughlyEnoughItemsCore implements ClientModInitializer {
                 ScreenHelper.getLastOverlay().lateRender(i, i1, v);
         });
         ClothClientHooks.SCREEN_KEY_PRESSED.register((minecraftClient, screen, i, i1, i2) -> {
-            if (screen instanceof CreativePlayerInventoryScreen && screen.getFocused() != null && screen.getFocused() instanceof TextFieldWidget && ((CreativePlayerInventoryScreenHooks) screen).rei_getSelectedTab() == ItemGroup.SEARCH.getIndex())
-                for(Element element : ((ScreenHooks) screen).cloth_getInputListeners())
-                    if (element instanceof TextFieldWidget)
-                        if (screen.getFocused() == element && ((TextFieldWidget) element).isFocused())
-                            return ActionResult.PASS;
+            if (screen instanceof CreativePlayerInventoryScreen && ((CreativePlayerInventoryScreenHooks) screen).rei_getSelectedTab() == ItemGroup.SEARCH.getIndex())
+                if (screen.getFocused() != null && screen.getFocused() instanceof TextFieldWidget && ((TextFieldWidget) screen.getFocused()).isFocused())
+                    return ActionResult.PASS;
             if (screen instanceof ContainerScreen)
                 if (ScreenHelper.getLastOverlay().keyPressed(i, i1, i2))
                     return ActionResult.SUCCESS;

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

@@ -25,8 +25,10 @@ import net.minecraft.util.math.MathHelper;
 import net.minecraft.world.GameMode;
 
 import java.awt.*;
-import java.util.*;
+import java.util.LinkedList;
 import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
 import java.util.stream.Collectors;
 
 public class ContainerScreenOverlay extends AbstractParentElement implements Drawable {
@@ -98,10 +100,10 @@ public class ContainerScreenOverlay extends AbstractParentElement implements Dra
                 return false;
             }
         });
-
+        
         if (setPage)
             page = MathHelper.clamp(page, 0, getTotalPage());
-
+        
         widgets.add(new ButtonWidget(RoughlyEnoughItemsCore.getConfigManager().getConfig().mirrorItemPanel ? window.getScaledWidth() - 30 : 10, 10, 20, 20, "") {
             @Override
             public void onPressed() {
@@ -188,7 +190,7 @@ public class ContainerScreenOverlay extends AbstractParentElement implements Dra
                 }
             });
         }
-        widgets.add(new ClickableLabelWidget(rectangle.x + (rectangle.width / 2), rectangle.y + 10, "") {
+        widgets.add(new ClickableLabelWidget(rectangle.x + (rectangle.width / 2), rectangle.y + 10, "", getTotalPage() > 0) {
             @Override
             public void render(int mouseX, int mouseY, float delta) {
                 page = MathHelper.clamp(page, 0, getTotalPage());
@@ -213,6 +215,7 @@ public class ContainerScreenOverlay extends AbstractParentElement implements Dra
                 return false;
             }
         });
+        buttonLeft.enabled = buttonRight.enabled = getTotalPage() > 0;
         if (ScreenHelper.searchField == null)
             ScreenHelper.searchField = new SearchFieldWidget(0, 0, 0, 0);
         ScreenHelper.searchField.setChangedListener(s -> {
@@ -342,7 +345,7 @@ public class ContainerScreenOverlay extends AbstractParentElement implements Dra
             GuiLighting.disable();
             GlStateManager.disableLighting();
             int int_3 = 0;
-            for (String string_1 : list_1) {
+            for(String string_1 : list_1) {
                 int int_4 = font.getStringWidth(string_1);
                 if (int_4 > int_3)
                     int_3 = int_4;
@@ -384,21 +387,10 @@ public class ContainerScreenOverlay extends AbstractParentElement implements Dra
     }
     
     private boolean hasSameListContent(List<ItemStack> list1, List<ItemStack> list2) {
-        list1.sort((itemStack, t1) ->
-            ItemListOverlay.tryGetItemStackName(itemStack).compareToIgnoreCase(ItemListOverlay.tryGetItemStackName(t1))
-        );
-
-        list2.sort((itemStack, t1) ->
-            ItemListOverlay.tryGetItemStackName(itemStack).compareToIgnoreCase(ItemListOverlay.tryGetItemStackName(t1))
-        );
-
-        String lastString = list1.stream().map(
-            ItemListOverlay::tryGetItemStackName
-        ).collect(Collectors.joining("")), currentString = list2.stream().map(
-            ItemListOverlay::tryGetItemStackName
-        ).collect(Collectors.joining(""));
-
-        return lastString.equals(currentString);
+        list1.sort((itemStack, t1) -> ItemListOverlay.tryGetItemStackName(itemStack).compareToIgnoreCase(ItemListOverlay.tryGetItemStackName(t1)));
+        list2.sort((itemStack, t1) -> ItemListOverlay.tryGetItemStackName(itemStack).compareToIgnoreCase(ItemListOverlay.tryGetItemStackName(t1)));
+        
+        return list1.stream().map(ItemListOverlay::tryGetItemStackName).collect(Collectors.joining("")).equals(list2.stream().map(ItemListOverlay::tryGetItemStackName).collect(Collectors.joining("")));
     }
     
     public void addTooltip(QueuedTooltip queuedTooltip) {
@@ -408,8 +400,7 @@ public class ContainerScreenOverlay extends AbstractParentElement implements Dra
     public void renderWidgets(int int_1, int int_2, float float_1) {
         if (!ScreenHelper.isOverlayVisible())
             return;
-        buttonLeft.enabled = itemListOverlay.children().size() > 0;
-        buttonRight.enabled = itemListOverlay.children().size() > 0;
+        buttonLeft.enabled = buttonRight.enabled = getTotalPage() > 0;
         widgets.forEach(widget -> {
             GuiLighting.disable();
             widget.render(int_1, int_2, float_1);
@@ -496,14 +487,13 @@ public class ContainerScreenOverlay extends AbstractParentElement implements Dra
     public boolean mouseClicked(double double_1, double double_2, int int_1) {
         if (!ScreenHelper.isOverlayVisible())
             return false;
-        for(Element element : widgets) {
+        for(Element element : widgets)
             if (element.mouseClicked(double_1, double_2, int_1)) {
                 this.setFocused(element);
                 if (int_1 == 0)
                     this.setDragging(true);
                 return true;
             }
-        }
         return false;
     }
     

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

@@ -189,7 +189,7 @@ public class RecipeViewingScreen extends Screen {
                 return Optional.ofNullable(I18n.translate("text.rei.previous_page"));
             }
         });
-        widgets.add(new ClickableLabelWidget((int) bounds.getCenterX(), (int) bounds.getY() + 23, "") {
+        widgets.add(new ClickableLabelWidget((int) bounds.getCenterX(), (int) bounds.getY() + 23, "", categoriesMap.get(selectedCategory).size() > getRecipesPerPageByHeight()) {
             @Override
             public void render(int mouseX, int mouseY, float delta) {
                 this.text = String.format("%d/%d", page + 1, getTotalPages(selectedCategory));
@@ -222,9 +222,7 @@ public class RecipeViewingScreen extends Screen {
                 return Optional.ofNullable(I18n.translate("text.rei.next_page"));
             }
         });
-        int recipesPerPageByHeight = getRecipesPerPageByHeight();
-        recipeBack.enabled = recipeNext.enabled = categoriesMap.get(selectedCategory).size() > recipesPerPageByHeight;
-
+        recipeBack.enabled = recipeNext.enabled = categoriesMap.get(selectedCategory).size() > getRecipesPerPageByHeight();
         for(int i = 0; i < 6; i++) {
             int j = i + categoryPages * 6;
             if (categories.size() > j) {
@@ -317,9 +315,7 @@ public class RecipeViewingScreen extends Screen {
             fill(bounds.x + 17, bounds.y + 5, bounds.x + bounds.width - 17, bounds.y + 17, SUB_COLOR.getRGB());
             fill(bounds.x + 17, bounds.y + 21, bounds.x + bounds.width - 17, bounds.y + 33, SUB_COLOR.getRGB());
         }
-        tabs.stream().filter(tabWidget ->
-            !tabWidget.isSelected()
-        ).forEach(tabWidget -> tabWidget.render(mouseX, mouseY, delta));
+        tabs.stream().filter(tabWidget -> !tabWidget.isSelected()).forEach(tabWidget -> tabWidget.render(mouseX, mouseY, delta));
         GuiLighting.disable();
         super.render(mouseX, mouseY, delta);
         widgets.forEach(widget -> {

+ 19 - 11
src/main/java/me/shedaniel/rei/gui/widget/ClickableLabelWidget.java

@@ -9,18 +9,24 @@ public abstract class ClickableLabelWidget extends LabelWidget {
     
     public static final int hoveredColor = (new Color(102, 255, 204)).getRGB();
     public boolean focused;
-
-    public ClickableLabelWidget(int x, int y, String text) {
+    public boolean clickable;
+    
+    public ClickableLabelWidget(int x, int y, String text, boolean clickable) {
         super(x, y, text);
+        this.clickable = clickable;
+    }
+    
+    public ClickableLabelWidget(int x, int y, String text) {
+        this(x, y, text, true);
     }
     
     @Override
     public void render(int mouseX, int mouseY, float delta) {
         int colour = -1;
-        if (isHovered(mouseX, mouseY))
+        if (clickable && isHovered(mouseX, mouseY))
             colour = hoveredColor;
         drawCenteredString(font, (isHovered(mouseX, mouseY) ? "§n" : "") + text, x, y, colour);
-        if (getTooltips().isPresent())
+        if (clickable && getTooltips().isPresent())
             if (!focused && isHighlighted(mouseX, mouseY))
                 ScreenHelper.getLastOverlay().addTooltip(QueuedTooltip.create(getTooltips().get().split("\n")));
             else if (focused)
@@ -29,7 +35,7 @@ public abstract class ClickableLabelWidget extends LabelWidget {
     
     @Override
     public boolean mouseClicked(double mouseX, double mouseY, int button) {
-        if (button == 0 && isHighlighted(mouseX, mouseY)) {
+        if (button == 0 && clickable && isHighlighted(mouseX, mouseY)) {
             onLabelClicked();
             return true;
         }
@@ -42,22 +48,24 @@ public abstract class ClickableLabelWidget extends LabelWidget {
     
     @Override
     public boolean keyPressed(int int_1, int int_2, int int_3) {
-        if (int_1 != 257 && int_1 != 32 && int_1 != 335) {
+        if (!clickable)
             return false;
-        } else {
-            this.onLabelClicked();
-            return true;
-        }
+        if (int_1 != 257 && int_1 != 32 && int_1 != 335)
+            return false;
+        this.onLabelClicked();
+        return true;
     }
     
     @Override
     public boolean changeFocus(boolean boolean_1) {
+        if (!clickable)
+            return false;
         this.focused = !this.focused;
         return true;
     }
     
     public boolean isHovered(int mouseX, int mouseY) {
-        return isHighlighted(mouseX, mouseY) || focused;
+        return clickable && (isHighlighted(mouseX, mouseY) || focused);
     }
     
     public abstract void onLabelClicked();