package com.rota.ee3help.commands; import java.util.ArrayList; import java.util.Collections; import java.util.Map; import com.pahimar.ee3.api.exchange.EnergyValue; import com.pahimar.ee3.exchange.EnergyValueRegistry; import com.pahimar.ee3.exchange.WrappedStack; import com.rota.ee3help.EE3Help; import com.rota.ee3help.Helper; import net.minecraft.command.ICommandSender; import net.minecraft.util.EnumChatFormatting; public class CommandRemove extends CommandModifyBase { public static boolean nogenRemoval = false; 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 boolean remove(int i) { if(i < 0 || i >= entries.size()) return false; valuesPre.remove(entries.get(i)); entries.remove(i); EnergyValueRegistry.getInstance().setShouldRegenNextRestart(true); Helper.savePre(valuesPre); nogenRemoval = true; return true; } private boolean remove(int i, int j) { if(i < 0 || i >= entries.size() || j < 0 || j >= entries.size() || j < i) return false; // subList is exclusive for the second parameter, so we take "j+1". for(WrappedStack w :entries.subList(i, j+1)) { valuesPre.remove(w); } entries.subList(i, j+1).clear(); EnergyValueRegistry.getInstance().setShouldRegenNextRestart(true); Helper.savePre(valuesPre); nogenRemoval = true; return true; } @Override public String getCommandName() { return "remove"; } @Override public String getCommandUsage(ICommandSender cs) { return "remove <index>, remove <start> <end>"; } @Override public void processCommand(ICommandSender cs, String[] args) { if(!EE3Help.listAccurate) { Helper.toChat(cs, EnumChatFormatting.RED + "Indices may be innacurate, run 'list' first."); return; } try { buildList(); switch(args.length) { case 0: Helper.toChatErr(cs, "remove <index>"); Helper.toChatErr(cs, "remove <start> <end>"); break; case 1: if(remove(Integer.parseInt(args[0]))) Helper.toChat(cs, EnumChatFormatting.LIGHT_PURPLE + "(-) REMOVE " + args[0]); else Helper.toChatErr(cs, "Remove Failed: Invalid Index "+args[0]); break; case 2: if(remove(Integer.parseInt(args[0]),Integer.parseInt(args[1]))) Helper.toChat(cs, EnumChatFormatting.LIGHT_PURPLE +"(-) REMOVE RANGE "+args[0] +"-"+args[1]); else Helper.toChatErr(cs, "Remove Failed: Invalid Indices "+args[0]+"-"+args[1]); break; default: Helper.toChatErr(cs, "Invalid number of arguments for operation."); Helper.toChatErr(cs, "remove <index>"); Helper.toChatErr(cs, "remove <start> <end>"); } } catch (NumberFormatException e) { Helper.toChatErr(cs, "Non-number in numeric field."); } resetFlag(); } }