Unknown 6 éve
szülő
commit
768dea2e91

+ 36 - 9
src/main/java/me/shedaniel/rei/gui/renderables/SimpleRecipeRenderer.java

@@ -15,6 +15,7 @@ import net.minecraft.util.Identifier;
 import net.minecraft.util.Pair;
 import net.minecraft.util.math.MathHelper;
 
+import java.util.Comparator;
 import java.util.List;
 import java.util.Optional;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -23,6 +24,19 @@ import java.util.stream.Collectors;
 
 public class SimpleRecipeRenderer extends RecipeRenderer {
     
+    public static final Comparator<ItemStack> ITEM_STACK_COMPARATOR = (o1, o2) -> {
+        if (o1.getItem() == o2.getItem()) {
+            if (o1.getAmount() != o2.getAmount())
+                return o1.getAmount() - o2.getAmount();
+            int compare = Boolean.compare(o1.hasTag(), o2.hasTag());
+            if (compare != 0)
+                return compare;
+            if (o1.getTag().getSize() != o2.getTag().getSize())
+                return o1.getTag().getSize() - o2.getTag().getSize();
+            return o1.getTag().hashCode() - o2.getTag().hashCode();
+        }
+        return o1.getItem().hashCode() - o2.getItem().hashCode();
+    };
     private static final Identifier CHEST_GUI_TEXTURE = new Identifier("roughlyenoughitems", "textures/gui/recipecontainer.png");
     private List<ItemStackRenderer> inputRenderer;
     private ItemStackRenderer outputRenderer;
@@ -31,7 +45,7 @@ public class SimpleRecipeRenderer extends RecipeRenderer {
         List<Pair<List<ItemStack>, AtomicInteger>> newList = Lists.newArrayList();
         List<Pair<List<ItemStack>, Integer>> a = input.get().stream().map(stacks -> new Pair<>(stacks, stacks.stream().map(ItemStack::getAmount).max(Integer::compareTo).orElse(1))).collect(Collectors.toList());
         for(Pair<List<ItemStack>, Integer> pair : a) {
-            Optional<Pair<List<ItemStack>, AtomicInteger>> any = newList.stream().filter(pairr -> pair.getLeft().equals(pairr.getLeft())).findAny();
+            Optional<Pair<List<ItemStack>, AtomicInteger>> any = newList.stream().filter(pairr -> equalsList(pair.getLeft(), pairr.getLeft())).findAny();
             if (any.isPresent()) {
                 any.get().getRight().addAndGet(pair.getRight());
             } else
@@ -48,9 +62,22 @@ public class SimpleRecipeRenderer extends RecipeRenderer {
         this.outputRenderer = Renderable.fromItemStacks(output.get().stream().filter(stack -> !stack.isEmpty()).collect(Collectors.toList()));
     }
     
+    public static boolean equalsList(List<ItemStack> list_1, List<ItemStack> list_2) {
+        List<ItemStack> stacks_1 = list_1.stream().distinct().sorted(ITEM_STACK_COMPARATOR).collect(Collectors.toList());
+        List<ItemStack> stacks_2 = list_2.stream().distinct().sorted(ITEM_STACK_COMPARATOR).collect(Collectors.toList());
+        if (stacks_1.equals(stacks_2))
+            return true;
+        if (stacks_1.size() != stacks_2.size())
+            return false;
+        for(int i = 0; i < stacks_1.size(); i++)
+            if (!stacks_1.get(i).isEqualIgnoreTags(stacks_2.get(i)))
+                return false;
+        return true;
+    }
+    
     @Override
     public void render(int x, int y, double mouseX, double mouseY, float delta) {
-        int xx = x + 5, yy = y + 5;
+        int xx = x + 4, yy = y + 2;
         int j = 0;
         int itemsPerLine = getItemsPerLine();
         for(ItemStackRenderer itemStackRenderer : inputRenderer) {
@@ -59,18 +86,18 @@ public class SimpleRecipeRenderer extends RecipeRenderer {
             itemStackRenderer.render(xx + 8, yy + 6, mouseX, mouseY, delta);
             xx += 18;
             j++;
-            if (j >= getItemsPerLine() - 3) {
+            if (j >= getItemsPerLine() - 2) {
                 yy += 18;
                 xx = x + 5;
                 j = 0;
             }
         }
-        xx = x + 5 + 18 * (getItemsPerLine() - 3);
+        xx = x + 5 + 18 * (getItemsPerLine() - 2);
         yy = y + getHeight() / 2 - 8;
         GuiLighting.disable();
         MinecraftClient.getInstance().getTextureManager().bindTexture(CHEST_GUI_TEXTURE);
-        blit(xx, yy, 0, 28, 36, 18);
-        xx += 36;
+        blit(xx, yy, 0, 28, 18, 18);
+        xx += 18;
         outputRenderer.setBlitOffset(getBlitOffset() + 50);
         outputRenderer.drawTooltip = MinecraftClient.getInstance().currentScreen instanceof VillagerRecipeViewingScreen;
         outputRenderer.render(xx + 8, yy + 6, mouseX, mouseY, delta);
@@ -78,15 +105,15 @@ public class SimpleRecipeRenderer extends RecipeRenderer {
     
     @Override
     public int getHeight() {
-        return 10 + getItemsHeight() * 18;
+        return 4 + getItemsHeight() * 18;
     }
     
     public int getItemsHeight() {
-        return MathHelper.ceil(((float) inputRenderer.size()) / (getItemsPerLine() - 3));
+        return MathHelper.ceil(((float) inputRenderer.size()) / (getItemsPerLine() - 2));
     }
     
     public int getItemsPerLine() {
-        return MathHelper.floor((getWidth() - 10f) / 18f);
+        return MathHelper.floor((getWidth() - 4f) / 18f);
     }
     
 }

BIN
src/main/resources/assets/roughlyenoughitems/textures/gui/recipecontainer.png