Change search of crafter manager to search for items instead of category
This commit is contained in:
@@ -1,11 +1,12 @@
|
|||||||
package com.raoulvdberge.refinedstorage.container;
|
package com.raoulvdberge.refinedstorage.container;
|
||||||
|
|
||||||
|
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.CraftingPattern;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeCrafterManager;
|
import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeCrafterManager;
|
||||||
import com.raoulvdberge.refinedstorage.container.slot.SlotCrafterManager;
|
import com.raoulvdberge.refinedstorage.container.slot.SlotCrafterManager;
|
||||||
import com.raoulvdberge.refinedstorage.gui.IResizableDisplay;
|
import com.raoulvdberge.refinedstorage.gui.IResizableDisplay;
|
||||||
import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBase;
|
import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBase;
|
||||||
|
import com.raoulvdberge.refinedstorage.item.ItemPattern;
|
||||||
import com.raoulvdberge.refinedstorage.tile.TileCrafterManager;
|
import com.raoulvdberge.refinedstorage.tile.TileCrafterManager;
|
||||||
import net.minecraft.client.resources.I18n;
|
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.entity.player.EntityPlayerMP;
|
import net.minecraft.entity.player.EntityPlayerMP;
|
||||||
import net.minecraft.inventory.Container;
|
import net.minecraft.inventory.Container;
|
||||||
@@ -68,6 +69,7 @@ public class ContainerCrafterManager extends ContainerBase {
|
|||||||
private NetworkNodeCrafterManager crafterManager;
|
private NetworkNodeCrafterManager crafterManager;
|
||||||
private Map<String, Integer> containerData;
|
private Map<String, Integer> containerData;
|
||||||
private Map<String, IItemHandlerModifiable> dummyInventories = new HashMap<>();
|
private Map<String, IItemHandlerModifiable> dummyInventories = new HashMap<>();
|
||||||
|
private Map<String, Integer> headings = new HashMap<>();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addListener(IContainerListener listener) {
|
public void addListener(IContainerListener listener) {
|
||||||
@@ -112,21 +114,20 @@ public class ContainerCrafterManager extends ContainerBase {
|
|||||||
|
|
||||||
this.inventorySlots.clear();
|
this.inventorySlots.clear();
|
||||||
this.inventoryItemStacks.clear();
|
this.inventoryItemStacks.clear();
|
||||||
|
this.headings.clear();
|
||||||
|
|
||||||
addPlayerInventory(8, display.getYPlayerInventory());
|
addPlayerInventory(8, display.getYPlayerInventory());
|
||||||
|
|
||||||
int y = 19 + 18 - display.getCurrentOffset() * 18;
|
int y = 19 + 18 - display.getCurrentOffset() * 18;
|
||||||
int x = 8;
|
int x = 8;
|
||||||
|
|
||||||
for (Map.Entry<String, Integer> entry : containerData.entrySet()) {
|
for (Map.Entry<String, Integer> category : containerData.entrySet()) {
|
||||||
boolean visible = I18n.format(entry.getKey()).toLowerCase().contains(display.getSearchFieldText().toLowerCase());
|
|
||||||
|
|
||||||
IItemHandlerModifiable dummy;
|
IItemHandlerModifiable dummy;
|
||||||
|
|
||||||
if (newContainerData == null) { // We're only resizing, get the previous inventory...
|
if (newContainerData == null) { // We're only resizing, get the previous inventory...
|
||||||
dummy = dummyInventories.get(entry.getKey());
|
dummy = dummyInventories.get(category.getKey());
|
||||||
} else {
|
} else {
|
||||||
dummyInventories.put(entry.getKey(), dummy = new ItemHandlerBase(entry.getValue()) {
|
dummyInventories.put(category.getKey(), dummy = new ItemHandlerBase(category.getValue()) {
|
||||||
@Override
|
@Override
|
||||||
public int getSlotLimit(int slot) {
|
public int getSlotLimit(int slot) {
|
||||||
return 1;
|
return 1;
|
||||||
@@ -134,27 +135,60 @@ public class ContainerCrafterManager extends ContainerBase {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int slot = 0; slot < entry.getValue(); ++slot) {
|
boolean foundItemsInCategory = false;
|
||||||
|
|
||||||
|
int yHeading = y - 19;
|
||||||
|
|
||||||
|
for (int slot = 0; slot < category.getValue(); ++slot) {
|
||||||
|
boolean visible = true;
|
||||||
|
|
||||||
|
if (!display.getSearchFieldText().trim().isEmpty()) {
|
||||||
|
ItemStack stack = dummy.getStackInSlot(slot);
|
||||||
|
|
||||||
|
if (stack.isEmpty()) {
|
||||||
|
visible = false;
|
||||||
|
} else {
|
||||||
|
CraftingPattern pattern = ItemPattern.getPatternFromCache(crafterManager.getWorld(), stack);
|
||||||
|
|
||||||
|
visible = false;
|
||||||
|
|
||||||
|
for (ItemStack output : pattern.getOutputs()) {
|
||||||
|
if (output.getDisplayName().toLowerCase().contains(display.getSearchFieldText().toLowerCase())) {
|
||||||
|
visible = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
addSlotToContainer(new SlotCrafterManager(dummy, slot, x, y, visible, display, crafterManager));
|
addSlotToContainer(new SlotCrafterManager(dummy, slot, x, y, visible, display, crafterManager));
|
||||||
|
|
||||||
if (visible) {
|
if (visible) {
|
||||||
|
foundItemsInCategory = true;
|
||||||
|
|
||||||
x += 18;
|
x += 18;
|
||||||
|
|
||||||
// Don't increase y level if we are on our last slot row (otherwise we do y += 18 * 3)
|
// Don't increase y level if we are on our last slot row (otherwise we do y += 18 * 3)
|
||||||
if ((slot + 1) % 9 == 0 && slot + 1 < entry.getValue()) {
|
if ((slot + 1) % 9 == 0 && slot + 1 < category.getValue()) {
|
||||||
x = 8;
|
x = 8;
|
||||||
y += 18;
|
y += 18;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (visible) {
|
if (foundItemsInCategory) {
|
||||||
|
headings.put(category.getKey(), yHeading);
|
||||||
|
|
||||||
x = 8;
|
x = 8;
|
||||||
y += 18 * 2;
|
y += 18 * 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Map<String, Integer> getHeadings() {
|
||||||
|
return headings;
|
||||||
|
}
|
||||||
|
|
||||||
public Map<String, Integer> getContainerData() {
|
public Map<String, Integer> getContainerData() {
|
||||||
return containerData;
|
return containerData;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -197,24 +197,19 @@ public class GuiCrafterManager extends GuiBase implements IResizableDisplay {
|
|||||||
drawString(7, 7, t("gui.refinedstorage:crafter_manager"));
|
drawString(7, 7, t("gui.refinedstorage:crafter_manager"));
|
||||||
drawString(7, getYPlayerInventory() - 12, t("container.inventory"));
|
drawString(7, getYPlayerInventory() - 12, t("container.inventory"));
|
||||||
|
|
||||||
if (container != null && container.getContainerData() != null && crafterManager.isActive()) {
|
if (container != null && crafterManager.isActive()) {
|
||||||
int x = 7;
|
for (Map.Entry<String, Integer> heading : container.getHeadings().entrySet()) {
|
||||||
int y = 18 - getCurrentOffset() * 18;
|
int y = heading.getValue();
|
||||||
|
|
||||||
for (Map.Entry<String, Integer> entry : container.getContainerData().entrySet()) {
|
if (y >= getTopHeight() - 1 && y < getTopHeight() + getVisibleRows() * 18 - 1) {
|
||||||
if (t(entry.getKey()).toLowerCase().contains(getSearchFieldText().toLowerCase())) {
|
GlStateManager.disableLighting();
|
||||||
if (y >= getTopHeight() - 1 && y < getTopHeight() + getVisibleRows() * 18 - 1) {
|
GlStateManager.color(1, 1, 1);
|
||||||
GlStateManager.disableLighting();
|
|
||||||
GlStateManager.color(1, 1, 1);
|
|
||||||
|
|
||||||
bindTexture("gui/crafter_manager.png");
|
bindTexture("gui/crafter_manager.png");
|
||||||
|
|
||||||
drawTexturedModalRect(x, y, 0, 174, 18 * 9, 18);
|
drawTexturedModalRect(7, y, 0, 174, 18 * 9, 18);
|
||||||
|
|
||||||
drawString(x + 4, y + 6, RenderUtils.shorten(I18n.format(entry.getKey()), 25));
|
drawString(7 + 4, y + 6, RenderUtils.shorten(I18n.format(heading.getKey()), 25));
|
||||||
}
|
|
||||||
|
|
||||||
y += (Math.ceil((double) Math.max(9, entry.getValue()) / 9D) + 1) * 18;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user