private void loadDrop(final int npcId) {
        npcIdLabel.setText(Integer.toString(npcId) + " " + NPCDefinitions.getNPCDefinitions(npcId).name);
        ArrayList<Drop> drops = loader.getDropArray().get(npcId);
        DefaultTableModel model = new DefaultTableModel();
        model.addTableModelListener(new TableModelListener() {
 
            public void tableChanged(TableModelEvent e) {
                try {
                    if (e.getColumn() != -1) {
                        if (dropTable.getValueAt(dropTable.getSelectedRow(), 0).equals("Rare")) {
                            loader.getDropArray().get(npcId).get(dropTable.getSelectedRow()).setItemId((short) -1);
                            loader.getDropArray().get(npcId).get(dropTable.getSelectedRow()).setRate(-1);
                            //String amount = (String) dropTable.getValueAt(dropTable.getSelectedRow(), 2);
                            loader.getDropArray().get(npcId).get(dropTable.getSelectedRow()).setMinAmount(1);
                            loader.getDropArray().get(npcId).get(dropTable.getSelectedRow()).setMaxAmount(1);
 
                        } else {
                            loader.getDropArray().get(npcId).get(dropTable.getSelectedRow()).setItemId(Short.parseShort((String) dropTable.getValueAt(dropTable.getSelectedRow(), 0).toString()));
                            loader.getDropArray().get(npcId).get(dropTable.getSelectedRow()).setRate(Double.parseDouble((String) dropTable.getValueAt(dropTable.getSelectedRow(), 1).toString()));
                            String amount = (String) dropTable.getValueAt(dropTable.getSelectedRow(), 2);
                            if (amount.contains("-")) {
                                loader.getDropArray().get(npcId).get(dropTable.getSelectedRow()).setMinAmount(Integer.parseInt(amount.substring(0, amount.indexOf("-"))));
                                loader.getDropArray().get(npcId).get(dropTable.getSelectedRow()).setMaxAmount(Integer.parseInt(amount.substring(amount.indexOf("-") + 1)));
                            } else {
                                loader.getDropArray().get(npcId).get(dropTable.getSelectedRow()).setMinAmount(Integer.parseInt(amount));
                                loader.getDropArray().get(npcId).get(dropTable.getSelectedRow()).setMaxAmount(Integer.parseInt(amount));
 
                            }
                        }
                    }
                } catch (Exception f) {
                    f.printStackTrace();
                }
            }
        });
        model.addColumn("Item ID");
        model.addColumn("Percent Chance");
        model.addColumn("Amount");
        for (Drop d : drops) {
            if (d == null) {
                continue;
            }
            if (!d.isFromRareTable()) {
                model.addRow(new Object[]{(d.getItemId()), Double.toString(d.getRate()), Integer.toString(d.getMinAmount()) + (d.getMinAmount() == d.getMaxAmount() || d.getMaxAmount() == 0 ? "" : "-" + d.getMaxAmount())});
            } else {
                model.addRow(new Object[]{"Rare", "100.0", "1"});
            }
        }
        dropTable.setModel(model);
    }