diff options
| author | Unknown <shekwancheung0528@gmail.com> | 2019-01-09 14:28:42 +0800 |
|---|---|---|
| committer | Unknown <shekwancheung0528@gmail.com> | 2019-01-09 14:28:42 +0800 |
| commit | 4ab17cd1d282dc23d2a4afdc5f300227be1fc5fb (patch) | |
| tree | 73ba8f73002399c5990cc5cb23db57f8be630ea9 | |
| parent | 72e1653cbb38282f8dce59a00fb381e18bfc795d (diff) | |
| download | RoughlyEnoughItems-4ab17cd1d282dc23d2a4afdc5f300227be1fc5fb.tar.gz RoughlyEnoughItems-4ab17cd1d282dc23d2a4afdc5f300227be1fc5fb.tar.bz2 RoughlyEnoughItems-4ab17cd1d282dc23d2a4afdc5f300227be1fc5fb.zip | |
Basic Craftable Only
| -rwxr-xr-x | build.gradle | 2 | ||||
| -rwxr-xr-x | src/main/java/me/shedaniel/gui/GuiItemList.java | 76 | ||||
| -rwxr-xr-x | src/main/java/me/shedaniel/impl/REIRecipeManager.java | 26 |
3 files changed, 63 insertions, 41 deletions
diff --git a/build.gradle b/build.gradle index 92683e845..6e7277276 100755 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ sourceCompatibility = 1.8 targetCompatibility = 1.8 archivesBaseName = "RoughlyEnoughItems" -version = "1.5.1-17" +version = "1.5.1-18" minecraft { } 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; } |
