diff options
| author | Unknown <shekwancheung0528@gmail.com> | 2019-01-12 22:58:58 +0800 |
|---|---|---|
| committer | Unknown <shekwancheung0528@gmail.com> | 2019-01-12 22:58:58 +0800 |
| commit | aee1137515d4f74f54c8ea70e71e742661213bf2 (patch) | |
| tree | 243119ac2f207315d46d3fe63c7e8dae9eae217c | |
| parent | 6b36550eba64e31dcfa70dab7440f168d913350c (diff) | |
| download | RoughlyEnoughItems-2.0.0.35.tar.gz RoughlyEnoughItems-2.0.0.35.tar.bz2 RoughlyEnoughItems-2.0.0.35.zip | |
Show Craftables Filterv2.0.0.35
9 files changed, 141 insertions, 14 deletions
diff --git a/build.gradle b/build.gradle index 2bed5b965..282eec6e9 100755 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ sourceCompatibility = 1.8 targetCompatibility = 1.8 archivesBaseName = "RoughlyEnoughItems" -version = "2.0.0.34" +version = "2.0.0.35" minecraft { } diff --git a/src/main/java/me/shedaniel/rei/client/ClientHelper.java b/src/main/java/me/shedaniel/rei/client/ClientHelper.java index 8ca032457..6fad5e437 100644 --- a/src/main/java/me/shedaniel/rei/client/ClientHelper.java +++ b/src/main/java/me/shedaniel/rei/client/ClientHelper.java @@ -1,5 +1,6 @@ package me.shedaniel.rei.client; +import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import io.netty.buffer.Unpooled; import me.shedaniel.rei.RoughlyEnoughItemsCore; @@ -16,9 +17,7 @@ import net.fabricmc.fabric.impl.client.keybinding.KeyBindingRegistryImpl; import net.fabricmc.loader.FabricLoader; import net.minecraft.client.MinecraftClient; import net.minecraft.client.Mouse; -import net.minecraft.client.gui.ContainerGui; import net.minecraft.client.gui.Gui; -import net.minecraft.client.resource.language.I18n; import net.minecraft.client.util.InputUtil; import net.minecraft.enchantment.Enchantment; import net.minecraft.enchantment.EnchantmentHelper; @@ -32,9 +31,8 @@ import net.minecraft.util.PacketByteBuf; import net.minecraft.util.registry.Registry; import java.awt.*; -import java.awt.event.KeyEvent; +import java.util.ArrayList; import java.util.HashMap; -import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -126,6 +124,17 @@ public class ClientHelper implements ClientLoaded, ClientModInitializer { MinecraftClient.getInstance().openGui(new ConfigWidget(parent)); } + public static List<ItemStack> getInventoryItemsTypes() { + 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(itemStacks -> itemStacks.forEach(itemStack -> { + if (!itemStack.getItem().equals(Items.AIR)) + inventoryStacks.add(itemStack); + })); + return inventoryStacks; + } + @Override public void clientLoaded() { Registry.ITEM.forEach(item -> { diff --git a/src/main/java/me/shedaniel/rei/client/ConfigHelper.java b/src/main/java/me/shedaniel/rei/client/ConfigHelper.java index 5261ee291..3f1cb79c2 100644 --- a/src/main/java/me/shedaniel/rei/client/ConfigHelper.java +++ b/src/main/java/me/shedaniel/rei/client/ConfigHelper.java @@ -67,18 +67,22 @@ public class ConfigHelper { config.itemListOrdering = ordering; } - public void setAscending(boolean ascending) { - config.isAscending = ascending; - } - public boolean isAscending() { return config.isAscending; } + public void setAscending(boolean ascending) { + config.isAscending = ascending; + } + public boolean craftableOnly() { return craftableOnly && config.enableCraftableOnlyButton; } + public void toggleCraftableOnly() { + craftableOnly = !craftableOnly; + } + public boolean showCraftableOnlyButton() { return config.enableCraftableOnlyButton; } diff --git a/src/main/java/me/shedaniel/rei/client/GuiHelper.java b/src/main/java/me/shedaniel/rei/client/GuiHelper.java index f9b14e4a8..bae2d852a 100644 --- a/src/main/java/me/shedaniel/rei/client/GuiHelper.java +++ b/src/main/java/me/shedaniel/rei/client/GuiHelper.java @@ -1,15 +1,20 @@ package me.shedaniel.rei.client; +import com.google.common.collect.Lists; import me.shedaniel.rei.gui.ContainerGuiOverlay; import me.shedaniel.rei.gui.widget.TextFieldWidget; import me.shedaniel.rei.listeners.IMixinContainerGui; import net.minecraft.client.gui.ContainerGui; +import net.minecraft.item.ItemStack; + +import java.util.List; public class GuiHelper { public static TextFieldWidget searchField; private static boolean overlayVisible = true; private static ContainerGuiOverlay overlay; + public static List<ItemStack> inventoryStacks = Lists.newArrayList(); public static boolean isOverlayVisible() { return overlayVisible; @@ -27,6 +32,10 @@ public class GuiHelper { return overlay; } + public static ContainerGuiOverlay getLastOverlay() { + return overlay; + } + public static void setOverlay(ContainerGuiOverlay overlay) { GuiHelper.overlay = overlay; overlay.onInitialized(); diff --git a/src/main/java/me/shedaniel/rei/gui/ContainerGuiOverlay.java b/src/main/java/me/shedaniel/rei/gui/ContainerGuiOverlay.java index 5a5581597..a1e0a4cf9 100644 --- a/src/main/java/me/shedaniel/rei/gui/ContainerGuiOverlay.java +++ b/src/main/java/me/shedaniel/rei/gui/ContainerGuiOverlay.java @@ -18,7 +18,10 @@ import net.minecraft.util.math.MathHelper; import java.awt.*; import java.util.ArrayList; +import java.util.Collections; +import java.util.LinkedList; import java.util.List; +import java.util.stream.Collectors; public class ContainerGuiOverlay extends Gui { @@ -113,18 +116,34 @@ public class ContainerGuiOverlay extends Gui { GuiHelper.searchField.setBounds(getTextFieldArea()); this.widgets.add(GuiHelper.searchField); GuiHelper.searchField.setText(searchTerm); + if (RoughlyEnoughItemsCore.getConfigHelper().showCraftableOnlyButton()) + this.widgets.add(new CraftableToggleButtonWidget(containerGui, getCraftableToggleArea()) { + @Override + public void onPressed(int button, double mouseX, double mouseY) { + RoughlyEnoughItemsCore.getConfigHelper().toggleCraftableOnly(); + itemListOverlay.updateList(page, searchTerm); + } + }); this.listeners.addAll(widgets); } private Rectangle getTextFieldArea() { + int widthRemoved = RoughlyEnoughItemsCore.getConfigHelper().showCraftableOnlyButton() ? 22 : 0; if (RoughlyEnoughItemsCore.getConfigHelper().sideSearchField()) - return new Rectangle(rectangle.x + 2, window.getScaledHeight() - 22, rectangle.width - 6, 18); + return new Rectangle(rectangle.x + 2, window.getScaledHeight() - 22, rectangle.width - 6 - widthRemoved, 18); if (MinecraftClient.getInstance().currentGui instanceof RecipeViewingWidget) { RecipeViewingWidget widget = (RecipeViewingWidget) MinecraftClient.getInstance().currentGui; - return new Rectangle(widget.getBounds().x, window.getScaledHeight() - 22, widget.getBounds().width, 18); + return new Rectangle(widget.getBounds().x, window.getScaledHeight() - 22, widget.getBounds().width - widthRemoved, 18); } - return new Rectangle(containerGui.getContainerLeft(), window.getScaledHeight() - 22, containerGui.getContainerWidth(), 18); + return new Rectangle(containerGui.getContainerLeft(), window.getScaledHeight() - 22, containerGui.getContainerWidth() - widthRemoved, 18); + } + + private Rectangle getCraftableToggleArea() { + Rectangle searchBoxArea = getTextFieldArea(); + searchBoxArea.setLocation(searchBoxArea.x + searchBoxArea.width + 4, searchBoxArea.y - 1); + searchBoxArea.setSize(20, 20); + return searchBoxArea; } private String getCheatModeText() { @@ -140,8 +159,13 @@ public class ContainerGuiOverlay extends Gui { } public void render(int mouseX, int mouseY, float partialTicks) { + List<ItemStack> currentStacks = ClientHelper.getInventoryItemsTypes(); if (getLeft() != lastLeft) onInitialized(); + else if (RoughlyEnoughItemsCore.getConfigHelper().craftableOnly() && (!hasSameListContent(new LinkedList<>(GuiHelper.inventoryStacks), currentStacks) || (currentStacks.size() != GuiHelper.inventoryStacks.size()))) { + GuiHelper.inventoryStacks = ClientHelper.getInventoryItemsTypes(); + itemListOverlay.updateList(page, searchTerm); + } GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F); GuiLighting.disable(); this.draw(mouseX, mouseY, partialTicks); @@ -151,6 +175,21 @@ public class ContainerGuiOverlay extends Gui { GuiLighting.disable(); } + 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); + } + public void setContainerGui(IMixinContainerGui containerGui) { this.containerGui = containerGui; } diff --git a/src/main/java/me/shedaniel/rei/gui/widget/CraftableToggleButtonWidget.java b/src/main/java/me/shedaniel/rei/gui/widget/CraftableToggleButtonWidget.java new file mode 100644 index 000000000..7532ed4a6 --- /dev/null +++ b/src/main/java/me/shedaniel/rei/gui/widget/CraftableToggleButtonWidget.java @@ -0,0 +1,59 @@ +package me.shedaniel.rei.gui.widget; + +import com.mojang.blaze3d.platform.GlStateManager; +import me.shedaniel.rei.RoughlyEnoughItemsCore; +import me.shedaniel.rei.client.ClientHelper; +import me.shedaniel.rei.client.GuiHelper; +import me.shedaniel.rei.listeners.IMixinContainerGui; +import net.minecraft.block.Blocks; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.render.GuiLighting; +import net.minecraft.client.render.item.ItemRenderer; +import net.minecraft.client.resource.language.I18n; +import net.minecraft.item.ItemStack; +import net.minecraft.util.Identifier; + +import java.awt.*; +import java.util.Arrays; + +public abstract class CraftableToggleButtonWidget extends ButtonWidget { + + protected static final Identifier CHEST_GUI_TEXTURE = new Identifier("roughlyenoughitems", "textures/gui/recipecontainer.png"); + private ItemRenderer itemRenderer; + private IMixinContainerGui containerGui; + + public CraftableToggleButtonWidget(IMixinContainerGui containerGui, Rectangle rectangle) { + this(containerGui, rectangle.x, rectangle.y, rectangle.width, rectangle.height); + this.itemRenderer = MinecraftClient.getInstance().getItemRenderer(); + } + + public CraftableToggleButtonWidget(IMixinContainerGui containerGui, int x, int y, int width, int height) { + super(x, y, width, height, ""); + this.itemRenderer = MinecraftClient.getInstance().getItemRenderer(); + } + + @Override + public void draw(int mouseX, int mouseY, float partialTicks) { + super.draw(mouseX, mouseY, partialTicks); + + GuiLighting.enableForItems(); + this.itemRenderer.zOffset = 0.0F; + this.itemRenderer.renderItemAndGlowInGui(new ItemStack(Blocks.CRAFTING_TABLE), x + 2, y + 2); + this.itemRenderer.zOffset = 0.0F; + GuiLighting.disable(); + MinecraftClient.getInstance().getTextureManager().bindTexture(CHEST_GUI_TEXTURE); + GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F); + this.zOffset = 100f; + this.drawTexturedRect(x, y, (56 + (RoughlyEnoughItemsCore.getConfigHelper().craftableOnly() ? 0 : 20)), 202, 20, 20); + this.zOffset = 0f; + if (getBounds().contains(mouseX, mouseY)) + drawTooltip(); + } + + private void drawTooltip() { + GuiHelper.getLastOverlay() + .addTooltip(new QueuedTooltip(ClientHelper.getMouseLocation(), Arrays.asList(I18n.translate(RoughlyEnoughItemsCore.getConfigHelper().craftableOnly() + ? "text.rei.showing_craftable" : "text.rei.showing_all")))); + } + +} diff --git a/src/main/java/me/shedaniel/rei/gui/widget/ItemListOverlay.java b/src/main/java/me/shedaniel/rei/gui/widget/ItemListOverlay.java index f515a6ede..1f4761197 100644 --- a/src/main/java/me/shedaniel/rei/gui/widget/ItemListOverlay.java +++ b/src/main/java/me/shedaniel/rei/gui/widget/ItemListOverlay.java @@ -9,6 +9,7 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.Drawable; import net.minecraft.client.item.TooltipOptions; import net.minecraft.client.network.ClientPlayerEntity; +import net.minecraft.client.render.GuiLighting; import net.minecraft.client.resource.language.I18n; import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; @@ -57,7 +58,7 @@ public class ItemListOverlay extends Drawable implements IWidget { this.rectangle = rect; if (ClientHelper.getItemList().isEmpty()) RoughlyEnoughItemsCore.getListeners(ClientLoaded.class).forEach(ClientLoaded::clientLoaded); - currentDisplayed = processSearchTerm(searchTerm, ClientHelper.getItemList(), Lists.newArrayList()); + currentDisplayed = processSearchTerm(searchTerm, ClientHelper.getItemList(), GuiHelper.inventoryStacks); this.widgets.clear(); this.page = page; calculateListSize(rect); diff --git a/src/main/java/me/shedaniel/rei/plugin/DefaultBrewingDisplay.java b/src/main/java/me/shedaniel/rei/plugin/DefaultBrewingDisplay.java index 1b0057e11..187ee4d67 100644 --- a/src/main/java/me/shedaniel/rei/plugin/DefaultBrewingDisplay.java +++ b/src/main/java/me/shedaniel/rei/plugin/DefaultBrewingDisplay.java @@ -1,8 +1,10 @@ package me.shedaniel.rei.plugin; +import com.google.common.collect.Lists; import me.shedaniel.rei.api.IRecipeDisplay; import net.minecraft.block.Blocks; import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; import net.minecraft.recipe.Ingredient; import net.minecraft.recipe.Recipe; import net.minecraft.util.Identifier; @@ -51,4 +53,8 @@ public class DefaultBrewingDisplay implements IRecipeDisplay { return stack; } + @Override + public List<List<ItemStack>> getRequiredItems() { + return Arrays.asList(Arrays.asList(new ItemStack(Items.AIR))); + } } diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 0659579d4..ad3bbdca7 100755 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -2,7 +2,7 @@ "id": "roughlyenoughitems", "name": "RoughlyEnoughItems", "description": "To allow players to view items and recipes.", - "version": "2.0.0.34", + "version": "2.0.0.35", "side": "client", "authors": [ "Danielshe" |
