diff --git a/common/mekanism/client/gui/GuiItemStackFilter.java b/common/mekanism/client/gui/GuiItemStackFilter.java index 6041e7804..82dda7762 100644 --- a/common/mekanism/client/gui/GuiItemStackFilter.java +++ b/common/mekanism/client/gui/GuiItemStackFilter.java @@ -108,7 +108,7 @@ public class GuiItemStackFilter extends GuiMekanism int xAxis = (mouseX - (width - xSize) / 2); int yAxis = (mouseY - (height - ySize) / 2); - fontRenderer.drawString((isNew ? "New" : "Edit") + " ItemStack Filter", 43, 6, 0x404040); + fontRenderer.drawString((isNew ? "New" : "Edit") + " Item Filter", 43, 6, 0x404040); fontRenderer.drawString("Status: " + status, 35, 20, 0x00CD00); fontRenderer.drawString("ItemStack Details:", 35, 32, 0x00CD00); diff --git a/common/mekanism/client/gui/GuiLogisticalSorter.java b/common/mekanism/client/gui/GuiLogisticalSorter.java index 368fb9c9c..9451b8899 100644 --- a/common/mekanism/client/gui/GuiLogisticalSorter.java +++ b/common/mekanism/client/gui/GuiLogisticalSorter.java @@ -1,6 +1,11 @@ package mekanism.client.gui; import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; import mekanism.api.Object3D; import mekanism.client.render.MekanismRenderer; @@ -16,9 +21,10 @@ import mekanism.common.transporter.OreDictFilter; import mekanism.common.transporter.TransporterFilter; import mekanism.common.util.MekanismUtils; import mekanism.common.util.MekanismUtils.ResourceType; -import mekanism.common.util.TransporterUtils; import net.minecraft.client.gui.GuiButton; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraftforge.oredict.OreDictionary; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; @@ -35,6 +41,10 @@ public class GuiLogisticalSorter extends GuiMekanism public int dragOffset = 0; + public int stackSwitch = 0; + + public Map oreDictStacks = new HashMap(); + public float scroll; public GuiLogisticalSorter(EntityPlayer player, TileEntityLogisticalSorter tentity) @@ -59,6 +69,69 @@ public class GuiLogisticalSorter extends GuiMekanism return (int)((tileEntity.filters.size()*scroll) - ((4F/(float)tileEntity.filters.size()))*scroll); } + @Override + public void updateScreen() + { + super.updateScreen(); + + if(stackSwitch > 0) + { + stackSwitch--; + } + + if(stackSwitch == 0) + { + for(Map.Entry entry : oreDictStacks.entrySet()) + { + if(entry.getValue().iterStacks != null && entry.getValue().iterStacks.size() > 0) + { + if(entry.getValue().stackIndex == -1 || entry.getValue().stackIndex == entry.getValue().iterStacks.size()-1) + { + entry.getValue().stackIndex = 0; + } + else if(entry.getValue().stackIndex < entry.getValue().iterStacks.size()-1) + { + entry.getValue().stackIndex++; + } + + entry.getValue().renderStack = entry.getValue().iterStacks.get(entry.getValue().stackIndex); + } + } + + stackSwitch = 20; + } + else { + for(Map.Entry entry : oreDictStacks.entrySet()) + { + if(entry.getValue().iterStacks != null && entry.getValue().iterStacks.size() == 0) + { + entry.getValue().renderStack = null; + } + } + } + + Set filtersVisible = new HashSet(); + + for(int i = 0; i < 4; i++) + { + if(tileEntity.filters.get(getFilterIndex()+i) instanceof OreDictFilter) + { + filtersVisible.add((OreDictFilter)tileEntity.filters.get(getFilterIndex()+i)); + } + } + + for(TransporterFilter filter : tileEntity.filters) + { + if(filter instanceof OreDictFilter && !filtersVisible.contains(filter)) + { + if(oreDictStacks.containsKey(filter)) + { + oreDictStacks.remove(filter); + } + } + } + } + @Override public void mouseClicked(int mouseX, int mouseY, int button) { @@ -190,13 +263,40 @@ public class GuiLogisticalSorter extends GuiMekanism if(filter instanceof ItemStackFilter) { - fontRenderer.drawString("ItemStack Filter", 58, yStart + 2, 0x404040); - fontRenderer.drawString("Color: " + (filter.color != null ? filter.color.getName() : "None"), 58, yStart + 11, 0x404040); + ItemStackFilter itemFilter = (ItemStackFilter)filter; + + if(itemFilter.itemType != null) + { + GL11.glPushMatrix(); + GL11.glEnable(GL11.GL_LIGHTING); + itemRenderer.renderItemAndEffectIntoGUI(fontRenderer, mc.getTextureManager(), itemFilter.itemType, 59, yStart + 3); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glPopMatrix(); + } + + fontRenderer.drawString("Item Filter", 78, yStart + 2, 0x404040); + fontRenderer.drawString(filter.color != null ? filter.color.getName() : "None", 78, yStart + 11, 0x404040); } else if(filter instanceof OreDictFilter) { - fontRenderer.drawString("OreDict Filter", 58, yStart + 2, 0x404040); - fontRenderer.drawString("Color: " + (filter.color != null ? filter.color.getName() : "None"), 58, yStart + 11, 0x404040); + OreDictFilter oreFilter = (OreDictFilter)filter; + + fontRenderer.drawString("OreDict Filter", 78, yStart + 2, 0x404040); + fontRenderer.drawString(filter.color != null ? filter.color.getName() : "None", 78, yStart + 11, 0x404040); + + if(!oreDictStacks.containsKey(oreFilter)) + { + updateStackList(oreFilter); + } + + if(oreDictStacks.get(filter).renderStack != null) + { + GL11.glPushMatrix(); + GL11.glEnable(GL11.GL_LIGHTING); + itemRenderer.renderItemAndEffectIntoGUI(fontRenderer, mc.getTextureManager(), oreDictStacks.get(filter).renderStack, 59, yStart + 3); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glPopMatrix(); + } } } } @@ -295,4 +395,73 @@ public class GuiLogisticalSorter extends GuiMekanism return list; } + + private void updateStackList(OreDictFilter filter) + { + if(!oreDictStacks.containsKey(filter)) + { + oreDictStacks.put(filter, new StackData()); + } + + if(oreDictStacks.get(filter).iterStacks == null) + { + oreDictStacks.get(filter).iterStacks = new ArrayList(); + } + else { + oreDictStacks.get(filter).iterStacks.clear(); + } + + List keys = new ArrayList(); + + for(String s : OreDictionary.getOreNames()) + { + if(filter.oreDictName.equals(s) || filter.oreDictName.equals("*")) + { + keys.add(s); + } + else if(filter.oreDictName.endsWith("*") && !filter.oreDictName.startsWith("*")) + { + if(s.startsWith(filter.oreDictName.substring(0, filter.oreDictName.length()-1))) + { + keys.add(s); + } + } + else if(filter.oreDictName.startsWith("*") && !filter.oreDictName.endsWith("*")) + { + if(s.endsWith(filter.oreDictName.substring(1))) + { + keys.add(s); + } + } + else if(filter.oreDictName.startsWith("*") && filter.oreDictName.endsWith("*")) + { + if(s.contains(filter.oreDictName.substring(1, filter.oreDictName.length()-1))) + { + keys.add(s); + } + } + } + + for(String key : keys) + { + for(ItemStack stack : OreDictionary.getOres(key)) + { + ItemStack toAdd = stack.copy(); + + if(!oreDictStacks.get(filter).iterStacks.contains(stack)) + { + oreDictStacks.get(filter).iterStacks.add(stack.copy()); + } + } + } + + oreDictStacks.get(filter).stackIndex = -1; + } + + public static class StackData + { + public List iterStacks; + public int stackIndex; + public ItemStack renderStack; + } } \ No newline at end of file diff --git a/resources/assets/mekanism/gui/GuiLogisticalSorter.png b/resources/assets/mekanism/gui/GuiLogisticalSorter.png index f01c733c0..56efb5e5d 100644 Binary files a/resources/assets/mekanism/gui/GuiLogisticalSorter.png and b/resources/assets/mekanism/gui/GuiLogisticalSorter.png differ