public final List<MonsterDropEntry> retrieveDrop(final int monsterId) {
	if (drops.containsKey(monsterId)) {
	    return drops.get(monsterId);
	}
	final List<MonsterDropEntry> ret = new LinkedList<MonsterDropEntry>();

	PreparedStatement ps = null;
	ResultSet rs = null;
	try {
	    ps = DatabaseConnection.getConnection().prepareStatement("SELECT * FROM drop_data WHERE dropperid = ?");
	    ps.setInt(1, monsterId);
	    rs = ps.executeQuery();

	    while (rs.next()) {
		ret.add(
			new MonsterDropEntry(
			rs.getInt("itemid"),
			rs.getInt("chance"),
			rs.getInt("minimum_quantity"),
			rs.getInt("maximum_quantity"),
			rs.getShort("questid")));
	    }
	} catch (SQLException e) {
	    return ret;
	} finally {
	    try {
		if (ps != null) {
		    ps.close();
		}
		if (rs != null) {
		    rs.close();
		}
	    } catch (SQLException ignore) {
		return ret;
	    }
	}
	drops.put(monsterId, ret);
	return ret;
    }