package org.buckit.commands.util;
import java.util.HashMap;
import java.util.Map;
import org.buckit.Config;
import org.bukkit.Server;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
public class StackCommand extends Command {
public StackCommand(String name, Server server) {
super(name);
this.description = "Stacks up all the items in your inventory.";
this.usageMessage = "Usage: /stack";
this.accessname = "buckit.util.stack";
}
//TODO: make it also stack cloth.
@Override
public boolean execute(CommandSender sender, String currentAlias, String[] args) {
if (!(sender instanceof Player))
return false;
Inventory inv = ((Player)sender).getInventory();
Map<Integer,Integer> check = new HashMap<Integer, Integer>();
for(int i = 0; i < inv.getSize(); i++){
ItemStack item = inv.getItem(i);
if(check.containsKey(item.getTypeId()) && item.getDurability() == inv.getItem(check.get(item.getTypeId())).getDurability()){
ItemStack first = inv.getItem(check.get(item.getTypeId()));
int total = first.getAmount() + item.getAmount();
if(total > first.getMaxStackSize()){
first.setAmount(first.getMaxStackSize());
item.setAmount(total-first.getMaxStackSize());
if(item.getAmount() < item.getMaxStackSize()) check.put(item.getTypeId(), i);
} else {
first.setAmount(total);
inv.clear(i);
if(first.getAmount() >= first.getMaxStackSize()) check.remove(first.getTypeId());
}
}else{
//we don't want full stacks.
if(item.getAmount() < item.getMaxStackSize())check.put(item.getTypeId(), i);
}
}
sender.sendMessage(Config.DEFAULT_INFO_COLOR + "Your inventory has been cleaned, enjoy :).");
return true;
}
}