aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rwxr-xr-xsrc/main/java/me/shedaniel/gui/GuiItemList.java76
-rwxr-xr-xsrc/main/java/me/shedaniel/impl/REIRecipeManager.java26
2 files changed, 62 insertions, 40 deletions
diff --git a/src/main/java/me/shedaniel/gui/GuiItemList.java b/src/main/java/me/shedaniel/gui/GuiItemList.java
index 18f8c3db8..153758ab9 100755
--- a/src/main/java/me/shedaniel/gui/GuiItemList.java
+++ b/src/main/java/me/shedaniel/gui/GuiItemList.java
@@ -4,7 +4,6 @@ import com.google.common.collect.ImmutableList;
import com.mojang.blaze3d.platform.GlStateManager;
import me.shedaniel.ClientListener;
import me.shedaniel.Core;
-import me.shedaniel.api.IRecipe;
import me.shedaniel.config.REIItemListOrdering;
import me.shedaniel.gui.widget.Button;
import me.shedaniel.gui.widget.Control;
@@ -19,11 +18,9 @@ import net.minecraft.client.network.ClientPlayerEntity;
import net.minecraft.client.render.GuiLighting;
import net.minecraft.client.resource.language.I18n;
import net.minecraft.client.util.Window;
-import net.minecraft.item.Item;
import net.minecraft.item.ItemGroup;
import net.minecraft.item.ItemStack;
-import net.minecraft.text.TextComponent;
-import net.minecraft.text.TranslatableTextComponent;
+import net.minecraft.item.Items;
import net.minecraft.util.DefaultedList;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.MathHelper;
@@ -147,7 +144,7 @@ public class GuiItemList extends Drawable {
private Rectangle getCraftableToggleArea() {
Rectangle searchBoxArea = getSearchBoxArea();
- searchBoxArea.setLocation(searchBoxArea.x + searchBoxArea.width + 4, searchBoxArea.y - 2);
+ searchBoxArea.setLocation(searchBoxArea.x + searchBoxArea.width + 4, searchBoxArea.y - 1);
searchBoxArea.setSize(20, 20);
return searchBoxArea;
}
@@ -210,16 +207,12 @@ public class GuiItemList extends Drawable {
return;
if (MinecraftClient.getInstance().currentGui instanceof ContainerGui)
overlayedGui = (ContainerGui) MinecraftClient.getInstance().currentGui;
- if (Core.runtimeConfig.craftableOnly) {
- List<ItemStack> currentPlayerItems = getInventoryItemsTypes();
- for(ItemStack item : lastPlayerItems)
- if (!currentPlayerItems.contains(item) || currentPlayerItems.size() != lastPlayerItems.size()) {
- lastPlayerItems = new ArrayList<>(currentPlayerItems);
- updateView();
- }
- }
if (needsResize == true || oldGuiLeft != ((IMixinContainerGui) overlayedGui).getGuiLeft())
resize();
+ else if (Core.runtimeConfig.craftableOnly && (!hasSameListContent(new LinkedList<>(lastPlayerItems), getInventoryItemsTypes()) || (getInventoryItemsTypes().size() != lastPlayerItems.size()))) {
+ this.lastPlayerItems = new LinkedList<>(getInventoryItemsTypes());
+ updateView();
+ }
GlStateManager.pushMatrix();
updateButtons();
controls.forEach(Control::draw);
@@ -229,12 +222,26 @@ public class GuiItemList extends Drawable {
GlStateManager.popMatrix();
}
+ private boolean hasSameListContent(List<ItemStack> list1, List<ItemStack> list2) {
+ Collections.sort(list1, (itemStack, t1) -> {
+ return itemStack.getDisplayName().getFormattedText().compareToIgnoreCase(t1.getDisplayName().getFormattedText());
+ });
+ Collections.sort(list2, (itemStack, t1) -> {
+ return itemStack.getDisplayName().getFormattedText().compareToIgnoreCase(t1.getDisplayName().getFormattedText());
+ });
+ String lastString = String.join("", list1.stream().map(itemStack -> {
+ return itemStack.getDisplayName().getFormattedText();
+ }).collect(Collectors.toList())), currentString = String.join("", list2.stream().map(itemStack -> {
+ return itemStack.getDisplayName().getFormattedText();
+ }).collect(Collectors.toList()));
+ return lastString.equals(currentString);
+ }
+
private void updateButtons() {
buttonLeft.setEnabled(MathHelper.ceil(view.size() / displaySlots.size()) > 1);
buttonRight.setEnabled(MathHelper.ceil(view.size() / displaySlots.size()) > 1);
}
-
public boolean btnRightClicked(int button) {
if (button == 0) {
page++;
@@ -260,7 +267,6 @@ public class GuiItemList extends Drawable {
public boolean cheatClicked(int button) {
if (button == 0) {
cheatMode = !cheatMode;
-
buttonCheating.setString(getCheatModeText());
return true;
}
@@ -268,12 +274,7 @@ public class GuiItemList extends Drawable {
}
private String getCheatModeText() {
- if (cheatMode) {
- TextComponent cheat = new TranslatableTextComponent("text.rei.cheat", new Object[]{null});
- return cheat.getFormattedText();
- }
- TextComponent noCheat = new TranslatableTextComponent("text.rei.nocheat", new Object[]{null});
- return noCheat.getFormattedText();
+ return I18n.translate(String.format("%s%s", "text.rei.", cheatMode ? "cheat" : "nocheat"));
}
protected void updateView() {
@@ -289,12 +290,10 @@ public class GuiItemList extends Drawable {
itemGroups.add(null);
if (Core.config.itemListOrdering != REIItemListOrdering.REGISTRY)
Collections.sort(stackList, (itemStack, t1) -> {
- switch (Core.config.itemListOrdering) {
- case NAME:
- return itemStack.getDisplayName().getFormattedText().compareToIgnoreCase(t1.getDisplayName().getFormattedText());
- case ITEM_GROUPS:
- return itemGroups.indexOf(itemStack.getItem().getItemGroup()) - itemGroups.indexOf(t1.getItem().getItemGroup());
- }
+ if (Core.config.itemListOrdering.equals(REIItemListOrdering.NAME))
+ return itemStack.getDisplayName().getFormattedText().compareToIgnoreCase(t1.getDisplayName().getFormattedText());
+ if (Core.config.itemListOrdering.equals(REIItemListOrdering.ITEM_GROUPS))
+ return itemGroups.indexOf(itemStack.getItem().getItemGroup()) - itemGroups.indexOf(t1.getItem().getItemGroup());
return 0;
});
if (!Core.config.isAscending)
@@ -318,21 +317,15 @@ public class GuiItemList extends Drawable {
stackList.stream().filter(itemStack -> filterItem(itemStack, arguments)).forEachOrdered(stacks::add);
});
}
- List<ItemStack> workingItems = ClientListener.stackList == null ? new ArrayList<>() : ClientListener.stackList;
+ List<ItemStack> workingItems = ClientListener.stackList == null || (Core.runtimeConfig.craftableOnly && lastPlayerItems.size() > 0) ? new ArrayList<>() : ClientListener.stackList;
if (Core.runtimeConfig.craftableOnly) {
- List<IRecipe> workingRecipes = new ArrayList<>();
- REIRecipeManager.instance().findUsageForItems(getInventoryItemsTypes()).forEach(workingRecipes::add);
- workingItems = new ArrayList<>();
- for(IRecipe workingRecipe : workingRecipes) {
- List list = workingRecipe.getOutput();
- try {
- workingItems.addAll((List<ItemStack>) list);
- } catch (Exception e) {
- }
- }
+ REIRecipeManager.instance().findCraftableByItems(lastPlayerItems).forEach(workingItems::add);
+ workingItems.addAll(lastPlayerItems);
}
final List<ItemStack> finalWorkingItems = workingItems;
view.addAll(stacks.stream().filter(itemStack -> {
+ if (!Core.runtimeConfig.craftableOnly)
+ return true;
for(ItemStack workingItem : finalWorkingItems)
if (itemStack.isEqualIgnoreTags(workingItem))
return true;
@@ -346,8 +339,11 @@ public class GuiItemList extends Drawable {
List<DefaultedList<ItemStack>> field_7543 = ImmutableList.of(MinecraftClient.getInstance().player.inventory.main, MinecraftClient.getInstance().player.inventory.armor
, MinecraftClient.getInstance().player.inventory.offHand);
List<ItemStack> inventoryStacks = new ArrayList<>();
- field_7543.forEach(inventoryStacks::addAll);
- return inventoryStacks.stream().distinct().collect(Collectors.toList());
+ field_7543.forEach(itemStacks -> itemStacks.forEach(itemStack -> {
+ if (!itemStack.getItem().equals(Items.AIR))
+ inventoryStacks.add(itemStack);
+ }));
+ return inventoryStacks;
}
private boolean filterItem(ItemStack itemStack, List<SearchArgument> arguments) {
diff --git a/src/main/java/me/shedaniel/impl/REIRecipeManager.java b/src/main/java/me/shedaniel/impl/REIRecipeManager.java
index fbecbd6ac..2f5ed50c6 100755
--- a/src/main/java/me/shedaniel/impl/REIRecipeManager.java
+++ b/src/main/java/me/shedaniel/impl/REIRecipeManager.java
@@ -16,6 +16,7 @@ import java.awt.*;
import java.util.*;
import java.util.List;
import java.util.function.Function;
+import java.util.stream.Collectors;
/**
* Created by James on 8/7/2018.
@@ -137,6 +138,7 @@ public class REIRecipeManager implements IRecipeManager {
return categories;
}
+ @Deprecated
public List<IRecipe> findUsageForItems(List<ItemStack> types) {
List<IRecipe> recipes = new ArrayList<>();
types.forEach(item -> {
@@ -146,6 +148,30 @@ public class REIRecipeManager implements IRecipeManager {
return recipes;
}
+ public List<ItemStack> findCraftableByItems(List<ItemStack> types) {
+ List<ItemStack> craftables = new ArrayList<>();
+ for(List<IRecipe> value : recipeList.values())
+ for(IRecipe iRecipe : value) {
+ int slotsCraftable = 0;
+ for(List<ItemStack> slot : ((List<List<ItemStack>>) iRecipe.getRecipeRequiredInput())) {
+ boolean slotDone = false;
+ for(ItemStack possibleType : types) {
+ for(ItemStack slotPossible : slot)
+ if (ItemStack.areEqualIgnoreTags(slotPossible, possibleType)) {
+ slotsCraftable++;
+ slotDone = true;
+ break;
+ }
+ if (slotDone)
+ break;
+ }
+ }
+ if (slotsCraftable == iRecipe.getRecipeRequiredInput().size())
+ craftables.addAll((List<ItemStack>) iRecipe.getOutput());
+ }
+ return craftables.stream().distinct().collect(Collectors.toList());
+ }
+
public List<IDisplayCategory> getAdatapersForOutput(ItemStack stack) {
return null;
}