package com.rota.ee3help.commands; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Collections; import java.util.Map; import com.pahimar.ee3.api.exchange.EnergyValue; import com.pahimar.ee3.exchange.OreStack; import com.pahimar.ee3.exchange.WrappedStack; import com.rota.ee3help.EE3Help; import com.rota.ee3help.Helper; import cpw.mods.fml.common.FMLLog; import cpw.mods.fml.common.registry.GameData; import net.minecraft.command.ICommandSender; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; import net.minecraftforge.fluids.FluidStack; public class CommandList extends CommandModifyBase { public ArrayList<WrappedStack> entries = new ArrayList<WrappedStack>(); Map<WrappedStack, EnergyValue> valuesPre; private void buildList() { entries.clear(); valuesPre = Helper.loadPre(); for(Map.Entry<WrappedStack, EnergyValue> entry : valuesPre.entrySet()) { entries.add(entry.getKey()); } Collections.sort(entries); } private String getInfo(WrappedStack w) { try { String name; Object wrappedStack = w.getWrappedObject(); Field fieldObjectType = w.getClass().getDeclaredField("objectType"); Field fieldStackSize = w.getClass().getDeclaredField("stackSize"); fieldObjectType.setAccessible(true); fieldStackSize.setAccessible(true); String objectType = (String) fieldObjectType.get(w); int stackSize = (Integer) fieldStackSize.get(w); if (wrappedStack instanceof ItemStack) { ItemStack itemStack = (ItemStack) wrappedStack; name = GameData.getItemRegistry().getNameForObject(itemStack.getItem())+":"+itemStack.getItemDamage(); } else if (wrappedStack instanceof OreStack) { OreStack oreStack = (OreStack) wrappedStack; name = oreStack.oreName; } else if (wrappedStack instanceof FluidStack) { FluidStack fluidStack = (FluidStack) wrappedStack; name = fluidStack.getFluid().getName(); } else { name = "null-wrappedstack"; } return objectType + " " + name; } catch (NoSuchFieldException e) { FMLLog.getLogger().error("WrappedStack has been updated, this field name is invalid: " + e.getMessage()); } catch (Exception e) { FMLLog.getLogger().error("Could not access field: " + e.getMessage()); } return "PARSE_ERROR:CHECKLOG"; } @Override public String getCommandName() { return "list"; } @Override public String getCommandUsage(ICommandSender cs) { return "list, list <page>"; } @Override public void processCommand(ICommandSender cs, String[] args) { try { buildList(); EE3Help.listAccurate = true; int pageLength = 9; int pages = 0; pages = (int) Math.ceil(entries.size()/(double) pageLength); if(args.length == 0) { Helper.toChat(cs, EnumChatFormatting.AQUA + "Pages: " + pages + ", list <page>"); } else if(args.length >= 1) { if(pages == 0) { Helper.toChat(cs, EnumChatFormatting.GOLD + "No Entries."); return; } int page = Integer.parseInt(args[0]); page = (page < 1) ? 1 : page; page = (page > pages) ? pages : page; Helper.toChat(cs, EnumChatFormatting.GRAY + "---- Page "+(page)+"/"+pages+" ----"); int index = (page * pageLength)-pageLength; for(int i = index; (i < index + pageLength) && (i < entries.size()); i++) { Helper.toChat(cs, EnumChatFormatting.GOLD + "(" +String.format("%4s", i)+") " + getInfo(entries.get(i)) + " " + EnumChatFormatting.BLUE + "EMC: " + EnumChatFormatting.RED + valuesPre.get(entries.get(i))); } } } catch (NumberFormatException e) { Helper.toChatErr(cs, "Non-number in numeric field."); } } }